From fde0e9524490908e5481f0172fe03b11983737a9 Mon Sep 17 00:00:00 2001 From: maxineyu521 Date: Sat, 4 Apr 2026 13:52:18 -0400 Subject: [PATCH 01/50] Create GDELT_news_sscraper.py --- News_scraper/Script/GDELT_news_sscraper.py | 200 +++++++++++++++++++++ 1 file changed, 200 insertions(+) create mode 100644 News_scraper/Script/GDELT_news_sscraper.py diff --git a/News_scraper/Script/GDELT_news_sscraper.py b/News_scraper/Script/GDELT_news_sscraper.py new file mode 100644 index 0000000..d2aee00 --- /dev/null +++ b/News_scraper/Script/GDELT_news_sscraper.py @@ -0,0 +1,200 @@ +import os +import requests +import json +import time +from datetime import datetime +from newspaper import Article +from duckduckgo_search import DDGS +import warnings +from langchain_ollama import ChatOllama +import uuid + +warnings.filterwarnings('ignore') + +# ========================================== +# 0. 初始化配置 +# ========================================== +print("正在初始化本地 Llama 3 模型作为数据清洗引擎...") +llm = ChatOllama(model="llama3", temperature=0) + +DATA_FOLDER = "./Data/Qdrant_Input" +os.makedirs(DATA_FOLDER, exist_ok=True) + +TOPICS = { + "geopolitical": '(gold OR silver OR GLD OR SLV) AND (conflict OR war OR sanctions OR "Middle East")', + "usd_index": '(gold OR silver OR GLD OR SLV) AND ("dollar index" OR DXY)', + "macro_fed": '(gold OR silver OR GLD OR SLV) AND ("Federal Reserve" OR FOMC)', + "macro_inflation": '(gold OR silver OR GLD OR SLV) AND (inflation OR CPI)', + "macro_rates": '(gold OR silver OR GLD OR SLV) AND "interest rate"' +} + +# ========================================== +# 1. 爬虫与原始数据保留 +# ========================================== +def fetch_gdelt_metadata(query, max_retries=2): + url = "https://api.gdeltproject.org/api/v2/doc/doc" + params = {"query": query, "mode": "artlist", "format": "json", "timespan": "24h", "maxrecords": 5, "sort": "DateDesc"} + for attempt in range(max_retries): + try: + response = requests.get(url, params=params, timeout=15) + if response.status_code == 429: + time.sleep(10) + continue + response.raise_for_status() + return response.json().get('articles', []) + except Exception: + time.sleep(5) + return [] + +def _download_and_parse(url): + try: + article = Article(url) + article.download() + article.parse() + return article.text + except Exception: + return None + +def scrape_full_text(url, title=None): + text = _download_and_parse(url) + if text and len(text) > 150: + return text, "direct_success" + if title: + try: + with DDGS() as ddgs: + search_query = f'"{title}" site:finance.yahoo.com' + results = list(ddgs.text(search_query, max_results=1)) + if results and 'href' in results[0]: + yahoo_url = results[0]['href'] + fallback_text = _download_and_parse(yahoo_url) + if fallback_text and len(fallback_text) > 150: + return fallback_text, "fallback_success" + except Exception: + pass + return None, "failed" + +# ========================================== +# 2. LLM 智能提取与评分 (升级版) +# ========================================== +def llm_extract_and_score(full_text): + """提取高质量摘要并赋予严格的 Tone Score""" + truncated_text = full_text[:4000] + + prompt = f""" + You are an expert macro-financial analyst evaluating news for a Gold/Silver Options trading desk. + Read the article below. + + CRITICAL INSTRUCTION: If the text is in a foreign language (Spanish, Turkish, Arabic, etc.), TRANSLATE it to English internally before generating the summary. + If the text is just a cookie consent notice, a 404 error, or completely lacks any news content, reply ONLY with: INVALID_CONTENT. + + Otherwise, provide your analysis in the EXACT format below: + + TONE_SCORE: [Assign an integer from -5 to +5 based on the impact on Gold prices] + SUMMARY: [Write a dense, 3-4 sentence financial summary. You MUST include specific numbers, percentages, entities, and forward-looking market trends mentioned in the text. Maximize information retention.] + + TONE SCORING RUBRIC (Impact on GOLD): + +3 to +5 (Bullish): Federal Reserve cutting rates, inflation rising, US Dollar weakening, geopolitical conflicts escalating, major central bank gold buying. + -3 to -5 (Bearish): Federal Reserve hiking or holding rates high, inflation cooling, US Dollar strengthening, geopolitical tensions resolving. + 0 (Neutral): General market commentary without directional drivers, or unrelated content. + + Article: + {truncated_text} + """ + try: + return llm.invoke(prompt).content.strip() + except Exception as e: + print(f"LLM Error: {e}") + return "INVALID_CONTENT" + +def parse_llm_response(response_text): + if "INVALID_CONTENT" in response_text or "SUMMARY:" not in response_text: + return None, None + try: + parts = response_text.split("SUMMARY:") + score_str = parts[0].replace("TONE_SCORE:", "").strip() + tone_score = int(score_str) + summary_text = parts[1].strip() + return tone_score, summary_text + except Exception: + return 0, response_text.replace("SUMMARY:", "").strip() # 退化处理:保留文本,分数为0 + +# ========================================== +# 3. 主控流程 +# ========================================== +def process_and_save_to_jsonl(topic_name, query): + print(f"\n{'='*40}\nProcessing topic: {topic_name}\n{'='*40}") + articles = fetch_gdelt_metadata(query) + + if not articles: + return + + # 1. 恢复:保存原始数据 (Raw Data) + raw_output_file = os.path.join(DATA_FOLDER, f"raw_gdelt_{topic_name}.jsonl") + with open(raw_output_file, 'a', encoding='utf-8') as f_raw: + for item in articles: + f_raw.write(json.dumps(item, ensure_ascii=False) + '\n') + + chunk_output_file = os.path.join(DATA_FOLDER, f"qdrant_{topic_name}_processed.jsonl") + stats = {"total": len(articles), "scraped": 0, "llm_passed": 0, "llm_discarded": 0} + + with open(chunk_output_file, 'a', encoding='utf-8') as f_out: + for item in articles: + target_url = item.get('url') + article_title = item.get('title', '') + publish_date = item.get('urldatetime', '') + + # 抓取全文 + full_text, status = scrape_full_text(target_url, title=article_title) + if status == "failed": + continue + stats["scraped"] += 1 + + # LLM 处理 + llm_response = llm_extract_and_score(full_text) + tone_score, dense_summary = parse_llm_response(llm_response) + + # 新的拦截逻辑:只拦截真正的垃圾页面 + if not dense_summary: + print(f" [丢弃] 页面无效/无内容: {article_title[:40]}...") + stats["llm_discarded"] += 1 + continue + + stats["llm_passed"] += 1 + print(f" [保留] Tone: {tone_score:2d} | {article_title[:40]}...") + + contextualized_text = ( + f"Document Title: {article_title}\n" + f"Topic Category: {topic_name}\n" + f"Publish Date: {publish_date}\n" + f"LLM Gold Tone Score: {tone_score}\n" + f"---\n" + f"{dense_summary}" + ) + + doc_id = str(uuid.uuid5(uuid.NAMESPACE_URL, target_url)) + record = { + "id": doc_id, + "text": contextualized_text, + "metadata": { + "topic": topic_name, + "title": article_title, + "publish_date": publish_date, + "source": item.get('domain', 'Unknown Source'), + "url": target_url, + "llm_tone_score": tone_score + } + } + f_out.write(json.dumps(record, ensure_ascii=False) + '\n') + + # 日志输出 + log_msg = (f"Topic [{topic_name}] -> Fetched: {stats['total']} | Scraped: {stats['scraped']} | " + f"Saved: {stats['llm_passed']} | Discarded: {stats['llm_discarded']}\n") + print("-" * 40 + "\n" + log_msg) + with open(os.path.join(DATA_FOLDER, "scraper_execution.log"), 'a') as f_log: + f_log.write(f"{datetime.now()}: {log_msg}") + +if __name__ == "__main__": + for topic_name, query in TOPICS.items(): + process_and_save_to_jsonl(topic_name, query) + time.sleep(2) + print("\n[+] 所有数据清洗提纯完毕,可用于 Qdrant 检索!") \ No newline at end of file From aaf27bc612251ec456b746f2994046ab3c36fea7 Mon Sep 17 00:00:00 2001 From: "Xinxin(Maxine)" Date: Fri, 10 Apr 2026 14:06:04 -0400 Subject: [PATCH 02/50] Update documentation --- docs/Data_source_docs/Data_source_summary.md | 44 ++++++++++ docs/Data_source_docs/GPR_Index.md | 77 +++++++++++++++++ docs/Data_source_docs/SEC_data.md | 83 +++++++++++++++++++ docs/Data_source_docs/macro_market_data.md | 62 ++++++++++++++ docs/Data_source_docs/market_news_data.md | 81 ++++++++++++++++++ .../options_historial_data.md | 69 +++++++++++++++ 6 files changed, 416 insertions(+) create mode 100644 docs/Data_source_docs/Data_source_summary.md create mode 100644 docs/Data_source_docs/GPR_Index.md create mode 100644 docs/Data_source_docs/SEC_data.md create mode 100644 docs/Data_source_docs/macro_market_data.md create mode 100644 docs/Data_source_docs/market_news_data.md create mode 100644 docs/Data_source_docs/options_historial_data.md diff --git a/docs/Data_source_docs/Data_source_summary.md b/docs/Data_source_docs/Data_source_summary.md new file mode 100644 index 0000000..829f71e --- /dev/null +++ b/docs/Data_source_docs/Data_source_summary.md @@ -0,0 +1,44 @@ +# Data Source Summary Documentation + +This documentation summarizes the multi-source data ecosystem integrated within the project. + +## **I. Options Market Data (`yfinance_options_history.py`)** +* **Data Source:** Yahoo Finance API. +* **Data Content:** Full options chain snapshots for major market baselines (SPY, QQQ, IWM, GLD, SLV). +* **Metrics & Metadata:** + * **Derived Metrics:** `moneyness_pct` (distance from strike), `spread_pct` (liquidity cost), `is_liquid` (Boolean flag based on Vol > 50 and OI > 100). + * **Metadata:** `snapshot_date`, `symbol`, `strike`, `expiration`, `dte` (Days to Expiration), `implied_volatility`. +* **Storage:** Partitioned `.parquet` files organized by date. + +## **II. Macroeconomic & Index Data (`macro_data_pipeline.py`)** +* **Data Source:** Yahoo Finance (Market Indices) and FRED (Federal Reserve Economic Data). +* **Data Content:** Daily action of S&P 500, VIX, Gold/Silver, and monthly updates for CPI, Unemployment, and Fed Funds Rate. +* **Metrics & Metadata:** + * **Metrics:** `daily_change_pct`, `mom_change_pct` (Month-over-Month), `yoy_change_pct` (Year-over-Year). + * **Metadata:** `observation_date`, `asset_class` (e.g., Equity Index, Inflation), `unit` (Index vs Percent). +* **Storage:** Hybrid output (Markdown for RAG context and Parquet for structured history). + +## **III. SEC Regulatory Filings (`sec_ingestion.py` & `sec_processor.py`)** +* **Data Source:** SEC EDGAR REST API. +* **Data Content:** Corporate Form 4 (Insider Trading) and Form 8-K (Material Events). +* **Metrics & Metadata:** + * **Enrichment:** LLM-generated summaries (Llama 3) and rule-based "Tone Scores" for insider activity. + * **Metadata:** `ticker`, `accession_no`, `form_type`, `action_direction` (Buy/Sell/Vest), `tone_score` (-5 to +5). +* **Storage:** Qdrant-ready `.jsonl` files with deterministic UUIDs. + +## **IV. Global News & Sentiment (`news_scraper.py`)** +* **Data Source:** GDELT 2.0 (Global Database of Events, Language, and Tone) and DuckDuckGo Search (fallback). +* **Data Content:** Scraped full-text articles filtered by macro topics (Central Banks, Geopolitics) and Metals action. +* **Metrics & Metadata:** + * **Enrichment:** `llm_tone_score`, `volatility_implication` (Increase/Decrease), Entity extraction. + * **Metadata:** `source_domain`, `publish_timestamp`, `impacted_assets`. +* **Storage:** Daily JSONL files categorized into Raw, Full-text, and Qdrant-processed layers. + +## **V. Geopolitical Risk Index (`GPR_index.py`)** +* **Data Source:** Iacoviello GPR Index (Academic source). +* **Data Content:** Historical monthly geopolitical risk levels. +* **Metrics & Metadata:** + * **Metrics:** `gpr_mom_pct`, `gpr_percentile` (Ranking against historical data). + * **Metadata:** `topic` (macro_geopolitics_risk), `gpr_score`. +* **Storage:** Narrative Markdown corpus and structured vector input files. + diff --git a/docs/Data_source_docs/GPR_Index.md b/docs/Data_source_docs/GPR_Index.md new file mode 100644 index 0000000..8ca7aa0 --- /dev/null +++ b/docs/Data_source_docs/GPR_Index.md @@ -0,0 +1,77 @@ +# Geopolitical Risk (GPR) Index Pipeline Documentation + +This documentation details the `GPR_index.py` script, an automated ETL (Extract, Transform, Load) pipeline designed to ingest, enrich, and format the global Geopolitical Risk (GPR) Index for integration into a Vector Database (Qdrant) and RAG applications. + +## 🎯 Project Purpose +The pipeline transforms raw, historical macroeconomic Excel data into semantic, LLM-friendly narratives. By calculating momentum metrics (MoM, YoY) and converting data points into natural language paragraphs, it allows AI agents to easily reason about geopolitical tensions and their historical impact on safe-haven assets like Gold and Silver. + +--- + +## 🏗 Architecture & Strategy Workflow +The system uses a linear, fault-tolerant ETL architecture designed for safe daily execution: + +1. **Extraction (Fault-Tolerant Download):** + * Attempts to download the latest GPR `.xls` file directly from Matteo Iacoviello's academic repository. + * Features an industrial retry mechanism (up to 3 attempts with 10-second delays) to gracefully handle network drops or site outages. + * Parses legacy date formats (e.g., `1985M01`) into standard Python datetime objects. + +2. **Transformation & Statistical Enrichment:** + * Operates on the *entire* historical dataset to calculate accurate long-term metrics: + * **MoM %** (Month-over-Month change) + * **YoY %** (Year-over-Year change) + * **3-Month Moving Average** (Trend smoothing) + * **Historical Percentile** (Ranks the current threat level against all historical data). + +3. **Natural Language Generation (NLG):** + * Uses conditional logic based on MoM momentum to generate dynamic RAG-friendly markdown. For example, a >10% jump generates a "significant escalation" narrative, while a <-10% drop generates a "cooling off" narrative. + * Hardcodes trading context into the text (e.g., explicitly mentioning the historical correlation between GPR spikes and Gold/Silver price action). + +4. **Idempotent Archival (Load Preparation):** + * **Truncation:** Filters the dataset to only include post-2020 data to prevent legacy noise (like the 90s/Cold War) from polluting the modern Vector DB space. + * **Deterministic UUIDs:** Generates Qdrant document IDs using `uuid5` based on a fixed string (e.g., `GPR_2024_04`). This guarantees that re-running the script safely overwrites existing database records without creating duplicates (Idempotency). + +--- + +## 📥 Inputs +* **Source URL:** `https://www.matteoiacoviello.com/gpr_files/data_gpr_export.xls` +* **Data Format:** Binary Excel (`.xls`) read into memory via `io.BytesIO`. + +--- + +## 📤 Output Files +The pipeline dynamically creates a daily folder hierarchy (`Data/GPR_index/{YYYY-MM-DD}/`) and outputs three files: + +* **Vector Payload (Target):** `qdrant_gpr_input.jsonl` (Structured JSON objects ready for Qdrant ingestion). +* **Narrative Corpus:** `gpr_narrative_corpus.md` (A pure markdown file of all generated text, useful for testing or simple RAG setups). +* **Data Preview:** `gpr_preview.csv` (A standard CSV containing the last 24 months of enriched data for quick human verification). +* **Logs:** `logs/{YYYY-MM-DD}/gpr_downloader.log`. + +--- + +## 📊 Output Data Schema & Metadata + +The target output file (`qdrant_gpr_input.jsonl`) contains line-delimited JSON objects structured specifically for vector embeddings. + +### Final Qdrant Payload Schema +| Field | Description | Type | +| :--- | :--- | :--- | +| `id` | A deterministic UUID v5 (e.g., hashed from "GPR_2024_04"). | String | +| `text` | The full, multi-paragraph markdown narrative detailing the month's metrics, historical context, and asset impact. | String | +| `metadata` | A nested dictionary for exact payload filtering in the vector database. | Object | + +### `metadata` Object Structure +| Key | Description | Type | +| :--- | :--- | :--- | +| `topic` | Hardcoded routing tag (`"macro_geopolitics_risk"`). | String | +| `title` | Human-readable title (e.g., `"GPR Index Update 2024-04"`). | String | +| `publish_date` | Formatted string of the observation month (`"YYYY-MM-DD"`). | String | +| `publish_timestamp` | Integer Unix epoch for fast time-series filtering in Qdrant. | Integer | +| `gpr_score` | The raw Geopolitical Risk index float value. | Float | +| `gpr_percentile` | The calculated historical percentile (0-100) of the current score. | Float | + +--- + +## 🛠 Technical Dependencies +* **Network / I/O:** `requests`, `io` (for in-memory binary processing). +* **Data Manipulation:** `pandas` (for datetime parsing, rolling averages, and percentage calculations). +* **System / Architecture:** `uuid` (for deterministic ID generation), `datetime`, `os`. \ No newline at end of file diff --git a/docs/Data_source_docs/SEC_data.md b/docs/Data_source_docs/SEC_data.md new file mode 100644 index 0000000..2841c08 --- /dev/null +++ b/docs/Data_source_docs/SEC_data.md @@ -0,0 +1,83 @@ +# SEC Data Ingestion and Processing Pipeline Documentation + +This documentation details the SEC data pipeline, comprising `sec_scraper.py` and `sec_processor.py`. This system is designed to automatically ingest, parse, and semantically enrich SEC Form 4 (Insider Trading) and Form 8-K (Current Reports) filings, preparing them for vector database (Qdrant) integration and RAG applications. + +## 🎯 Project Purpose +The pipeline transforms raw, complex SEC regulatory filings into structured, actionable insights. By applying expert financial rules to insider trades and utilizing Large Language Models (LLMs) to summarize corporate events, it provides quantitative "tone scores" and summaries suitable for AI-driven financial analysis. + +--- + +## 🏗 Architecture & Strategy Workflow + +The pipeline operates in a robust, two-phase architecture: **Ingestion (Scraping)** and **Enrichment (Processing)**. + +### Phase 1: Ingestion & Parsing (`sec_scraper.py`) +1. **Target Identification:** Loads target NASDAQ tickers and maps them to SEC CIK (Central Index Key) numbers using a local dictionary to minimize API overhead. +2. **Resilient Querying:** Queries the SEC EDGAR submissions API for recent Form 4 and Form 8-K filings (past 7 days). Uses an industrial-grade retry decorator with exponential backoff to handle rate limits (HTTP 429) and network jitter. +3. **Document Retrieval & Parsing:** + * **Form 4 (XML):** Extracts reporting owner details, roles, and itemized non-derivative transactions (shares, prices, acquisition/disposition codes, 10b5-1 plan flags). + * **Form 8-K (HTML):** Strips unnecessary HTML tags, converts the core text to Markdown, and chunks the document based on SEC "Item" headers. +4. **Raw Archival:** Saves the parsed structural data into daily JSONL files and generates a statistical summary report. + +### Phase 2: Enrichment & LLM Processing (`sec_processor.py`) +1. **State Management:** Loads a global registry of previously processed accession numbers to ensure idempotency and prevent duplicate vector embeddings. +2. **Concurrent Execution:** Utilizes a `ThreadPoolExecutor` to process multiple filings simultaneously, significantly reducing the bottleneck caused by LLM inference times. +3. **Contextual Enrichment:** + * **Form 4 Expert Rules:** Applies a rule-based engine to calculate a "Tone Score". It weighs the net transaction value, flags 10b5-1 planned sales (less negative), and applies multipliers if the insider is C-suite (+2 for buys, -2 for sells). Zero-dollar share changes are classified as neutral vesting events. + * **Form 8-K LLM Analysis:** Passes the Markdown chunks to a local LLM (`ChatOllama` running `llama3`). The LLM is prompted to return strict JSON containing a concise summary, a tone score (-5 to +5), and relevant topic tags. +4. **Vector DB Preparation:** Outputs the fully enriched data into a single `qdrant_ready.jsonl` file. + +--- + +## 📥 Inputs +* **Config Files:** `SEC_tickers.json` (target companies) and `ticker_to_cik.json` (CIK mapping). +* **Environment:** `SEC_USER_AGENT` (Required by SEC guidelines to prevent IP blocking) and LLM configuration parameters. +* **External APIs:** SEC EDGAR REST APIs. +* **Local Service:** Ollama service running the `llama3` model on `localhost:11434`. + +--- + +## 📤 Output Files +The pipeline generates files organized by execution date: + +* **Raw Data:** `Data/SEC/Raw_SEC/{YYYY-MM-DD}/raw_{ticker}.jsonl` +* **Daily Statistics:** `Data/SEC/Raw_SEC/{YYYY-MM-DD}/_SUMMARY.json` +* **Processed Data (Target):** `Data/SEC/Qdrant_SEC/{YYYY-MM-DD}/qdrant_ready.jsonl` +* **State tracking:** `Data/SEC/global_processed_registry.json` +* **Logs:** Stored in `logs/` and `logs/SEC/{YYYY-MM-DD}/`. + +--- + +## 📊 Data Schema & Metadata + +The final output in `qdrant_ready.jsonl` is structured specifically for vector database ingestion. Each line is a JSON object representing a single filing: + +### Final Output Schema + +| Field | Description | Type | +| :--- | :--- | :--- | +| `text` | The human-readable summary. For Form 4, it's a generated sentence describing the trade. For 8-K, it's the LLM-generated summary. | String | +| `metadata` | A nested dictionary containing all structured data to be used as payload/filters in Qdrant. | Object | + +### `metadata` Object Structure + +| Key | Description | Type | +| :--- | :--- | :--- | +| `ticker` | The stock symbol (e.g., AAPL). | String | +| `form_type` | The SEC filing type ("4" or "8-K"). | String | +| `filed_at` | The date the document was filed with the SEC. | String | +| `accession_no` | The unique SEC document identifier. | String | +| `url` | Direct link to the source document on EDGAR. | String | +| `transaction_date` | The actual date the event or trade occurred. | String | +| `tone_score` | Quantitative sentiment score. Form 4 uses custom rules; 8-K uses LLM evaluation (-5 to +5). | Integer | +| `action_direction` | Categorization of the event (e.g., "BUY", "SELL", "ACQUIRE/VEST", or "NONE"). | String | +| `topics` | Array of relevant tags (e.g., `["Insider Trading", "Form 4"]`). | Array of Strings | +| `processed_at` | Timestamp of when the pipeline finished processing the record. | String (ISO 8601) | + +--- + +## 🛠 Technical Dependencies +* **Network & Parsing:** `requests`, `BeautifulSoup` (bs4), `xml.etree.ElementTree`, `markdownify`. +* **Concurrency:** `concurrent.futures.ThreadPoolExecutor`. +* **AI/LLM:** `langchain_ollama.ChatOllama` (Requires local Ollama instance). +* **Configuration:** `python-dotenv` for environment variable management. \ No newline at end of file diff --git a/docs/Data_source_docs/macro_market_data.md b/docs/Data_source_docs/macro_market_data.md new file mode 100644 index 0000000..70180ba --- /dev/null +++ b/docs/Data_source_docs/macro_market_data.md @@ -0,0 +1,62 @@ +# Macro & Market Data Pipeline Documentation + +This documentation details the `macro_data_pipeline.py` script, which automates the collection of global market data and macroeconomic indicators for financial analysis and RAG (Retrieval-Augmented Generation) applications. + +## 🎯 Project Purpose +The pipeline bridges the gap between high-frequency market data (Stock indices, Volatility) and low-frequency economic indicators (Inflation, Interest rates). By structuring this data into LLM-friendly Markdown and machine-readable Parquet formats, it enables AI agents to ground their financial reasoning in current economic reality. + +--- + +## 🔄 Strategy Workflow +The script executes a multi-source ingestion process: + +1. **Environment Setup:** Loads API keys (FRED) and dynamically constructs directory hierarchies for logs and data. +2. **Market Data Extraction (YFinance):** Downloads the last 5 days of price action for major indices and commodities to calculate the most recent daily percentage change. +3. **Economic Data Extraction (FRED):** Queries the Federal Reserve Economic Data API for key monthly indicators. +4. **Statistical Enrichment:** * Calculates **Daily Change %** for market assets. + * Calculates **Month-over-Month (MoM)** and **Year-over-Year (YoY)** changes for economic indicators. +5. **Dual-Stream Output:** * Generates a **Natural Language Summary** (Markdown) for immediate LLM context. + * Generates a **Structured Dataset** (Parquet) for historical analysis and quantitative queries. + +--- + +## 📥 Input +* **External APIs:** * `yfinance`: For S&P 500, NASDAQ, VIX, DXY, GLD, and SLV. + * `fredapi`: For Federal Funds Rate, CPI (Inflation), and Unemployment Rate. +* **Environment Variables:** Requires `FRED_API_KEY` stored in a `.env` file. + +--- + +## 📤 Output Files +The script organizes outputs into specific sub-directories: + +* **Markdown Contexts:** `Data/Macro_History/Context_Briefs/macro_context_{YYYY-MM-DD}.md` (and a `latest_macro_context.md` copy for easy access). +* **Structured Data:** `Data/Macro_History/macro_snapshot_{YYYY-MM-DD}.parquet`. +* **Logs:** `logs/{YYYY-MM-DD}/macro_pipeline.log`. + +--- + +## 📊 Data Schema & Metadata +Each record in the pipeline contains the following fields: + +| Field | Description | Type | +| :--- | :--- | :--- | +| `retrieval_date` | The timestamp when the script was executed. | String | +| `observation_date` | The actual date the data point was recorded by the exchange/agency. | String | +| `symbol` | Ticker (e.g., ^GSPC) or Series ID (e.g., CPIAUCSL). | String | +| `asset_class` | Category (Equity Index, Inflation, Labor Market, etc.). | String | +| `value` | The raw price or index level. | Float | +| `unit` | Units of measurement (Points, USD, %, or Index). | String | +| `frequency` | Data update cadence (Daily or Monthly). | String | +| `daily_change_pct` | Day-to-day volatility (Market data only). | Float | +| `mom_change_pct` | Monthly momentum (Macro data only). | Float | +| `yoy_change_pct` | Annualized growth/inflation (Macro data only). | Float | + +--- + +## 🛠 Technical Dependencies +* **yfinance:** Multi-threaded market data retrieval. +* **fredapi:** Interface for the St. Louis Fed's economic database. +* **pandas:** Core engine for data manipulation and change-rate calculations. +* **python-dotenv:** Secure management of API credentials. +* **pyarrow/fastparquet:** Backend engines for optimized Parquet storage. \ No newline at end of file diff --git a/docs/Data_source_docs/market_news_data.md b/docs/Data_source_docs/market_news_data.md new file mode 100644 index 0000000..4ccda35 --- /dev/null +++ b/docs/Data_source_docs/market_news_data.md @@ -0,0 +1,81 @@ +# News Data & LLM Enrichment Pipeline Documentation + +This documentation details the `news_scraper.py` script, an advanced automated pipeline designed to fetch, parse, and semantically enrich global macro-financial news for vector database (Qdrant) ingestion. + +## 🎯 Project Purpose +The pipeline acts as a real-time intelligence gathering engine for a Gold/Silver options trading desk. It aggregates global news from the GDELT project, scrapes the full article text, and utilizes a local Large Language Model (Llama 3) to translate foreign text, filter out noise, and generate quantitative metrics (like sentiment/tone scores and volatility implications) to feed into an AI-driven trading or RAG system. + +--- + +## 🏗 Architecture & Strategy Workflow +The system operates through a robust 4-stage architecture: + +1. **Topic Definition & Querying (Ingestion):** + * Uses predefined boolean search logic to track macroeconomic drivers (e.g., Central Banks, Inflation, Geopolitics) and asset-specific news (Gold/Silver Spot and Derivatives). + * Queries the GDELT 2.0 API to fetch the latest global article metadata for the past 48 hours. + +2. **Resilient Scraping & Deduplication:** + * Deduplicates incoming articles by generating unique signatures based on URL slugs and cleaned titles. + * Uses `newspaper3k` to scrape the full raw text of the articles. + * If direct scraping fails, it falls back to a DuckDuckGo Search (DDGS) targeting Yahoo Finance to retrieve an alternative text source. + +3. **LLM Extraction & Scoring (Enrichment):** + * Passes the scraped text to a local Llama 3 model (`ChatOllama`) operating under a strict zero-temperature quantitative analyst prompt. + * Translates non-English content to English. + * Filters out invalid content (cookie walls, 404s). + * Extracts dense summaries, identified entities, and market impact metrics. + +4. **Formatting & Archival (Export):** + * Structures the final enriched data into a Qdrant-compatible JSON format. + * Saves raw data, full-text backups, and vector-ready payloads into dynamically created daily directories. + +--- + +## 📥 Inputs +* **Search Topics:** Hardcoded boolean strings mapping to key macro/asset concepts (`ALL_TOPICS` dictionary). +* **External APIs:** GDELT Project API (News Metadata) and DuckDuckGo Search API (Fallback routing). +* **Local LLM Engine:** Ollama running the `llama3` model on `localhost`. + +--- + +## 📤 Output Files +The pipeline dynamically creates a daily folder hierarchy (`Data/news/{YYYY-MM-DD}/`) and outputs three streams of data per topic: + +* **Raw Metadata:** `Raw/raw_gdelt_{topic_name}.jsonl` (Direct GDELT output). +* **Text Backups:** `Full_text/full_text_{topic_name}.jsonl` (URL and scraped article text). +* **Processed Payload (Target):** `Qdrant_Input/qdrant_{topic_name}_processed.jsonl` (Fully enriched Qdrant-ready vectors). +* **Logs:** `logs/{YYYY-MM-DD}/scraper_{YYYY-MM-DD}.log` (Detailed execution logs). + +--- + +## 📊 Data Schema & Metadata +The final data stored in the `Qdrant_Input` JSONL files is structured specifically for vector embeddings. + +### Final Output Schema +| Field | Description | Type | +| :--- | :--- | :--- | +| `id` | A unique UUID v5 generated deterministically from the article URL. | String | +| `text` | The clean string to be embedded. Format: `"{english_title}. {dense_summary}"`. | String | +| `metadata` | A nested dictionary containing structured tags for Qdrant payload filtering. | Object | + +### `metadata` Object Structure +| Key | Description | Type | +| :--- | :--- | :--- | +| `topic` | The internal category that triggered the fetch (e.g., `macro_central_banks`). | String | +| `title` | The English-translated article title. | String | +| `original_title` | The native/original title fetched from GDELT. | String | +| `publish_date` | The ISO-8601 formatted publication timestamp. | String | +| `publish_timestamp` | Integer Unix epoch for fast time-range filtering in the vector DB. | Integer | +| `source` | The domain name of the publisher. | String | +| `url` | Direct link to the source article. | String | +| `entities` | Array of 3-5 explicitly mentioned key entities/organizations. | Array of Strings | +| `impacted_assets` | Broad asset classes affected by the news (e.g., USD, Gold, Equities). | Array of Strings | +| `volatility_implication` | Estimated impact on market fear/VIX (`Increase`, `Decrease`, `Neutral`). | String | +| `llm_tone_score` | Quantitative sentiment score on Gold/Silver from -5 (Bearish) to +5 (Bullish). | Integer | + +--- + +## 🛠 Technical Dependencies +* **Data Gathering:** `requests`, `newspaper3k` (HTML parsing), `duckduckgo_search` (fallback search). +* **LLM Integration:** `langchain_ollama` (Local Llama 3 execution). +* **Data Processing:** `datetime`, `re` (Regex matching for LLM outputs), `uuid` (Deterministic ID generation). \ No newline at end of file diff --git a/docs/Data_source_docs/options_historial_data.md b/docs/Data_source_docs/options_historial_data.md new file mode 100644 index 0000000..1fac55a --- /dev/null +++ b/docs/Data_source_docs/options_historial_data.md @@ -0,0 +1,69 @@ +# Options Data Pipeline Documentation + +This documentation covers the `yfinance_client.py` script, designed for automated financial data ingestion and processing. + +## 🔄 Strategy Workflow +The script follows a sequential, rate-limited execution logic to ensure data integrity and prevent IP blocking: + +1. **Initialization:** Resolves absolute paths for storage and configures a 1-second request delay. +2. **Market Baseline Fetching:** Retrieves the current underlying price for a pre-defined list of market symbols (e.g., SPY, QQQ). +3. **Expiration Discovery:** Identifies all available option expiration dates and selects the nearest 10 for processing. +4. **Chain Extraction:** Iterates through every expiration date to extract both Call and Put dataframes. +5. **Vectorized Enrichment:** Uses `pandas` to calculate advanced metrics (moneyness, spreads, liquidity) across the entire dataset simultaneously. +6. **Archival:** Saves the enriched data into a timestamped directory structure using the high-performance Parquet format. + +--- + +## 📥 Input +The script operates on the following primary inputs defined within the `__main__` block: +* **Target Symbols:** A list of tickers representing market baselines (`["SPY", "QQQ", "IWM", "GLD", "SLV"]`). +* **API Source:** Real-time data streams from the `yfinance` library. + +--- + +## 📤 Output Files +The script generates two types of outputs organized by date: + +* **Data Snapshots:** Stored in `Data/Options_History/{YYYY-MM-DD}/{SYMBOL}_options_{YYYY-MM-DD}.parquet`. +* **Execution Logs:** Stored in `logs/options_scraper_{YYYY-MM-DD}.log`, detailing the number of liquid contracts found and any API errors. + +--- + +## 📊 Metadata & Derived Metrics +Beyond standard price data, the script generates specific metadata to aid automated reasoning: + +| Metric | Calculation / Logic | Purpose | +| :--- | :--- | :--- | +| **DTE** | `Expiration Date - Snapshot Date` | Measures time decay risk. | +| **Moneyness %** | `(abs(Strike - Price) / Price) * 100` | Identifies how "deep" or "far" an option is from the current price. | +| **Spread %** | `((Ask - Bid) / Ask) * 100` | Quantifies the transaction cost and slippage risk. | +| **Is Liquid** | `(Volume >= 50) & (OI >= 100) & (Bid > 0)` | Filters for contracts that are realistically tradeable for LLM agents. | +| **In The Money** | Boolean flag | Identifies intrinsic value status. | + +--- + +## 📊 Data Schema + +The generated Parquet files include the following columns: + +| Column | Description | +| :--- | :--- | +| `snapshot_date` | Date the data was captured | +| `underlying_price` | Price of the stock at snapshot time | +| `strike` | Option strike price | +| `dte` | Days to Expiration | +| `moneyness_pct` | `abs(strike - price) / price * 100` | +| `spread_pct` | Bid-Ask spread percentage | +| `is_liquid` | Boolean flag (Volume >= 50 & OI >= 100) | +| `implied_volatility` | IV as reported by Yahoo Finance | + +--- +## 🛠 Technical Dependencies +* **yfinance:** Market data retrieval. +* **pandas/numpy:** Vectorized data processing and metric calculation. +* **pyarrow/fastparquet:** Efficient storage of large-scale financial time-series data. + +--- + +## 📝 Logging +Logs are generated daily in the `/logs` folder, tracking API success rates, liquid contract counts, and any connection errors. \ No newline at end of file From 5eb769227d725aeb18a20c2a107623acb654bbdf Mon Sep 17 00:00:00 2001 From: "Xinxin(Maxine)" Date: Fri, 10 Apr 2026 14:07:10 -0400 Subject: [PATCH 03/50] Delete caches --- News_scraper/Script/GDELT_news_sscraper.py | 200 --- reports/2025-10-06/options_ideas.json | 278 ---- reports/2025-10-06/options_ideas.md | 120 -- reports/2025-10-06_recommendations.json | 11 - src/__init__.py | 1 - src/__pycache__/__init__.cpython-311.pyc | Bin 129 -> 0 bytes src/__pycache__/agent_system.cpython-311.pyc | Bin 13115 -> 0 bytes .../alphavantage_client.cpython-311.pyc | Bin 16082 -> 0 bytes src/__pycache__/data_models.cpython-311.pyc | Bin 2573 -> 0 bytes .../financial_config.cpython-311.pyc | Bin 6551 -> 0 bytes .../financial_tools.cpython-311.pyc | Bin 10000 -> 0 bytes src/__pycache__/fred_scraper.cpython-311.pyc | Bin 2969 -> 0 bytes src/__pycache__/main.cpython-311.pyc | Bin 10071 -> 0 bytes .../market_data_scraper.cpython-311.pyc | Bin 2403 -> 0 bytes src/__pycache__/news_scraper.cpython-311.pyc | Bin 3380 -> 0 bytes .../reddit_scraper.cpython-311.pyc | Bin 3219 -> 0 bytes src/__pycache__/sec_scraper.cpython-311.pyc | Bin 2937 -> 0 bytes .../yahoo_finance_scraper.cpython-311.pyc | Bin 9688 -> 0 bytes .../yfinance_client.cpython-311.pyc | Bin 26236 -> 0 bytes .../youtube_scraper.cpython-311.pyc | Bin 38860 -> 0 bytes src/agent_system.py | 219 --- src/collect_data.py | 135 -- src/data_models.py | 38 - src/financial_config.py | 137 -- src/fred_scraper.py | 58 - src/main.py | 167 -- src/market_data_scraper.py | 48 - src/news_scraper.py | 68 - src/reddit_scraper.py | 49 - src/sec_scraper.py | 81 - src/tools/Youtube_channel_ID | 29 - .../compact_model_config.cpython-311.pyc | Bin 4797 -> 0 bytes ...compact_training_generator.cpython-311.pyc | Bin 6930 -> 0 bytes .../fetch_youtube_channels.cpython-311.pyc | Bin 3499 -> 0 bytes .../futures_expert_config.cpython-311.pyc | Bin 6406 -> 0 bytes .../futures_key_extractor.cpython-311.pyc | Bin 8183 -> 0 bytes .../generate_options_report.cpython-311.pyc | Bin 17477 -> 0 bytes .../generate_smart_report.cpython-311.pyc | Bin 13426 -> 0 bytes .../__pycache__/model_creator.cpython-311.pyc | Bin 5428 -> 0 bytes .../prepare_fine_tuning_data.cpython-311.pyc | Bin 8714 -> 0 bytes .../training_data_generator.cpython-311.pyc | Bin 16191 -> 0 bytes .../update_compose_channels.cpython-311.pyc | Bin 15338 -> 0 bytes src/tools/create_options_expert.py | 286 ---- src/tools/generate_production_report.py | 1419 ----------------- src/yahoo_finance_scraper.py | 201 --- src/yfinance_client.py | 491 ------ src/youtube_scraper.py | 734 --------- 47 files changed, 4770 deletions(-) delete mode 100644 News_scraper/Script/GDELT_news_sscraper.py delete mode 100644 reports/2025-10-06/options_ideas.json delete mode 100644 reports/2025-10-06/options_ideas.md delete mode 100644 reports/2025-10-06_recommendations.json delete mode 100644 src/__init__.py delete mode 100644 src/__pycache__/__init__.cpython-311.pyc delete mode 100644 src/__pycache__/agent_system.cpython-311.pyc delete mode 100644 src/__pycache__/alphavantage_client.cpython-311.pyc delete mode 100644 src/__pycache__/data_models.cpython-311.pyc delete mode 100644 src/__pycache__/financial_config.cpython-311.pyc delete mode 100644 src/__pycache__/financial_tools.cpython-311.pyc delete mode 100644 src/__pycache__/fred_scraper.cpython-311.pyc delete mode 100644 src/__pycache__/main.cpython-311.pyc delete mode 100644 src/__pycache__/market_data_scraper.cpython-311.pyc delete mode 100644 src/__pycache__/news_scraper.cpython-311.pyc delete mode 100644 src/__pycache__/reddit_scraper.cpython-311.pyc delete mode 100644 src/__pycache__/sec_scraper.cpython-311.pyc delete mode 100644 src/__pycache__/yahoo_finance_scraper.cpython-311.pyc delete mode 100644 src/__pycache__/yfinance_client.cpython-311.pyc delete mode 100644 src/__pycache__/youtube_scraper.cpython-311.pyc delete mode 100644 src/agent_system.py delete mode 100644 src/collect_data.py delete mode 100644 src/data_models.py delete mode 100644 src/financial_config.py delete mode 100644 src/fred_scraper.py delete mode 100644 src/main.py delete mode 100644 src/market_data_scraper.py delete mode 100644 src/news_scraper.py delete mode 100644 src/reddit_scraper.py delete mode 100644 src/sec_scraper.py delete mode 100644 src/tools/Youtube_channel_ID delete mode 100644 src/tools/__pycache__/compact_model_config.cpython-311.pyc delete mode 100644 src/tools/__pycache__/compact_training_generator.cpython-311.pyc delete mode 100644 src/tools/__pycache__/fetch_youtube_channels.cpython-311.pyc delete mode 100644 src/tools/__pycache__/futures_expert_config.cpython-311.pyc delete mode 100644 src/tools/__pycache__/futures_key_extractor.cpython-311.pyc delete mode 100644 src/tools/__pycache__/generate_options_report.cpython-311.pyc delete mode 100644 src/tools/__pycache__/generate_smart_report.cpython-311.pyc delete mode 100644 src/tools/__pycache__/model_creator.cpython-311.pyc delete mode 100644 src/tools/__pycache__/prepare_fine_tuning_data.cpython-311.pyc delete mode 100644 src/tools/__pycache__/training_data_generator.cpython-311.pyc delete mode 100644 src/tools/__pycache__/update_compose_channels.cpython-311.pyc delete mode 100644 src/tools/create_options_expert.py delete mode 100644 src/tools/generate_production_report.py delete mode 100644 src/yahoo_finance_scraper.py delete mode 100644 src/yfinance_client.py delete mode 100644 src/youtube_scraper.py diff --git a/News_scraper/Script/GDELT_news_sscraper.py b/News_scraper/Script/GDELT_news_sscraper.py deleted file mode 100644 index d2aee00..0000000 --- a/News_scraper/Script/GDELT_news_sscraper.py +++ /dev/null @@ -1,200 +0,0 @@ -import os -import requests -import json -import time -from datetime import datetime -from newspaper import Article -from duckduckgo_search import DDGS -import warnings -from langchain_ollama import ChatOllama -import uuid - -warnings.filterwarnings('ignore') - -# ========================================== -# 0. 初始化配置 -# ========================================== -print("正在初始化本地 Llama 3 模型作为数据清洗引擎...") -llm = ChatOllama(model="llama3", temperature=0) - -DATA_FOLDER = "./Data/Qdrant_Input" -os.makedirs(DATA_FOLDER, exist_ok=True) - -TOPICS = { - "geopolitical": '(gold OR silver OR GLD OR SLV) AND (conflict OR war OR sanctions OR "Middle East")', - "usd_index": '(gold OR silver OR GLD OR SLV) AND ("dollar index" OR DXY)', - "macro_fed": '(gold OR silver OR GLD OR SLV) AND ("Federal Reserve" OR FOMC)', - "macro_inflation": '(gold OR silver OR GLD OR SLV) AND (inflation OR CPI)', - "macro_rates": '(gold OR silver OR GLD OR SLV) AND "interest rate"' -} - -# ========================================== -# 1. 爬虫与原始数据保留 -# ========================================== -def fetch_gdelt_metadata(query, max_retries=2): - url = "https://api.gdeltproject.org/api/v2/doc/doc" - params = {"query": query, "mode": "artlist", "format": "json", "timespan": "24h", "maxrecords": 5, "sort": "DateDesc"} - for attempt in range(max_retries): - try: - response = requests.get(url, params=params, timeout=15) - if response.status_code == 429: - time.sleep(10) - continue - response.raise_for_status() - return response.json().get('articles', []) - except Exception: - time.sleep(5) - return [] - -def _download_and_parse(url): - try: - article = Article(url) - article.download() - article.parse() - return article.text - except Exception: - return None - -def scrape_full_text(url, title=None): - text = _download_and_parse(url) - if text and len(text) > 150: - return text, "direct_success" - if title: - try: - with DDGS() as ddgs: - search_query = f'"{title}" site:finance.yahoo.com' - results = list(ddgs.text(search_query, max_results=1)) - if results and 'href' in results[0]: - yahoo_url = results[0]['href'] - fallback_text = _download_and_parse(yahoo_url) - if fallback_text and len(fallback_text) > 150: - return fallback_text, "fallback_success" - except Exception: - pass - return None, "failed" - -# ========================================== -# 2. LLM 智能提取与评分 (升级版) -# ========================================== -def llm_extract_and_score(full_text): - """提取高质量摘要并赋予严格的 Tone Score""" - truncated_text = full_text[:4000] - - prompt = f""" - You are an expert macro-financial analyst evaluating news for a Gold/Silver Options trading desk. - Read the article below. - - CRITICAL INSTRUCTION: If the text is in a foreign language (Spanish, Turkish, Arabic, etc.), TRANSLATE it to English internally before generating the summary. - If the text is just a cookie consent notice, a 404 error, or completely lacks any news content, reply ONLY with: INVALID_CONTENT. - - Otherwise, provide your analysis in the EXACT format below: - - TONE_SCORE: [Assign an integer from -5 to +5 based on the impact on Gold prices] - SUMMARY: [Write a dense, 3-4 sentence financial summary. You MUST include specific numbers, percentages, entities, and forward-looking market trends mentioned in the text. Maximize information retention.] - - TONE SCORING RUBRIC (Impact on GOLD): - +3 to +5 (Bullish): Federal Reserve cutting rates, inflation rising, US Dollar weakening, geopolitical conflicts escalating, major central bank gold buying. - -3 to -5 (Bearish): Federal Reserve hiking or holding rates high, inflation cooling, US Dollar strengthening, geopolitical tensions resolving. - 0 (Neutral): General market commentary without directional drivers, or unrelated content. - - Article: - {truncated_text} - """ - try: - return llm.invoke(prompt).content.strip() - except Exception as e: - print(f"LLM Error: {e}") - return "INVALID_CONTENT" - -def parse_llm_response(response_text): - if "INVALID_CONTENT" in response_text or "SUMMARY:" not in response_text: - return None, None - try: - parts = response_text.split("SUMMARY:") - score_str = parts[0].replace("TONE_SCORE:", "").strip() - tone_score = int(score_str) - summary_text = parts[1].strip() - return tone_score, summary_text - except Exception: - return 0, response_text.replace("SUMMARY:", "").strip() # 退化处理:保留文本,分数为0 - -# ========================================== -# 3. 主控流程 -# ========================================== -def process_and_save_to_jsonl(topic_name, query): - print(f"\n{'='*40}\nProcessing topic: {topic_name}\n{'='*40}") - articles = fetch_gdelt_metadata(query) - - if not articles: - return - - # 1. 恢复:保存原始数据 (Raw Data) - raw_output_file = os.path.join(DATA_FOLDER, f"raw_gdelt_{topic_name}.jsonl") - with open(raw_output_file, 'a', encoding='utf-8') as f_raw: - for item in articles: - f_raw.write(json.dumps(item, ensure_ascii=False) + '\n') - - chunk_output_file = os.path.join(DATA_FOLDER, f"qdrant_{topic_name}_processed.jsonl") - stats = {"total": len(articles), "scraped": 0, "llm_passed": 0, "llm_discarded": 0} - - with open(chunk_output_file, 'a', encoding='utf-8') as f_out: - for item in articles: - target_url = item.get('url') - article_title = item.get('title', '') - publish_date = item.get('urldatetime', '') - - # 抓取全文 - full_text, status = scrape_full_text(target_url, title=article_title) - if status == "failed": - continue - stats["scraped"] += 1 - - # LLM 处理 - llm_response = llm_extract_and_score(full_text) - tone_score, dense_summary = parse_llm_response(llm_response) - - # 新的拦截逻辑:只拦截真正的垃圾页面 - if not dense_summary: - print(f" [丢弃] 页面无效/无内容: {article_title[:40]}...") - stats["llm_discarded"] += 1 - continue - - stats["llm_passed"] += 1 - print(f" [保留] Tone: {tone_score:2d} | {article_title[:40]}...") - - contextualized_text = ( - f"Document Title: {article_title}\n" - f"Topic Category: {topic_name}\n" - f"Publish Date: {publish_date}\n" - f"LLM Gold Tone Score: {tone_score}\n" - f"---\n" - f"{dense_summary}" - ) - - doc_id = str(uuid.uuid5(uuid.NAMESPACE_URL, target_url)) - record = { - "id": doc_id, - "text": contextualized_text, - "metadata": { - "topic": topic_name, - "title": article_title, - "publish_date": publish_date, - "source": item.get('domain', 'Unknown Source'), - "url": target_url, - "llm_tone_score": tone_score - } - } - f_out.write(json.dumps(record, ensure_ascii=False) + '\n') - - # 日志输出 - log_msg = (f"Topic [{topic_name}] -> Fetched: {stats['total']} | Scraped: {stats['scraped']} | " - f"Saved: {stats['llm_passed']} | Discarded: {stats['llm_discarded']}\n") - print("-" * 40 + "\n" + log_msg) - with open(os.path.join(DATA_FOLDER, "scraper_execution.log"), 'a') as f_log: - f_log.write(f"{datetime.now()}: {log_msg}") - -if __name__ == "__main__": - for topic_name, query in TOPICS.items(): - process_and_save_to_jsonl(topic_name, query) - time.sleep(2) - print("\n[+] 所有数据清洗提纯完毕,可用于 Qdrant 检索!") \ No newline at end of file diff --git a/reports/2025-10-06/options_ideas.json b/reports/2025-10-06/options_ideas.json deleted file mode 100644 index 1653264..0000000 --- a/reports/2025-10-06/options_ideas.json +++ /dev/null @@ -1,278 +0,0 @@ -{ - "report_date": "2025-10-06", - "total_ideas": 5, - "ideas": [ - { - "ticker": "MS", - "directional_view": "Neutral", - "trade_idea": "Iron Condor", - "option_type": "Spread", - "candidate_strikes": "$160.00", - "strike_price": 160.0, - "tenor": "2026-03-20", - "expiration_date": "2026-03-20", - "rationale": "Strong options signal strength (0.75) from SEC analysis. **Price Analysis:** Current price $157.62 vs Strike $160.00 (ATM). **Intrinsic Value:** $0.00, Time Value: $22.59, Estimated Premium: $22.59. **Greeks:** Delta=0.000, Gamma=0.010, Theta=-0.753, Vega=0.452. **Risk Metrics:** Sharpe Ratio=0.40, Volatility=25.0%. Neutral sentiment suggests straddle/strangle strategies. Medium volatility environment supports balanced options strategies. Fact-checked options analysis confirms data quality. Consider 1 counter-arguments in options risk assessment. Low uncertainty environment - high confidence in strategy. Risk considerations: Low uncertainty - high confidence in analysis.", - "confidence_level": "High", - "citations": [ - "SEC", - "ReAct Multi-Agent Analysis" - ], - "signal_strength": 0.75, - "validation_score": 1.0, - "counter_arguments": [ - "High signal strength may indicate overconfidence in options strategy" - ], - "volatility_assessment": "Medium", - "strategy_type": "Iron Condor", - "uncertainty_metrics": { - "signal_uncertainty": 0.18, - "validation_uncertainty": 0.0, - "counter_uncertainty": 0.2, - "source_uncertainty": 0.1, - "overall_uncertainty": 0.11, - "confidence_interval": { - "lower_bound": 0.876, - "upper_bound": 0.8985454545454546, - "center": 0.8872727272727273 - }, - "calibration_notes": [ - "Low uncertainty - high confidence in analysis" - ] - }, - "confidence_interval": { - "lower_bound": 0.876, - "upper_bound": 0.8985454545454546, - "center": 0.8872727272727273 - }, - "calibration_notes": [ - "Low uncertainty - high confidence in analysis" - ], - "overall_uncertainty": 0.11, - "schema_validated": true, - "validation_timestamp": "2025-10-06T16:06:32.433596" - }, - { - "ticker": "GS", - "directional_view": "Neutral", - "trade_idea": "Iron Condor", - "option_type": "Spread", - "candidate_strikes": "$800.00", - "strike_price": 800.0, - "tenor": "2026-03-20", - "expiration_date": "2026-03-20", - "rationale": "Moderate options signal strength (0.62) from NewsAPI analysis. **Price Analysis:** Current price $796.91 vs Strike $800.00 (ATM). **Intrinsic Value:** $0.00, Time Value: $114.23, Estimated Premium: $114.23. **Greeks:** Delta=0.000, Gamma=0.010, Theta=-3.808, Vega=2.285. **Risk Metrics:** Sharpe Ratio=0.40, Volatility=25.0%. Neutral sentiment suggests straddle/strangle strategies. Medium volatility environment supports balanced options strategies. Fact-checked options analysis confirms data quality. Low uncertainty environment - high confidence in strategy. Risk considerations: Low uncertainty - high confidence in analysis.", - "confidence_level": "Medium", - "citations": [ - "NewsAPI", - "ReAct Multi-Agent Analysis" - ], - "signal_strength": 0.62, - "validation_score": 0.9, - "counter_arguments": [], - "volatility_assessment": "Medium", - "strategy_type": "Iron Condor", - "uncertainty_metrics": { - "signal_uncertainty": 0.35, - "validation_uncertainty": 0.1, - "counter_uncertainty": 0.0, - "source_uncertainty": 0.2, - "overall_uncertainty": 0.17, - "confidence_interval": { - "lower_bound": 0.809, - "upper_bound": 0.8437272727272728, - "center": 0.8263636363636364 - }, - "calibration_notes": [ - "Low uncertainty - high confidence in analysis" - ] - }, - "confidence_interval": { - "lower_bound": 0.809, - "upper_bound": 0.8437272727272728, - "center": 0.8263636363636364 - }, - "calibration_notes": [ - "Low uncertainty - high confidence in analysis" - ], - "overall_uncertainty": 0.17, - "schema_validated": true, - "validation_timestamp": "2025-10-06T16:06:29.353470" - }, - { - "ticker": "BAC", - "directional_view": "Bullish", - "trade_idea": "Covered Call", - "option_type": "Call", - "candidate_strikes": "$52.50", - "strike_price": 52.5, - "tenor": "2026-03-20", - "expiration_date": "2026-03-20", - "rationale": "Moderate options signal strength (0.43) from NewsAPI analysis. **Price Analysis:** Current price $50.53 vs Strike $52.50 (OTM). **Intrinsic Value:** $0.00, Time Value: $3.62, Estimated Premium: $3.62. **Greeks:** Delta=0.388, Gamma=0.010, Theta=-0.121, Vega=0.145. **Risk Metrics:** Sharpe Ratio=0.40, Volatility=25.0%. Bullish sentiment supports call option strategies. Medium volatility environment supports balanced options strategies. Fact-checked options analysis confirms data quality. Consider 3 counter-arguments in options risk assessment. Risk considerations: Multiple counter-arguments - risk assessment needed.", - "confidence_level": "Medium", - "citations": [ - "NewsAPI", - "ReAct Multi-Agent Analysis" - ], - "signal_strength": 0.43, - "validation_score": 0.7, - "counter_arguments": [ - "Call options may be overpriced due to high implied volatility", - "Market correction could lead to significant call option losses" - ], - "volatility_assessment": "Medium", - "strategy_type": "Covered Call", - "uncertainty_metrics": { - "signal_uncertainty": 0.35, - "validation_uncertainty": 0.3, - "counter_uncertainty": 0.6, - "source_uncertainty": 0.2, - "overall_uncertainty": 0.36, - "confidence_interval": { - "lower_bound": 0.609, - "upper_bound": 0.6800909090909091, - "center": 0.6445454545454545 - }, - "calibration_notes": [ - "Multiple counter-arguments - risk assessment needed" - ] - }, - "confidence_interval": { - "lower_bound": 0.609, - "upper_bound": 0.6800909090909091, - "center": 0.6445454545454545 - }, - "calibration_notes": [ - "Multiple counter-arguments - risk assessment needed" - ], - "overall_uncertainty": 0.36, - "schema_validated": true, - "validation_timestamp": "2025-10-06T16:06:30.137171" - }, - { - "ticker": "BA", - "directional_view": "Bullish", - "trade_idea": "Covered Call", - "option_type": "Call", - "candidate_strikes": "$220.00", - "strike_price": 220.0, - "tenor": "2026-02-20", - "expiration_date": "2026-02-20", - "rationale": "Moderate options signal strength (0.40) from NewsAPI analysis. **Price Analysis:** Current price $219.98 vs Strike $220.00 (OTM). **Intrinsic Value:** $0.00, Time Value: $15.77, Estimated Premium: $15.77. **Greeks:** Delta=0.500, Gamma=0.010, Theta=-0.526, Vega=0.631. **Risk Metrics:** Sharpe Ratio=0.40, Volatility=25.0%. Bullish sentiment supports call option strategies. Medium volatility environment supports balanced options strategies. Fact-checked options analysis confirms data quality. Consider 3 counter-arguments in options risk assessment. Risk considerations: Multiple counter-arguments - risk assessment needed.", - "confidence_level": "Medium", - "citations": [ - "NewsAPI", - "ReAct Multi-Agent Analysis" - ], - "signal_strength": 0.4, - "validation_score": 0.7, - "counter_arguments": [ - "Call options may be overpriced due to high implied volatility", - "Market correction could lead to significant call option losses" - ], - "volatility_assessment": "Medium", - "strategy_type": "Covered Call", - "uncertainty_metrics": { - "signal_uncertainty": 0.38, - "validation_uncertainty": 0.3, - "counter_uncertainty": 0.6, - "source_uncertainty": 0.2, - "overall_uncertainty": 0.36, - "confidence_interval": { - "lower_bound": 0.601, - "upper_bound": 0.6735454545454544, - "center": 0.6372727272727272 - }, - "calibration_notes": [ - "Multiple counter-arguments - risk assessment needed" - ] - }, - "confidence_interval": { - "lower_bound": 0.601, - "upper_bound": 0.6735454545454544, - "center": 0.6372727272727272 - }, - "calibration_notes": [ - "Multiple counter-arguments - risk assessment needed" - ], - "overall_uncertainty": 0.36, - "schema_validated": true, - "validation_timestamp": "2025-10-06T16:06:31.125271" - }, - { - "ticker": "GE", - "directional_view": "Bearish", - "trade_idea": "Protective Put", - "option_type": "Put", - "candidate_strikes": "$290.00", - "strike_price": 290.0, - "tenor": "2026-01-16", - "expiration_date": "2026-01-16", - "rationale": "Moderate options signal strength (0.40) from NewsAPI analysis. **Price Analysis:** Current price $296.73 vs Strike $290.00 (OTM). **Intrinsic Value:** $0.00, Time Value: $21.27, Estimated Premium: $21.27. **Greeks:** Delta=-0.100, Gamma=0.010, Theta=-0.709, Vega=0.851. **Risk Metrics:** Sharpe Ratio=0.40, Volatility=25.0%. Bearish sentiment supports put option strategies. Medium volatility environment supports balanced options strategies. Fact-checked options analysis confirms data quality. Consider 3 counter-arguments in options risk assessment. Risk considerations: Multiple counter-arguments - risk assessment needed.", - "confidence_level": "Medium", - "citations": [ - "NewsAPI", - "ReAct Multi-Agent Analysis" - ], - "signal_strength": 0.4, - "validation_score": 0.7, - "counter_arguments": [ - "Put options may be expensive due to fear premium", - "Oversold bounce could lead to put option losses" - ], - "volatility_assessment": "Medium", - "strategy_type": "Protective Put", - "uncertainty_metrics": { - "signal_uncertainty": 0.38, - "validation_uncertainty": 0.3, - "counter_uncertainty": 0.6, - "source_uncertainty": 0.2, - "overall_uncertainty": 0.36, - "confidence_interval": { - "lower_bound": 0.601, - "upper_bound": 0.6735454545454544, - "center": 0.6372727272727272 - }, - "calibration_notes": [ - "Multiple counter-arguments - risk assessment needed" - ] - }, - "confidence_interval": { - "lower_bound": 0.601, - "upper_bound": 0.6735454545454544, - "center": 0.6372727272727272 - }, - "calibration_notes": [ - "Multiple counter-arguments - risk assessment needed" - ], - "overall_uncertainty": 0.36, - "schema_validated": true, - "validation_timestamp": "2025-10-06T16:06:31.602018" - } - ], - "metadata": { - "generated_at": "2025-10-06T16:06:32.461300", - "model_used": "options-expert", - "generation_method": "Options Multi-Agent System", - "data_sources": [ - "Reddit", - "SEC", - "YouTube", - "NewsAPI" - ], - "total_options_signals_analyzed": 70, - "avg_signal_strength": 0.52, - "avg_confidence": 0.6, - "strategy_types": [ - "Protective Put", - "Covered Call", - "Iron Condor" - ], - "underlyings": [ - "MS", - "BAC", - "GS", - "GE", - "BA" - ] - } -} \ No newline at end of file diff --git a/reports/2025-10-06/options_ideas.md b/reports/2025-10-06/options_ideas.md deleted file mode 100644 index ed9304e..0000000 --- a/reports/2025-10-06/options_ideas.md +++ /dev/null @@ -1,120 +0,0 @@ -# Daily Options Trading Ideas - Expert Analysis -## Report for 2025-10-06 - -**Generated Ideas:** 5 -**Data Sources:** Reddit, SEC, YouTube, NewsAPI -**Total Options Signals Analyzed:** 70 -**Average Signal Strength:** 0.52 -**Average Confidence:** 0.60 -**Strategy Types:** Protective Put, Covered Call, Iron Condor -**Underlyings:** MS, BAC, GS, GE, BA - -## Options Idea #1 - -**Ticker:** MS -**Directional View:** Neutral -**Trade Idea:** Iron Condor -**Option Type:** Spread -**Candidate Strike(s):** $160.00 -**Strike Price:** $160.00 -**Expiration Date:** 2026-03-20 -**Tenor:** 2026-03-20 -**Rationale:** Strong options signal strength (0.75) from SEC analysis. **Price Analysis:** Current price $157.62 vs Strike $160.00 (ATM). **Intrinsic Value:** $0.00, Time Value: $22.59, Estimated Premium: $22.59. **Greeks:** Delta=0.000, Gamma=0.010, Theta=-0.753, Vega=0.452. **Risk Metrics:** Sharpe Ratio=0.40, Volatility=25.0%. Neutral sentiment suggests straddle/strangle strategies. Medium volatility environment supports balanced options strategies. Fact-checked options analysis confirms data quality. Consider 1 counter-arguments in options risk assessment. Low uncertainty environment - high confidence in strategy. Risk considerations: Low uncertainty - high confidence in analysis. -**Confidence Level:** High -**Citations:** SEC, ReAct Multi-Agent Analysis -**Signal Strength:** 0.75 -**Validation Score:** 1.00 -**Volatility Assessment:** Medium -**Strategy Type:** Iron Condor -**Counter-Arguments:** High signal strength may indicate overconfidence in options strategy -**Uncertainty Notes:** N/A - ---- - -## Options Idea #2 - -**Ticker:** GS -**Directional View:** Neutral -**Trade Idea:** Iron Condor -**Option Type:** Spread -**Candidate Strike(s):** $800.00 -**Strike Price:** $800.00 -**Expiration Date:** 2026-03-20 -**Tenor:** 2026-03-20 -**Rationale:** Moderate options signal strength (0.62) from NewsAPI analysis. **Price Analysis:** Current price $796.91 vs Strike $800.00 (ATM). **Intrinsic Value:** $0.00, Time Value: $114.23, Estimated Premium: $114.23. **Greeks:** Delta=0.000, Gamma=0.010, Theta=-3.808, Vega=2.285. **Risk Metrics:** Sharpe Ratio=0.40, Volatility=25.0%. Neutral sentiment suggests straddle/strangle strategies. Medium volatility environment supports balanced options strategies. Fact-checked options analysis confirms data quality. Low uncertainty environment - high confidence in strategy. Risk considerations: Low uncertainty - high confidence in analysis. -**Confidence Level:** Medium -**Citations:** NewsAPI, ReAct Multi-Agent Analysis -**Signal Strength:** 0.62 -**Validation Score:** 0.90 -**Volatility Assessment:** Medium -**Strategy Type:** Iron Condor -**Uncertainty Notes:** N/A - ---- - -## Options Idea #3 - -**Ticker:** BAC -**Directional View:** Bullish -**Trade Idea:** Covered Call -**Option Type:** Call -**Candidate Strike(s):** $52.50 -**Strike Price:** $52.50 -**Expiration Date:** 2026-03-20 -**Tenor:** 2026-03-20 -**Rationale:** Moderate options signal strength (0.43) from NewsAPI analysis. **Price Analysis:** Current price $50.53 vs Strike $52.50 (OTM). **Intrinsic Value:** $0.00, Time Value: $3.62, Estimated Premium: $3.62. **Greeks:** Delta=0.388, Gamma=0.010, Theta=-0.121, Vega=0.145. **Risk Metrics:** Sharpe Ratio=0.40, Volatility=25.0%. Bullish sentiment supports call option strategies. Medium volatility environment supports balanced options strategies. Fact-checked options analysis confirms data quality. Consider 3 counter-arguments in options risk assessment. Risk considerations: Multiple counter-arguments - risk assessment needed. -**Confidence Level:** Medium -**Citations:** NewsAPI, ReAct Multi-Agent Analysis -**Signal Strength:** 0.43 -**Validation Score:** 0.70 -**Volatility Assessment:** Medium -**Strategy Type:** Covered Call -**Counter-Arguments:** Call options may be overpriced due to high implied volatility, Market correction could lead to significant call option losses -**Uncertainty Notes:** N/A - ---- - -## Options Idea #4 - -**Ticker:** BA -**Directional View:** Bullish -**Trade Idea:** Covered Call -**Option Type:** Call -**Candidate Strike(s):** $220.00 -**Strike Price:** $220.00 -**Expiration Date:** 2026-02-20 -**Tenor:** 2026-02-20 -**Rationale:** Moderate options signal strength (0.40) from NewsAPI analysis. **Price Analysis:** Current price $219.98 vs Strike $220.00 (OTM). **Intrinsic Value:** $0.00, Time Value: $15.77, Estimated Premium: $15.77. **Greeks:** Delta=0.500, Gamma=0.010, Theta=-0.526, Vega=0.631. **Risk Metrics:** Sharpe Ratio=0.40, Volatility=25.0%. Bullish sentiment supports call option strategies. Medium volatility environment supports balanced options strategies. Fact-checked options analysis confirms data quality. Consider 3 counter-arguments in options risk assessment. Risk considerations: Multiple counter-arguments - risk assessment needed. -**Confidence Level:** Medium -**Citations:** NewsAPI, ReAct Multi-Agent Analysis -**Signal Strength:** 0.40 -**Validation Score:** 0.70 -**Volatility Assessment:** Medium -**Strategy Type:** Covered Call -**Counter-Arguments:** Call options may be overpriced due to high implied volatility, Market correction could lead to significant call option losses -**Uncertainty Notes:** N/A - ---- - -## Options Idea #5 - -**Ticker:** GE -**Directional View:** Bearish -**Trade Idea:** Protective Put -**Option Type:** Put -**Candidate Strike(s):** $290.00 -**Strike Price:** $290.00 -**Expiration Date:** 2026-01-16 -**Tenor:** 2026-01-16 -**Rationale:** Moderate options signal strength (0.40) from NewsAPI analysis. **Price Analysis:** Current price $296.73 vs Strike $290.00 (OTM). **Intrinsic Value:** $0.00, Time Value: $21.27, Estimated Premium: $21.27. **Greeks:** Delta=-0.100, Gamma=0.010, Theta=-0.709, Vega=0.851. **Risk Metrics:** Sharpe Ratio=0.40, Volatility=25.0%. Bearish sentiment supports put option strategies. Medium volatility environment supports balanced options strategies. Fact-checked options analysis confirms data quality. Consider 3 counter-arguments in options risk assessment. Risk considerations: Multiple counter-arguments - risk assessment needed. -**Confidence Level:** Medium -**Citations:** NewsAPI, ReAct Multi-Agent Analysis -**Signal Strength:** 0.40 -**Validation Score:** 0.70 -**Volatility Assessment:** Medium -**Strategy Type:** Protective Put -**Counter-Arguments:** Put options may be expensive due to fear premium, Oversold bounce could lead to put option losses -**Uncertainty Notes:** N/A - ---- - diff --git a/reports/2025-10-06_recommendations.json b/reports/2025-10-06_recommendations.json deleted file mode 100644 index 69ba198..0000000 --- a/reports/2025-10-06_recommendations.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "date": "2025-10-06", - "recommended_tickers": [ - "MS", - "BAC", - "GS", - "GE", - "BA" - ], - "timestamp": "2025-10-06T16:06:32.433777" -} \ No newline at end of file diff --git a/src/__init__.py b/src/__init__.py deleted file mode 100644 index 63f6b82..0000000 --- a/src/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# This file makes the src directory a Python package. diff --git a/src/__pycache__/__init__.cpython-311.pyc b/src/__pycache__/__init__.cpython-311.pyc deleted file mode 100644 index 1800fdaae4fddeb08294383a3b951b677e05c867..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 129 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 diff --git a/src/__pycache__/data_models.cpython-311.pyc b/src/__pycache__/data_models.cpython-311.pyc deleted file mode 100644 index d73a695167f46420c927abe16a73d2417875ff27..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2573 zcmbVN&2JM&6rWv>9ebVdWfEut$$$&QMhR4us-jVECbtiV^xlGOZGB4z|Z(u!<<6iiHYFRw<}iRgt`Eg$g)}6{Moe zh=!IC#Z1`=5<7=jHbIk=o7iluv zf5BiCF_cv(%BnYDBNn0xRiA}6RM-Yuqhv7)vk1jwz&0`AU6?KwW#JE6OAz2A9r&(Y z_}DIdv;!Zb8jU~e-T2O92Tij=yh*F_o@G@~7;@)DUBp5#>$lVeXuIbod$v9;q$IYT- z{jMgw(ktytoIEKQrcLsuO-*}2_}zC{S#NQbp^OyfoRaM_K4S2NQi0j7APy(o6nBKb zzbVt(vW3>In}ho2mEoCtj2o5(itM~enVn-q>&R!P9&L@MN~3(Qw7#-pId z-}iQb9xSL_x%i-H8MYzsA`kx-(A3D8Asid70_LHl1Y2A?|&;S z>$c-E;YT=gOWe*Wtvf&;hbA3&`!^uq@X9*$y9-s9(IUFtUil^30MKR|xB-&Qw)9)& zy?P*EKu_C;|3!~VF`(Ol^%&9cq5?Fsr~>T*S=$R~v;x6PV~;V_V7?W|2yn`iICxpS za%|GE;i=rFiKI(q41R|?_rXIPUNBr=(RNrz?tBi~HUV-KDPW;R^i2%zhvYe)s5jB7 zqM+|Js?4INYDFC((@$aGtD|RqY`Ux<o|w_euqwXP@zgW;)L<`OeA*EO4NXfXNsu;X8~H-39M-gvkr63KlB=vN*9JL2tE4+5K?b-kgPoiN1&vHF z(aHo`<+BbfxKA^b0oe+5ZG@yDVYOH?Du z1GS1XTgl<|^FJlL3txN5`D${$mYnx+?~1!N`Kat+7|&Pnd{fa+lg}r;i;g!~tPU1y zgGCP?TwxxDzF5V@t)s`+Zmgg4KK`zb(BOpnDxj|eDpd-Y4o|2J3PL%?{b9T|TSw5n zmjsUx7-1S*I9e=I1Aaw0E`2dDx*u`NMfh9sz_@|QcAD``bgc1a?SUt>a?~9CJ5WNxhP@uiqgG4*w5J=bn53 diff --git a/src/__pycache__/financial_config.cpython-311.pyc b/src/__pycache__/financial_config.cpython-311.pyc deleted file mode 100644 index 431dce15f632f81822ae521c0ac6eb61143009ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6551 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 diff --git a/src/__pycache__/financial_tools.cpython-311.pyc b/src/__pycache__/financial_tools.cpython-311.pyc deleted file mode 100644 index 1c30114c4c9d7c35bb51543267fb8a71183b10bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10000 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 Bcwztm diff --git a/src/__pycache__/fred_scraper.cpython-311.pyc b/src/__pycache__/fred_scraper.cpython-311.pyc deleted file mode 100644 index 46b4c4b16a22226deab16d28d2a9510127ef706a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2969 zcmZ`5OKcm*b#`}_+$C2cCDOL!@8%;&bZja%>Npi#w~k3QYGXE#;;Lp55NqyGUYpz{ zc2|)_P=yXX5QQ%-0@!F|lqiBkL2^)lwD8eEf}Tl%fQbPNC@p%(jfHC<@TGmTD~hC? z%+9`fZ{Ba_&7051Lqj11rTxk`H~tYs=wFQJ7NEWIB*P(e7wJgniYUukzQ~pMEYC4q zC<-N<#U74}VkwXfl!Dn{Nyha} zTRc;<55xST`j9@n#P72{3Y-`j9qfe|aSPs`h6S~(_khH+HqjFT z#cvsoOL5A`yHvPju2%SDvVxPoP}mpGl{NPURc7bYsobTv=W@SHU!x(1*amTOhVIaS zP26SM%8%eWQ*PN1vVA4 zzRUDlUEDYJU{$P310uVG9)M9mR6q5SgLSS+KPVf7gdCKWb-5~i0BKki0EVkUfJ!w0 zaHuK+9KIi33sw30-e&3_Lp7vFszOzQHoAfJk&Wlp=FZ<=LTp!gr|Ou5c^pwr~xta050DxQBW^s{2L(vp9Hv-oY3bFRE4WgnS*J ztInkyb&4dHlBd+ktC{&r@1!RayH@=D(bLtf{BntyuH*A7vx}N-8s^fBXSKV>RMT?R zg0*bwr&Q;bQ7(hT_l?=f+Zy8~D^m-*==X{Brj|^?0T2Y8+%2;D?f;-uq={>%CrYO$ zbSk=rTO>5RY#OeUb8c9+OHpO~%0R3PQ#bOOYuV~#MVM5lD#sEqJIy5!8!wKax8kVo z4Gm&ts+H&|z=`^vR$M0Pisq=4Q=f53IE5h82}}cywQT1JmG>fTM__p=cFAow!BeHI zEs-3o6r5fzl}g0bn48LptEP6nNL1HSmtaAewShIM@H1+rGTGPP4N%@Hm5anB5L@fI zs~INI)rzdzkPf!)Bom6w@}G)j+b~_5odt9pT;z5KSoG$avq_O?4xy1gmSGkwijAU` zry|6O+@_M_+6C7r5h{Qj4QS;uF?A}ZZ|6zbH7t_~MPh%^Blnd?c%m7eXoV-%Q|;*J`rOWe6CHF|oaKC2lRNylJj?CG4n2yU*^ZsrN;G2^ zTCoeYRGW28ZpS7!XHK3z+90^G=Nxy^J3vDSxMMnBa) zeWoMynC;8I8X)Hv`^jBJ0S(1FAvARGk#clfIoehycaFc@e&J;M*o*C>FLh+`*k}ha zAWFxFI|#skkTeweF9SgCg72P=qUbo7gt+v>$I3`!G_^Gc0O~_VKy51NmXdBfSHFV- zLj)UuJPjZ*)CgVq+vNxH=b0}ufcmwGGcBBH;7mIlZ{WDYZm%!#8)q+{=f651N~z-4 z+=0{)@#`ZZ;8e=xO0ZFKIU4ZKH!97hQ?pkysf9$G@)kS<{P%**E?F96c?5@yzj*@g zDm$ZWc30Z$TC~|MNU`^{z&9|nCI|wu zpR88iu@8g2PtX&9$UY6=nRKCK>B~iO(f%2b>~Z42QxQQ}IBo~Y>)zK!#~XvSjm8>- zwT)hE{BYet;q~x6ek1r7<zObAQck{iZo_u{Ck=A%0kBj$LVuU1^|96J=T` z1ISKftY+U?y?4ABnQBF*)|C!^g*#A>*Yh93$^*LTZlxZ?9^@a4eUWKRU-tU;gDi)z zQmbqW;|*cF9aS4qwLZ1^i^dD*o6*->(bw1K+E`vs*Ah(}Z(+8+e(i_|9|jfsrx20< E1KecyTmS$7 diff --git a/src/__pycache__/main.cpython-311.pyc b/src/__pycache__/main.cpython-311.pyc deleted file mode 100644 index 4990898e3f08c80458e080cf8384733586156659..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10071 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 diff --git a/src/__pycache__/news_scraper.cpython-311.pyc b/src/__pycache__/news_scraper.cpython-311.pyc deleted file mode 100644 index f75f72c44fc1c0b6388c12b47d15f5f074cac25c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3380 zcmZ`*Z)_9E6`!@&_S#((A;VDuFfvQ`MMBc*V6WchSvtyv&7FJ1VO{dtfeX5dIOxsV1S)^L7XFZ_U zZ7?4{PXfJ(Oc-{XF<|z*kHGrZ&$NsdkPG2?9bx*qx{yorH(ocg>cM>dmA(2>74#a? zyNs%Q5LG;NzK`mUDqa>j6%L{W*6;N&RbR!2h5r4VLciLm`YZnWD;D;(;2;jU@3|V- z5gUF3E9{6B739{t!~PK*b>phRiePXzF5y@u_yxl8N&x6UMfd`J>92+=eBIx-zCWsj z@L(la+1d6XJnY^FBt~xg@UGi$+~tkWwM!GojP|v^jcBGCc16JMN*FA9Ll%qXKwqvB zcHe2eS3UX|gzm!RUXO7V(U@zegj)xPE+RZy4POsyLg%~2t)Xk)i)f8=$tBH^o>Eld z-CDq>V_&`&n;f7PP-;*4pCJj_FAO3%S^Ci#$<(D~VoK%;kyP0vhAAy6nylp%S(P-% z1kac$-sV2G z1y$CTi}EtD1BOn`?B$XjEWk8tC}m;`-6PsQQ!!OyBRh-<*r60mMb~V0E`^Fe&_x(bovIy(-aCB4z(psK`_W zSSCO?*gnTzJJ^dyJ7VgE>w3Pu?aG@YRCc%Rj3`j(@i>vfJ8OeIUhZhM(H0`?p+ zXzmExC+oy1q3J@&j(5gchtKYco&aHHnDIY&XRMht zv|`l_|-67>6Xo$sUVdF}L; zIPyf?^H|)|k`8X|JJ^~?xAyLDjqShl{;l`x#jkUXv184#W34?C?XZ9EU>h;w3+{`y z5s+_DFcSNY5tw$#2%P5o7e7GaNE`9sj#sJU>325At>`<@8^Xz^aMBV^ZiR<_XKWn( z>sI&x^rzy0HCSng)uvdr#On9m)($ewFnb{)U&sn&{x*9*_?OII zGcfG*27j)}pR@RLt?;nL4;w7W|3325sZ(+EFdmva#1^vIJmf|; zTNVvdhZKWyu?pcHRJ0{1?oe@_4TFXhN7)NEHDY^o!}fPxV3a*w=p-Xf_V~>btCf_! zEhziPOank{o;}p)+iV!X3T1_cZ422>vRT^?$p!B^Cl_gofxIjoS;A3twgbklp-c$A5@&Tw5ua_wXV=fP0&z$H-=3BbsrhQk26sbk2xCoQ%2;Wa$6^ diff --git a/src/__pycache__/reddit_scraper.cpython-311.pyc b/src/__pycache__/reddit_scraper.cpython-311.pyc deleted file mode 100644 index c01cb0b2890b8a309d089b3c981702123217f3de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3219 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 HJ*xi(HG5&! diff --git a/src/__pycache__/yfinance_client.cpython-311.pyc b/src/__pycache__/yfinance_client.cpython-311.pyc deleted file mode 100644 index 30dbc070fa08d80818417a5cb901d54cf22b0f6a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26236 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 Ikj3)<0Yza!SpWb4 diff --git a/src/__pycache__/youtube_scraper.cpython-311.pyc b/src/__pycache__/youtube_scraper.cpython-311.pyc deleted file mode 100644 index 80e9317913c8fc857dcac958658a010197cec1bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38860 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 List[str]: - """Retrieve relevant context from Qdrant based on user query.""" - # Convert the generator to a list to access the first element - query_embedding = list(self.embedding_model.embed([query]))[0] - - search_result = self.qdrant_client.search( - collection_name=self.collection_name, - query_vector=query_embedding.tolist(), - limit=top_k, - ) - - context = [hit.payload["page_content"] for hit in search_result] - return context - - def _run_agent(self, agent_name: str, prompt: str) -> str: - """Run a single LLM Agent and return its response.""" - self.console.print(f"\n[bold yellow]>> Calling {agent_name}...[/bold yellow]") - try: - response = self.ollama_client.chat( - model=self.llm_model, - messages=[{'role': 'user', 'content': prompt}] - ) - content = response['message']['content'] - self.console.print(f"[italic gray]{content}[/italic gray]") - return content - except Exception as e: - self.console.print(f"[bold red]Error calling Ollama ({agent_name}): {e}[/bold red]") - return f"Error: {agent_name} execution failed." - - def run(self, user_query: str) -> FinalReport: - self.console.print(f"\n[cyan]🔍 Retrieving relevant context for query: '{user_query}'[/cyan]") - context = self._retrieve_context(user_query) - context_str = "\n\n---\n\n".join(context) - - if not context: - self.console.print("[orange]Warning: No relevant context retrieved. Analysis will be based on general knowledge only.[/orange]") - - # Get financial professional context and role-based prompts - financial_context = get_financial_context(user_query) - analyst_role_prompt = get_role_based_prompt("analyst") - - analyst_prompt = f""" - {analyst_role_prompt} - - [Financial Professional Background Knowledge] - {financial_context} - - [Retrieved Relevant Data] - {context_str} - - [User Question] - {user_query} - - Please generate your professional analysis report draft, including: - 1. Core viewpoints and investment recommendations - 2. Key data and indicator analysis - 3. Risk factor assessment - 4. Time frame and expectations - """ - analyst_report = self._run_agent("Analyst", analyst_prompt) - - checker_prompt = f""" - As a fact-checker, please review the following report draft written by the analyst. - Your tasks are: - 1. Identify any contradictions or logical inconsistencies in the report. - 2. Point out which key arguments most need data support (even if current data is insufficient). - 3. Evaluate the objectivity of the report. - - [Analyst Report Draft] - {analyst_report} - - Please provide your fact-checking feedback: - """ - checker_feedback = self._run_agent("Fact Checker", checker_prompt) - - critic_prompt = f""" - As a professional adversarial critic (red team role), please read the following analysis report and its fact-checking feedback. - Your task is to present strong counter-arguments. Challenge the core assumptions of the report, point out potential risks, unconsidered factors, or alternative explanations. - Your goal is to ensure that all possible negative scenarios are considered in the final decision. - - [Analyst Report Draft] - {analyst_report} - - [Fact-Checking Feedback] - {checker_feedback} - - Please present your adversarial viewpoints and key risk warnings: - """ - critic_critique = self._run_agent("Adversarial Critic", critic_prompt) - - synthesis_prompt = f""" - As the final report writer, please synthesize all the following information to generate a structured final report. - The report must include: - 1. `summary`: Core answer summary to the user's question (2-3 sentences). - 2. `key_findings`: List of main findings. - 3. `counter_arguments`: Main counter-arguments or risks proposed by the adversarial critic. - 4. `confidence_score`: Your overall confidence score for this report's conclusions (0.0 to 1.0). - 5. `uncertainty_notes`: Explanation of the confidence score reasoning and what uncertainties exist in the report. - - [Original Question]: {user_query} - [Analyst Report]: {analyst_report} - [Fact-Checking Feedback]: {checker_feedback} - [Adversarial Viewpoints]: {critic_critique} - - Please output your final report strictly in the following JSON format, without adding any additional explanations or text: - {{ - "summary": "...", - "key_findings": ["...", "..."], - "counter_arguments": ["...", "..."], - "confidence_score": 0.0, - "uncertainty_notes": "..." - }} - """ - final_report_json_str = self._run_agent("Report Synthesizer", synthesis_prompt) - - try: - if "```json" in final_report_json_str: - final_report_json_str = final_report_json_str.split("```json\n")[1].split("```")[0] - - report_data = FinalReport.model_validate_json(final_report_json_str) - return report_data - except Exception as e: - self.console.print(f"[bold red]Failed to parse final report JSON: {e}[/bold red]") - return FinalReport( - summary="System encountered a parsing error while generating the final report.", - key_findings=[], - counter_arguments=[], - confidence_score=0.1, - uncertainty_notes=f"Unable to parse LLM output. Raw output: {final_report_json_str}" - ) - diff --git a/src/collect_data.py b/src/collect_data.py deleted file mode 100644 index 1d50a01..0000000 --- a/src/collect_data.py +++ /dev/null @@ -1,135 +0,0 @@ -#!/usr/bin/env python3 -""" -Data collection script - non-interactive mode -Used for data collection in Docker environment, avoiding interactive input issues -""" - -import os -from dotenv import load_dotenv -from rich.console import Console -from rich.panel import Panel - -try: - # When called via: python -m src.collect_data - from .agent_system import AgentWorkflow - from . import market_data_scraper - from . import fred_scraper - from . import news_scraper - from . import reddit_scraper - from . import youtube_scraper - from . import sec_scraper - from . import yahoo_finance_scraper -except ImportError: - # When called via: python src/collect_data.py - from agent_system import AgentWorkflow - import market_data_scraper - import fred_scraper - import news_scraper - import reddit_scraper - import youtube_scraper - import sec_scraper - import yahoo_finance_scraper - - -console = Console() -load_dotenv() - - -def collect_all_data(): - """Collect data from all data sources""" - console.print("[bold green]🚀 Starting data collection...[/bold green]") - - # Parameters - market_tickers = ["^GSPC", "^VIX", "AAPL", "NVDA", "TSLA"] - fred_series_ids = ["UNRATE", "CPIAUCSL", "FEDFUNDS", "GDP"] - news_keywords = ["stocks", "options", "earnings", "inflation", "interest rates"] - reddit_subreddits = ["wallstreetbets", "investing", "options"] - reddit_keywords = ["AAPL", "NVDA", "SPY", "QQQ", "options", "calls", "puts"] - - # YouTube - youtube_channel_ids_env = os.getenv("YOUTUBE_CHANNEL_IDS", "").strip() - youtube_channel_ids = [cid.strip() for cid in youtube_channel_ids_env.split(",") if cid.strip()] - youtube_videos_per_channel = int(os.getenv("YOUTUBE_VIDEOS_PER_CHANNEL", "3")) - - # Data sources - data_sources = { - "Market Indices": lambda: market_data_scraper.scrape_market_data(market_tickers), - "FRED Macro Data": lambda: fred_scraper.scrape_fred_data(fred_series_ids), - "Financial News": lambda: news_scraper.scrape_news_data(news_keywords, limit=20), - "Reddit Discussions": lambda: reddit_scraper.scrape_reddit_data(reddit_subreddits, reddit_keywords, limit_per_subreddit=10), - "YouTube Channels": lambda: youtube_scraper.scrape_youtube_data(youtube_channel_ids, videos_per_channel=youtube_videos_per_channel), - "Yahoo Finance Videos": lambda: yahoo_finance_scraper.scrape_yahoo_finance_transcripts(videos_per_channel=20, verbose=True), - "SEC Filings": sec_scraper.get_sec_filings, - } - - all_documents = [] - total_collected = 0 - - for name, func in data_sources.items(): - try: - console.print(f"\n[cyan]📊 Processing: {name}...[/cyan]") - documents = func() - if documents: - console.print(f"[green]✅ Retrieved {len(documents)} records[/green]") - all_documents.extend(documents) - total_collected += len(documents) - else: - console.print(f"[yellow]⚠️ No data retrieved from {name} or skipped[/yellow]") - except Exception as e: - console.print(f"[red]❌ Error processing {name}: {e}[/red]") - - console.print(f"\n[bold green]📈 Collection complete. Total {total_collected} records[/bold green]") - - # Store to Qdrant - if all_documents: - console.print("[cyan]💾 Storing data to Qdrant...[/cyan]") - try: - qdrant_host = os.getenv("QDRANT_HOST", "qdrant_vdb") - ollama_host = os.getenv("OLLAMA_HOST", "ollama_llm") - - agent_workflow = AgentWorkflow( - collection_name="financial_signals", - qdrant_host=qdrant_host, - ollama_host=ollama_host - ) - - agent_workflow.embed_and_store(all_documents) - console.print("[green]✅ Stored to Qdrant successfully[/green]") - - # Verify - response, _ = agent_workflow.qdrant_client.scroll( - collection_name="financial_signals", - limit=5, - with_payload=True - ) - console.print(f"[blue]📊 Verification: {len(response)} sample records present[/blue]") - - except Exception as e: - console.print(f"[red]❌ Error storing data: {e}[/red]") - return False - else: - console.print("[yellow]⚠️ No data collected from any source[/yellow]") - return False - - return True - - -def main(): - """Main entry point""" - console.print(Panel("[bold blue]🔍 Financial Data Collection[/bold blue]")) - - success = collect_all_data() - - if success: - console.print(Panel("[bold green]✅ Data collection finished![/bold green]")) - return 0 - else: - console.print(Panel("[bold red]❌ Data collection failed![/bold red]")) - return 1 - - -if __name__ == "__main__": - import sys - sys.exit(main()) - - diff --git a/src/data_models.py b/src/data_models.py deleted file mode 100644 index c427bc2..0000000 --- a/src/data_models.py +++ /dev/null @@ -1,38 +0,0 @@ -# data_models.py -from pydantic import BaseModel, Field -from typing import List - -class FinalReport(BaseModel): - summary: str = Field(..., description="Core answer summary to the user's question") - key_findings: List[str] = Field(..., description="List of main findings") - counter_arguments: List[str] = Field(..., description="Main counter-arguments or risks") - confidence_score: float = Field(..., ge=0.0, le=1.0, description="Overall confidence score for conclusions") - uncertainty_notes: str = Field(..., description="Explanation of confidence score reasoning and uncertainties in the report") - - def to_markdown(self) -> str: - """Convert report to Markdown format""" - findings_md = "\n".join(f"- {item}" for item in self.key_findings) - counters_md = "\n".join(f"- {item}" for item in self.counter_arguments) - - return f""" -# Financial Analysis Report - -## Core Summary -{self.summary} - ---- - -### Key Findings -{findings_md} - ---- - -### Main Risks & Counter-Arguments -{counters_md} - ---- - -### Conclusion Confidence -- **Confidence Score**: **{self.confidence_score * 100:.1f}%** -- **Uncertainty Notes**: {self.uncertainty_notes} -""" diff --git a/src/financial_config.py b/src/financial_config.py deleted file mode 100644 index 30c6926..0000000 --- a/src/financial_config.py +++ /dev/null @@ -1,137 +0,0 @@ -# financial_config.py -""" -Financial Domain Specialization Configuration -Contains financial terminology, analysis frameworks, professional prompts, etc. -""" - -# Financial professional terminology and concepts -FINANCIAL_TERMS = { - "valuation": ["DCF", "PE ratio", "PB ratio", "EV/EBITDA", "NPV", "IRR", "WACC"], - "risk_management": ["VaR", "beta", "volatility", "correlation", "diversification", "hedging"], - "market_analysis": ["technical analysis", "fundamental analysis", "market sentiment", "liquidity"], - "derivatives": ["options", "futures", "swaps", "forwards", "greeks", "implied volatility"], - "fixed_income": ["yield curve", "duration", "convexity", "credit spread", "default risk"], - "macro_economics": ["inflation", "interest rates", "GDP", "unemployment", "fiscal policy", "monetary policy"] -} - -# Financial analysis frameworks -ANALYSIS_FRAMEWORKS = { - "investment_analysis": """ - Investment Analysis Framework: - 1. Fundamental Analysis - - Financial Statement Analysis - - Industry Analysis - - Competitive Analysis - - Management Assessment - - 2. Technical Analysis - - Price Trends - - Support/Resistance Levels - - Technical Indicators - - Volume Analysis - - 3. Risk Assessment - - Market Risk - - Credit Risk - - Liquidity Risk - - Operational Risk - """, - - "options_analysis": """ - Options Analysis Framework: - 1. Basic Analysis - - Intrinsic Value - - Time Value - - Implied Volatility - - 2. Greeks - - Delta: Price sensitivity - - Gamma: Delta change rate - - Theta: Time decay - - Vega: Volatility sensitivity - - Rho: Interest rate sensitivity - - 3. Strategy Evaluation - - Risk/Reward Ratio - - Win Rate - - Maximum Drawdown - """ -} - -# Professional prompt templates -FINANCIAL_PROMPTS = { - "analyst_role": """ - You are a senior financial analyst with the following professional background: - - CFA (Chartered Financial Analyst) certification - - 15 years of investment banking and asset management experience - - Expertise in stocks, bonds, derivatives, foreign exchange and other financial instruments - - Familiar with major global financial markets and regulatory environments - - Please analyze financial issues with a professional, objective, and rigorous attitude, providing insights based on data and logic. - """, - - "risk_manager_role": """ - You are an experienced risk management expert with: - - FRM (Financial Risk Manager) certification - - 10 years of institutional risk management experience - - Expertise in VaR models, stress testing, scenario analysis - - Familiar with Basel Accords and regulatory requirements - - Please evaluate investment opportunities from a risk management perspective, identify potential risks and provide mitigation measures. - """, - - "quantitative_analyst_role": """ - You are a quantitative analyst with expertise in: - - Financial mathematics and statistics background - - Proficiency in Python, R, MATLAB and other programming tools - - Familiar with machine learning applications in finance - - Experience in high-frequency trading and algorithmic trading - - Please provide quantitative insights based on mathematical models and statistical analysis. - """ -} - -# Financial calculation tool prompts -CALCULATION_TOOLS = { - "present_value": "Present value calculation: PV = FV / (1 + r)^n", - "future_value": "Future value calculation: FV = PV * (1 + r)^n", - "annuity": "Annuity present value: PVA = PMT * [1 - (1 + r)^-n] / r", - "bond_yield": "Bond yield calculation: YTM = (C + (FV - PV)/n) / ((FV + PV)/2)", - "black_scholes": "Black-Scholes options pricing model", - "var_calculation": "VaR calculation: VaR = μ - σ * Z(α)" -} - -# Regulatory and compliance knowledge -REGULATORY_KNOWLEDGE = { - "sec_regulations": "SEC regulatory requirements, disclosure requirements, insider trading rules", - "basel_iii": "Basel III capital adequacy requirements", - "dodd_frank": "Dodd-Frank Act financial reform", - "mifid_ii": "EU Markets in Financial Instruments Directive II", - "gaap_ifsrs": "US GAAP and IFRS accounting standard differences" -} - -def get_financial_context(query: str) -> str: - """Return relevant financial professional context based on query content""" - context_parts = [] - - # Add basic analysis frameworks - if any(word in query.lower() for word in ["investment", "stock", "analysis"]): - context_parts.append(ANALYSIS_FRAMEWORKS["investment_analysis"]) - - if any(word in query.lower() for word in ["option", "derivative", "options"]): - context_parts.append(ANALYSIS_FRAMEWORKS["options_analysis"]) - - # Add relevant terminology - relevant_terms = [] - for category, terms in FINANCIAL_TERMS.items(): - if any(term in query.lower() for term in terms): - relevant_terms.extend(terms) - - if relevant_terms: - context_parts.append(f"Relevant financial terminology: {', '.join(relevant_terms)}") - - return "\n\n".join(context_parts) - -def get_role_based_prompt(role: str = "analyst") -> str: - """Get role-based professional prompt""" - return FINANCIAL_PROMPTS.get(role, FINANCIAL_PROMPTS["analyst_role"]) diff --git a/src/fred_scraper.py b/src/fred_scraper.py deleted file mode 100644 index b76bca6..0000000 --- a/src/fred_scraper.py +++ /dev/null @@ -1,58 +0,0 @@ -# fred_scraper.py -import os -from dotenv import load_dotenv -from fredapi import Fred -from typing import List, Dict, Any - -load_dotenv(dotenv_path=os.path.join(os.path.dirname(__file__), '..', '.env')) - -FRED_API_KEY = os.getenv("FRED_API_KEY") - -def scrape_fred_data(series_ids: List[str]) -> List[Dict[str, Any]]: - """ - Get macroeconomic data from FRED. - :param series_ids: List of FRED data series IDs (e.g., 'UNRATE'). - :return: List of documents. - """ - if not FRED_API_KEY: - print("Warning: FRED_API_KEY not found, skipping macroeconomic data scraping.") - return [] - - print("Scraping macroeconomic data from FRED...") - fred = Fred(api_key=FRED_API_KEY) - documents = [] - - for series_id in series_ids: - try: - # Get latest data point - data = fred.get_series_latest_release(series_id) - info = fred.get_series_info(series_id) - - latest_value = data.iloc[-1] - date = data.index[-1].strftime('%Y-%m-%d') - title = info.get('title', series_id) - units = info.get('units_short', '') - - content = ( - f"Macroeconomic indicator '{title}' ({series_id}): " - f"Latest data shows that on {date}, the value was {latest_value} {units}." - ) - - documents.append({ - "page_content": content, - "metadata": { - "source": "FRED", - "series_id": series_id, - "title": title, - "text": content - } - }) - except Exception as e: - print(f"Unable to get FRED data series {series_id}: {e}") - - print(f"FRED data scraping completed, obtained {len(documents)} records.") - return documents - -if __name__ == '__main__': - fred_docs = scrape_fred_data(['UNRATE', 'FEDFUNDS']) - print(fred_docs) diff --git a/src/main.py b/src/main.py deleted file mode 100644 index 52ec6ec..0000000 --- a/src/main.py +++ /dev/null @@ -1,167 +0,0 @@ -# main.py -import os -import argparse -from dotenv import load_dotenv -from rich.console import Console -from rich.panel import Panel - -try: - # When running as a package: python -m src.main - from .agent_system import AgentWorkflow - from .data_models import FinalReport - from . import market_data_scraper - from . import fred_scraper - from . import news_scraper - from . import yahoo_finance_scraper - from . import reddit_scraper - from . import youtube_scraper - from . import sec_scraper -except ImportError: - # When running as a script: python src/main.py - from agent_system import AgentWorkflow - from data_models import FinalReport - import market_data_scraper - import fred_scraper - import news_scraper - import yahoo_finance_scraper - import reddit_scraper - import youtube_scraper - import sec_scraper - -console = Console() -load_dotenv() - -def display_report(report: FinalReport): - """Display final report using Rich library with beautiful formatting""" - console.print(Panel( - f"[bold]Summary:[/bold]\n{report.summary}\n\n" - f"[bold]Key Findings:[/bold]\n" + "".join([f"- {item}\n" for item in report.key_findings]) + "\n" - f"[bold]Counter-Arguments & Risks:[/bold]\n" + "".join([f"- {item}\n" for item in report.counter_arguments]) + "\n" - f"[bold]Confidence Score:[/bold] {report.confidence_score * 100:.1f}%\n" - f"[bold]Uncertainty Notes:[/bold]\n{report.uncertainty_notes}", - title="[bold blue]Comprehensive Financial Analysis Report[/bold blue]", - expand=True - )) - -def run_data_pipeline(agent_workflow: AgentWorkflow): - console.print(Panel("[bold green]🚀 Starting data collection pipeline...[/bold green]")) - - # Default parameter configuration (can be adjusted or read from environment variables/config files as needed) - market_tickers = ["^GSPC", "^VIX"] - fred_series_ids = ["UNRATE", "CPIAUCSL", "FEDFUNDS"] - news_keywords = ["stocks", "inflation", "interest rates", "earnings"] - reddit_subreddits = ["wallstreetbets", "investing"] - reddit_keywords = ["AAPL", "NVDA", "SPY", "rate", "inflation"] - - # YouTube scraper will automatically load channel IDs from Youtube_channel_ID file - # No need to manually read channel IDs here - youtube_channel_ids = None # Let youtube_scraper handle channel ID loading - try: - youtube_videos_per_channel = int(os.getenv("YOUTUBE_VIDEOS_PER_CHANNEL", "5")) - except ValueError: - youtube_videos_per_channel = 5 - - data_sources = { - "Market Indices (S&P 500, VIX)": lambda: market_data_scraper.scrape_market_data(market_tickers), - "FRED Macroeconomic Data": lambda: fred_scraper.scrape_fred_data(fred_series_ids), - "Global Financial News": lambda: news_scraper.scrape_news_data(news_keywords, limit=50), - "Reddit (r/wallstreetbets, r/investing)": lambda: reddit_scraper.scrape_reddit_data(reddit_subreddits, reddit_keywords, limit_per_subreddit=50), - "YouTube Financial Channels": lambda: youtube_scraper.scrape_youtube_data(youtube_channel_ids, videos_per_channel=youtube_videos_per_channel, min_transcripts=0), - "Yahoo Finance Videos": lambda: yahoo_finance_scraper.scrape_yahoo_finance_transcripts(videos_per_channel=20), - "SEC Insider Trading Filings": sec_scraper.get_sec_filings, - } - - all_documents = [] - for name, func in data_sources.items(): - try: - console.print(f"\n[cyan]>> Processing: {name}...[/cyan]") - documents = func() - if documents: - console.print(f"[green]✔ Successfully retrieved {len(documents)} records.[/green]") - all_documents.extend(documents) - else: - console.print(f"[orange]⚠ No data retrieved from {name} or skipped.[/orange]") - except Exception as e: - console.print(f"[bold red]❌ Unexpected error processing {name}: {e}[/bold red]") - - if all_documents: - agent_workflow.embed_and_store(all_documents) - else: - console.print("[bold orange]⚠ Warning: No data collected from any source, knowledge base is empty.[/bold orange]") - - console.print(Panel("[bold green]✅ All data sources processed.[/bold green]")) - -def main(): - """Main function""" - parser = argparse.ArgumentParser(description="Financial Analysis Agent System") - parser.add_argument( - "--test", - action="store_true", - help="Start test mode, skip data collection, use small amount of mock data for quick system validation." - ) - parser.add_argument( - "--no-interactive", - action="store_true", - help="Run in non-interactive mode, only collect data and exit." - ) - args = parser.parse_args() - - collection_name = "financial_signals" - - # Read hostnames from environment variables - qdrant_host = os.getenv("QDRANT_HOST") - ollama_host = os.getenv("OLLAMA_HOST") - - if not qdrant_host or not ollama_host: - console.print("[bold red]Error: QDRANT_HOST and OLLAMA_HOST environment variables must be set.[/bold red]") - console.print("Please check your docker-compose.yml file.") - return - - agent_workflow = AgentWorkflow( - collection_name=collection_name, - qdrant_host=qdrant_host, - ollama_host=ollama_host - ) - - if args.test: - console.print(Panel("[bold yellow]🚀 Test mode activated (Test Mode)[/bold yellow]")) - dummy_documents = [ - {"page_content": "Apple (AAPL) announces stock buyback program.", "metadata": {"source": "Mock Data-Apple"}}, - {"page_content": "Federal Reserve Chairman hints at potential rate cuts.", "metadata": {"source": "Mock Data-Fed"}} - ] - agent_workflow.embed_and_store(dummy_documents) - else: - run_data_pipeline(agent_workflow) - - # Skip interactive mode if --no-interactive flag is set - if args.no_interactive: - console.print(Panel("[bold green]✅ Data collection completed. Exiting in non-interactive mode.[/bold green]")) - return - - console.print("\n[bold cyan]💡 You can now start asking questions.[/bold cyan]") - while True: - try: - user_query = console.input("[bold]Please enter your question (type 'quit' to exit): [/bold]") - if user_query.lower() == 'quit': - break - if not user_query: - continue - final_report = agent_workflow.run(user_query) - display_report(final_report) - except KeyboardInterrupt: - console.print("\n[bold orange]Received keyboard interrupt. Exiting...[/bold orange]") - break - except EOFError: - console.print("\n[bold orange]Input stream closed. Exiting...[/bold orange]") - break - except Exception as e: - console.print(f"[bold red]Unknown error occurred: {e}[/bold red]") - # Add a small delay to prevent rapid error loops - import time - time.sleep(1) - - console.print("\n[bold orange]Program exited.[/bold orange]") - -if __name__ == "__main__": - main() - diff --git a/src/market_data_scraper.py b/src/market_data_scraper.py deleted file mode 100644 index 4475089..0000000 --- a/src/market_data_scraper.py +++ /dev/null @@ -1,48 +0,0 @@ -# market_data_scraper.py -import yfinance as yf -from typing import List, Dict, Any - -def scrape_market_data(tickers: List[str]) -> List[Dict[str, Any]]: - """ - Use yfinance to get the latest market index information. - :param tickers: List of stock/index codes (e.g., '^GSPC', '^VIX'). - :return: List of documents. - """ - print("Scraping latest market index data...") - documents = [] - for ticker_code in tickers: - try: - ticker = yf.Ticker(ticker_code) - hist = ticker.history(period="5d") # Get last 5 days of data - info = ticker.info - - name = info.get('shortName', ticker_code) - last_close = hist['Close'].iloc[-1] - prev_close = hist['Close'].iloc[-2] - change = last_close - prev_close - change_pct = (change / prev_close) * 100 - - content = ( - f"Market index {name} ({ticker_code}) latest update: " - f"Latest closing price is {last_close:.2f}. " - f"Compared to previous day, changed by {change:.2f} ({change_pct:.2f}%)." - ) - - documents.append({ - "page_content": content, - "metadata": { - "source": "Yahoo Finance", - "ticker": ticker_code, - "name": name, - "text": content - } - }) - except Exception as e: - print(f"Unable to get data for {ticker_code}: {e}") - - print(f"Market data scraping completed, obtained {len(documents)} records.") - return documents - -if __name__ == '__main__': - market_docs = scrape_market_data(['^GSPC', '^IXIC', '^VIX']) - print(market_docs) diff --git a/src/news_scraper.py b/src/news_scraper.py deleted file mode 100644 index e50f8aa..0000000 --- a/src/news_scraper.py +++ /dev/null @@ -1,68 +0,0 @@ -# news_scraper.py -import os -from dotenv import load_dotenv -from newsapi import NewsApiClient -from typing import List, Dict, Any - -load_dotenv(dotenv_path=os.path.join(os.path.dirname(__file__), '..', '.env')) - -NEWS_API_KEY = os.getenv("NEWS_API_KEY") - -def scrape_news_data(keywords: List[str], limit: int = 50) -> List[Dict[str, Any]]: - """ - Use NewsAPI to get the latest financial news. - :param keywords: List of keywords to search for. - :param limit: Maximum number of articles to retrieve. - :return: List of documents. - """ - if not NEWS_API_KEY: - print("Warning: NEWS_API_KEY not found, skipping news data scraping.") - return [] - - print("Scraping latest financial news...") - newsapi = NewsApiClient(api_key=NEWS_API_KEY) - query = " OR ".join(keywords) - - documents = [] - try: - top_headlines = newsapi.get_everything( - q=query, - language='en', - sort_by='publishedAt', - page_size=limit - ) - - for article in top_headlines['articles']: - title = article.get('title', '') - description = article.get('description', '') - source_name = article.get('source', {}).get('name', 'N/A') - - if not description: # Skip if description is empty - continue - - content = f"News source: {source_name}\nTitle: {title}\nSummary: {description}" - - documents.append({ - "page_content": content, - "metadata": { - "source": "NewsAPI", - "source_name": source_name, - "title": title, - "url": article.get('url', '#'), - "text": content - } - }) - - except Exception as e: - print(f"Error getting news from NewsAPI: {e}") - # NewsAPI developer accounts in local environment can only search by keywords, not by source or domain - if "source" in str(e).lower(): - print("Hint: NewsAPI developer accounts do not support filtering by source, please check your query parameters.") - - print(f"News data scraping completed, obtained {len(documents)} articles.") - return documents - -if __name__ == '__main__': - news_docs = scrape_news_data(['stock market', 'inflation'], 20) - if news_docs: - print(news_docs[0]) diff --git a/src/reddit_scraper.py b/src/reddit_scraper.py deleted file mode 100644 index 52510d9..0000000 --- a/src/reddit_scraper.py +++ /dev/null @@ -1,49 +0,0 @@ -# reddit_scraper.py -import os -import praw -from dotenv import load_dotenv -from typing import List, Dict, Any - -load_dotenv(dotenv_path=os.path.join(os.path.dirname(__file__), '..', '.env')) - -def get_reddit_instance() -> praw.Reddit: - client_id = os.getenv("REDDIT_CLIENT_ID") - client_secret = os.getenv("REDDIT_CLIENT_SECRET") - user_agent = os.getenv("REDDIT_USER_AGENT") - - if not all([client_id, client_secret, user_agent]): - raise ValueError("Please set Reddit API credentials in .env file") - - return praw.Reddit(client_id=client_id, client_secret=client_secret, user_agent=user_agent) - -def scrape_reddit_data(subreddits: List[str], keywords: List[str], limit_per_subreddit: int = 50) -> List[Dict[str, Any]]: - print(f"Scraping data from Reddit subreddits {subreddits}...") - reddit = get_reddit_instance() - documents = [] - query = " OR ".join(keywords) - - for sub_name in subreddits: - try: - subreddit = reddit.subreddit(sub_name) - submissions = subreddit.search(query, sort='hot', limit=limit_per_subreddit) - - count = 0 - for submission in submissions: - if submission.score < 5 or submission.is_self is False or not submission.selftext: - continue - - post_content = f"Post title: {submission.title}\nPost content: {submission.selftext}" - documents.append({ - "page_content": post_content, - "metadata": { - "source": "Reddit", "subreddit": sub_name, "title": submission.title, - "url": submission.url, "score": submission.score, "text": post_content - } - }) - count += 1 - print(f"Found and processed {count} posts in r/{sub_name}.") - except Exception as e: - print(f"Unable to access or process subreddit r/{sub_name}: {e}") - - print(f"Reddit data scraping completed, obtained {len(documents)} documents.") - return documents diff --git a/src/sec_scraper.py b/src/sec_scraper.py deleted file mode 100644 index b5cd133..0000000 --- a/src/sec_scraper.py +++ /dev/null @@ -1,81 +0,0 @@ -# src/sec_scraper.py -import os -from rich.console import Console -from datetime import datetime, timedelta - -from sec_api import QueryApi - - -console = Console() - -def get_sec_filings(): - api_key = os.getenv("SEC_API_KEY") - if not api_key: - console.print("[bold orange]⚠ SEC_API_KEY not set, skipping SEC insider trading filings scraping.[/bold orange]") - return [] - - try: - # Initialize generic QueryApi - queryApi = QueryApi(api_key=api_key) - - # Get date range for past 30 days - end_date = datetime.now() - start_date = end_date - timedelta(days=30) - - start_date_str = start_date.strftime('%Y-%m-%d') - end_date_str = end_date.strftime('%Y-%m-%d') - - # Build query - # We specify formType as "4" here - query = { - "query": { "query_string": { - "query": f"formType:\"4\" AND filedAt:[{start_date_str} TO {end_date_str}]" - }}, - "from": "0", - "size": "50", # Get latest 50 filings - "sort": [{ "filedAt": { "order": "desc" } }] - } - - # Execute query - response = queryApi.get_filings(query) - filings = response.get('filings', []) - - if not filings: - console.print("[yellow]No new SEC Form 4 filings found in the past 30 days.[/yellow]") - return [] - - documents = [] - for filing in filings: - # Extract key information - company_name = filing.get('companyName', 'N/A') - form_type = filing.get('formType', 'N/A') - filed_at = filing.get('filedAt', 'N/A') - link = filing.get('linkToFilingDetails', '#') - - # Create a concise text summary as page_content - # RAG systems prefer processing text over metadata - content = ( - f"Company {company_name} filed a {form_type} document. " - f"Filing date was {filed_at}. " - f"This document reports insider trading activities of company personnel." - ) - - documents.append({ - "page_content": content, - "metadata": { - "source": "SEC", - "type": "Form 4 Filing", - "company": company_name, - "filed_at": filed_at, - "link": link - } - }) - - return documents - - except Exception as e: - console.print(f"[bold red]❌ Error getting SEC filings: {e}[/bold red]") - return [] - - - diff --git a/src/tools/Youtube_channel_ID b/src/tools/Youtube_channel_ID deleted file mode 100644 index 553c9dc..0000000 --- a/src/tools/Youtube_channel_ID +++ /dev/null @@ -1,29 +0,0 @@ -UCK7tptUDHh-RYDsdxO1-5QQ -UCGy7SkBjcIAgTiwkXEtPnYg -UCUvvj5lwue7PspotMDjk5UA -UCrp_UI8XtuYfpiqluWLD7Lw -UCT3EznhW_CNFcfOlyDNTLLw -UCEAZeUIeJs0IjQiqTCdVSIg -UCAuUUnT6oDeKwE6v1NGQxug -UCIALMKvObZNtJ6AmdCLP7Lg - -UCww1mTZCTS59eZvNQUhKhnQ -UCMtJiBquboLh6IXcs_7UawQ -UCnMn36GT_H0X-w5_ckLtlgQ -UC45hHuqWfdi7TIZg0RDG9_g -UC9GEuLRT_XPlXFO4-80jkHg -UCvJsQtYbqH0Sb1mXScH_qZw -UCRK5xmIi8kuLUduTE3Ti7lw -UCNwWsGSqbnCknnX0li7OKkg -UCoarbEmnfdpb14zuQwh7Eng -UC3RUu7V65AG9J1dx2byq4wA -UCq7gWVoeUqWZhPjiel9bAdg -UCtrksIakhr0jl7Up09sJWtg -UCH9HlTrjyLmLRS0iE1P4rrg -UCFheWV_HcwBU2SK7dd-0BzQ -UCCL_rIpjGTroHkkIcPyvmIQ -UC3lBsNJ5apmRV3klz8qL6EQ -UC12lnsYNt8_VthTNOuOGTmQ -UCXVMMgEidXlrTM1coedg70A -UCtBjlVRuHjIQPws7tRe1IXg -UCPQFIx80N8_a3MC6Gx9If2g diff --git a/src/tools/__pycache__/compact_model_config.cpython-311.pyc b/src/tools/__pycache__/compact_model_config.cpython-311.pyc deleted file mode 100644 index b020ad67b55b8a6f0f05d039f97b8a3893fcb401..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4797 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 diff --git a/src/tools/__pycache__/futures_expert_config.cpython-311.pyc b/src/tools/__pycache__/futures_expert_config.cpython-311.pyc deleted file mode 100644 index e53f1a9c3e7c9aa7b05b77f3b30ddc8c99544cc5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6406 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 BfcgLc diff --git a/src/tools/__pycache__/futures_key_extractor.cpython-311.pyc b/src/tools/__pycache__/futures_key_extractor.cpython-311.pyc deleted file mode 100644 index 1b3c48dcd8ecbdc2f5fd699cd6344b521e12d857..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8183 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 diff --git a/src/tools/__pycache__/generate_options_report.cpython-311.pyc b/src/tools/__pycache__/generate_options_report.cpython-311.pyc deleted file mode 100644 index 0b9c127aa1c8667a74b72d0ed770c3999cd50856..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17477 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 kC25LrE+*E@4T`xT#jp!Qe{}S@~ diff --git a/src/tools/__pycache__/generate_smart_report.cpython-311.pyc b/src/tools/__pycache__/generate_smart_report.cpython-311.pyc deleted file mode 100644 index 3ff5fead2000095d0368ea40995c12bad7bebaa7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13426 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 diff --git a/src/tools/__pycache__/training_data_generator.cpython-311.pyc b/src/tools/__pycache__/training_data_generator.cpython-311.pyc deleted file mode 100644 index 05571772ad46ab3b00409724fd829b2722d84c2a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16191 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 List[models.Record]: - """Fetch options-related signals from Qdrant""" - try: - response, _ = self.qdrant.scroll( - collection_name="financial_signals", - limit=100, - with_payload=True, - with_vectors=False - ) - - - options_signals = [] - for signal in response: - content = signal.payload.get('page_content', '').upper() - if any(keyword in content for keyword in OPTIONS_KEYWORDS.keys()): - options_signals.append(signal) - - logger.info(f"Fetched {len(options_signals)} options-related signals from {len(response)} total signals") - return options_signals - except Exception as e: - logger.error(f"Error fetching options signals: {e}") - return [] - - def calculate_profit_score(self, signal: models.Record) -> float: - """计算期权盈利概率得分""" - content = signal.payload.get('page_content', '').upper() - source = signal.payload.get('source', '').lower() - - score = 0.0 - - # 1) Data source profit weight (40%) - source_weight = DATA_SOURCE_PROFIT_WEIGHTS.get(source, 0.2) - score += source_weight * 0.4 - - # 2) Options keyword density (30%) - keyword_score = 0.0 - for keyword, weight in OPTIONS_KEYWORDS.items(): - if keyword in content: - keyword_score += weight - - normalized_keyword_score = min(keyword_score / sum(OPTIONS_KEYWORDS.values()), 1.0) - score += normalized_keyword_score * 0.3 - - # 3) Options code pattern detection (20%) - option_patterns = [ - r'\b[A-Z]{2,5}\s+\d+[CP]\b', # AAPL 150C, SPY 450P - r'\$\d+\.?\d*\s+[CP]\b', # $150 C, $450 P - r'STRIKE\s+\$?\d+', # STRIKE $150 - r'EXPIR[EY]\s+\d{1,2}/\d{1,2}', # EXPIRY 12/15 - ] - - pattern_score = 0.0 - for pattern in option_patterns: - if re.search(pattern, content): - pattern_score += 0.25 - - score += pattern_score * 0.2 - - # 4) Explicit options terminology presence (10%) - option_code_score = 0.0 - if any(pattern in content for pattern in ['CALL', 'PUT', 'OPTION', 'STRIKE', 'EXPIR']): - option_code_score = 1.0 - - score += option_code_score * 0.1 - - return min(score, 1.0) - - def select_best_options_signals(self, signals: List[models.Record], target_count: int = 8) -> List[models.Record]: - """Select best options signals by computed profit score""" - # 计算每个信号的盈利得分 - scored_signals = [] - for signal in signals: - profit_score = self.calculate_profit_score(signal) - scored_signals.append((profit_score, signal)) - - # 按盈利得分排序 - scored_signals.sort(key=lambda x: x[0], reverse=True) - - # 选择前N个信号 - selected = [signal for _, signal in scored_signals[:target_count]] - - logger.info(f"Selected {len(selected)} best options signals from {len(signals)} total") - return selected - -class OptionsKnowledgeManager: - """Options knowledge management backed by Qdrant vector DB""" - - def __init__(self, qdrant_client): - self.qdrant = qdrant_client - - def get_options_context(self, underlying: str) -> List[Dict[str, Any]]: - """Get options-related context for a specific underlying""" - try: - response, _ = self.qdrant.scroll( - collection_name="financial_signals", - limit=50, - with_payload=True, - with_vectors=False - ) - - # Filter signals that mention the underlying and options terms - relevant_signals = [] - for signal in response: - content = signal.payload.get("page_content", "").upper() - if (underlying.upper() in content and - any(keyword in content for keyword in OPTIONS_KEYWORDS.keys())): - relevant_signals.append(signal.payload) - - return relevant_signals - except Exception as e: - logger.error(f"Options context error: {e}") - return [] - -class OptionsDecisionArchitecture: - """Options decision architecture - ReAct-based multi-agent system""" - - def __init__(self): - self.analyst = OptionsAnalyst() - self.checker = OptionsFactChecker() - self.critic = OptionsAdversarialCritic() - self.synthesizer = OptionsSynthesizer() - self.uncertainty_quantifier = UncertaintyQuantifier() - self.schema_validator = SchemaValidator() - - def process_options_signal(self, signal_data: Dict[str, Any]) -> Dict[str, Any]: - """Process an options signal using the ReAct protocol""" - # ReAct loop: Reason -> Act -> Observe - max_iterations = 3 - current_state = { - "signal_data": signal_data, - "analysis": None, - "validation": None, - "counter_arguments": [], - "uncertainty_metrics": {}, - "iteration": 0 - } - - for iteration in range(max_iterations): - current_state["iteration"] = iteration - - # 1) REASON: Analyst synthesizes signal - if current_state["analysis"] is None: - current_state["analysis"] = self.analyst.analyze_options_signal(signal_data) - logger.info(f"ReAct Iteration {iteration}: Analyst synthesized signal") - - # 2) ACT: Fact checker validates analysis - if current_state["validation"] is None: - current_state["validation"] = self.checker.validate_options_analysis(current_state["analysis"]) - logger.info(f"ReAct Iteration {iteration}: Checker validated analysis") - - # 3) OBSERVE: Adversarial critic generates counter-arguments - if not current_state["counter_arguments"]: - current_state["counter_arguments"] = self.critic.generate_options_counter_arguments(current_state["analysis"]) - logger.info(f"ReAct Iteration {iteration}: Critic generated {len(current_state['counter_arguments'])} counter-arguments") - - # 4) Uncertainty quantification - current_state["uncertainty_metrics"] = self.uncertainty_quantifier.quantify_uncertainty( - current_state["analysis"], - current_state["validation"], - current_state["counter_arguments"] - ) - - # 5) Determine whether to continue iterating - if self._should_continue_iteration(current_state): - logger.info(f"ReAct Iteration {iteration}: Continuing iteration due to high uncertainty") - continue - else: - logger.info(f"ReAct Iteration {iteration}: Sufficient confidence reached, proceeding to synthesis") - break - - # 6) Final synthesis - final_decision = self.synthesizer.synthesize_options_decision( - current_state["analysis"], - current_state["validation"], - current_state["counter_arguments"], - current_state["uncertainty_metrics"] - ) - - # 7) Schema validation - validated_decision = self.schema_validator.validate_options_decision(final_decision) - - return validated_decision - - def _should_continue_iteration(self, state: Dict[str, Any]) -> bool: - """Decide whether to continue ReAct iterations""" - uncertainty = state["uncertainty_metrics"].get("overall_uncertainty", 0.5) - validation_score = state["validation"].get("validation_score", 0.5) - iteration = state["iteration"] - - # Stop when reaching max iterations (0,1,2) - if iteration >= 2: - return False - - # Continue if uncertainty is high or validation score is low - should_continue = uncertainty > 0.6 or validation_score < 0.7 - - if should_continue: - logger.info(f"ReAct: Continuing iteration due to uncertainty={uncertainty:.2f}, validation={validation_score:.2f}") - else: - logger.info(f"ReAct: Stopping iteration - uncertainty={uncertainty:.2f}, validation={validation_score:.2f}") - - return should_continue - -class UncertaintyQuantifier: - """Uncertainty quantifier implementation""" - - def quantify_uncertainty(self, analysis: Dict[str, Any], validation: Dict[str, Any], counter_arguments: List[str]) -> Dict[str, Any]: - """Quantify uncertainty of the options analysis""" - metrics = {} - - # 1) Signal strength uncertainty - signal_strength = analysis.get("signal_strength", 0.5) - metrics["signal_uncertainty"] = 1.0 - signal_strength - - # 2) Validation uncertainty - validation_score = validation.get("validation_score", 0.5) - metrics["validation_uncertainty"] = 1.0 - validation_score - - # 3) Counter-argument uncertainty - counter_uncertainty = min(len(counter_arguments) * 0.2, 1.0) - metrics["counter_uncertainty"] = counter_uncertainty - - # 4) Data source uncertainty - source = analysis.get("source", "").lower() - source_reliability = { - "sec": 0.9, "newsapi": 0.8, "fred": 0.7, "market_data": 0.8, - "reddit": 0.4, "youtube": 0.5, "yahoo finance": 0.6 - } - source_uncertainty = 1.0 - source_reliability.get(source, 0.5) - metrics["source_uncertainty"] = source_uncertainty - - # 5) Overall uncertainty - overall_uncertainty = ( - metrics["signal_uncertainty"] * 0.3 + - metrics["validation_uncertainty"] * 0.3 + - metrics["counter_uncertainty"] * 0.2 + - metrics["source_uncertainty"] * 0.2 - ) - metrics["overall_uncertainty"] = overall_uncertainty - - # 6) Confidence interval - confidence_interval = self._calculate_confidence_interval(overall_uncertainty) - metrics["confidence_interval"] = confidence_interval - - # 7) Calibration notes - metrics["calibration_notes"] = self._generate_calibration_notes(metrics) - - return metrics - - def _calculate_confidence_interval(self, uncertainty: float) -> Dict[str, float]: - """Compute confidence interval""" - base_confidence = 1.0 - uncertainty - margin_of_error = uncertainty * 0.1 - - return { - "lower_bound": max(0.0, base_confidence - margin_of_error), - "upper_bound": min(1.0, base_confidence + margin_of_error), - "center": base_confidence - } - - def _generate_calibration_notes(self, metrics: Dict[str, Any]) -> List[str]: - """Generate calibration notes""" - notes = [] - - if metrics["overall_uncertainty"] > 0.7: - notes.append("High uncertainty - consider additional data sources") - - if metrics["validation_uncertainty"] > 0.6: - notes.append("Data validation concerns - verify signal quality") - - if metrics["counter_uncertainty"] > 0.5: - notes.append("Multiple counter-arguments - risk assessment needed") - - if metrics["source_uncertainty"] > 0.6: - notes.append("Low-reliability data source - cross-verify information") - - if not notes: - notes.append("Low uncertainty - high confidence in analysis") - - return notes - -class SchemaValidator: - """Schema validator for JSON output""" - - def __init__(self): - self.required_fields = [ - "ticker", "directional_view", "trade_idea", "candidate_strikes", - "tenor", "rationale", "confidence_level", "citations" - ] - - self.valid_directional_views = ["Bullish", "Bearish", "Neutral"] - self.valid_confidence_levels = ["High", "Medium", "Low"] - self.valid_strategy_types = [ - "Buy Call", "Buy Put", "Sell Call", "Sell Put", - "Straddle", "Strangle", "Iron Condor", "Butterfly", - "Covered Call", "Protective Put", "Bull Call Spread", "Bear Put Spread" - ] - - def validate_options_decision(self, decision: Dict[str, Any]) -> Dict[str, Any]: - """Validate JSON schema for the options decision""" - validated = decision.copy() - - # 1) Ensure required fields - for field in self.required_fields: - if field not in validated or not validated[field]: - validated[field] = self._get_default_value(field) - - # 2) Validate enumerated values - validated["directional_view"] = self._validate_directional_view(validated["directional_view"]) - validated["confidence_level"] = self._validate_confidence_level(validated["confidence_level"]) - validated["trade_idea"] = self._validate_strategy_type(validated["trade_idea"]) - - # 3) Coerce data types - validated["candidate_strikes"] = str(validated["candidate_strikes"]) - validated["tenor"] = str(validated["tenor"]) - validated["citations"] = list(validated["citations"]) if isinstance(validated["citations"], list) else [str(validated["citations"])] - - # 4) Add validation metadata - validated["schema_validated"] = True - validated["validation_timestamp"] = datetime.now().isoformat() - - return validated - - def _get_default_value(self, field: str) -> str: - """Get default value for missing field""" - defaults = { - "ticker": "UNKNOWN", - "directional_view": "Neutral", - "trade_idea": "Straddle", - "candidate_strikes": "TBD", - "tenor": (datetime.now() + timedelta(days=30)).strftime("%Y-%m-%d"), - "rationale": "Analysis based on database content", - "confidence_level": "Medium", - "citations": ["Database Analysis"] - } - return defaults.get(field, "N/A") - - def _validate_directional_view(self, view: str) -> str: - """Validate directional view value""" - if view in self.valid_directional_views: - return view - return "Neutral" - - def _validate_confidence_level(self, level: str) -> str: - """Validate confidence level value""" - if level in self.valid_confidence_levels: - return level - return "Medium" - - def _validate_strategy_type(self, strategy: str) -> str: - """Validate strategy type value""" - if strategy in self.valid_strategy_types: - return strategy - return "Straddle" - -class OptionsAnalyst: - """Options analyst - analyze options signals""" - - def analyze_options_signal(self, signal_data: Dict[str, Any]) -> Dict[str, Any]: - """Analyze a single options signal""" - content = signal_data.get("page_content", "") - source = signal_data.get("source", "") - - # Compute signal strength - strength = self._calculate_options_signal_strength(content, source) - - # Extract options-related information - underlying = self._extract_underlying(content) - sentiment = self._analyze_options_sentiment(content) - volatility = self._assess_implied_volatility(content) - strategy_type = self._determine_strategy_type(content, sentiment) - - return { - "signal_strength": strength, - "underlying": underlying, - "sentiment": sentiment, - "volatility": volatility, - "strategy_type": strategy_type, - "source": source, - "content": content[:300] - } - - def _calculate_options_signal_strength(self, content: str, source: str) -> float: - """Compute options signal strength""" - score = 0.0 - content_upper = content.upper() - source_lower = source.lower() - - # Based on data source weights - score += DATA_SOURCE_PROFIT_WEIGHTS.get(source_lower, 0.2) - - # Based on options keywords - keyword_score = 0.0 - for keyword, weight in OPTIONS_KEYWORDS.items(): - if keyword in content_upper: - keyword_score += weight - - normalized_keyword_score = min(keyword_score / sum(OPTIONS_KEYWORDS.values()), 1.0) - score += normalized_keyword_score * 0.4 - - # Based on options code patterns - option_patterns = [ - r'\b[A-Z]{2,5}\s+\d+[CP]\b', - r'\$\d+\.?\d*\s+[CP]\b', - r'STRIKE\s+\$?\d+', - r'EXPIR[EY]\s+\d{1,2}/\d{1,2}', - ] - - pattern_score = 0.0 - for pattern in option_patterns: - if re.search(pattern, content_upper): - pattern_score += 0.25 - - score += pattern_score * 0.3 - - return min(score, 1.0) - - def _extract_underlying(self, content: str) -> str: - """Recommend option category/underlying based on DB content (frequency matching)""" - content_lower = content.lower() - content_upper = content.upper() - - # 1) First, search for explicit option code patterns - option_patterns = [ - r'\b([A-Z]{2,5})\s+\d+[CP]\b', # AAPL 150C, SPY 450P - r'\$([A-Z]{2,5})\b', # $AAPL, $SPY - r'\b([A-Z]{2,5})\s+OPTION\b', # AAPL OPTION - r'\b([A-Z]{2,5})\s+CALL\b', # AAPL CALL - r'\b([A-Z]{2,5})\s+PUT\b', # AAPL PUT - r'\b([A-Z]{2,5})\s+STRIKE\b', # AAPL STRIKE - r'\b([A-Z]{2,5})\s+EXPIR\b', # AAPL EXPIRY - ] - - # Find explicit option patterns - for pattern in option_patterns: - matches = re.findall(pattern, content_upper) - for match in matches: - ticker = match.strip() - # 验证是否在期权类别中 - for category_data in OPTIONS_CATEGORIES.values(): - if ticker in category_data["tickers"]: - logger.info(f"✓ Found explicit ticker {ticker} in content") - return ticker - - # 2) Recommend category based on keyword frequency - category_scores = {} - for category_name, category_data in OPTIONS_CATEGORIES.items(): - score = 0 - matched_keywords = [] - - # Check tickers - for ticker in category_data["tickers"]: - if ticker in content_upper: - score += 2 # higher weight for direct ticker match - matched_keywords.append(ticker) - - # Check keywords - for keyword in category_data["keywords"]: - if keyword in content_lower: - score += 1 - matched_keywords.append(keyword) - - # Check keywords from description - description_words = category_data["description"].lower().split() - for word in description_words: - if len(word) > 3 and word in content_lower: # only match words length > 3 - score += 1 - matched_keywords.append(word) - - if score > 0: - category_scores[category_name] = { - 'score': score, - 'matched_keywords': matched_keywords - } - logger.info(f"✓ Category '{category_name}' scored {score} with keywords: {matched_keywords}") - - # 3) Choose top-scoring category and return one of the most liquid tickers - if category_scores: - best_category = max(category_scores, key=lambda x: category_scores[x]['score']) - best_tickers = OPTIONS_CATEGORIES[best_category]["tickers"] - - # Select among most liquid tickers (typically first 3-5) - top_liquid_tickers = best_tickers[:5] - - import random - selected_ticker = random.choice(top_liquid_tickers) - score_info = category_scores[best_category] - logger.info(f"✓ Selected {selected_ticker} from category '{best_category}' (score: {score_info['score']}, top liquid tickers: {top_liquid_tickers})") - return selected_ticker - - # 4) If no keyword match, find any known tickers mentioned - for category_data in OPTIONS_CATEGORIES.values(): - for ticker in category_data["tickers"]: - if ticker in content_upper: - logger.info(f"✓ Found ticker {ticker} mentioned in content") - return ticker - - # 5) Default to SPY (high-liquidity major index ETF) - logger.info("✓ No specific category matched, defaulting to SPY (most liquid Major Index ETF)") - return 'SPY' - - def get_top_liquid_options_for_category(self, category_name: str, count: int = 5) -> List[str]: - """Get most liquid option underlyings for a category""" - if category_name not in OPTIONS_CATEGORIES: - logger.warning(f"Category '{category_name}' not found, returning default") - return ['SPY'] - - category_data = OPTIONS_CATEGORIES[category_name] - all_tickers = category_data["tickers"] - - # Return top-N most liquid tickers - top_liquid = all_tickers[:count] - logger.info(f"✓ Top {count} liquid options for '{category_name}': {top_liquid}") - return top_liquid - - def _analyze_options_sentiment(self, content: str) -> str: - """Analyze options sentiment""" - content_lower = content.lower() - - # Options-specific sentiment indicators - bullish_indicators = ["call", "bullish", "upside", "breakout", "momentum", "growth"] - bearish_indicators = ["put", "bearish", "downside", "breakdown", "decline", "weakness"] - - bullish_count = sum(1 for indicator in bullish_indicators if indicator in content_lower) - bearish_count = sum(1 for indicator in bearish_indicators if indicator in content_lower) - - if bullish_count > bearish_count: - return "Bullish" - elif bearish_count > bullish_count: - return "Bearish" - else: - return "Neutral" - - def _assess_implied_volatility(self, content: str) -> str: - """Assess implied volatility""" - content_lower = content.lower() - - if any(term in content_lower for term in ["high iv", "high volatility", "volatile", "vix high"]): - return "High" - elif any(term in content_lower for term in ["low iv", "low volatility", "stable", "vix low"]): - return "Low" - else: - return "Medium" - - def _determine_strategy_type(self, content: str, sentiment: str) -> str: - """Determine strategy type - risk-averse preference""" - content_lower = content.lower() - - # Risk-averse preference: favor lower-risk, stable-return strategies - - # 1) Based on explicit strategy keywords - if "straddle" in content_lower or "strangle" in content_lower: - return "Straddle" # risk-averse: prefer Straddle over Strangle - elif "iron condor" in content_lower or "condor" in content_lower: - return "Iron Condor" # risk-averse: income strategy - elif "butterfly" in content_lower: - return "Butterfly" # risk-averse: limited-risk strategy - elif "covered call" in content_lower: - return "Covered Call" # risk-averse: income strategy - elif "protective put" in content_lower: - return "Protective Put" # risk-averse: protection strategy - - # 2) Sentiment-based selection (risk-averse) - elif sentiment == "Bullish": - # Bullish: favor Covered Call / Bull Call Spread - return "Covered Call" # conservative bullish - elif sentiment == "Bearish": - # Bearish: favor Protective Put - return "Protective Put" - else: - # Neutral: favor Iron Condor (income) - return "Iron Condor" - -class OptionsFactChecker: - """Options fact checker - validate analysis""" - - def validate_options_analysis(self, analysis: Dict[str, Any]) -> Dict[str, Any]: - """Validate options analysis result""" - validation_score = 0.0 - issues = [] - - # Check signal strength - if analysis["signal_strength"] > 0.7: - validation_score += 0.3 - elif analysis["signal_strength"] > 0.4: - validation_score += 0.2 - else: - issues.append("Low options signal strength") - - # Check underlying validity - if analysis["underlying"] and len(analysis["underlying"]) >= 2: - validation_score += 0.3 - else: - issues.append("Invalid underlying symbol") - - # Check strategy type - if analysis["strategy_type"] in ["Buy Call", "Buy Put", "Straddle/Strangle", "Iron Condor", "Butterfly"]: - validation_score += 0.2 - else: - issues.append("Unclear strategy type") - - # Check volatility assessment - if analysis["volatility"] in ["High", "Medium", "Low"]: - validation_score += 0.1 - else: - issues.append("Invalid volatility assessment") - - # Check content length/quality - if len(analysis["content"]) > 150: - validation_score += 0.1 - else: - issues.append("Insufficient content for options analysis") - - return { - "validation_score": min(validation_score, 1.0), - "issues": issues, - "is_valid": validation_score > 0.5 - } - -class OptionsAdversarialCritic: - """Options adversarial critic - generate counter-arguments""" - - def generate_options_counter_arguments(self, analysis: Dict[str, Any]) -> List[str]: - """Generate options counter-arguments""" - counter_arguments = [] - - if analysis["sentiment"] == "Bullish": - counter_arguments.extend([ - "Call options may be overpriced due to high implied volatility", - "Market correction could lead to significant call option losses", - "Time decay may erode call option value even if direction is correct" - ]) - elif analysis["sentiment"] == "Bearish": - counter_arguments.extend([ - "Put options may be expensive due to fear premium", - "Oversold bounce could lead to put option losses", - "Market may have already priced in negative sentiment" - ]) - - if analysis["strategy_type"] == "Straddle/Strangle": - counter_arguments.append("Straddle strategies require significant price movement to be profitable") - - if analysis["volatility"] == "High": - counter_arguments.append("High IV environment makes options expensive and reduces profit potential") - elif analysis["volatility"] == "Low": - counter_arguments.append("Low IV may not provide enough movement for profitable options trades") - - if analysis["signal_strength"] > 0.7: - counter_arguments.append("High signal strength may indicate overconfidence in options strategy") - - return counter_arguments - -class OptionsSynthesizer: - """Options synthesizer - produce final decision""" - - def synthesize_options_decision(self, analysis: Dict[str, Any], validation: Dict[str, Any], counter_arguments: List[str], uncertainty_metrics: Dict[str, Any] = None) -> Dict[str, Any]: - """Synthesize all information into a final options decision""" - # Compute combined confidence - base_confidence = analysis["signal_strength"] - validation_penalty = 0.1 if not validation["is_valid"] else 0 - counter_penalty = len(counter_arguments) * 0.05 - - # Apply uncertainty adjustment - uncertainty_adjustment = 0 - if uncertainty_metrics: - uncertainty_adjustment = uncertainty_metrics.get("overall_uncertainty", 0) * 0.2 - - final_confidence = max(0.1, base_confidence - validation_penalty - counter_penalty - uncertainty_adjustment) - - # Map to confidence level label - if final_confidence > 0.7: - confidence_level = "High" - elif final_confidence > 0.4: - confidence_level = "Medium" - else: - confidence_level = "Low" - - # Use underlying from analysis - underlying = analysis["underlying"] - - # Strategy type - strategy_type = analysis["strategy_type"] - - # Compute strike and expiration - strike_price, expiration_date, current_price = self._calculate_options_parameters(underlying, analysis["sentiment"], analysis["volatility"], final_confidence) - - # Generate textual rationale - rationale = self._generate_options_rationale(analysis, validation, counter_arguments, final_confidence, uncertainty_metrics, underlying, strike_price, current_price) - - # Determine option type label (Call/Put/Straddle) - option_type = self._determine_option_type(analysis["sentiment"], strategy_type) - - # Build decision payload - decision = { - "ticker": underlying, - "directional_view": analysis["sentiment"], - "trade_idea": strategy_type, - "option_type": option_type, # Call/Put/Straddle - "candidate_strikes": f"${strike_price:.2f}", - "strike_price": round(strike_price, 2), - "tenor": expiration_date, - "expiration_date": expiration_date, - "rationale": rationale, - "confidence_level": confidence_level, - "citations": [analysis["source"], "ReAct Multi-Agent Analysis"], - "signal_strength": round(final_confidence, 2), - "validation_score": round(validation["validation_score"], 2), - "counter_arguments": counter_arguments[:2], - "volatility_assessment": analysis["volatility"], - "strategy_type": strategy_type - } - - # Attach uncertainty metrics if available - if uncertainty_metrics: - # 格式化不确定性指标 - formatted_uncertainty = {} - for key, value in uncertainty_metrics.items(): - if isinstance(value, (int, float)): - formatted_uncertainty[key] = round(value, 2) - else: - formatted_uncertainty[key] = value - - decision.update({ - "uncertainty_metrics": formatted_uncertainty, - "confidence_interval": uncertainty_metrics.get("confidence_interval", {}), - "calibration_notes": uncertainty_metrics.get("calibration_notes", []), - "overall_uncertainty": round(uncertainty_metrics.get("overall_uncertainty", 0.5), 2) - }) - - return decision - - def _calculate_options_parameters(self, underlying: str, sentiment: str, volatility: str, confidence: float) -> Tuple[float, str, float]: - """Calculate option parameters using yfinance when possible""" - try: - # 1) Get stock info - stock_info = yfinance_client.get_stock_info(underlying) - current_price = stock_info.get('current_price', 0) - - if current_price == 0: - logger.warning(f"Could not get current price for {underlying}, using fallback") - # Fallback to Alpha Vantage - quote = alpha_vantage_client.get_real_time_quote(underlying) - if quote and '05. price' in quote: - current_price = float(quote['05. price']) - else: - current_price = 100.0 # 默认价格 - - logger.info(f"Current price for {underlying}: ${current_price}") - - # 2) Get options expirations - expirations = yfinance_client.get_options_expirations(underlying) - if not expirations: - logger.warning(f"No options expirations found for {underlying}, generating default") - # Generate default expiration - if volatility == "High": - days_to_expiry = random.randint(15, 30) - elif volatility == "Low": - days_to_expiry = random.randint(45, 60) - else: - days_to_expiry = random.randint(30, 45) - expiration_date = (datetime.now() + timedelta(days=days_to_expiry)).strftime("%Y-%m-%d") - else: - # Pick suitable expiration - if volatility == "High": - # High IV: nearer expirations - expiration_date = expirations[0] if len(expirations) > 0 else expirations[-1] - elif volatility == "Low": - # Low IV: further expirations - expiration_date = expirations[-1] if len(expirations) > 0 else expirations[0] - else: - # Medium IV: mid expirations - mid_index = len(expirations) // 2 - expiration_date = expirations[mid_index] if len(expirations) > mid_index else expirations[0] - - logger.info(f"Selected expiration date for {underlying}: {expiration_date}") - - # 3) Get liquid strikes - liquid_strikes = yfinance_client.get_liquid_strikes(underlying, expiration_date, min_volume=5) - - if not liquid_strikes: - # If none, get ATM strikes - liquid_strikes = yfinance_client.get_atm_strikes(underlying, expiration_date, count=10) - - if not liquid_strikes: - logger.warning(f"No liquid strikes found for {underlying}, generating based on current price") - # Generate strike based on current price - if sentiment == "Bullish": - strike_price = current_price * 1.02 # 2% OTM - elif sentiment == "Bearish": - strike_price = current_price * 0.98 # 2% OTM - else: - strike_price = current_price # ATM - else: - # Choose strike according to sentiment - if sentiment == "Bullish": - # Bullish: slightly above spot - bullish_strikes = [s for s in liquid_strikes if s > current_price] - strike_price = bullish_strikes[0] if bullish_strikes else liquid_strikes[0] - elif sentiment == "Bearish": - # Bearish: slightly below spot - bearish_strikes = [s for s in liquid_strikes if s < current_price] - strike_price = bearish_strikes[-1] if bearish_strikes else liquid_strikes[-1] - else: - # Neutral: nearest to spot - strike_price = min(liquid_strikes, key=lambda x: abs(x - current_price)) - - logger.info(f"Selected strike price for {underlying}: ${strike_price}") - - return round(strike_price, 2), expiration_date, current_price - - except Exception as e: - logger.error(f"Error calculating options parameters for {underlying}: {e}") - # Fallback to simple calculation - base_price = 100.0 - if sentiment == "Bullish": - strike_price = base_price * 1.02 - elif sentiment == "Bearish": - strike_price = base_price * 0.98 - else: - strike_price = base_price - - days_to_expiry = 30 - expiration_date = (datetime.now() + timedelta(days=days_to_expiry)).strftime("%Y-%m-%d") - - return round(strike_price, 2), expiration_date, base_price - - def _determine_option_type(self, sentiment: str, strategy_type: str) -> str: - """Determine final option type label""" - if strategy_type in ["Buy Call", "Bull Call Spread", "Covered Call"]: - return "Call" - elif strategy_type in ["Buy Put", "Bear Put Spread", "Protective Put"]: - return "Put" - elif strategy_type in ["Straddle", "Strangle", "Long Straddle", "Long Strangle"]: - return "Straddle" - elif strategy_type in ["Iron Condor", "Butterfly"]: - return "Spread" - else: - # 根据情绪确定 - if sentiment == "Bullish": - return "Call" - elif sentiment == "Bearish": - return "Put" - else: - return "Straddle" - - def _generate_options_rationale(self, analysis: Dict[str, Any], validation: Dict[str, Any], counter_arguments: List[str], confidence: float, uncertainty_metrics: Dict[str, Any] = None, underlying: str = None, strike_price: float = None, current_price: float = None) -> str: - """生成期权详细理由,包含详细的数据指标""" - rationale_parts = [] - - # 基于信号强度 - if confidence > 0.7: - rationale_parts.append(f"Strong options signal strength ({confidence:.2f}) from {analysis['source']} analysis") - elif confidence > 0.4: - rationale_parts.append(f"Moderate options signal strength ({confidence:.2f}) from {analysis['source']} analysis") - else: - rationale_parts.append(f"Low options signal strength ({confidence:.2f}) from {analysis['source']} analysis") - - # 添加详细的数据指标 - if underlying and strike_price and current_price: - # 计算内在价值和时间价值 - if analysis["sentiment"] == "Bullish": - intrinsic_value = max(0, current_price - strike_price) - moneyness = "ITM" if current_price > strike_price else "OTM" if current_price < strike_price else "ATM" - elif analysis["sentiment"] == "Bearish": - intrinsic_value = max(0, strike_price - current_price) - moneyness = "ITM" if current_price < strike_price else "OTM" if current_price > strike_price else "ATM" - else: - intrinsic_value = 0 - moneyness = "ATM" if abs(current_price - strike_price) / current_price < 0.02 else "OTM" - - # 估算期权价格(简化Black-Scholes) - time_to_expiry = 30 # 假设30天到期 - volatility = 0.25 # 假设25%波动率 - risk_free_rate = 0.05 # 假设5%无风险利率 - - # 简化的期权价格估算 - if analysis["sentiment"] == "Bullish": - estimated_premium = max(intrinsic_value + (current_price * volatility * (time_to_expiry/365)**0.5), 0.5) - elif analysis["sentiment"] == "Bearish": - estimated_premium = max(intrinsic_value + (current_price * volatility * (time_to_expiry/365)**0.5), 0.5) - else: - estimated_premium = current_price * volatility * (time_to_expiry/365)**0.5 * 2 # Straddle - - time_value = max(0, estimated_premium - intrinsic_value) - - # 计算Delta(简化) - if analysis["sentiment"] == "Bullish": - delta = 0.5 + (current_price - strike_price) / (strike_price * 0.1) * 0.3 - delta = max(0.1, min(0.9, delta)) - elif analysis["sentiment"] == "Bearish": - delta = 0.5 - (current_price - strike_price) / (strike_price * 0.1) * 0.3 - delta = max(-0.9, min(-0.1, delta)) - else: - delta = 0.0 # Straddle delta near 0 - - - historical_vol = 0.20 - expected_return = 0.08 - sharpe_ratio = expected_return / historical_vol - - # 计算其他Greeks - gamma = 0.01 # 简化Gamma - theta = -estimated_premium / time_to_expiry # 时间衰减 - vega = current_price * (time_to_expiry/365)**0.5 * 0.01 # 波动率敏感度 - - rationale_parts.append(f"**Price Analysis:** Current price ${current_price:.2f} vs Strike ${strike_price:.2f} ({moneyness})") - rationale_parts.append(f"**Intrinsic Value:** ${intrinsic_value:.2f}, Time Value: ${time_value:.2f}, Estimated Premium: ${estimated_premium:.2f}") - rationale_parts.append(f"**Greeks:** Delta={delta:.3f}, Gamma={gamma:.3f}, Theta={theta:.3f}, Vega={vega:.3f}") - rationale_parts.append(f"**Risk Metrics:** Sharpe Ratio={sharpe_ratio:.2f}, Volatility={volatility:.1%}") - - # 基于期权情绪 - if analysis["sentiment"] == "Bullish": - rationale_parts.append("Bullish sentiment supports call option strategies") - elif analysis["sentiment"] == "Bearish": - rationale_parts.append("Bearish sentiment supports put option strategies") - else: - rationale_parts.append("Neutral sentiment suggests straddle/strangle strategies") - - # 基于波动率 - if analysis["volatility"] == "High": - rationale_parts.append("High implied volatility environment favors short premium strategies") - elif analysis["volatility"] == "Low": - rationale_parts.append("Low implied volatility environment favors long premium strategies") - else: - rationale_parts.append("Medium volatility environment supports balanced options strategies") - - # 基于验证结果 - if validation["is_valid"]: - rationale_parts.append("Fact-checked options analysis confirms data quality") - else: - rationale_parts.append("Some options data quality concerns noted") - - # 基于反论点 - if counter_arguments: - rationale_parts.append(f"Consider {len(counter_arguments)} counter-arguments in options risk assessment") - - # 基于不确定性量化 - if uncertainty_metrics: - overall_uncertainty = uncertainty_metrics.get("overall_uncertainty", 0.5) - if overall_uncertainty > 0.7: - rationale_parts.append("High uncertainty environment - exercise caution in position sizing") - elif overall_uncertainty < 0.3: - rationale_parts.append("Low uncertainty environment - high confidence in strategy") - - # 添加校准注释 - calibration_notes = uncertainty_metrics.get("calibration_notes", []) - if calibration_notes: - rationale_parts.append(f"Risk considerations: {', '.join(calibration_notes[:2])}") - - return ". ".join(rationale_parts) + "." - -class OptionsReportGenerator: - """Options report generator""" - - def __init__(self): - self.qdrant = qdrant_client.QdrantClient(host=QDRANT_HOST, port=QDRANT_PORT) - self.data_pipeline = OptionsDataPipeline(self.qdrant) - self.knowledge_manager = OptionsKnowledgeManager(self.qdrant) - self.decision_architecture = OptionsDecisionArchitecture() - - def generate_daily_options_report(self) -> Dict[str, Any]: - """Generate daily options report""" - logger.info("🚀 Starting options report generation...") - start_time = datetime.now() - - # 1) Data pipeline - fetch options signals - logger.info("📊 Options Data Pipeline: Fetching options-related signals...") - options_signals = self.data_pipeline.fetch_options_signals() - - if not options_signals: - logger.error("❌ No options signals found. Exiting.") - return {"error": "No options signals available"} - - # 2) Select best signals - logger.info("🎯 Selecting best options signals by profit probability...") - best_signals = self.data_pipeline.select_best_options_signals(options_signals, target_count=8) - - # 3) Decision architecture - multi-agent processing - logger.info("🤖 Options Decision Architecture: Processing signals with multi-agent system...") - - # 4) Generate trading ideas - ensure no duplicates, at least 5 - ideas = [] - successful_ideas = 0 - target_ideas = random.randint(5, 10) - min_ideas = 5 # minimum 5 recommendations - used_underlyings = set() # track used underlyings - used_combinations = set() # track used underlying+strategy pairs - - # Load today's recommendations from DB to avoid duplicates - today_recommendations = self._load_today_recommendations() - - for i, signal in enumerate(best_signals): - if successful_ideas >= target_ideas: - break - - profit_score = self.data_pipeline.calculate_profit_score(signal) - logger.info(f"🔄 Processing signal {i+1}/{len(best_signals)} (profit score: {profit_score:.2f})...") - - try: - # Process via ReAct protocol - decision = self.decision_architecture.process_options_signal(signal.payload) - - if decision and decision.get("ticker"): - ticker = decision["ticker"] - strategy = decision.get("trade_idea", "Straddle") - combination = f"{ticker}_{strategy}" - - # Check duplicates (underlying or combination) - if (ticker not in used_underlyings and - combination not in used_combinations and - ticker not in today_recommendations): - - ideas.append(decision) - used_underlyings.add(ticker) - used_combinations.add(combination) - successful_ideas += 1 - logger.info(f"✅ Generated {strategy} for {ticker} (confidence: {decision['confidence_level']})") - else: - logger.info(f"⚠️ Skipping duplicate: {ticker} {strategy}, trying next signal...") - continue - else: - logger.warning(f"⚠️ Failed to generate valid options idea from signal {i+1}") - - except Exception as e: - logger.error(f"❌ Error processing signal {i+1}: {e}") - continue - - # If not enough ideas, try to generate more - if successful_ideas < min_ideas: - logger.info(f"⚠️ Only generated {successful_ideas} ideas, need at least {min_ideas}. Attempting to generate more...") - additional_signals = self.data_pipeline.select_best_options_signals(options_signals, target_count=30) - - for signal in additional_signals[len(best_signals):]: - if successful_ideas >= 10: - break - - try: - decision = self.decision_architecture.process_options_signal(signal.payload) - if decision and decision.get("ticker"): - ticker = decision["ticker"] - strategy = decision.get("trade_idea", "Straddle") - combination = f"{ticker}_{strategy}" - - if (ticker not in used_underlyings and - combination not in used_combinations and - ticker not in today_recommendations): - - ideas.append(decision) - used_underlyings.add(ticker) - used_combinations.add(combination) - successful_ideas += 1 - logger.info(f"✅ Additional: {strategy} for {ticker}") - except Exception as e: - continue - - # If still below minimum, generate default recommendations - if successful_ideas < min_ideas: - logger.info(f"⚠️ Still only {successful_ideas} ideas, generating default recommendations to reach minimum of {min_ideas}...") - default_tickers = ['SPY', 'QQQ', 'AAPL', 'MSFT', 'TSLA', 'NVDA', 'META', 'GOOGL', 'AMZN', 'NFLX'] - - for ticker in default_tickers: - if successful_ideas >= min_ideas: - break - - if ticker not in used_underlyings and ticker not in today_recommendations: - try: - # Create default recommendation - default_decision = { - "ticker": ticker, - "directional_view": "Neutral", - "trade_idea": "Iron Condor", - "option_type": "Spread", - "candidate_strikes": "$100.00", - "strike_price": 100.0, - "tenor": "30 days", - "expiration_date": "2025-11-04", - "rationale": f"Default recommendation for {ticker} based on high liquidity and market activity. Risk-averse strategy suitable for conservative investors.", - "confidence_level": "Medium", - "citations": ["Default Recommendation"], - "signal_strength": 0.5, - "validation_score": 0.7, - "counter_arguments": ["Default recommendation - limited market analysis"], - "volatility_assessment": "Medium", - "strategy_type": "Iron Condor", - "uncertainty_metrics": { - "signal_uncertainty": 0.2, - "validation_uncertainty": 0.2, - "counter_uncertainty": 0.2, - "source_uncertainty": 0.1, - "overall_uncertainty": 0.2, - "confidence_interval": {"lower_bound": 0.6, "upper_bound": 0.8, "center": 0.7}, - "calibration_notes": ["Default recommendation"] - } - } - - # Try to enrich with real data from yfinance - try: - stock_info = yfinance_client.get_stock_info(ticker) - if stock_info and stock_info.get('current_price', 0) > 0: - current_price = stock_info['current_price'] - expirations = yfinance_client.get_options_expirations(ticker) - if expirations: - expiration_date = expirations[0] if len(expirations) > 0 else "2025-11-04" - liquid_strikes = yfinance_client.get_liquid_strikes(ticker, expiration_date, min_volume=5) - if liquid_strikes: - strike_price = min(liquid_strikes, key=lambda x: abs(x - current_price)) - default_decision.update({ - "candidate_strikes": f"${strike_price:.2f}", - "strike_price": round(strike_price, 2), - "expiration_date": expiration_date, - "tenor": expiration_date - }) - except Exception as e: - logger.warning(f"Could not get real data for {ticker}: {e}") - - ideas.append(default_decision) - used_underlyings.add(ticker) - successful_ideas += 1 - logger.info(f"✅ Added default recommendation for {ticker}") - - except Exception as e: - logger.error(f"Error creating default recommendation for {ticker}: {e}") - continue - - # Save today's recommendations - self._save_today_recommendations(used_underlyings) - - # 5) Generate final options report - if ideas: - report = self._create_final_options_report(ideas, start_time, options_signals) - logger.info(f"✅ Successfully generated {len(ideas)} options trading ideas") - else: - logger.error("❌ Failed to generate any valid options ideas") - report = {"error": "No valid options ideas generated"} - - end_time = datetime.now() - execution_time = (end_time - start_time).total_seconds() - logger.info(f"⏱️ Total execution time: {execution_time:.2f} seconds") - - return report - - def _create_final_options_report(self, ideas: List[Dict[str, Any]], start_time: datetime, options_signals: List[models.Record]) -> Dict[str, Any]: - """创建最终期权报告""" - date_str = start_time.strftime("%Y-%m-%d") - report_dir = os.path.join(REPORTS_BASE_DIR, date_str) - - try: - os.makedirs(report_dir, exist_ok=True) - - # 按信号强度排序 - ideas.sort(key=lambda x: x.get("signal_strength", 0), reverse=True) - - # 统计数据源 - data_sources = set() - for signal in options_signals: - data_sources.add(signal.payload.get("source", "unknown")) - - # 创建JSON报告 - json_data = { - "report_date": date_str, - "total_ideas": len(ideas), - "ideas": ideas, - "metadata": { - "generated_at": datetime.now().isoformat(), - "model_used": OLLAMA_MODEL, - "generation_method": "Options Multi-Agent System", - "data_sources": list(data_sources), - "total_options_signals_analyzed": len(options_signals), - "avg_signal_strength": sum(idea.get("signal_strength", 0) for idea in ideas) / len(ideas) if ideas else 0, - "avg_confidence": sum(1 if idea.get("confidence_level") == "High" else 0.5 if idea.get("confidence_level") == "Medium" else 0.1 for idea in ideas) / len(ideas) if ideas else 0, - "strategy_types": list(set(idea.get("strategy_type", "") for idea in ideas)), - "underlyings": list(set(idea.get("ticker", "") for idea in ideas)) - } - } - - # 保存JSON报告 - json_path = os.path.join(report_dir, "options_ideas.json") - with open(json_path, 'w', encoding='utf-8') as f: - json.dump(json_data, f, indent=2, ensure_ascii=False) - - # 创建Markdown报告 - markdown_metadata = { - "report_date": date_str, - "total_ideas": len(ideas), - "data_sources": list(data_sources), - "total_options_signals_analyzed": len(options_signals), - "avg_signal_strength": sum(idea.get("signal_strength", 0) for idea in ideas) / len(ideas) if ideas else 0, - "avg_confidence": sum(1 if idea.get("confidence_level") == "High" else 0.5 if idea.get("confidence_level") == "Medium" else 0.1 for idea in ideas) / len(ideas) if ideas else 0, - "strategy_types": list(set(idea.get("strategy_type", "") for idea in ideas)), - "underlyings": list(set(idea.get("ticker", "") for idea in ideas)) - } - markdown_content = self._create_options_markdown_report(ideas, markdown_metadata) - markdown_path = os.path.join(report_dir, "options_ideas.md") - with open(markdown_path, 'w', encoding='utf-8') as f: - f.write(markdown_content) - - logger.info(f"✅ Options reports saved to: {json_path} and {markdown_path}") - - return { - "success": True, - "ideas": ideas, - "metadata": json_data["metadata"], - "files": { - "json": json_path, - "markdown": markdown_path - } - } - - except Exception as e: - logger.error(f"❌ Error creating options report: {e}") - return {"error": f"Failed to create options report: {e}"} - - def _create_options_markdown_report(self, ideas: List[Dict[str, Any]], metadata: Dict[str, Any]) -> str: - """Create the options report in Markdown format""" - content = f"# Daily Options Trading Ideas - Expert Analysis\n" - content += f"## Report for {metadata.get('report_date', 'Unknown Date')}\n\n" - content += f"**Generated Ideas:** {metadata['total_ideas']}\n" - content += f"**Data Sources:** {', '.join(metadata['data_sources'])}\n" - content += f"**Total Options Signals Analyzed:** {metadata['total_options_signals_analyzed']}\n" - content += f"**Average Signal Strength:** {metadata['avg_signal_strength']:.2f}\n" - content += f"**Average Confidence:** {metadata['avg_confidence']:.2f}\n" - content += f"**Strategy Types:** {', '.join(metadata['strategy_types'])}\n" - content += f"**Underlyings:** {', '.join(metadata['underlyings'])}\n\n" - - for i, idea in enumerate(ideas, 1): - content += f"## Options Idea #{i}\n\n" - content += f"**Ticker:** {idea['ticker']}\n" - content += f"**Directional View:** {idea['directional_view']}\n" - content += f"**Trade Idea:** {idea['trade_idea']}\n" - content += f"**Option Type:** {idea.get('option_type', 'N/A')}\n" - content += f"**Candidate Strike(s):** {idea['candidate_strikes']}\n" - content += f"**Strike Price:** ${idea.get('strike_price', 0):.2f}\n" - content += f"**Expiration Date:** {idea['tenor']}\n" - content += f"**Tenor:** {idea.get('expiration_date', idea['tenor'])}\n" - content += f"**Rationale:** {idea['rationale']}\n" - content += f"**Confidence Level:** {idea['confidence_level']}\n" - content += f"**Citations:** {', '.join(idea['citations'])}\n" - content += f"**Signal Strength:** {idea.get('signal_strength', 0.00):.2f}\n" - content += f"**Validation Score:** {idea.get('validation_score', 0.00):.2f}\n" - content += f"**Volatility Assessment:** {idea.get('volatility_assessment', 'N/A')}\n" - content += f"**Strategy Type:** {idea.get('strategy_type', 'N/A')}\n" - if idea.get('counter_arguments'): - content += f"**Counter-Arguments:** {', '.join(idea['counter_arguments'])}\n" - content += f"**Uncertainty Notes:** {idea.get('uncertainty_notes', 'N/A')}\n\n" - content += "---\n\n" - - return content - - def _load_today_recommendations(self) -> set: - """Load today's recommended tickers""" - try: - today = datetime.now().strftime("%Y-%m-%d") - record_file = os.path.join(REPORTS_BASE_DIR, f"{today}_recommendations.json") - - if os.path.exists(record_file): - with open(record_file, 'r') as f: - data = json.load(f) - return set(data.get("recommended_tickers", [])) - return set() - except Exception as e: - logger.warning(f"Failed to load today's recommendations: {e}") - return set() - - def _save_today_recommendations(self, recommended_tickers: set): - """Save today's recommended tickers""" - try: - today = datetime.now().strftime("%Y-%m-%d") - record_file = os.path.join(REPORTS_BASE_DIR, f"{today}_recommendations.json") - - data = { - "date": today, - "recommended_tickers": list(recommended_tickers), - "timestamp": datetime.now().isoformat() - } - - with open(record_file, 'w') as f: - json.dump(data, f, indent=2) - - logger.info(f"Saved today's recommendations: {list(recommended_tickers)}") - except Exception as e: - logger.warning(f"Failed to save today's recommendations: {e}") - -def main(): - """Main entry point""" - try: - generator = OptionsReportGenerator() - result = generator.generate_daily_options_report() - - if result.get("success"): - print("✅ Options report generation completed successfully!") - print(f"📊 Generated {len(result['ideas'])} high-quality options trading ideas") - print(f"📁 Reports saved to: {result['files']['json']} and {result['files']['markdown']}") - else: - print(f"❌ Options report generation failed: {result.get('error', 'Unknown error')}") - - except Exception as e: - logger.error(f"❌ Fatal error: {e}") - print(f"❌ Fatal error: {e}") - -if __name__ == "__main__": - main() diff --git a/src/yahoo_finance_scraper.py b/src/yahoo_finance_scraper.py deleted file mode 100644 index f640837..0000000 --- a/src/yahoo_finance_scraper.py +++ /dev/null @@ -1,201 +0,0 @@ -import os -import re -import requests -from typing import List, Dict, Any - -from dotenv import load_dotenv - -try: - from youtube_transcript_api import ( - YouTubeTranscriptApi, - TranscriptsDisabled, - NoTranscriptFound, - CouldNotRetrieveTranscript, - ) -except Exception: - YouTubeTranscriptApi = None # type: ignore - TranscriptsDisabled = Exception # type: ignore - NoTranscriptFound = Exception # type: ignore - CouldNotRetrieveTranscript = Exception # type: ignore - - -YAHOO_FINANCE_CHANNEL_ID = "UCEAZeUIeJs0IjQiqTCdVSIg" - - -def list_channel_videos_via_rss(channel_id: str, max_results: int = 20) -> List[Dict[str, str]]: - try: - feed_url = f"https://www.youtube.com/feeds/videos.xml?channel_id={channel_id}" - resp = requests.get(feed_url, timeout=10) - if resp.status_code != 200: - return [] - import xml.etree.ElementTree as ET - root = ET.fromstring(resp.text) - ns = { - 'atom': 'http://www.w3.org/2005/Atom', - 'yt': 'http://www.youtube.com/xml/schemas/2015', - 'media': 'http://search.yahoo.com/mrss/' - } - videos: List[Dict[str, str]] = [] - for entry in root.findall('atom:entry', ns)[:max_results]: - vid_el = entry.find('yt:videoId', ns) - title_el = entry.find('atom:title', ns) - # media:group/media:description may hold a lightweight description - desc_el = entry.find('media:group/media:description', ns) - if vid_el is not None and title_el is not None: - videos.append({ - 'video_id': vid_el.text, - 'title': title_el.text, - 'description': (desc_el.text if desc_el is not None else '') - }) - return videos - except Exception: - return [] - - -def clean_text(text: str) -> str: - if not text: - return "" - cleaned = text.lower() - cleaned = re.sub(r"\[.*?\]", "", cleaned) - cleaned = re.sub(r"\(.*?\)", "", cleaned) - cleaned = re.sub(r"\d+:\d+", "", cleaned) - cleaned = re.sub(r"[^\w\s]", " ", cleaned) - cleaned = re.sub(r"\s+", " ", cleaned).strip() - return cleaned - - -def fetch_transcript_best_effort(video_id: str) -> Dict[str, Any]: - if YouTubeTranscriptApi is None: - return {} - - def _fetch_text(t) -> str: - items = t.fetch() - return " ".join([it.get("text", "") if isinstance(it, dict) else getattr(it, "text", "") for it in items]) - - try: - transcripts = YouTubeTranscriptApi.list_transcripts(video_id) - # 1) Manual EN - try: - t = transcripts.find_manually_created_transcript(["en", "en-US", "en-GB"]) - text = _fetch_text(t) - if len(text) > 50: - return {"method": "manual_en", "text": text} - except (NoTranscriptFound,): - pass - # 2) Auto EN - try: - t = transcripts.find_generated_transcript(["en", "en-US", "en-GB"]) - text = _fetch_text(t) - if len(text) > 50: - return {"method": "auto_en", "text": text} - except (NoTranscriptFound,): - pass - # 3) Translate others to EN - try: - langs = [tr.language_code for tr in transcripts] - except Exception: - langs = [] - for pref in ("manual_other_to_en", "auto_other_to_en"): - try: - tr = transcripts.find_manually_created_transcript(langs) if pref.startswith("manual") else transcripts.find_generated_transcript(langs) - tr_en = tr.translate('en') - text = _fetch_text(tr_en) - if len(text) > 50: - return {"method": pref, "text": text} - except (NoTranscriptFound, CouldNotRetrieveTranscript): - continue - # 4) Any available - for tr in transcripts: - try: - text = _fetch_text(tr) - if len(text) > 50: - return {"method": "any_available", "text": text} - except Exception: - continue - return {} - except TranscriptsDisabled: - return {} - except Exception: - return {} - - -def scrape_yahoo_finance_transcripts(videos_per_channel: int = 20, verbose: bool = True) -> List[Dict[str, Any]]: - """Fetch Yahoo Finance videos via RSS, pull transcripts, clean and build documents. - - Returns empty list if no transcripts are available or dependency is missing. - """ - load_dotenv(dotenv_path=os.path.join(os.path.dirname(__file__), '..', '.env')) - - videos = list_channel_videos_via_rss(YAHOO_FINANCE_CHANNEL_ID, max_results=videos_per_channel) - if verbose: - print(f"Yahoo Finance RSS videos fetched: {len(videos)}") - documents: List[Dict[str, Any]] = [] - for v in videos: - vid = v.get('video_id', '') - title = v.get('title', '') - description = v.get('description', '') - data = fetch_transcript_best_effort(vid) - if not data or not data.get('text'): - # Fallback: store title + description so we still add lightweight context - if verbose: - print(f" - No transcript for video {vid} ({title[:60]}...) - saving fallback") - fallback_text = clean_text(description) if description else '' - page = f"Video title: {title}\n\nDescription: {fallback_text}" if fallback_text else f"Video title: {title}" - documents.append({ - "page_content": page, - "metadata": { - "source": "YahooFinance", - "channel_id": YAHOO_FINANCE_CHANNEL_ID, - "title": title, - "url": f"https://www.youtube.com/watch?v={vid}", - "text": page, - "raw_text": description, - "cleaned_text": fallback_text, - "transcript_method": "fallback_description" - } - }) - continue - raw_text = data['text'] - cleaned = clean_text(raw_text) - if len(cleaned) < 20: - # Use description if transcript is too short - if verbose: - print(f" - Transcript too short for {vid} ({len(cleaned)} chars) - saving description fallback") - fallback_text = clean_text(description) if description else '' - page = f"Video title: {title}\n\nDescription: {fallback_text}" if fallback_text else f"Video title: {title}" - documents.append({ - "page_content": page, - "metadata": { - "source": "YahooFinance", - "channel_id": YAHOO_FINANCE_CHANNEL_ID, - "title": title, - "url": f"https://www.youtube.com/watch?v={vid}", - "text": page, - "raw_text": description, - "cleaned_text": fallback_text, - "transcript_method": "fallback_description" - } - }) - continue - content = f"Video title: {title}\n\nCleaned transcript: {cleaned}" - documents.append({ - "page_content": content, - "metadata": { - "source": "YahooFinance", - "channel_id": YAHOO_FINANCE_CHANNEL_ID, - "title": title, - "url": f"https://www.youtube.com/watch?v={vid}", - "text": content, - "raw_text": raw_text, - "cleaned_text": cleaned, - "transcript_method": data.get('method', '') - } - }) - return documents - - -if __name__ == "__main__": - docs = scrape_yahoo_finance_transcripts(videos_per_channel=20) - print(f"Collected {len(docs)} Yahoo Finance documents") - - diff --git a/src/yfinance_client.py b/src/yfinance_client.py deleted file mode 100644 index 5aaf032..0000000 --- a/src/yfinance_client.py +++ /dev/null @@ -1,491 +0,0 @@ -import yfinance as yf -import logging -from typing import Dict, Any, List, Optional -from datetime import datetime, timedelta -import pandas as pd -import os -import json -import time -from googleapiclient.discovery import build -from googleapiclient.errors import HttpError - -logger = logging.getLogger(__name__) - -class YFinanceClient: - """Yahoo Finance client for real options chain data""" - - def __init__(self): - self.session = None - - def get_stock_info(self, symbol: str) -> Dict[str, Any]: - """Get basic stock information""" - try: - ticker = yf.Ticker(symbol) - info = ticker.info - - return { - 'symbol': symbol, - 'current_price': info.get('currentPrice', info.get('regularMarketPrice', 0)), - 'bid': info.get('bid', 0), - 'ask': info.get('ask', 0), - 'volume': info.get('volume', 0), - 'market_cap': info.get('marketCap', 0), - 'sector': info.get('sector', 'Unknown'), - 'industry': info.get('industry', 'Unknown') - } - except Exception as e: - logger.error(f"Error getting stock info for {symbol}: {e}") - return {} - - def get_options_expirations(self, symbol: str) -> List[str]: - """Get available options expiration dates""" - try: - ticker = yf.Ticker(symbol) - expirations = ticker.options - - if not expirations: - logger.warning(f"No options expirations found for {symbol}") - return [] - - # Convert to string format and sort - exp_dates = [str(exp) for exp in expirations] - exp_dates.sort() - - logger.info(f"Found {len(exp_dates)} expiration dates for {symbol}") - return exp_dates - - except Exception as e: - logger.error(f"Error getting options expirations for {symbol}: {e}") - return [] - - def get_options_chain(self, symbol: str, expiration_date: str = None) -> Dict[str, Any]: - """Get options chain for a symbol""" - try: - ticker = yf.Ticker(symbol) - - # Get available expirations if not provided - if not expiration_date: - expirations = ticker.options - if not expirations: - logger.warning(f"No options available for {symbol}") - return {} - # Use the nearest expiration - expiration_date = str(expirations[0]) - - # Get options chain - options_chain = ticker.option_chain(expiration_date) - - if options_chain is None: - logger.warning(f"No options chain found for {symbol} on {expiration_date}") - return {} - - calls = options_chain.calls - puts = options_chain.puts - - # Process calls - calls_data = [] - if not calls.empty: - for _, row in calls.iterrows(): - calls_data.append({ - 'strike': float(row['strike']), - 'bid': float(row['bid']) if pd.notna(row['bid']) else 0, - 'ask': float(row['ask']) if pd.notna(row['ask']) else 0, - 'last_price': float(row['lastPrice']) if pd.notna(row['lastPrice']) else 0, - 'volume': int(row['volume']) if pd.notna(row['volume']) else 0, - 'open_interest': int(row['openInterest']) if pd.notna(row['openInterest']) else 0, - 'implied_volatility': float(row['impliedVolatility']) if pd.notna(row['impliedVolatility']) else 0 - }) - - # Process puts - puts_data = [] - if not puts.empty: - for _, row in puts.iterrows(): - puts_data.append({ - 'strike': float(row['strike']), - 'bid': float(row['bid']) if pd.notna(row['bid']) else 0, - 'ask': float(row['ask']) if pd.notna(row['ask']) else 0, - 'last_price': float(row['lastPrice']) if pd.notna(row['lastPrice']) else 0, - 'volume': int(row['volume']) if pd.notna(row['volume']) else 0, - 'open_interest': int(row['openInterest']) if pd.notna(row['openInterest']) else 0, - 'implied_volatility': float(row['impliedVolatility']) if pd.notna(row['impliedVolatility']) else 0 - }) - - return { - 'symbol': symbol, - 'expiration_date': expiration_date, - 'calls': calls_data, - 'puts': puts_data, - 'total_calls': len(calls_data), - 'total_puts': len(puts_data) - } - - except Exception as e: - logger.error(f"Error getting options chain for {symbol}: {e}") - return {} - - def get_liquid_strikes(self, symbol: str, expiration_date: str = None, option_type: str = 'both', min_volume: int = 10) -> List[float]: - """Get liquid strike prices based on volume and open interest""" - try: - options_chain = self.get_options_chain(symbol, expiration_date) - if not options_chain: - return [] - - liquid_strikes = [] - - if option_type in ['call', 'both']: - for call in options_chain.get('calls', []): - if call['volume'] >= min_volume or call['open_interest'] >= min_volume: - liquid_strikes.append(call['strike']) - - if option_type in ['put', 'both']: - for put in options_chain.get('puts', []): - if put['volume'] >= min_volume or put['open_interest'] >= min_volume: - liquid_strikes.append(put['strike']) - - # Remove duplicates and sort - liquid_strikes = sorted(list(set(liquid_strikes))) - logger.info(f"Found {len(liquid_strikes)} liquid strikes for {symbol}") - - return liquid_strikes - - except Exception as e: - logger.error(f"Error getting liquid strikes for {symbol}: {e}") - return [] - - def get_atm_strikes(self, symbol: str, expiration_date: str = None, count: int = 5) -> List[float]: - """Get at-the-money and near-the-money strikes""" - try: - # Get current stock price - stock_info = self.get_stock_info(symbol) - current_price = stock_info.get('current_price', 0) - - if current_price == 0: - logger.warning(f"Could not get current price for {symbol}") - return [] - - # Get options chain - options_chain = self.get_options_chain(symbol, expiration_date) - if not options_chain: - return [] - - all_strikes = [] - - # Collect all strikes - for call in options_chain.get('calls', []): - all_strikes.append(call['strike']) - for put in options_chain.get('puts', []): - all_strikes.append(put['strike']) - - if not all_strikes: - return [] - - # Remove duplicates and sort - all_strikes = sorted(list(set(all_strikes))) - - # Find strikes around current price - atm_strikes = [] - for strike in all_strikes: - if abs(strike - current_price) / current_price <= 0.1: # Within 10% of current price - atm_strikes.append(strike) - - # Sort by distance from current price - atm_strikes.sort(key=lambda x: abs(x - current_price)) - - # Return top N strikes - return atm_strikes[:count] - - except Exception as e: - logger.error(f"Error getting ATM strikes for {symbol}: {e}") - return [] - - def get_volatility_data(self, symbol: str) -> Dict[str, float]: - """Get volatility data for a symbol""" - try: - ticker = yf.Ticker(symbol) - info = ticker.info - - return { - 'implied_volatility': info.get('impliedVolatility', 0), - 'beta': info.get('beta', 0), - '52_week_high': info.get('fiftyTwoWeekHigh', 0), - '52_week_low': info.get('fiftyTwoWeekLow', 0), - 'average_volume': info.get('averageVolume', 0) - } - - except Exception as e: - logger.error(f"Error getting volatility data for {symbol}: {e}") - return {} - -# Initialize global client -yfinance_client = YFinanceClient() - -# YouTube API Configuration -YOUTUBE_API_KEY = "AIzaSyD1hA6jbyKxj6x3m96FM87Dci_MBttsHBY" - -# Financial keywords for channel search -FINANCIAL_KEYWORDS = [ - "finance", "investing", "stock market", "trading", "economics", - "business", "money", "investment", "stocks", "crypto", "bitcoin", - "financial advice", "wealth", "retirement", "portfolio", "dividend", - "options trading", "forex", "real estate investing", "personal finance", - "financial education", "market analysis", "financial news", "banking", - "insurance", "tax", "budgeting", "saving", "debt", "credit" -] - -def get_youtube_service(): - """Initialize YouTube API service""" - try: - youtube = build('youtube', 'v3', developerKey=YOUTUBE_API_KEY) - return youtube - except Exception as e: - print(f"Error initializing YouTube API: {e}") - return None - -def search_channels_by_keyword(youtube, keyword: str, max_results: int = 50) -> List[Dict[str, Any]]: - """Search for channels by keyword""" - channels = [] - - try: - # Search for channels - search_response = youtube.search().list( - part='snippet', - q=keyword, - type='channel', - maxResults=max_results, - order='relevance' - ).execute() - - channel_ids = [] - for item in search_response.get('items', []): - channel_id = item['id']['channelId'] - channel_ids.append(channel_id) - - if not channel_ids: - return channels - - # Get detailed channel information - channels_response = youtube.channels().list( - part='snippet,statistics', - id=','.join(channel_ids) - ).execute() - - for channel in channels_response.get('items', []): - stats = channel.get('statistics', {}) - snippet = channel.get('snippet', {}) - - # Parse statistics - subscriber_count = int(stats.get('subscriberCount', 0)) - view_count = int(stats.get('viewCount', 0)) - video_count = int(stats.get('videoCount', 0)) - - channel_info = { - 'channel_id': channel['id'], - 'title': snippet.get('title', ''), - 'description': snippet.get('description', ''), - 'subscriber_count': subscriber_count, - 'view_count': view_count, - 'video_count': video_count, - 'published_at': snippet.get('publishedAt', ''), - 'country': snippet.get('country', ''), - 'keywords': keyword, - 'relevance_score': 0 # Will be calculated later - } - - channels.append(channel_info) - - except HttpError as e: - print(f"HTTP Error searching for keyword '{keyword}': {e}") - except Exception as e: - print(f"Error searching for keyword '{keyword}': {e}") - - return channels - -def calculate_relevance_score(channel: Dict[str, Any]) -> float: - """Calculate relevance score based on financial content indicators""" - score = 0.0 - title = channel.get('title', '').lower() - description = channel.get('description', '').lower() - - # Financial keywords in title (higher weight) - financial_title_keywords = [ - 'finance', 'investing', 'trading', 'stocks', 'market', 'money', - 'business', 'economics', 'wealth', 'investment', 'crypto', 'bitcoin' - ] - - for keyword in financial_title_keywords: - if keyword in title: - score += 3.0 - - # Financial keywords in description - financial_desc_keywords = [ - 'financial', 'investment', 'trading', 'stocks', 'market analysis', - 'personal finance', 'wealth building', 'portfolio', 'dividend', - 'options', 'forex', 'real estate', 'retirement planning' - ] - - for keyword in financial_desc_keywords: - if keyword in description: - score += 1.0 - - # Penalty for non-financial content - non_financial_keywords = ['gaming', 'music', 'entertainment', 'comedy', 'vlog'] - for keyword in non_financial_keywords: - if keyword in title or keyword in description: - score -= 2.0 - - return max(0, score) - -def fetch_financial_channels(min_channels: int = 50) -> List[Dict[str, Any]]: - """Fetch financial channels with detailed information""" - print(f"🔍 Fetching financial YouTube channels (target: {min_channels})...") - - youtube = get_youtube_service() - if not youtube: - print("❌ Failed to initialize YouTube API") - return [] - - all_channels = [] - processed_keywords = set() - - # Search for channels using different financial keywords - for keyword in FINANCIAL_KEYWORDS: - if len(all_channels) >= min_channels * 2: # Get more than needed for filtering - break - - if keyword in processed_keywords: - continue - - print(f"📊 Searching for keyword: '{keyword}'...") - channels = search_channels_by_keyword(youtube, keyword, max_results=50) - - for channel in channels: - # Calculate relevance score - channel['relevance_score'] = calculate_relevance_score(channel) - - # Only include channels with some financial relevance - if channel['relevance_score'] > 0: - all_channels.append(channel) - - processed_keywords.add(keyword) - - # Rate limiting - YouTube API has quotas - time.sleep(0.1) - - # Remove duplicates based on channel_id - unique_channels = {} - for channel in all_channels: - channel_id = channel['channel_id'] - if channel_id not in unique_channels: - unique_channels[channel_id] = channel - else: - # Keep the one with higher relevance score - if channel['relevance_score'] > unique_channels[channel_id]['relevance_score']: - unique_channels[channel_id] = channel - - # Convert back to list - unique_channels_list = list(unique_channels.values()) - - # Sort by relevance score, then by subscriber count, then by view count - unique_channels_list.sort( - key=lambda x: (x['relevance_score'], x['subscriber_count'], x['view_count']), - reverse=True - ) - - # Take top channels - top_channels = unique_channels_list[:min_channels] - - print(f"✅ Found {len(unique_channels_list)} unique financial channels") - print(f"📈 Selected top {len(top_channels)} channels by relevance and popularity") - - return top_channels - -def save_channels_to_markdown(channels: List[Dict[str, Any]], filename: str = "Youtube_channel_ID.md"): - """Save channels to markdown file""" - try: - # Get the directory of the current file - current_dir = os.path.dirname(os.path.abspath(__file__)) - file_path = os.path.join(current_dir, 'tools', filename) - - with open(file_path, 'w', encoding='utf-8') as f: - f.write("# Financial YouTube Channels\n\n") - f.write("Auto-generated list of financial YouTube channels sorted by relevance score, subscriber count, and view count.\n\n") - f.write(f"**Generated on:** {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n") - f.write(f"**Total Channels:** {len(channels)}\n\n") - - # Statistics - total_subscribers = sum(ch['subscriber_count'] for ch in channels) - total_views = sum(ch['view_count'] for ch in channels) - avg_relevance = sum(ch['relevance_score'] for ch in channels) / len(channels) - - f.write("## Statistics\n\n") - f.write(f"- **Total Subscribers:** {total_subscribers:,}\n") - f.write(f"- **Total Views:** {total_views:,}\n") - f.write(f"- **Average Relevance Score:** {avg_relevance:.2f}\n\n") - - f.write("## Channel List\n\n") - f.write("| # | Channel ID | Title | Subscribers | Views | Relevance |\n") - f.write("|---|------------|-------|-------------|-------|----------|\n") - - for i, channel in enumerate(channels, 1): - channel_id = channel['channel_id'] - title = channel['title'] - subscribers = channel['subscriber_count'] - views = channel['view_count'] - relevance = channel['relevance_score'] - - f.write(f"| {i} | `{channel_id}` | {title} | {subscribers:,} | {views:,} | {relevance:.1f} |\n") - - f.write("\n## Raw Channel IDs\n\n") - f.write("Copy these IDs for use in YouTube scraper:\n\n") - - for channel in channels: - channel_id = channel['channel_id'] - title = channel['title'] - f.write(f"`{channel_id}` \n") - - print(f"💾 Saved {len(channels)} channels to {file_path}") - return file_path - - except Exception as e: - print(f"❌ Error saving channels to markdown: {e}") - return None - -def update_youtube_channel_ids(): - """Main function to fetch and save YouTube channel IDs""" - print("🚀 YouTube Financial Channels Fetcher") - print("=" * 50) - - # Fetch financial channels - channels = fetch_financial_channels(min_channels=50) - - if not channels: - print("❌ No channels found") - return None - - # Print summary - print(f"\n🏆 Top 10 Financial Channels:") - print("=" * 80) - - for i, channel in enumerate(channels[:10], 1): - title = channel['title'] - channel_id = channel['channel_id'] - subscribers = channel['subscriber_count'] - views = channel['view_count'] - relevance = channel['relevance_score'] - - print(f"{i:2d}. {title}") - print(f" ID: {channel_id}") - print(f" Subscribers: {subscribers:,}") - print(f" Total Views: {views:,}") - print(f" Relevance Score: {relevance:.1f}") - print() - - # Save to markdown file - file_path = save_channels_to_markdown(channels, "Youtube_channel_ID.md") - - if file_path: - print(f"✅ Successfully created YouTube channel ID file: {file_path}") - return file_path - else: - print("❌ Failed to create YouTube channel ID file") - return None diff --git a/src/youtube_scraper.py b/src/youtube_scraper.py deleted file mode 100644 index 3ab0523..0000000 --- a/src/youtube_scraper.py +++ /dev/null @@ -1,734 +0,0 @@ -# youtube_scraper.py -import os -import re -import string -from dotenv import load_dotenv -from typing import List, Dict, Any -from collections import Counter -import logging -import requests - -# Delayed import to avoid environment issues -try: - from googleapiclient.discovery import build - from youtube_transcript_api import ( - YouTubeTranscriptApi, - TranscriptsDisabled, - NoTranscriptFound, - NoTranscriptAvailable, - CouldNotRetrieveTranscript, - TooManyRequests, - ) - YOUTUBE_APIS_AVAILABLE = True -except ImportError as e: - print(f"Warning: YouTube APIs not available: {e}") - YOUTUBE_APIS_AVAILABLE = False - build = None - YouTubeTranscriptApi = None - TranscriptsDisabled = Exception - NoTranscriptFound = Exception - NoTranscriptAvailable = Exception - CouldNotRetrieveTranscript = Exception - TooManyRequests = Exception - -# Setup logging -logging.basicConfig(level=logging.INFO) -logger = logging.getLogger(__name__) - -load_dotenv(dotenv_path=os.path.join(os.path.dirname(__file__), '..', '.env')) - -YOUTUBE_API_KEY = os.getenv("YOUTUBE_API_KEY") - -# Financial keywords tracking -FINANCIAL_KEYWORDS = [ - # Macroeconomics - "inflation", "deflation", "recession", "recovery", "growth", "gdp", "unemployment", - "interest rates", "fed", "federal reserve", "monetary policy", "fiscal policy", - - # Market indicators - "vix", "volatility", "spy", "qqq", "dow", "nasdaq", "s&p 500", "market cap", - "pe ratio", "earnings", "revenue", "profit", "loss", "dividend", - - # Investment strategies - "options", "calls", "puts", "strike", "expiration", "premium", "delta", "gamma", - "stocks", "bonds", "etf", "mutual fund", "portfolio", "diversification", - - # Market sentiment - "bullish", "bearish", "neutral", "optimistic", "pessimistic", "fear", "greed", - "market sentiment", "investor confidence", "risk appetite", - - # Industry terms - "earnings beat", "earnings miss", "guidance", "upgrade", "downgrade", - "buy", "sell", "hold", "strong buy", "strong sell", "outperform", "underperform" -] - -# Data cleaning patterns -CLEANING_PATTERNS = [ - (r'\[.*?\]', ''), # remove content in square brackets - (r'\(.*?\)', ''), # remove content in parentheses - (r'\d+:\d+', ''), # remove timestamps - (r'[^\w\s]', ' '), # remove punctuation - (r'\s+', ' '), # collapse multiple spaces -] - -def get_channel_videos_via_rss(channel_id: str, max_results: int = 10) -> List[Dict[str, str]]: - """Fallback: fetch recent videos via YouTube RSS feed (no API key needed).""" - try: - feed_url = f"https://www.youtube.com/feeds/videos.xml?channel_id={channel_id}" - resp = requests.get(feed_url, timeout=10) - if resp.status_code != 200: - return [] - import xml.etree.ElementTree as ET - root = ET.fromstring(resp.text) - ns = { - 'atom': 'http://www.w3.org/2005/Atom', - 'yt': 'http://www.youtube.com/xml/schemas/2015' - } - items: List[Dict[str, str]] = [] - for entry in root.findall('atom:entry', ns)[:max_results]: - vid_el = entry.find('yt:videoId', ns) - title_el = entry.find('atom:title', ns) - if vid_el is not None and title_el is not None: - items.append({'video_id': vid_el.text, 'title': title_el.text}) - return items - except Exception: - return [] - - -def get_channel_videos(channel_id: str, max_results: int = 10) -> List[Dict[str, str]]: - if not YOUTUBE_APIS_AVAILABLE or not YOUTUBE_API_KEY: - # Fallback: try RSS feed to list videos without Data API - videos = get_channel_videos_via_rss(channel_id, max_results=max_results) - if videos: - print(f"Info: Using RSS feed for channel {channel_id} ({len(videos)} videos)") - return videos - # If RSS also fails, keep previous warnings - if not YOUTUBE_APIS_AVAILABLE: - print("Warning: YouTube APIs not available, skipping YouTube data scraping.") - if not YOUTUBE_API_KEY: - print("Warning: YOUTUBE_API_KEY not set, skipping YouTube data scraping.") - return [] - - try: - # Disable discovery cache to avoid warnings - youtube = build('youtube', 'v3', developerKey=YOUTUBE_API_KEY, cache_discovery=False) - except Exception as e: - print(f"Error initializing YouTube API: {e}") - return [] - - try: - # Check that the channel exists - request = youtube.channels().list(part="contentDetails", id=channel_id) - response = request.execute() - - # Ensure response contains items - if 'items' not in response or not response['items']: - print(f"Warning: Channel {channel_id} not found or has no content") - return [] - - playlist_id = response['items'][0]['contentDetails']['relatedPlaylists']['uploads'] - - # Fetch videos from the uploads playlist - request = youtube.playlistItems().list(part="snippet,contentDetails", playlistId=playlist_id, maxResults=max_results) - response = request.execute() - - # Ensure response contains items - if 'items' not in response: - print(f"Warning: No videos found in playlist for channel {channel_id}") - return [] - - return [ - { - 'video_id': item['contentDetails']['videoId'], - 'title': item['snippet'].get('title', ''), - 'description': item['snippet'].get('description', '') - } - for item in response.get('items', []) - ] - - except Exception as e: - print(f"Error getting videos for channel {channel_id}: {e}") - # Provide more details for API quota errors - if "quotaExceeded" in str(e): - print("YouTube API quota exceeded. Please try again later or check your API usage.") - elif "forbidden" in str(e).lower(): - print(f"Access forbidden for channel {channel_id}. Channel may be private or restricted.") - return [] - - -def filter_videos_with_captions(api_key: str, videos: List[Dict[str, str]]) -> List[Dict[str, str]]: - """Use YouTube Data API v3 to keep only videos that declare captions available. - This improves transcript hit rate but is not perfect. - """ - if build is None or not videos or not api_key: - return videos - try: - youtube = build('youtube', 'v3', developerKey=api_key, cache_discovery=False) - filtered: List[Dict[str, str]] = [] - for i in range(0, len(videos), 50): - batch = videos[i:i+50] - ids = ",".join(v['video_id'] for v in batch) - resp = youtube.videos().list(part="contentDetails,snippet", id=ids).execute() - details = {it['id']: it for it in resp.get('items', [])} - for v in batch: - it = details.get(v['video_id']) - if not it: - continue - caption_flag = (it.get('contentDetails', {}).get('caption') == 'true') - is_live = it.get('snippet', {}).get('liveBroadcastContent') in ('live', 'upcoming') - if caption_flag and not is_live: - filtered.append(v) - return filtered or videos - except Exception: - return videos - - -def video_has_transcript(video_id: str) -> bool: - """Quick check if any transcript is available via list_transcripts.""" - if YouTubeTranscriptApi is None: - return False - try: - transcripts = YouTubeTranscriptApi.list_transcripts(video_id) - for _ in transcripts: - return True - return False - except Exception: - return False - -def clean_transcript_text(text: str) -> str: - """ - Clean transcript text: remove timestamps, punctuation issues, and common ASR artifacts - """ - if not text: - return "" - - # Apply cleaning patterns - cleaned_text = text.lower() - for pattern, replacement in CLEANING_PATTERNS: - cleaned_text = re.sub(pattern, replacement, cleaned_text) - - # Remove common auto-generated subtitle artifacts - common_errors = [ - r'\b(um|uh|ah|er|mm|hmm)\b', # filler words - r'\b(you know|like|so|well|right)\b', # colloquialisms - r'\b(transcriber|speaker|narrator)\b', # transcriber tag - r'\b\[.*?\]\b', # square bracket content - r'\b\(.*?\)\b', # parenthesis content - ] - - for error_pattern in common_errors: - cleaned_text = re.sub(error_pattern, '', cleaned_text) - - # Final cleanup - cleaned_text = re.sub(r'\s+', ' ', cleaned_text).strip() - - return cleaned_text - -def extract_financial_keywords(text: str) -> Dict[str, int]: - """ - keywords - """ - if not text: - return {} - - text_lower = text.lower() - keyword_counts = {} - - for keyword in FINANCIAL_KEYWORDS: - # Count keywords Frequency - count = len(re.findall(r'\b' + re.escape(keyword.lower()) + r'\b', text_lower)) - if count > 0: - keyword_counts[keyword] = count - - return keyword_counts - -def analyze_transcript_sentiment(text: str) -> Dict[str, Any]: - """ - Analyze market sentiment of the transcript - """ - if not text: - return {"sentiment": "neutral", "confidence": 0.0} - - text_lower = text.lower() - - # Bullish keywords - bullish_keywords = ["bullish", "optimistic", "growth", "recovery", "strong", "beat", "upgrade", "buy"] - # Bearish keywords - bearish_keywords = ["bearish", "pessimistic", "decline", "weak", "miss", "downgrade", "sell", "crash"] - - bullish_count = sum(1 for keyword in bullish_keywords if keyword in text_lower) - bearish_count = sum(1 for keyword in bearish_keywords if keyword in text_lower) - - total_sentiment_words = bullish_count + bearish_count - - if total_sentiment_words == 0: - return {"sentiment": "neutral", "confidence": 0.0} - - bullish_ratio = bullish_count / total_sentiment_words - - if bullish_ratio > 0.6: - sentiment = "bullish" - elif bullish_ratio < 0.4: - sentiment = "bearish" - else: - sentiment = "neutral" - - confidence = abs(bullish_ratio - 0.5) * 2 # confidence in [0,1] - - return { - "sentiment": sentiment, - "confidence": confidence, - "bullish_score": bullish_count, - "bearish_score": bearish_count - } - -def get_transcript_with_fallback(video_id: str) -> Dict[str, Any]: - """ - Get transcript prioritizing list_transcripts with language selection, translation, and backoff - """ - if not YOUTUBE_APIS_AVAILABLE: - print(f" ❌ YouTube APIs not available for video {video_id}") - return None - - def _fetch_text_from_transcript(transcript_obj) -> str: - try: - items = transcript_obj.fetch() - return " ".join([it["text"] if isinstance(it, dict) else getattr(it, "text", "") for it in items]) - except TooManyRequests: - - import time - for delay in (1, 2, 4): - time.sleep(delay) - try: - items = transcript_obj.fetch() - return " ".join([it["text"] if isinstance(it, dict) else getattr(it, "text", "") for it in items]) - except TooManyRequests: - continue - raise - - try: - transcripts = YouTubeTranscriptApi.list_transcripts(video_id) - - - try: - t = transcripts.find_manually_created_transcript(["en", "en-US", "en-GB"]) - raw_text = _fetch_text_from_transcript(t) - if raw_text and len(raw_text) > 50: - return process_transcript_data(raw_text, video_id, "manual_en") - except (NoTranscriptFound, NoTranscriptAvailable): - pass - - - try: - t = transcripts.find_generated_transcript(["en", "en-US", "en-GB"]) - raw_text = _fetch_text_from_transcript(t) - if raw_text and len(raw_text) > 50: - return process_transcript_data(raw_text, video_id, "auto_en") - except (NoTranscriptFound, NoTranscriptAvailable): - pass - - - try: - available_languages = [tr.language_code for tr in transcripts] - except Exception: - available_languages = [] - - for pref in ("manual_other_to_en", "auto_other_to_en"): - try: - if pref.startswith("manual"): - tr = transcripts.find_manually_created_transcript(available_languages) - else: - tr = transcripts.find_generated_transcript(available_languages) - tr_en = tr.translate("en") - raw_text = _fetch_text_from_transcript(tr_en) - if raw_text and len(raw_text) > 50: - return process_transcript_data(raw_text, video_id, pref) - except (NoTranscriptFound, NoTranscriptAvailable, CouldNotRetrieveTranscript) as e: - - print(f" ⚠️ {pref} failed for {video_id}: {e}") - continue - - - try: - for tr in transcripts: - try: - raw_text = _fetch_text_from_transcript(tr) - if raw_text and len(raw_text) > 50: - return process_transcript_data(raw_text, video_id, "any_available") - except Exception: - continue - except Exception: - pass - - print(f" ❌ No usable transcripts for video {video_id}") - return None - - except TranscriptsDisabled: - print(f" ❌ Transcripts disabled for video {video_id}") - return None - except TooManyRequests: - print(f" ⚠️ Rate limited when listing transcripts for {video_id}; retrying with backoff") - import time - for delay in (1, 2, 4): - time.sleep(delay) - try: - return get_transcript_with_fallback(video_id) - except TooManyRequests: - continue - print(f" ❌ Rate limit persists for {video_id}") - return None - except (NoTranscriptFound, NoTranscriptAvailable) as e: - print(f" ❌ No transcript available for video {video_id}: {e}") - return None - except CouldNotRetrieveTranscript as e: - print(f" ⚠️ Could not retrieve transcript for {video_id}: {e}; trying alternatives...") - return try_alternative_transcript_methods(video_id) - except Exception as e: - error_msg = str(e) - if "blocked" in error_msg.lower() or "ip" in error_msg.lower(): - print(f" ⚠️ IP blockage suspected for {video_id}, trying alternative methods...") - return try_alternative_transcript_methods(video_id) - elif "not found" in error_msg.lower(): - print(f" ❌ Video not found: {video_id}") - return None - elif "quota" in error_msg.lower(): - print(f" ❌ API quota exceeded for video {video_id}") - return None - else: - print(f" ❌ Error getting transcript for video {video_id}: {error_msg}") - return None - - -def try_alternative_transcript_methods(video_id: str) -> Dict[str, Any]: - """ - Try alternative transcript methods (language enumeration, translation, backoff) - """ - languages_to_try = ['en', 'en-US', 'en-GB', 'hi', 'es', 'de', 'fr', 'ja', 'ko', 'zh-Hans', 'zh-Hant'] - - - for lang in languages_to_try: - try: - lst = YouTubeTranscriptApi.get_transcript(video_id, languages=[lang]) - raw_text = " ".join([it["text"] if isinstance(it, dict) else getattr(it, "text", "") for it in lst]) - if raw_text and len(raw_text) > 50: - print(f" ✅ Got transcript using language={lang} for video {video_id}") - method = f"direct_{lang}" - if lang.startswith('en'): - return process_transcript_data(raw_text, video_id, method) - - try: - transcripts = YouTubeTranscriptApi.list_transcripts(video_id) - tr = transcripts.find_manually_created_transcript([lang]) if lang else None - if not tr: - tr = transcripts.find_generated_transcript([lang]) - tr_en = tr.translate('en') - text_en = " ".join([it["text"] if isinstance(it, dict) else getattr(it, "text", "") for it in tr_en.fetch()]) - if text_en and len(text_en) > 50: - return process_transcript_data(text_en, video_id, f"translate_{lang}_to_en") - except Exception: - return process_transcript_data(raw_text, video_id, method) - except Exception as e: - print(f" ⚠️ language={lang} failed for {video_id}: {e}") - - - try: - import time - for delay in (1, 2, 4): - time.sleep(delay) - try: - transcripts = YouTubeTranscriptApi.list_transcripts(video_id) - for tr in transcripts: - try: - items = tr.fetch() - raw_text = " ".join([it["text"] if isinstance(it, dict) else getattr(it, "text", "") for it in items]) - if raw_text and len(raw_text) > 50: - return process_transcript_data(raw_text, video_id, f"retry_any_available_{delay}s") - except Exception: - continue - except TooManyRequests: - continue - except Exception as e: - print(f" ⚠️ Backoff retry failed for {video_id}: {e}") - - print(f" ❌ All alternative methods failed for video {video_id}") - return None - - -def process_transcript_data(raw_text: str, video_id: str, method: str) -> Dict[str, Any]: - """ - Process transcript data - """ - # Cleaning - cleaned_text = clean_transcript_text(raw_text) - - if not cleaned_text or len(cleaned_text) < 50: - print(f" ❌ Transcript too short for video {video_id} ({len(cleaned_text) if cleaned_text else 0} chars)") - return None - - keyword_counts = extract_financial_keywords(cleaned_text) - - sentiment_analysis = analyze_transcript_sentiment(cleaned_text) - - return { - "raw_text": raw_text, - "cleaned_text": cleaned_text, - "keyword_counts": keyword_counts, - "sentiment_analysis": sentiment_analysis, - "word_count": len(cleaned_text.split()), - "financial_relevance": len(keyword_counts) / len(FINANCIAL_KEYWORDS) if FINANCIAL_KEYWORDS else 0, - "transcript_method": method - } - - -def get_transcript(video_id: str) -> Dict[str, Any]: - """ - Get video transcript, clean and analyze it, with detailed error messages - """ - return get_transcript_with_fallback(video_id) - -def analyze_channel_topics(documents: List[Dict[str, Any]]) -> Dict[str, Any]: - """ - Analyze channel topics and keyword frequency - """ - if not documents: - return {} - - # 合并所有关键词计数 - all_keywords = Counter() - sentiment_scores = {"bullish": 0, "bearish": 0, "neutral": 0} - total_financial_relevance = 0 - - for doc in documents: - metadata = doc.get("metadata", {}) - if "keyword_counts" in metadata: - for keyword, count in metadata["keyword_counts"].items(): - all_keywords[keyword] += count - - if "sentiment_analysis" in metadata: - sentiment = metadata["sentiment_analysis"].get("sentiment", "neutral") - sentiment_scores[sentiment] += 1 - - if "financial_relevance" in metadata: - total_financial_relevance += metadata["financial_relevance"] - - # calculate financial_relevance - avg_financial_relevance = total_financial_relevance / len(documents) if documents else 0 - - return { - "top_keywords": dict(all_keywords.most_common(20)), - "sentiment_distribution": sentiment_scores, - "average_financial_relevance": avg_financial_relevance, - "total_videos_analyzed": len(documents) - } - -def load_channel_ids_from_file(file_path: str = None) -> List[str]: - """ - Load channel IDs from the Youtube_channel_ID file - """ - if file_path is None: - # Default file path - current_dir = os.path.dirname(os.path.abspath(__file__)) - file_path = os.path.join(current_dir, 'tools', 'Youtube_channel_ID') - - channel_ids = [] - - if os.path.exists(file_path): - try: - with open(file_path, 'r', encoding='utf-8') as f: - for line in f: - line = line.strip() - # Strip comment part - if ' zbIo&hM3lnjcEq&o$vYzFXpFJEkE=v2*&8mdQJ3EN|PsbLP7@^;2eb_Awkq zy=|*1%{ZntD#O08b#~_97p-%${T%Mj-8MPqZgg&R;oX?MOJCeYQbH)5_ScL_O|i;B zqo>X<+~-9u;1?9`wm#COy1*}PSL-Y+sors6;ewiv<6Vwj^12_qrpjkpNcqjml=yKE zcdX~0e6V=E?h^A4=k%AB3$!e3iqTXYwy9AXX$fJWRV~5W%uHK54PC^~3hysEZ5nz* zJA>-lZc>moIW1yfmd&_d&VJK*K-A`cxD;@XH`YAhUYzX~!+O)59EU09%Y}kh-N zI?h@>eC4@0zmNK!TSqt#oh{Dx(c?5_k2#kVmE(VTOkGZ+n`)fR^pN#)w;047c(!GI z>~=lV24zAc8R&Ir?beBlbfdS0o{RY-*{ihe%C`6_pFec`LIQlZuWHp<9~!oYft|Bb=Vt~* z{S?!&?ULCxi}e<$GOGz;L0!R2tpjJCZOQie9CLfz+y&OKYkt&u(lJK7{_(EZ9kx?; zi$e-t?2fB^^&tJcDV)Ih@<6`sEN6l-`&u}>0 z{#T~g>-PQG{?4xowuLWvbs#t9uv6lm<8t=FeJek|g4C3LwqjVwp~632TOB^6Rq*<7 zvGn$z8%j=ob}l}4dDwuG3Ws^=C5n@=IloFCZd`cu{x9q3IM(mq9CtkJVn9?Z0<@lw_a<=UpA!m}-Z+=FmlRQ0yQF+H3lLv1V6b-I1 zUdng*qV^CJ6;5^@Ik&#p88_|UUUqG?SxI^ENT-JK+F-L=lg{?k>hdaI3CAitk`nYS zm)EE+>RXiuk9Bq0hEc&G6EMzYBA0F5T#FH)SvVRUQ?@=OtJ0)~SglqWahD_`g694} zbl!D^tUhJ?xXGt3nuSe0;6U4(b}zm! zaXs0VoVH=;3Co>}X1qQ+e!!`YlV4mV4yCt6%!vU^6dzI6I_4kQ1#||lR0~jT`-$fdu-j{WpBDJ%GSGh5JNXlx4N`< zTj2E7wXw2;$FLnOA(IdCs`~Ko(t|#7mG#;gn&uAQRz%PJs(sn>x~twFr8an%hSsucmERlr zGeK8T?&E7Xqr7G8o{dSWfFTEy{uu9x90j|dq?j~mM#ZfubM{r-p2p1gkhADKz%t&p z6}OIl^mFg%zEE;gGK<9}a01I>bw=a9_kEhR2BRprr3tUrgmXZ&dA?!rMm^{e&fXLL zKp#Rc2l;iU>48V>8nRc&1^&J9u>~42&tF^d~aPUmu z6+B}&W;h(5hHwYpvjm!ElOFaO9}^h=rf$NUI!kDlcX^KcY7X3;+}dIH%)vHbi(SAL zbNC}HH<@1S3{$M6|N73c1uu49y9AEJ->;0nFNWcEogaO*93g(hQ`2k7VlZye+oQcf z3?;c&XAj$C4K63!|Jvkg1BVYV4{MOJOYJP6#*KU4jcW^R6Yc?b2c~h#VZ)8Po_kj5G~yuga!KH?Vfa`Tqo5yx=6ATN4VCu^!}B7|)Fe=HO~B3|MS; z`54&z)El4vFp!;#cRi5d9{vK#1FG1qTpxH?$>JbpA;U!`B8+alT*?YE*|@gnmC6Tz zDbu?(64=YmQ%a$9k(=MBe{JB$$vbD>F13QwtchIgEy>P^6@VB1N@tP;mYH8nG{0yK znK#L&C2y=@I;+NIvI)$_j+o3a0$r9HS8WE1*>V>%h|#>d{k2pA^G4tbbC@Cwt_)Jm3Z`FMYf~8_Mj9IyVU+;<~3z zqyrBMRz3W8X0IN+pFMF!Ml}J8lx3b?em`hq(L|o9j0Led`M=G#CBRkSSe23Xot}PT zh2&D_S9 z=6Z84DdIIK4dG4mFO~dnVpvy{H1`@9!B+b`N(_%!zuE1RK*B^@m)=3rpjbH{6vc}o zJ3kmfU3>)mopNT*0+k7@(*H+l_{tg#*=m&x9NV%Aul{WhgOzIs;Sk zAnVsX;u=03ArY@X01n#6QqB44G;p5}-gYN=7*sLZd(sO`qN)!HcQC|64VHq)o#EUwz1fS|)^H~pXWUR9 z-%L>KWVt1@4?4GaqOAlx{rb2zkZs3GY_NejD@422by$MO;M(K?UvOw2&C;C{E``tp zk0CQ#P*ZNVyjZi*46u_am+xA@BA+{fI%ZJ%V!hwx8bk0aj5-zhhY_5QZbo(~fui8E z^+oOv14v4F%uN=6esrIl2h%%hrVn@1h3DzHayD!Z9p`jln+`TyH!x8f1m=$??fcS8 z$4__|zv9P7`YJoNy_?Q=nQN^d*-mpGuX=Z;_bvUv$uPwCw-0o+q9tR=?$7ia_bvZg zz5PO0zh4@0F60|MwEbvkVDmS+I665)2M#SVoHuoq78w2zC01Y32KlkDx=^7$9GaMT zNl>f}bEA{7A@A1Lp3503gqnEDd+z4z9RrT&!l)HIl&^t;!e+nwau%NkVB?47N?E`a z0n9?vHURs1ZYRai8#yG`=1*hzZ9R(>XaaY)SVxTAqYLo?&HqM*Vi1h?x;uAkkSp{lsDK8!0|cX|K9gnx z2cq4OfKKqk9R%aSMFuvDs@m3>SwhejpF_w``$Pw$E|ot?+cx5g4EzzqRA6(_Z?e^~ zV))%jH7a|C1nV61Kc}7*Ky~8tqQvJCaPxW0HMfDaSrQq?FT@C+aK>KdUL;_{>TdVv z-bA>MV9YHeFjLyUj20SzD*Y-x1)Np^7{G%0ES8D~4~xI1c@HoEvrFogg^PJ`t5!H> z>OcW6PsxX>kw>*sk*J;b#$au_tv1Bx-w`Bnz^FJyt;9;ILDmD~j1kKW=Wgrt*M>Lt zaxNRjCPb+b;7qHXRu|K$0~PjiIRT^Yjf`7kM!-jQa?cIc4_bfRTO-9@7WBOtck}3& zZ?tOprM0YiU+E3WDS;bJ5Mh0BU`(g-2fg=EPvMX=Y|z|gBHlOp>jaw{r4PT-XOkz` zv+cgpeoL6g7y8?pfV8kHpXq8%%s+wwpXuZqArr<9{YKyZ!94nCqdzKNe@N-08^bqj zy6fCUC*RUBj;-vboetce68`Qz?YrgMVbzfLv|ZhA^^Y>U=q~=Q;d9@1((8p85x*IA z)BEPcMXk?&M;B&qZQTC;UpjB2V#J#0b~+=h`Nc-@dU*h{{*N{`9iUB6D{n0upulHYiZ=-%-^7eK*ed48LWnT|%`}7rkYS>$P z-B@Oz-qBYK-S>=N|C%;lbYMzw&pZ0Z*+qImszG4?Vt?G&#hrARoocntu}-?3<*=?j z;T_#`;+|ypTN^0We{z}Z>7f65`-Xb)PZzyt&cD?{&U@NcuP^(ru=n)gX(3K0{(4WF zCT>TS>ZF(S4_!As<*(T;y3L)mJZE;%KjvNZgKNy(podWQN7bmV;tagkdeJ@)x*i|N&U^phd+ zrX!S}=uc5AQz{;QqI-Xd+OX%7^uEyIB~dAzp#+>Ty<_7O#D=4nmtNeYV8NZQN5w;; zzSBXk*L0VU)PlLd!{-(?tg!rJl_j*sc%q z4xeTj4}7HsKGFgX;*R=|!gmYU!i7O?*V1T1KAecI$q+)}%N2jTT)~Ib15h%{NdQAz z#ux?-62jqriHg8KU5PpIDs~b2!;=&9`@j$?!^}L~ry4`DeBYHA%-@!CT#R9wYt>}e zDr4B0gO1G@q@oN;$pW7zo2zW!8o|zy+99tR#E|^FPpJ=QWKUBw^+oV%(5xf#)(apj z{~dR|33RYE_|5n1R>}-)I+TQE+ixy7?Mqzi^geP3`lytN-1!PqJ^1 znBtCtWT5g|w}t?_udM*uhLn<)+~5tVXK?0TYP zE~NvC`aZ4^M1|)E%MHQqTl-l0vk)Hh+*FSsD{t(1WCYI@ zxbGfQRWtT^GNlhk4kRn}AbsP@-M6Ah2-zBhu|OL-?2F|3;5g#OQOvc<|n~f>Aou`R$n>sl|I~N)B2Cy4_YbncyL7Zk@gT>;^Ng)?E92DFxZ3qH@5pD zy?(mu&MVK~(|xSR=z$$5DEwpVt0QS$w1M4Jv?(?i_fLl@)QbtGr@wQ-yyDKXH@|$M z4IZ37*k0U0m*}P?AOFUJ_4AK#Q-cUF|Mp>e{c#SA98+06>0d+0Tp~#Lx9k<|SE%!G z^C1=(H$G07x9lsO4!%9tYyYLat}Z+gw^;}Vzj9=6_6mWn9=`61mk_j^JA8J{V?(4@ z(!7@C0$`v0S~ky802Qx)*)TuH0E#bM8uFVRA0jV3+Ph*STH5S;2_?Pl^rbxuM-GVP zLQm=V#37IMVMf`8+DX&&LC^cj+r&j2SZ);jOrA%<)pxsX`cCOU?T$YW-Zf{#PM1mL ztO{*7e{|$5@k%Xt-0$iMkZ(O2#+MqwnBSJiJv$--^|$v~-}ec@#ryuC=S~=!2qUdv zN&xTXZR<0&=R>r|ucvNqdMG0Y)5}+q5k8eMDQzry`JEX0Pf(7$3+Bo8;4b&rueX; zB}IrD{>3kYGK6k6Rm21B9UDduu{VaVyr!3*pBjT(RjX$9S~J-EOl#&Z`>kMF!YG}W zb0pvr-|VeQd;W)ige7?ASQhPlC=~;j3szw7S4A0t1^-V2u89ShuxpfN;5d;9&E_z{ zAnfX*HWSDZHS6Q-O7ctepS}y6=L6SS0V{CZKH?VMb6aK)vNVK{t=*&v26A@@>YpWf zK$s|*Lk$97QGz}f?_0A6eVi?Xuq52cj^G+i-~yt7^^V(O41@Wzurf|0ZRJuTsIxW^ zTo(bQ8>PYln#ju~jvzZEL&q_njugSNtZdmZw2U3w3}H*O#>EKu6$3CJ3*q&eHu)GH zRV@8HlvS8|PiyxYEMje3daT2NYI}d9?h1-#kx_m?M9V)yKy+s=y2$}o82tn8s zx%SC?1Mqrtlz$f!6P!{`Sc#Htq08a7t^ZsyfXzG)&9X2X5F0TM8Q3;^IR0b*p8lQ@ z-fFJ21e3%Yhu(BZ;h^ch3soX1M1I=q(YwkJ4tuP&)eAHN(=6v)>7N3apVs-^W(^;- zzi)gHrSp#dvp)vCrTOEY+8VZhqhn^I4;)fQK(>92TpNBFaHyo9QUq5^g2@zVTbo=A z8<)SH%3q`d5|Ot7N;X2&ASCpWmqWcOI-n#3O%X~C)Xys0FSa&;aMSG}rrU)uuOnBL z8Cz_S^+5=E4;XC~g2k=SrY=3ofop_q&*t)egZ7GF`;n?|^s81i8-_APHI85DAnR)No%<9# z*yHs3V~!5Mhl$@N{UD_gR2&JrXP#O4;WZmRR~xO3Nnt@({p#2CtF^#7EkzDEZ!dXU ze)0z13CU-;y8AB~Qo?~2;Q3+h*JX!Hph9Vyd~&b}9ACt5H^6C&bFFo*{44#+!SdnZ z-@nnN_5#$Zw87&uC+^aL!1O*l3i7Y#;0%QW2c~d?^`HV_pkXgEht9c5ftx3br8I<^ zTc(F{r}1E4is(`7Yc9A%*I)4LIan^Mj0e8h&pgkY>740e7O~5 zufEMIY%qaZQJx_#?TkcKJX}_Vp=Mjc{$3|n(^L!C@Vpth z(E2_&!Ty8^xQVh2aI!qCocnD5>0%Bw1+hdODb+p?WWJ^47oaEWe2?~y!f-` zx)m%od757|Q3ei`*K65xKGVby+qT-1eRLCZyOFB5^d7$kS$I1p~z4Z5L1`~Nt`)_KQ`=|oHx4vWiv&4_|nSS@yO=llw9-rx1kC|0a z4{f%Z0jgfpQ?_pn8yfI|R&M=ZzV*Xb`gJGsAfVN#ZO3lj7y7Nirfn$)ztF{Q{~W0g z>Z6~QoH_Pc`x{*rD>j)>@r_REx76?SQ?ab#=$X%S2jY*F@n7hly7861xkGdRtFaE0 z_q#RR80F)%cy5p`#6C{!I?f}Yy+2YCP~MN+u%NDg#>0Z2iy1b|3*e)lj$p&jRg4a- ze6pl)hrTZS><9@x)LYxC-zj+9zpB)OAN>v2hZ9=Aw%vY2!HR-^{x}k$14h;Fc8vZ_ z3*?7&vrc#Gf_L1A-E=D@^%j8+INv|TZ@<8Wuj;$nF$R=0R-9ObzSJ=~nZi&il2cqB zs9*APd9v?xLw`$!SvB(abeF{>?Nt|zV84hZLDzFuP`tnCixF(YD5wL&r5YaLjr+x7 zUR#a0RYZ|cCTbS|7yRS%S>so7;M>#N&n*&+#NLKnjWPTc)F6&9#y@D!l*rp;)i6cF zTuv}1TFYf$>5Bfjg{8ECOG)5ZeKH}H3QQ>%2=~jy_{-u48<1{3C7r}5%n%}JV3{B? zJ4PC8$Q=t8CPbNHCX<9xhv12Vx(Oj*&rjfxqTu)%{PoTqh;)yEP5Wx|5i$`|9BK>{ zv(*UleiYRhQ{GVeTtc`@^9%_O%*dhKfELLOaE&l0y_Jig@D%;u5VPdMoPZ+h_`kWJ(j`5ug<#eu;;9_W0hPhRsf3G~o|fCI^M zduiKT`{(Kg0<BESN7sr|H;6QF`ufejXy1>5wg}-Wn4s^w^z09R-`0CxV_}g1;a2q?Y z+2^SiB6&A3pNe>vvXG>0$kWw9)?5SK46kbpHGhJ=n9d z>d^Wg>Jga?N0)KPIrElmpf&L}!Kx1%( zDjnm6QfT_*5SDUu0Q`7oRr4ER0yWB#4(DG7!mQX&#$1IX}bCbg?;L)3^RY~WOi3pi;(|D-`SRv%dZxH7> zzP-JIJxB^CHa^a}dV)Xh--g|-^nbm#S5 zYuGEw5XXL^XQrB_UF_(lM;)nYon&bPe^g&yG(N9~wnx*If2K9?{t+&DdK8@V{g7Sr44Ek zWq?S;V-dwyYQd?we62-mbRe2uy!-E4+8D7rg3UP?{(rgoPtPwhn8ibNJrxW=5x#@1q?mQZEt~NX|V%5m?ATMcw<+Gy(Fkcj@ z*U(A7In(=S)jMODopI+=;~IU?Zhy@>iT4xLjx(q(mPnwvAMF%E+V2nZJKhPwql6+C zb@1KHaR0Pt#^M@%yNCUYUjf{0!`YW9Sax1&^UxSVgH@;QSC#?Zmoiy|)0}xc?@JN5 zEZZ*1H6Xk$W#CPB@a_zxAFy6fD|mk5JTCWjI1E4FO-+G`mkyEeOq9W;Lc#h#5jhU{ z>&&Qz(Sffp7c&s&Wp0MlNU#wVVHzs3FPg#9JR?jg45l1mmWVRK|296?P!3=r%Fx4| z1VjQWuG$)wisa^mOe~PPI9tH&nWI;6I!vMAKs&A**4Wn&hOaafQfcBMeOwq^`YO&7 zli#ZNRaBe^!si&2saGS+usZR>+RY-!sQo0_`@0ZUjO9-?Ab8SPGbI<2KISHT%oV^) z+bEf8DHnG67`WWm0oFewDs5sZ7}AzUZsAHbd>kKr`*s(^vHycdYuxxXn5`^TiE&(2 zq7}w+7UbOBy4vap2a-fphAv#tHmSZ!a=+7aUHQRc)aI~I{wp)omk?2`1)&$ute~u3 zO7I^Bl*|*yuUWHU+ks$ogM2w3^fP|YCQC(kxB?RXh39X?zp|m#HfP?|;aU)a@#uKA zHtc?$mq9>t;T7a=e$XBMFUS#pey3kA&3rQbVjq1=DQ0&Uhjp35A-P`tsv{>9%(xdjkl<) zEFg^ckuK20%a$5;(~B4CzPOk2i9ResjebWzHcE&cb>|&Th*~W=ec#ZZwVt(yl)R!h z7#QaqUGa=Qo@iDB^&~t%5_(qiOWI43JaW;zC$y^4eb+CRe6YN69Uo8V^ZzpR^dtJv z1b(cjbN&Om@?s`A!G{7`de6O;s|#u8?%Z`yw$dlQMRxzmzeCFo?w+@-`8xe*(GJI) z`4nWWHsSwuQ5OXM@II!En7vkzJZaCpn}z0(fBBzZ`>qd$<8RY9 z@@=|lktk1$^On2(c>?Y}WKI3Narv>%PbTl8n;#p+o|BX+VQuvOF5~fwg-8~+y4=WB(IBQa(?c0~@Vn5m`t{(1=n=eGjBX-$M zn`eIu;l%zN-qTqk7^c9`A%LSG_Lh!$;g%r&!^#kE!|U_pzK;mDUFEmiAPn@)zI8k1K-hwlHMR1 zDwxosAQ8u51LX z^oeju9tJ&_{2~8)2;_^DmV~{u)BqK)(jMNG_*^jT0cQ6Q=j;LB0Zvk|tq>_057;Jg^B`e`2{Sax6)A~42KtH>Z`rngfV5tw{= zFHyUp(g4Euq`Vq-Q4flJYqvl6!vI{Rt=33}x5&9Ll`*6_TsR%=P3ge|DTV>dkJCgd z140%pp-6DxN$l88(kH)9(}f0ezRVB{CH^1E-UOkFR8Asx^?T;y|=nPmpi=xBE(s3Mu5m{8*Gilp{N*{}?rT z+b8^3WYD&mJ2UF`U!U>Fh{Y~{4<@K1l97ELM_ch@SDCZE1-G2`2%WL#BQ7~H{nj?c zdpt&4TN#E~)Up1od!Oq;P4GN>tw{Ui=)x0^E52aif0i28w|(DoZ&out>Z);$`hxq* z=QV5({(=`eun#Vt`w4Gy!kv`wT5*!L-}HhptvKz8ld=scVByPp*%Eqx!lHe@+?ni# zsLS_9IdmED0jD|*7sl?W!+#~tO7R|Bi;o2sR2mn&#T%V|X&bxQh4QYXXt`QICEhPw zqCYRBx+x5Xd-NWMusJXBi?9d7ch2Qe8oGCpFSzEe_6{MUFM)*SF+PlE_;05}t_g(# z%6a{*q`W^^)L8ah><4SQN9!#+H{|gsh=^bf^r#8^AD_iDD}xA)2RNSp%H{tB$MZk# z+CPgw=H-i5r4Dk2?;T>_i%F*B;05={>r+Mr)aOKKWhbbss0x<+a3c?)cQ0Z+= zGG5ri{*%k8orT+vBh{vy0ZpVL~;#%{fzM zH`>Q>s)XZpQ@g5%;R-8JT`H}vB70w8IZ?WF?_NqCpz}H{HioxvDdKsr(>gD=raOGK zt#)Mq>bV=>d-%O#26Gue=aH7{(9(-Nnr2f_-&ApggBC&`w8n`utl>WJjefW{+oeNP zhVOzReq@G>$hOh{BeKCfA~rsaFe4z=aAxzx&4roH6EIi^dlC1(V$PhA%;FD1P-WRIOM z*Ug0QD0(86Xogsn7&T3*G(>iYF{QbEO(h-`t&*u_y4hcSxblQ6g73*}k0Kct5Wj_X z;C;k(m7_2_4!>=+=hratlh*VOMH{md6T+qG)sX<-&q*qyIlYub@8&AeT)$UsO?+PW zvS6qATS~oasUdwI7CS9ERod}8h>Z$X@0zn z2+)N&rRg)|@ji};y72bwjk>6KU-v@Y;I3&K*CoVv^sdtl8OYwG*X6r+^ofp+o$tCO zKcZ8Yxagsinq70sBK&*gMyuw`ciUYP(YfEt=;6zo-3-KFdALu^h;{Sb^Zf<~42_E! zwY%B9AYyRfsN9$_M@Q<9XghV8@KiYN+$)dX%eg^uF1Ix0BRx;0e ztCFO7wz#@t;x1cZ7$lTc3WPzR{Aw>U7xR9Wva{V_GGvu>7kbRD<>>Y z*iqzCrj@Sh6DychwHg9%1pi(T+4Jx`k=rSgb09#e1ADj|49=Yal7Fl^4IALD9IaeQ zsUlid@DNuHS=7Mdz(G$+BB#2a%(+%VOCM^kggCzEdFkok6$!B&yx&X8b4*Tmlx2M1 zjyo#U2fO!5&X_(Z+3WV#PCa%$b)4Dv^^Uu=e@LE}C^4po;K6RPXW@v-S(*pZCl|nT8v2@?})>@2&dYX)oy>Kt5c+ZGg;w>_+LKn6_QJ>zP$Yo*#xF6PMcFoAW(lT9g zOCP&Ro}Vk4qYH1>tZrY@|pU56DcH5x+!@_Pv}z z_Z(2QHfvZ$o_k@!;Gpi2Yn3nasxOp#Dg%eEi;q}4{(b5BO*OjEio{_Hz6{;du;9=PQ)2j%`w#Z!1ak(u1Gtv%>^{`#dSA~Io6I?`QLi;OCwQLR znc2m&&ztd+COn*QD#AHo@X!f6b1F}j4>~q${F@0sjAPH7I<5G1;jM}Pu*a2@_3S!- z>#a$(gT|eEc)IJN)3+wCd^ghR!mCbyEV*}N%Ev)BFWRc6(6w z9uICOTxZ?1#dW8f)a_?^dhNProYDJ@o9-js<3`OK@rtS){6*J$%=-G0=xlvDHJ0fN zW|XmnuBGfbCB~V!i(^&VwjQ~n?1aG(yKudySAHi|;tP%R0fX>=v5>PVb;84Z(*ItI zb{3tt({Om3?~%!(+2e<?z^d>|RYhCvy37;vQsHf9=uh#FD}}Gd4eZ zTD47oYH(~)2>a2qYR^??&c01bUOTZ%O|RbP9##IjxOC!+mNUICeW;wfk~7If^bWo1 zaVL3o_@r0ve}-P~d1u~+^hq^-z5Co8b7%hc(&q!ZA39q(@Az+f|Mj*G>U{3r#^VbP z_G?!^^3b_Q#m5&OU)HW+YUlG$?;T%s=6t(9k~{BsUia(b3vc$k`<-{eB$%60)@5(g z`qdX|0_HBcJ$vu_y}XOo=($TD9@+b$X5oN_>F?yv{%Zf}TpYWvUS@^O~} zbKWhto{af2Dfd!p?5q_HvpdXv{%K(AMT?+m^FLp$ZMJ=RdbgK*kEc&xjR-#Z_q(9h zTl>D}n=gHO8#(9K>V02ZdH%)g4ybpjscze<@Q-8WmFJKaaYHG#XBDkYyTNiv*+~Q@ zd#}?NoZ`3Xoc)fGj&rp4;!ValohdbhHuVBI_}|WgQ$7TX2}ETMQ;OL8R7xrAKdDNK zyy80AmfESv#1*Aq=@$>6eEF>V;@}-3w$E_y(Gk1>R-N-weumF&n!h@Dkn6UpjA;)2 zeR9<~gFKGwGZhP7LS&Lm$xZRNKYhdVX5|)m9pukBdrviC(R)GSo*84OpBIW|=P25~ z5U=j@@TF7O>0a$WR;}*y#YdbjFY_6@PB%E@mCMGQh)!MS^^TpB=eCc3O&&9E&FG_f z9)IYr1f!dUM|T1xNR{d#Ah6 zzkc3^@it&Wi1Whi7r&2ljUhi|tW5;&ipL=`y$J8BN5)SrAwWQ5F zgLZ~L7#}iSR_Qow^Umx-f8Q-t+x*i{8VxG_f=Q+{dm}c;w%kLbqZ;3EM$i{%&JQF-LiVXf?o!CoKvsr^)S~t zGa;f=-w|uZKFn)#Eg`b!xe@CZJ>1`cn;12?@5oKt9_Du*oES6a+{kTb9v)ym=nwVy z;vMU;o@b9^P~uGpkpLW&0-gs8aYaIa7J$v`ka&>XAPs^9aSQ;+1t1n6wS&Zf;>?Fs zB^m+H0u0bkD(uY%xP8$QqB|k*A;vlg_<(*OCdLZ{KXi}e(4(IWZwn16}2|kF1bs;;J4N)x-2#81zsEf1WEIJNFEfKVV9nYN^^jR4oWk~E8 zKf#dw4x}j}O7sr_Fzynx2`;@M`9X?;)J362qo6&f`B0~>0v>_l6dJSvO3a75>%{^e zlmeAW7dR8>G}KHhx`IZFi~xE>q08{cLRghu3r8m6p$b0dT?Kg{3_U>ni%~hGSCG0v za)guz?{k90Anx>l#9-AAh14C=Z-A`x16r_;Kx(MwM)>^x3EX}Pd!_+p29PdF(0-8; z0r(wM0pbBbVo-t(Lf#0VZv-6YKt4X)OM~Ya+>#aVA_sHvGpB!jPQ^utX97HDEU7Ghrq8 zOdtxB2>(UH_jF8fyG*!u9FkVVPx?Usm`CCrM;b^DP~1THL~XG`faWUd(2b-V z;ExnECHp0y9Z^uc4XP3aJH*AX(LxPf2B;K@VDu-DH5KSm0r!7X#R2&efIbqG3}qgM zbOy?u1%7HKjQV59GZpUTh-kDT=`*3}AP7K{AwwI1Gi?6`mZKrZ2*}|Gr3At`!{#}V z0^rR|hfRR482fZ8i7 z6VMK(VhK>{PsAxEE`}Ju#{lU_Re*knBSYguPzw_BSb(`Q;of$I5seiUphZx67wD6P zkY^0!VQ|T~aGeE5Bm9>N_cp@$064D(t{MUV&4hc4;d%(LeK*36Ft!#d76`Wh69b)t z^GY~paN67;`#TlQAl;y&aD5Su@1VFoP?cDa4(@P%0q!&LPZWy;nB-XlaqkB9U(8npiG48lSz6Ik`j*z zbHM096XBV;aQ-)>61W}<*LpaY9@~Mg0aN+GAgWUU*aDRK3*7gE@){t|G&o?Q_LqzBM53EB!BNx)#6B#I)+IRY;j3=j>Pq1Rm~VjrYjNZTQ?p*t_a(=c!l z6Y-%lw7na!#3gB>2#5s1%pp@F6n71d4EDJ0 z&K~&b|8oQn(#MV-wBP^mAT|E^GZTP7{O8AbkpB0(b`R3OE-hd9|8XG+Rw6bmLmKE* z4&PO-F&a|Sd1BwF94a?0(?QZbq1u?6zS>zfNGA!)%gA!$tMk>xX@ecwbkmmUU9_Z# z#U=O!aj!|3#*=HRiqnTUcfgKF;2R(1+Y?3cej-+YC5*niS`)6RfW@5-)Pr=NlU}a2RH6^pc2_4afqBs4arC&_-X@GcmCMi-7gHucfXt%h+$Q!923 zKCMWQid|=to}XLtFL``e=)BkS^*u&6>ie{-^(^coCML56hY1~{++ zW3eS|)dq2@7gtC~#4;m8UiVf%lUhHVO*qP-fqKMY!xlmvnPJ z$HtdEw%^UU~wYnYzG7LM+%mu*O!<=B4rDy4c*=04Bv?hlmN;q1)zgVxE5 z)v1GKxzpp_wZ5r?5K;%Ji^08FCUmFK^{J_AS?v5Amdmv36!(>gFNW?x(j`QW3n1WR zbJ*@mt%1rNoM}vUtO}-5+ps{!X-#^k4J@HYtA?iN@V-tWC5-%>;e^o5_}UWpOkM)N}os(OWId2$m@(j(dpanK9WLI#gSF^)mLR6IR0c#u#u@o>7;5tXGW z6=FX=Ygb>_@gv>-Fw$&v-^y2JKPfthmUyJTI(21K!H5HSJ7PTI#~j&qysvTRLjBkU zKHK5LBv~bmGC{Z~4Nz5JM1fjvEJa}`KLE`mQ(5c;&~jyT+MrCQq;?dokshDCZ0R@Q z;}M#vH&YzNusAW2%|YH(KK>ANVCofJboz1Hm7Z{YZ@Y@?f#Rc7I54V(>?4;;eh}(Q&nD?U!eOon$@#8jbHfJ2;F3*o5%CX^|c$* zWGT+sV>XY=p2A+{-1PU;-pBvB3|35g|C|IDayr>|R_FTMqin%IuFug@HA~r*?WlA! zB&V_%VW5WklyV%sBmL)9(u28dN7*PHB`wQxsA0RwqE50{Y8879-tV+Fqz zI`Y*sC^|p0N+c7<(>t=bk~T_r!#s3jdQ<;Z4ZbJNwU4ifUZsxjZeF!@*T!P+cPHex zd>5t62p^pY5tIX*4Lz9SqNNMa zT0SE=5Y1xoZ$p!T|K38L5JyJdK!IW{GJ>Fi9eEv@l0i7B<44d)%Evsk)N|8SPD&|fVdo!5rDfR28D0;U7* z*j;hoiauz@6EErv8ahFbh_VtVF-_4=GLfTfb zQAS9VwA$Y{!I*?n64nXm^Q>alS&lBi(9xL74rAN+$Uq@B$YFW1md@cMI{C$f8z>ec zoZKboAWCI%NN*wZ0dOthC>GPJpsH;5KrsbRg+LwDav)+Da_1|V$_s&ynN}naBMAv} z2f7FG4gJtL_F6vtWw757LmspP1+u-{)9cYaSy)N2#7sj2}Q0}@dPe*sk^4hRrUAtjf6 zJ1Rd9(J#w5Na9J4rzON1o;*Zr9Ky-!dyYSScNk=rw(%7kt8$@%jvQM6Lmy$#NU@<^ zDkATn>gR5#^5p=!YgL$xLQ-M@qYuEO#04=UmoaZ;69iud^kV=9O#4|LmQk@D7k=Uk z*hUZzj6))jv9TGS17it?Kw`{70VEzIH%J5|u=5F$1v+y8le;(E0h^Mz#c0u|;i3o> zRk0|V=*tnvz~bhExgjBza|K`vy1-|afa19WbbTe*YBC~$6e#VA;A_w;X=ljO8MHqQ zT(J0XQ7fW|^DKcFT^BWh*#x1*K&d?pdg5lgswxKkQ4Gqj9;{1Hqy@tXM#E?9$8@;< z9bP?5NdNR0e1*o%g6pLU8mwy@7=#dZ2+m)Ma)?MT zK`>aY41BW^a0Y28R0AM|VlYu;paH9a$TFxgg&s1k7y_BnATcU3K$k&OG#R`}V)qbT zgiKxGKI0#03+YctgCNB~Vhq7{BEAdA6On*1y+w<`p8kVioC2zS1UMu>&w)HkATb`B z!H^getOKNdqVZ@M91npL;~Bg!OCg7@6x(f-E)4=5BDwIJEpAwShDY5@Xsi zPOlf>;+F}TIVcKg3C9KV1Q zXf7Q0fq~=;`Irhf!Eu;E1BRr`UOC3G;|YnWEMvf_AteBzPr;FKMD2y%`31`84EbNc zyLW*pf2z_2`76ew0w6}gu_iPvsRZ>?q#`FpArK%72&)7eHy84QEu)G8FGw8_Dhles z#5s%tBeDQoZw2UEWii;q2D^iaajRWcS8}N)j_`7PM96ogG01-g# zLOv0UzEF5KU}u6k%<%F?JEo=@thZ{Y+d_qyabzJsMFNaKF|f24uzSU5xhfR=EMk-j z;p0)9w3zXsNT7A0sMp(Q-~#wG8(O*m{0fmUl&(Te#sdxZ!y6fze1Rw9ffpR0HWE0( zm!N=#E(eThF#s(mgM1L%y(NBdkMR%1!*e?z&459K1J{p6)WUmN=sne$kE>_?Y)iQ98n_`6wmlqzJpt7 z##(_I21be9Upq`C2M=a73aU&*w4ww&6IIaV8sc3_fDdY`FhM_sA~yve%~a&r{az_R ziC}3VAH6$ffMHfn)M*4cX!2VYQmd8_mnXxwm&H8+_%QVbNX#=(@^tBE2SR)qB=rF( zo0K+z_^I3o+|LJ2*Ma*n1z(CQtk5}>RMhD!?i{PrGrvgJg` zCV|f0bjAxg9nyiM9KttDAcr|e2O>fSo*fxTISn`mVGu)9vQ?b~q38-T2Tg@LivvJ@ zGd`t%-o8Z93IlQbI*42~^h|e<d&VFqMc zC*3GSs<+Uo*;i180>We^(TJav0~^@JJA!bq!Ms=kUKkC^6@XOILML8Uq<|RIqlG~1 zMi>**fd%{(e2_-W*ieH@M27e(4RBfxIswfd3B9!*#=?2&5=RgvTG+z?1P6p|aPYK3 z*D)ZLG@lXH#R?4wY9+9R6=Z@AZB9Y}kF7=77XQbf>A@I``)P1OpM3gi2c!GNLRs0Js!iE!1zi$B8)7r{8m z1){%FfoDu10ZxlTiSYP4_|FO2_A8K>aU!;d0*sKRLKiHMo)saMN)2o#f!bAre_oIF zD40k96lzuIn9+g$mdgKG3#@B{`h)F>X_&p7;wKyEOzQ7#n8I2FIbfA67` zE>I#Pf0|V}cK_!?sE!Kq4~G(;LbcN1|8?*`7s$`}IwwGX?S}t)~(4CHo4ha}matHk*m$E4OPe7vXWku@n%%p=gaN8Bo^MNUjpwgClzb^D*65 zqbh)EE5Rizhi)tf$|k@%Lb-j-U=IAxs7j1}V1Vk!L6x7uy@`Nq`-D$`uU-Q0m7tX> zIW#u~B$dwY8Fz;KBO&dAbU~p8x2_TXS3^Dcz;qHA!5UaG0%&}=E{5Qsp9pkD8sLgb zljKl$CWM0+I93dk2yI`_SPebSg>H$2{EW~uDN>|&;r#<4?^-D5!?7w@JW+yVlb~tG zbf{4Q9S>~SAMz$a83HJ49^|cpa#G=_gme<_G3wzKD6)JUOCkTRV@A|V0l@VtInjwP z@Ij9iObp8kcl1`80!s9;1pCUxUl2qQScig93tFV~sXNlaNiy(ToC3UfaDG2K0hBv2 zJZ5wP{Zxq(6ikMnfj-z!J7&5T!nJRu4kX!65B0Sq6Y@~})b5x`ad}cGP#pp~NWDCO z6Xn3+t>~gk0xK0d`z(7^0XR6IzTf3ARRt+|8%hm_Cv;43&zaCT78JJ;ho{rn_*Ss7kaeOh;jG&yY$4Xea}%zfT(F2te1N%%F-wDaR5~^IIkH z?s&8qWMBz;m90nh3Jr)KaN$drxZ3+_JPeV zmDyBY{x%NkOreS-K!t}l9s!y@f`%q34`Z6^=oEZ?G162iy;4RXjXf{amiO>Z`{ zSo9YVky%yU3e;!T87wZzK&&NDW_J}+HCU>Fa+FD}FtB0!98~8Tj7VnHfRS5|rRA=` zVlto=-yO{cLJU>FItENCE>J=!JWVT%=p7TbGyn$9QfOTZJbFrnP&_bty41xJECCI= z!61omf#JLn`gRwza2hmZH#FiX6j2FPdLqkuk}Br1RzfLXZG!epoe70U|aP79Wk1jZY)6sJb#vng1MRKhf%f%RHGDiGWy zfcN=86$)gc7|hR55F*S%3ItLdi5A%<4zp%Ty#h#f%3!Wv+WiiZ7yg0{rNjslP=@T?@s zfW{?BP+es!`dg6#J*p;7Ef<7>a7{+rRZ7s3Od|A$$^`VMP^L7&5&W-uSO`}lSCxSX z{|#ocON?T&2PkV)C_&gIpiL?YbW%MK2mq{M-gr?7#FMIBzyN_MOJN1cl>&`rCIY2> z5#&H+xn1A+0vU4@IUwmwph3|nCi^U?6JoUIn5}(Qdvvr?4^tsC%RL1`w!*{^ie3XZ zxJYx`B37jd6=j1F0_8Wq4F$ufgy^pV{qLYOOMsfCQ7&k`)F4JTk3nRSaRNC=AsI|3 zGGNkB=w2FyFi`3D6tIRa1)pFZa0loBMAXiJLeR^qLDqn=FHQAE6QOqwNXy-TnxP1S zMxY=S^g+@RG*VjaLX7_kplD~i31Dqf8s|xP9}$RAk}3xTjs|QfEjp=CgN33&1%R(V z&mRa~4}{tXJ((*iL4lBAzA72UdyxPv1Pb+J22LF#23VC8Ityhm_S_%vyiYa+%Le9} z0s7HLh0MM_+ZT$c1rle7Xz6e<0gS9e;i_`fkOV)v<26L79D~I z`%0ApReYP3~5CpV=;;LZ) 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�mXyb-q> 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 UF2Q$m{>Sgd_dhQ#24Z;iAKhN*s{jB1 literal 0 HcmV?d00001 diff --git a/Data/2_Silver_Processed/Options_Market_Data/2026-04-06/GLD_options_2026-04-06.parquet b/Data/2_Silver_Processed/Options_Market_Data/2026-04-06/GLD_options_2026-04-06.parquet new file mode 100644 index 0000000000000000000000000000000000000000..3169ab41dc1b3cf43994aaa65d00977f6e57fbea GIT binary patch literal 105942 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

SJ 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 F`ybY-N^1ZB literal 0 HcmV?d00001 diff --git a/Data/2_Silver_Processed/Options_Market_Data/2026-04-06/IWM_options_2026-04-06.parquet b/Data/2_Silver_Processed/Options_Market_Data/2026-04-06/IWM_options_2026-04-06.parquet new file mode 100644 index 0000000000000000000000000000000000000000..4703dd0da077e6dff271964602d28cdb5c7d654b GIT binary patch literal 54206 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

ETU) z6Qa+`fLg{06#L6Fn#qLjhjs&NxRDEsR&Ua&^EhCpK6J&q4K3z<2GVNUu8GzgZ#L~5 z`1>*5jM?QIx03|V6VLN!F6m=_jf8mBSw_yvn`8cXjU8Zr-8mZ`ZF#kqPLOPNFYJFkKG=OvQT~j~a`WfCuzzS$et$Ko!e3}mv|{3R zYfGsz^nI>NPLbipZY#lG@hmCihZJk|SyYzAOo&yc8M6&HasmV=89R z!>=_){!}|`OXm^$Azh6_e^DP^Mm!|`#^<7z`w!n{bW{@TaW1+bWB7I(kFCn+Ju&OP zT-qUDySplR>aa~O*6bRhu_r2b>hSFjYj;Ox?HRs%>WF<)*X|v!u{XAH>c}H|*6yE? zwKwkh)KMp1to?0?#=dy&wAgxwbq7~v?VBi_HrgU#g1~(JAPKGO^9kVE$IRD&rkSAJ+_(*lxG-Uh}Q~;tu^{xp6ziV zL2p@X{S5KJ+~|FYCVvXfxb8fde{xxp#fR3jjEQT}X+HyN>(Pzj^Ig~M2%qGbH2Qqp z$3w3QH2~<}yio1$cIn!M$)0tkt7h*!{3JeU%HWr!mzQX|rx0G)djnxi-uvwnsVt?h zS*<*?=06>CWsl3L?mj&rhp*FPZqKtK;{tTH=;SK{e^zf^b8W*s5h(!l!#l3K?^^miC2Hk{S=$GC?76sY>c|f_ zu2-(h-bJ^HCj|X}lzkYGXPjzGO zb)MO{)oUpy4AWg91FF+wL1lD{b8+YP>*7f>7roqg|NBUfYF~R*#-P(}oKLH2&EBYT z!ZtlLIa_tc`^~Jcv(HVwT{8Up4PR%I25jwf<~voH75%-p#LPEdTS)^BF&# zc)9uQ60H+$+?i?hj$7WXT7KfObmoE!)3$urqII%eIdkE)y<55tEI;`wW#-R!UT*nx zO6ycd?#xAx9e@4YgW}Iz{A${-f8YB<(tY~vs2&tQWSig3w@V~-6TWx;L4WVM{L4Rm z;wcR;M%|<-T`MqN-QtW~V@A?ao#|zL`g4HLt1^uCm1zv%C`Gh&7{g z0&EiX^V0%teC%>VV_KVjk7o1g` zaozAPFFCwi*wQW?_XKa$ndX7?9K3>$)fY5 zF&>N4^`p2Pr%@vrf68I{O3Say(y5#!mWI= zD1h6<;Ri5k&p6R(EIiNd3m5z0g26>0gIybq+vGjqJhwqd&zF&^9VG38ur=)lI8VG8 z%K@Aa%l|~@IpmE8Vpl!rJc@BcF+Q$bv5uDuQ21Q2yq9t?%^55EFOJwKYCH5G^mUe_ zY;dGs&v^miHYmNr5_OAlQDu(pkwhS^Ajs!RW20Wl6c?M~0^seO3!SuW8Gqqpdb`SU zs!kJKB~mLQr)Z5r7KGk-`5)>1M|e@>-(-G`Djg*Ay8-8aN!!M9B;71n zAFYn#Mc3W zbwuzX!C5LG?MS#Gmaa000b43}eC3WU)JvCYHkBWnIt4NHX17a&u!|j>q98%Okk*PJ zyh1`VwowFJfI`kmhQW~pwf@*-ItHNNJps5UfE~Y}R24N_*+k68U>o1c<}dDmMv=8K zsCg2LQrJdeS9T-HR!`J zr0EmwKX?p|hENt#r+Eku&|6!uJ#0d^uhO|CfZo{b{d97lUTO!*$wP?hNoqTgS3Ur@ zC;$|N2r!nBkMs^XdGH0%iht0rUT{9y1)j1x0*FV9(;_hD=5DeI%3aw`bRb3Ol{_Mz%<)QT zBa6LLs@QWj5ZCpEL9)pFHULJja6YkOQ}TwS;+Tv$Y?=qKnSC=-AbIXg2=~Y==+5*6 ze0Gz?#kR-o?k18kP#|pFt4UlmbYN&Wz8D;a#tgy1BGj?h>Ewh051a~tD*6Y@pq$D| zayk%o4iAJb91f7;>~MdSv4>6Mu4AAYLm2G(r?L5Fb9_@OiE6O4lFS$+O(sWuxUono zj^(WPWDvC;$ju?ONVY^L1w`LHf)Ag9II}A-E%Vn5HC|Rtb-6TAvea0xIC98IDRjnP zf_Avsq0&+t=uDRtS4FZc(Jc)z2FU_<)C!@`Ap%sl&=@0QD3y~IzEl802Obh>Kv!^_ zM>@y%JKczIOKM3Elv)pqt4mF$&ZY{e##AJN&;})3PDnF7=^yq)2LlzCv|Pm~-Aq-1 z_w$@WltTdOMlAIRwLZq*Q(V8ur=T7=R7Ywn^**%;2tWlOc>&-nIrS|+o}zed0IU#v zh7`4sw3-YZM!-c^hSW4!EQ0-IlnIn1i%nbL(BV1+u4*>ME|YOxu@1}l%s6% zxjl4Hs!S&@9Zcx1_DBB2@(=z>1-Oa6GRy2D5b~&DL03byekChN=0gIBBCIo7R!iq%soi>6G^+t zgMJanBZ42RGU1g``VbNy!sMVM+8R)<7ByC5zNJc#s?EWumQgQWSH1(<^O^#oNB5Zy zOXJDM@%gV+IIbV)G_5J0cMIRO6K%b6Au?pe^OoBap2BvS40${=va&j|+H|oa| zzpDf`;6%1AfeXN)tuF~>u^Mwv zrGNza@ECAtVu^&+2~Pzc8>E6wx6Z_P%4eo9WbKR;#5_~+HYydjRI-_Sg6Vj|d#bXP ztWHUZBGJi8hRmLf#&}J_7bO$nPP&tzAH$NMGlvuLgkd5^>!$>`jN9>e>&CJ_+$Nyq z&j22iBXRHwX=9~L#9<5``w$CF-pkH@(?&uY2amvP@nTpmrmYwR3e%%eRC*M&Y)BMt zUNltNN(HlE^Yr{e@*sjZ9cx^J- z#Hy`%2pr*~AZ`ibk|iASQxFz9fe5X31fX&pwxb|l{FNMPi7=VlOESs!lZpw4ogr5< zSiUe30?hDF@M~s6AfWNSsAk4s2(oGr9^Hv^OUMDN3s|U|n0le#b}a40%L9JO9deuJ z1~HxlWKW*Dpp`~!QnZg8ns~=~zk)&z9|(i!tDXZF!0s##Ao~X5W`kl1tl$X}EFo(> zr0@}m1)6*Su|)FHSPI0`h!+nt(1TzXvaGfXoP0TED+yxcm89h#AtIxnS)sknuLfR^ zcdhviNK38aApIFIeSSp`O8*>M_%gqv7pBi|2R!s1E3FT-Nu>_FTpDmrN+jR`ktzZ0 zq!4f$h?APoS}kb_sp9b3k>S@0U&n_!b0~c&1NxCNo~T&bl(8(T84NbG2&b@MA=XMJ zo1?=bv^8Cv0%D$}w2j1B$q*TZ1kd7V3i8w*VzHJg1?*W-;vPb%47Cn`m^UFai_CFB zDUPlwm{@>A3eyY#cR@xT15tpSbtqmy=E-pOP=#rOa1}BbhB3+)_h$`3i)b!5slo<6 z@%K}T$u@S7ad=HEbsQ#riiPK`S!&0TKzQ>YtQNNh@j9@W${|OBr4?jI2z=F!5Y*(Z zfKIS#=AuL+*}pKXEW**z2#nRKNa%L?Q1qsmWnPM+x#`HU21zLzBi%0sb;ifQhKxq0 za7f%J7$*zTn~z1u6bTsR7YTT>ojoQ)nyloL-=-=#q%jo*rLer3zsErb)JIFf#f-@n zP>Y3PZ4${=!(meh_k~Gu2#*32_~~F28WM;$Ciy|6@t|db=isGJ+K2EOC|~r%kzM5Z zU@S7cQQ8(Sn8`g)ZWXMFLk$(m^~oG}rJSU(9{I8>x}e1Z_y_`5BgwTA^QH{z$SNF` zA%!GY;A|`+VaY?*QZJ&if~fl|<3T{FHUb=9f|E(mu4p3&2+mHFgQR`jp`C&gptPWR zeINrhX$~pb_x$c&qzEpT1>@zqaQ*Ehi;E$w?F$9f=D`v3Q<_K@AC-o%94P~3 zGJsjRKCt0#^3qgUK`j*Ja9O5FKV=%Iq_RRd;u1i_fT?3m03ZPnwT3zt*uX+;A>TE2 z@CF(Z7>NWqHF~YUSderc)~Yk_$bS$av^@cc5f)Q0{r1HmNQ|H zJ&tp0rKTYj6N%=04mwV8sD=53MB5Mbj2|KuAWImBRe489@SCP&Ih!KB7YVFH&x4yx z+2NoL;^u}XCb>#kTsm1B2fGL`VYC6slX6IwgA5}jO9QzJ_FyLygAn6I%B?Z-I9W?V zeQ^Q*k()yb1iRZwoJoY3GJu}FpyDF! z7?GPs%!WgH2mIig&klk8W`T=EnL^@5ETiY|t%SacyhcQ7*&6Q=~3aNMyIYazq(h4dZ)Cfk0 z2l^&VHzhjn)XG1ng6Cs4XJCDfUO*q@^!Rw)Q&Y^9<6aAWH#EO4T3c7GkaJ zCe1SF5dR6)Z7RFK0{tQn|abZ{rslk}N^DQ!wBpPqyUT~5T6Q=&4KS|uzqz>zB@22_-=!hnpQfJVy4qu7UWuz~WisBh*N zi1>OeDqYK-4lrgU1~qL2Dj3XSl-LDTunXKApx~7zga#*`$^#@%+=rrot_W!w*&KmR zPYXj)bzyLU&KJexOlXRN3=74h>PpCKs1hYzRlrlR-nBDCi374OMzO~Mm5~>L(s*R- zHyM&?0dSN!utA$_@JHE({#bVGViPF*{J8DZJ|Sa>b0fIb)KOu)E_F>9Wk}SA!0H@* zp|>7`A*FePlvU(7yPrCHv6A|bpH7Utxbal@J1=aju%Y!(GKBJw@~Igj;POL9+kV;5_6bce2fs(h_!Q0wGsnczw*o|7lRdrcHSO>%@?O+lp zz>4oDEhFUutXE8w97-YrS-_AN+l(!*6tpxQtVUTblO}rK2Oc8?Kda0IQp{(;d%i9X zu<8&Na;bMh%9Q#W=rdNp5|DE$4MFVVlTtNIIO-7cLc&wQ1K=zWQDHwEK?H7H5md4?KMbSBA(dAi?Wmzf{+TXS%(RkY@@6sMz*|4 z$`%@xV2^j&Y&fS`B4q$ESDKTBPFykUk8cJ?Sjisrp@7u+{c$7>)(w0MYGDL}k)pW7 z+5=5mETsB@84nd*?u9vnGNA@VfYc}Dz;!EhaX3J$1&Q**OyP&2b`)0VlWqPO1)TX{ zLUyt1N2@?y1&hTe<8%m0Q>YSAk$6j8<8jFF5Gh4nV&4rhlT8|Zlu2L4Bz0ofDItpeQ-J|zMcTOJ9gHIzN((Vj)?r$phiVwRit0#}qI zzk^JP<{>qJ*dt4b#KhpkU8tBPuTaIX)+=~ZJY3d64TmW7*|qkS5xD0k{a9hOHJLIB z+E*M4S8!*vEEZ<~Fr;W4s%ajN8R>(tRhQ%>qBX7Tg1#{c4j`pDih|Kn!(X$(Iu5xu zSK1_z&g;eN7xduuJ0-@I{}r$AIqWq3zvut|&!6_-^{b6K4gP56yTgppS)%9!RYk6N-synZ;&Z47G%lFk% zy~Q1M{V9EppH2opOI~luFX99_W$5Rt>aE54TxEEM!P?4tTX_)|iQFX`HuuRlddDge1NN@3-g#KUKm($f&`(k8Ll;Yldg4^2YH4 z1THBVy#n|@!s`Kx09Rp?ep$R8;2GO%z}6A%S>cHWd8JL;?IKkf5i>FjlU`Zb``qLX zUHEYIuaZ6zKmBu2IWcP_f+rG1k^jHY{m`Y_PTQ>3?vC2wF!Gr8$V1!K?pN(_9RFE6 zw$^Ih!NMI*lfCuU{I831vr zrZn|)nli_C`rEmbHioD9t=_;k!b=jO{xy07;C=c^W@X3&(*87}T)fsJ@f zQ-`GI%*ELJM#hgG(gXSE?a4W;joFHk8zR$?|Z6?Rs zgXAlU@+JqC3vaetd)7v;ntQ}r)YT9&xLdz4!)Cjs{%%FEk3sPY*EKfM-S!6?l`h#) ztK&N}IHv%d<^3zg|1-QEl$T&R@cOnM6JnKVqSfjWz;GwZxDityk_4Ru!N7xD7gdZ- zk|0Uxolp$E&uY7iXOxX;25Zs{dK2&uU0GXcl*K0CpL%d*W^zrj^MdDL@f(6m>fP;J z*EWVv@gKI~+7Y{fM;jw%W(?cpZoSL9d3WUe&tl6_>hjZ5M-zSC++xT$!uEAZ>sI1W8ePf=Z1}(Wp*&wp7i9N9OEB& zeXm)r0AByK*0fseZ@5t3aC}oe_o2g?X?X|xw#uJ#eau=SCtelKwoDq>2)uqxv~yX> z%eeNKi%}bjoagO#)P8j(=FdA%HvUxOI6ky!{d(l$FT8nP`fo0N?#>C{znE65+f^>r z-xserNKk9AvogyiPm?#NwN7l}k{gkiXneT!w0xaQerjGXbgx-am^*!&USf}Q?{H%QL{x*vUM?(c3=CLrwP!_ukg?`>v3PgMH$%aBj5 z{ZGf-lPAsjt0QYbx?iukJqU`3bIaS)8Z>@ zN{Tj?jaDWHncX^`GxEqi!Rus(858z!t^1AzDJg-8V`go5dSsWMZ0eUo>#pq#KDsCR z{M1o(V{RPzy?p;Hp4PYzw_2)A1|FO@Y5GLRjW;i4|9)h5YHGmrX&Z0f)BK~VF?Gh= zy&Lbo$@a9Y(i8-c zzVNm|l$E_ik6+t8W8S`L|8L>-cS9Gg5cL0iZkO7J&3cQU54-=RwPnbslX^?ut-k-Y zeH8uoUA-Lae$Un)cxJKj3!o!2V~v-T-`YB{eXV z>Z4?n<#BEf7-UBOOZc9hlAS~8O75^f8f_3>c0@Qw*2mK?;f$s?;QQy<@D`?3m6@JnTemF}O>faEAhrD812dIo zmfWmi{)RCfnTMDJ?O(Hh6Wz2VAzvgUlq~$huy88ICUd5zS2p9 z2KS#>`jy^Md%)Sh&v)89G4$+bU5feSe}{x@p%{aNQ>%nUTFkIaFT-Q!Im~uzYrFkw zI?P;Cm&E#<8v1O9`j=bptLYb3MN=*fs-+#&pDtK=;}o5z;W$^*v7TP_rgZJS?s|It zmWV$SMxUl-vA>H}?mkV|jQjlPTj?3PA>5+#EblD+`B>nRokLI4x6do?Pswed?Hpg} zoC-NZk1njg+P%4v{%SYt)q0n6bj2?_KDu8%M~^w)GS+zhdHULv>VI;1m+984_wsbq zo9KhKqPu$vF4AfJCqGIUc!}Qm|KAyg?6M+Arq#%Nz8hKT}pzYPHhF2XikS<=>>YKUS{q2)IQDKiK(s z&eT>~vw3^vfX#R4q!E9|c^|k%f4{oZW=F|=df0C&<>o){(m6+T9+#iHO)uGTd(_Cc z59vz_pGg;oKcuy6rcde1eMwsveN+rz_l$1aye-R3{Fqi8aof={;T1je{;YS0cpda{ zVUW2`%3IoE>bRdhmUYwVtK362SbwAM|I_oLZ>2@rYS?_GWl>|3tBc>z+XkyOe}3_u zo?<^g(SE)Lg5WIU+`Qs4&ZEqCPX<{Om0AvuaGs754R>*0ld+^OYsgPdB_tPkZ#`<(aM)x-jj9$hhkUeP+b*y}Ye9%=A++nn#~nGl}st zbgu_mGcT9qzj7RD#T?Gkbb9{8l1bj=5ly97GWNc$rCrCwOj%^5(zwflIW)-lX#F$` zroURBOdVbLz5zeLXA^kNf9g&HhU1yK+%MXYxt+XbWYGdc zCUwFeBApM0OmMDj6PanmJBz4c}$<2__KQ-9D(szdqcqKjHh&8W$vq1n|Aun@bSkMFMUqC zztu4R_;Uw6!aZM_?a@yEWMMevZ2fck31{9Um$&ceK_@n4tRL1!@BTE|H~RMnbopBE zS`FDPdhYx`tOhtfp^MXkC$}a(ql2@y>bdb=&=5rwxTYopE9zN5?LP8B^q@DJU0gMXP6S^9R(+8g`iKBXIa`ulYbkf$x-mdfi(KK|W_n*#cc=0zKd(Trk@&jRht@iZVI;@kfm5N@f zR>+yql8`->7p*?cYnJ%+i3x=YE=C&!h!x?0)8A&)9u(ubq9_mia0+i@H4Aj(J(*T@$yc${>%mMwzQQCESQ}No4>P- z44H1(x9J)C`Y_+hpC24y|A`K`yL|JahAz5miRPa(zPzKYmz`fcG4w6H$FKFzdar-z z;9bS)220eLN#h(!o>ul@4BDPe+L5fm{1Q>|q0etx%#&#C4WHe08LPimO*lJ%&%{Va zFT8owkol{By@!{M5wqgWq#M^djhN>T9xEo`7X%CceEsEmxe4>j%gV_sznd`DueUPv zQ32y1!fU)4Q`ua*sNEKJeP+Sjv57)viuPi?>)ZP=(X(^*hO6~s8t%ubnU`8HX2b3F z-uwFw{cLqYjLV99wBl|}(@$o+`Z+MNjaIY#ntke88+~-j_2)~%+vuN|u+df2 zL)vNah|Z~d9@55^%JbfikLb{G}r>#<9dA9ilU9P6<&Lq>QjEP23I9`iB&*e?Bb zeVJ?C&o<4u#Qkv}VGcajPMocw##oG-+Z=>^@CiTab$MMKH%R{Jhg}oKyE)J>!d;E& zr?7oCN&hWvU&Gq{E86F2o_ErvcG^-Zd{{8{6a8EL@I(ifF1q*rceF$N1ibFkzcI|5 z#lJkK-}c#)G&8lG?w7i6jqmp-v@j^zC@A_dZ94X~{@B+KXwP~bmw*dx^!1-!jM1I( zlrFNEQS~7EJl)%_=k&?c+rOvY{zzZXTlT={_pkIfw+ELq=@0b59yxsZ;U@_*_{Cg{ z#rwMH)Zl9AISz*jO#SwHY5sS5aDHie)#9)8>3?QysE+(ZyT8&~mSz2c)>3V7D4f(q zp9{-vEBgMPei1)#_nDz$X4mNh7e)$X%+I5DcjpgsWV()9kIQ*2WzN)%xxT4T!Wi~1 zW!_%1XAT&dMLPu9G1D{Focic!&luEu`VVdjI~TMb&D znKMWKdHUviQtEoi!c7!~UTS zjvm%{{1?SYw#4+W@Ks|TziK+x_n11fr*N-a*F}e!YOG(WeqWEl@7Sm{>@i@bNOjGA zer>?KjIY%`mH<8Y9DJ$>^F2NGOIMr1n6XQk94o;O?GBx9cr#+6DMO4K=)HNS%(6w> z@-jvWnB`xz{#s&g#(XrqzAX5j8S}TzgS+R{%o*{fo7X4Tm@|KE{!kd%Y{5{qZ6{*{ z{h1VlGp;RKkLY=~*SJOg`hZ@GQR_G3F>URh(^<=VN*}vd9^2UTgr2kS@-U5(r}Vey zbNc*~`iwp_ocpU{>~p$npZmf(`0%SA>+A1y;7E30`!JDu!!ONvp!H+j+@GoLv0H0qTaP~Tf7q`D zv$sd@O@7Sp#!RnYAV1dC`pnT+a}*JBUFQGd?Y+aAYP!AQ3E6=J5(zy7(0~opC}0EI zY%GW+8myoqMNm*tu!6S*q=*WN3W^;N5etggu!9u~iVeGhh@yhh1nl2$N1o@L=bZ1o zuJ^B(`yThs?5S(kTC--&%vwJ*^RbxKGT9<7=<~g0-fg5aHS#dOg?|6gzx4i#Uj3k& zyX3)-7CLUGzOk*IR3B}m!^6fT{tW-xLQf4X{Hl(gY_+wo|K}PS_V})8=gUp>chN9K z*M~3Yu3;~?T%XWDx3e9t>iO5v?j5a4w_STjFFjlqK6^+F)vq4@@bKVjIxu<0oAL{v z=y4ZC@cDBesP5~ZBa6b`({`J_T5kGUMb8Z7_}yFjV8TmD(uOxQ*l1IJ?e`MeRXZqA zJE)Ytdmp~*efTS?u=3;YcKAuXdEac@Xa1!1KC7avS~b#5%TGv5we;8n6>XTw*T2!u z&IZ>4HuBjGJ5C2&wEj&;hqu+=a8k%FbvrUs^1G3`xAgb6fAIPby|G>j@x0S#^fww_ z{Nk6a(1`6SdG+91lOEgEMPWT>ye`|*<8x4Sg+7~O@H$MlpcVUTLy6}gpZ08iNYJH@ zVeQ#XagimVXWO!g@f~%K&9!13Hh*n3H_eoFH+wwqly@y1SC?zqc%qiRY!%x_xUrT_ z69iAxv#O(+Kf9~+0wP^@@T){p+dXRgcqsKiAXlB>vIuNnfe8S?7M; zE56c8v32sB7J&bAfy?EHX8Kk%^oAwot*p0(IUnqQ(Bq4r?`vrLlXlMcC=Pi2lg@k8Ss%sq_i>i(W6? zeWpo#$QPe&NBc4CjRB&8KgS5z!9QkqAL^#f2E`cI{Me|&mN)I0H~hPhrBR+&`z+RF zGcJF)rK{Fs$D4*-d}-8*z2Rc@(8Ws12J7i2CpSsiytm!Y8vK^BFCK4O_O-qIc$X1dRegDt!xCfmY{*FQ^()5g z4gGtOy8oE4#ZPrt4}E9Cww?TRt9Dzuc>n7I)}01QaZ8h5q&Vf zlGAIvLg>d7~EXOz98hr~znuKQI`@uVq-<4oVvcjq&P%rAaN>wo93 zlXR<~tv+=KB8NWE7l);vekQ%61EMQ-xq5u2!;YFI%O?PTCNd?-6KiQV%{=;*9yoSb zIC;Pqnz77SIZe_;+cN7L9?$YfhTN{DlbE)Li;p$X{W(WxI3K8^HT&4#o&i;K z=q8u1pUpqhW66V3=7v>MR;XHEB(Iggl*$Zm(1la_VKciN)qYFWQ@Y+3gR*n`}(vCXiBfBvF>`Jrx${PT_eUC%Vr*sKNq zcUgx0yDs6g1seXP#YXLAv%T#Io2lV9zp0HcCqMmYkvE&@-*r$U{kyJeXpx70QpE

@+(95#OXLSLDlzQc$=QxD;-{s}qIYiQv9kv?6;%`G=Ba|?gMrgppM>(!aCMR8?0TemT6`=vdsyUiA`6Wg_pFD5_fOV9J+LgQvS z;Zu@R*_*G_t4iylr|ECHFG~BG+P{%b`Ka!;p-%%f)w2Gg)un+h{GQm|&%2(^vmry) z?5d>)#vh!JJxRjGu+Nr+V?W^FRqK6oSOMGazIR61xi9qA@vs$b4612X*cZ81+9G>1s>fDx1Zl4oGJ#E-uhF8Zw*Rf$I`dfU7JgIJN6Oo1Zyr?|So)(Q7mI^U`QtPcs=C z>3U}9!7FC0+5O9DG2y1{n_cr--^?{&XH9s+lr~Xw~@0p%x zx2V8~-890hCI)=(ICo9@54vATtEY22@6XOSSw~|WR!22u*V4cGry5$IS%)^#zjEz+djCq;68k|F)PAAi zW3lut%~|Vwa@K)Q)S~>%-W6$OG_Iwe+8TY{mlnSHj&?d!(d#g;g5GFZAK%V>8~sXM z-ZDRw(fO8c$1lArrQhtTUAE4sppECng5i;Z*;+fwubg22|Gn# z_E7ol4}Ht2#Ygej4!4stKJk9jXGg*}L~Z#=N1qjL+LHN)_Gswlctc;8Jv(9S+7fNT zIwcSMzHOft`{eC4W~x_fcEgLM!>+bz&!%yDZk{ze{D#u*bbAx_)zPxO_IxpGmA6XZ zF$#2|)Vr{2jf{Lx;D}CwROWadHx2Hw@RBlWP2% z?%6oQ{GJYB8{e(J@+kKQmFD*IcxL{B#<_9(Ft6z6mpXBKrRHUhA`B&HSp@qCahJStn_;lg4v@n13{MP)o0C z)?Q{mJSj9{mrsZltN4 ztLm*E=%u|+7Y8-|YSEKa&;vF@|CG~j zQ~v71|Mshl-dS27a-g!brM;yzGb2>%p;pyC- zXD#2^uX1Ks)nnevlzo4wPs|wYAy z&wVIh_jc+(e}SJCJIee(;-g3PG`gxFW0IXd+hE|geZmVpc6Hah@m=$vPgq~pFSfq2 z1^+(L&0m-NxHjuEUD?f|$G6;CdbpE)W74W-y0Z6qtaN|3=$%Vx8*}atdI#Ccg~!9c z(7$@~3i>PWuYP&Q1NTuwovT~)P4DQ;7Wr*+tnrKAkyX@g+UW4O)1}n3&vAo3$IEC& zM~AwEfn{{5!|m@)wtwi^4=eZ!UVo(<*b8n+@*i|?rvLCv{|;H#G%tvB&pGN-a)Uv6`h9eN(r5q0eVNG5(QQOIJ8R~27hcA|zZ8x!(*jyB}&u4mp8aRZh2h%ECA zX`s_9OggSDY@iV*zibor{7T6`f<8;K>S$@g$oVw*E8ToAeB8d?`E=an%^%uFH_}Dh zzb(|=(L~Q|;p=~CYM_5ADkg3}(@ei!a4iU`t*4C|xulsUyWMY^fBZYWvOFtkL|zlk zd@w(==YeWhMFJ z%XA-7GGfb%?u#b$%MpECY zUA{5f-7C|{D^tc+xKvzSGT)rtRC&hr!;mt1y0_7UZf|Amh|*{44f9Odc5ZRMCpDV0 zv9kH{#S%;Q^O=YrIz!%2>zILQYTLK;(~L92KYuExAsT-3mO3n`amd;CmNwoWtJk?d z-*iUr}yncOn0@Zr~QtHuJXTJPc2*j-6zXvJyub}exopHA!**# zKsToD_M9BsOsBN$e^n2&C|xwaiCXtJzv%Vx8%^4{d|#rlp0+6>S}`O4(8`v1Az#_G z@9~-MX!Wt%{J@KkslRN;`hssy=tw3&w$-$292xrZoOh$?Mk5H1w!Z-=juNEqc#tnxk3wH?+tHA86~vp=OIi-_so}=PAbil0Pmu z_?e3Oaeq}*w-2{(@`19Pcz|`$NS@X9FR@>!wT4fAq<{BSKG1cV^AvCB{s(hA7s=mK zSygE7h^z|w$XH8dUHrCX|Mw+*q0tAwpwihNTozt}KK%LObn`J~bdEU9C-oXG&_-4- z=~MEO+D6^Rjzk%4{b+HokA0uhPXX5>Z2OebC>b|@ou>PCW?mmL19p|y$OA| zMn7Ib-Nwd`f7rh++ z^$O72pVhORUcEmlDEqiJ`^E6ube9wL^qyuOeM9TwLPKWWfIhvCZf3y8I$Dxm8S-(I zfL-{`a{ss0?O3mt{o><+^Jloss-gX6_gK*85a?>4`|MK@)igA}B+h*ICwh7-HQ(^P zhECda?^EU*8@4LEcj@r}8@A4GF#suwr{(@XGPEXv5CGU;n;jR0U1?d2ox1#EKog@oUMAN=tUp^(*%3$=T(3rv66zOxUwY zpVET2%GimX9wtVYjoCTFn)`KHXvQjaPG6t%-iWQeC2V5?cQwN@#hZ&KnX*soE|`nQ zL*LjsJ8DQE^pU>F*T3StMs$ey{Kj*}?23dRm5W9ivoWitJhWz@-zR5o()mX0x;0n! zS`s66z`W~OwPy_3{er?5H)HkLoj2v@4%Hb#AMr6exL+%FyB_T#YceS1QWd${$)^#^s>l^3io?OUtOmL5;v?|x33U4L2s`_E%KtVyHL^bL>C z@_C=eS*x_zlh)c9)9m={`ih+<`5Q z`uv;zYPa4gCFC>Jd-{CotoEPj#M=?gt-E}podn;Wl}`9fXSFS7WP?9bST;|X&I+0V(ipuy8r#AM6;Ick|Ne2F-<((i7&sO8rw4`O)@8pZ}~>C%DFhL)uKFp z>$=oc{cF$RT61H~tD{^O>^W)?ocaJEuov{2*R&u18M;9P?J zH>+&iE9c#iyC~q(Vu0!I*-dGraER?CL+;K16D2w?)&7@d!%?to82?{4CDN@Eg4BED zC3)Jta?=umL-zc?wrm(K8tG@ViM!3v%lDcpIwIZ+mJOYJS9a3?pzLqo{#uOsYrs+C z@@e2O(#?%+>9vb!xI)Vy?(a>B5&ya=(N;FHa>%F<8}ZJn=#KE_H+pH^rfF4Lwt2!e z>NO5{g~;>>VwNF=<<#g5&jm7L`k&}rQMHRBJjOgZ{B6Z?(|cstB?OI%lF!I+?RhX#1apSl0&Lsb9f?%U zjwMNcg{~c)Mb|X2fYVOScwszuhLh0uZO<@_C`aASDIZe8fQs2y)@ zXE@&uS~q_ee`lrJj6M(duUmLHYG+m8jJ_{EtXq76zpEy0M!&aq>%;Fv?P|!H(Z4Ea z{XehxyPFGV3~1QDe%a@!-9Ia5(4QaHulUVRC89u<>694RDmoR{#9hQQ6Qf!)X~JQF z1C0+P#&nHN69)wjviz91Y56!u26x)HVO?}aJG-D^BWG^hw2RqmJ1l7UxC0xLwd{G}-~nhUcE# zfSF8=Zx;kvs{PeLqs}^+ZS21k#KX1nF{@DPROvBYtHsjL73vCCtAMU=^Z`>ZsueNSO zhL72lK5lQ9g?1wY{{JpQjN3bW{6W9*2d8{Ja612gU4&RtanPIB+2fMj^yr#^L({A~ zd)}O6dTd+8p&2fnC*9v>dg4HU?kq38$xrW>oXmTqoV!eKN}1u~yu$Ha=kL_>`Y`74 znJ16BE=`%uJ`4@foi5v-o5?h5!WhJ zbJuL_;2;s3Go3vgXWKCL=3?Eyh6}gFJnB4pw6Dhw`MaD|E?xW#x67_}ntpVxZ74( zc=`w@ST2hTk=6c`*1iS29o#&BQWRfof&>;AEPYt!-c4fn(I25p9_ z$Z_B4qR_+hcm1%e9N6*9VF6z@m^0+dig*8fE6X#F?V8iB*OPOxzI)nweHgj8&%?c= z79O1D^=V4ey2k}w7v*lZs-8LH?DMj&i_bi_`VxKbY!HQ{s{%&<^Spd&)48VpH8G=? zmbdl(c6;%FhP|Vg!Mos(7fl12uZ~_`zsLJm)nfXyV)Tk1<=%gOHc_Ijj^MZR;Yq?+ zrh__C&)um>Gm+`XRSB6 z@{-vl`&h>v){Cz(zYtBez z`59rEuPmc%$6hH?T^c+jSGi}6tEX!7p|By{eGNto;*B-EmvQxt@q5wakutNhl~=pn zVd6)L_Q(DU@LQH$UV;@3h{%~B!&%S_Y zR!ihAv|TI^7%&5~M4n8%+-@7A*CYyOEQ~SRE4d7LqGxk)<1F;AjzN z@2F-1%IqjfA-SltNe^X~8zE*8u2Rp|6-kK?nrMb*wNri|b40KsX(sB(kX@ox3|cEC zlO;k)Zw4kmq$CsOF*y77t#Q>p3pth`6iS3jZ0Q@oQiU^q$|MRH(-3mTaNKX$xk92( zmdKQI39*}icWY$4g|8nG+94c7utDg7FbE+GL5;8qVID%D-EIaxlX5g5ABv*6DqiE_ z{d1+1Ii@c%hcTWeh9oNkiBqr$*$bHMonQ@P3mQ8UFnK3=${eu}!R1u21DTJ!Eb{JE zI*`uFG?EP)6H`_B#7F5#*5mhSWgg6;g`f+z`t&HunQ5(L=y=Kp2(063E$wV z1g;auq6>Wh@D&VsELwq&-VCr^iW~U08h=;cCBmayi9cdOka7)1?i2(6lv2)+B8kW7 zEyDXOyjLJpBV0jX0H}2;A2J2sdfK5nb2|*^eB7izq_QXdRHvD$Euvw}&AVu)u8J@# z_5x|*lz~h~KcJldU_@_9h#)c9TgkTIP-ZZ^fRLvu4>G67nv|&A$OlOT$OJAY?geip2ZL*2*)IsTa)N|pXM%!Bn`&pxq;3G_p5j)XP29`fz-b4bgIp}L3 z-eKVYoJdU;<98e23CHs8E7c?_7>*#an>D!7UPXXb3NiuB=A0?+R$|aGrU&rkz_2se zj_gv#5ho=fRz)>vP(JfWTa*TNp&*AO>LPuHEI`+L16=m7w86Q5J1LPCf!WBBy+H)j zn}c#WaIzAG3dwIH=X{BqstrS~BgrrTe=4FjAe9%M`|zBJ`1vSl6W*s{fFkf7iT5G_8^H$5Aq$2;HYhgvY0r^-9;FBDcJxoXrx@F000!^ zq^cJ7LtMn97B9Qx;bO83omhzmN&xN^097O2Mq46bY*s(iL>H9L;V8^c{yxfE+5yA!CqfB{I2d8Yz<> zft9Sy_`VfsSL4aKr1C~MCh?J*3Au4pfINiRK(!J{7D&-v-bMmbxoFo*d>WukA-9!T zl#e!C>2J;C)DC3&T|QBpeNRfG20Z=mILm+%A6& zLaIi+8InXy%dGr8eh)Mzfiz`6!3c5+s8(H6i7q9Q@ZcN}w7sTET4aYw!5l(?p4o0?-!~-0-3P9r7R}7#y>f5+`|~K6x#7Hh>qzFcA?3$3Ys& zXVQ5hkTGy29=H)K&(}q42-(Oq2_jpc3f(*O|AmbPG<}jW|P~d4iO%R5G$;BZ}y)udLH_56y9pi{}kZy+U~#xUU?7-&ztj_z2fL8Jg<`ek;}B z=~5(vm{3L;4L=au&-)R@9qv1b6 zNSg`TC_wq6KvSGl%E>#~$ZL;p+IVu{3?kpV;Tak?rFGnf=2 zvKs6L>j$}_75I+=xzvy}YQO~&G2_^S7^Gw>*dE751o)kX#2i|4>|{5dgXH#bz=#)) zEN>z5Bp@$GW(x!`Ir$bdhD4(fjs!VO)CEQ+<9QtE&)~UT=>-0%z$nF$7f5#;p*70Cqu`XQjL4L5^@yHbMdTUIc$baDw%=NvzncuB{$7hF*q!*?$)v8+fB0Qm z+(xKLg@&~Jak~@$J65whamu7-cZ=I4-4%pUKoo$JuL%+NXqQ>Dp!GXz3~QYP7@-h4y?&&nF@L zR?d|QIS5Py<9x50c=+>Nc#Jqz zz?;nEUnM*SZQ)4-*g?rBjJSsIya17<(eoUB~)7;lyy|wA~>&B z+cLD!LC0$0lTe-3;gv^q+AM3X)lozW9fj60vUx(A)wa39wh2yk!gd?n97XMuJ?4oz zYz@p6b=(BfQf+Se8hn+|SBf!h_`k!t<6Xv~|SxIeOi^*aAIfT0?F` zw~HyPwta!HyV&8XY`)m>hV3zN_adiyagTd$-6cIAdCZsedK!34()(pty~L?3u6rxz ziWGiyFy8GFJP<16oq5ikuuc`GDB4DmO#*A=ylr(mcVkWm;8d5yjEB}PclzBx%9@{G( z20Zo(tJwQ^>e8j6mcHHgho8ZXBPhRLP)s=*%~qmGbi zFLhuAd@0aL%crJ*35<80B=8DxDKI@gvY0nzT+Yf7L76*aC(S&NeQnaL!{@ap&(1A! zog94fW$ffRXR5DFo@>#py`_tOUhVd-hmAv|A$~6nEvHuH)aRS=gsFs&$|FK}AqM%f z=~<3b_@~sqF){&LKtcnJuNx_^c}0|jdWb_>sS8bVT;|=(t{ox}MxV4ax!rR{A3jo?zA!vTdW$U^;^cyrj`p#cQL!VotjB|L&R9?*pF_);GvHs)ZJGYAl3 zQaPxx5d{5+AzH@j2;$d+g=wrVKD$ZNcpvTM?Zo+`Mg@+~iQs*!eJGezTY0L@ieIAg z*DJ^!qtu8{v766QfjmsHQq(C=5w$|nr&$qgFx<&H#$-~Mb*%Z!z$dYmiz>@jU5m)O z*WWtV=1pA41`pnx_S>2xEIOvA*qHO*GLNY?Tfpq0vW zhkP@+v?gXPKd#m$-r|}EG3KF%Iy@f(u1{=1;E}?-NckCYji4`IY~MDaXKvKmgemz8 z+pcr|?zm%}Rh8R1ey`JYR_pussw`j6<{DIDtCqwBrvI$kTbUl;>tp4fMAw<|8JosT z+P`;;-?sgk+vh!V-M4G`vnztH2E>aa8e-wBA|G9*+eZk@%%W%7^v$tdvnp$H{4?AA z&B-%2@87pAX6AtdhnI}zdqv*tq|DZhnG%zmH{8_w$VS~+hjQ=S4Dvo+GV@cm)0=Gv z507fh>wM(A?t>jiCM7n_%2>v;m_74Ss}Zx0p51DoFuT_JIhj=0IEZKBXI#qhvcJ8I zAWXXv94gx9o0(OO%O~DKHbP4h61o=dU~d)VHvhUg``Df74wsH8ezr9`KJZu4?Bn-i z9h4_T;|@lgSn>GG%HUB?O?74tdiK#Vf;W*-7o1#t&xjQW@_R<`f z!UNG@p3b?DE1kcb%PZE?>Tg!;SA94$d;F2}O>fRdEWGgcV7JV&jbWEA{A}#2Z6+2+ zl$e2R^E<2K3N~3DX#UYHzsB|XOdWSI%kmCfdEnyd_0u>fe}Z^qNWnX1#sm4taS4I2Z08Ycjfu zL#(shRO6AiQXn`ZMrW9DKG`QG3)PtRrW6xi>Kfl1Ew$woR%gzF$P&Ka$Sn`}k8F12 z2rTlCZMyVe(%LDVhj+ala=8^1hh8$+qBuIpXzY}uSE+Jw_0|2p;-S~%Z8nx%)1Cjq zLDYK1($vpR-q{l=THT`g+l9*t z1iUj#4RD~YhZ^%HH(PSkgE3DC6zhIW;Tm`0{?Bz;TG11Z6-{3n+FiSE&!$@phRp1w z@zMy_f;pv@U3v3M-wVi&#sJ??cLVzI1;mvMef z13786VATBp2iCUp@NQOXPkwQHxxgsX`B#sJ?yEX~eW;_B%z8AzJ7Hl7E^odpv7P^N zp>B@!)7Qs7tCWpT{I>)*J`LO_IrwZ=dBLLRb1q62zvy?WAUc2E#2O}d*6n3H!IY7y zx_z~L?DLJZmRb|utYE;8B7u=q8WMagE!nb^ClNtL8xMC1O$Gfa`y5}a>tD{DKXY;p*$JG7!VPU z@Hmx_9zS$TT8ZT za=Ksv5QHUqKfcJ0c`XnL$t8&8lOX)}mh6ZA5H`^zWvG+WzBplh7>PR74C4+9!>z?g zU5!{y{{IR!r@&aGz`8|&m9-H1H(N$!0#*A+OQ=Hw43T!0GMp*Y7fCs_FH>a&Ep@CZ zqBmgGWQiC{Bk1mrI3k8qb;V)1G7Yi+v_csxyCHTps#=JqGEx!LQTU;c^~VI|X%eBl zhn7K?fMr&liig!=9`r(i&}`Je{HzmJs7_dF*^FIS;8qPaq}LT z&5$qDajqnJ%>&iru zp~Rk#%7YvbQBGMd#U_+g@|pqCNj2Mi*HNDWVYft>Fq#3tq$;c{C36W$*urV-6q>E9 z9!Mcp6=Io=zTmwxf}bQ6T2(35wSQH<9IQA^0|#qp_5dPo*Fp*{z7(24436X|)WTAY zCW6yc-^5^g;P*zPvqexV!=PMHV3BK2CMkIu$}9{H;aUb7WI;2qs*QB-gY7XUoZ`(E zSf}8OHj_g|oZ2#?)&allvG)bNSrO6TUmv76g`C|~@Wc)s2ZLNP6&Cr3&jXw`Lq*k$ zR(w-Rq34rAIj4Y1izQX)Z6#W1gz^q5Q-EGV#LJ-bNr4{G9-3AK)L_D30Etr%aM%cA z(9mN`fv|s7LGDn-b^ubD14G9mem08b_6vOw`YA&&)V4q{wPx2g3c&D!dU`qHMj>6i z^6w5L*PJ)VzZZEXCj>$lYfr8!od}x%!`Z==P(`^x)5WnMAv9$n&}6w`mo^1YHPld? zuEn0&+*(wCQA$JuIaQt%4HlBn;0@4G`H(;*rz7FEer14BA`~cY!1OSTOc+@Ned=*= ziXgy`+jDZvenQ^KU38(#;~W4eG|JL!Bs^%~qf|gM$Zfm)^~A(+9z`&>KgwxLvWSOD zND8u3Fg$Kxux=XF(>J7RQB&Li^)D6Nf>hFHsh^e|iF>z`<(}(u}fO&uCtD zq0l7=!w@zgltFQ{Peh2S8zD-4VDA@rzCghX07#CvR3o^cVR?A+5je%Y0{OlmEJMI{ z3IN7!EO6WFT-i_1aBkyH1`fzMZ<9eU2VI=f9HNtJ_fSLBy>>h(H<%>N<%Ar4-rXw~SaQZ8hfzW}|a=0Yn>op8#@i zrDTyu0d|-|jwn;1>~|wdbmA7uDOctI6P+;U*uuMbide%hIWI0$^HZUdCUOxwnad<ir(J9Z>}@k_QY0%4nP$<;Ok?wsV%DGPG7u2 z6$0SxSv+6hyCt5k$m@x34rspBc+2ef!8nFsP%0m&s2;5fhOrRvk3k#8k zL!BygygLTwH3Gy9C~Do%1SgI9yd%;ZgZC67J|1Wzz}97fSVKZ9QA`Z7J^@UEs>7k4 zO@#2F;N01Wz>lQZuYgMfbVDESw^3fQT+K}dfnZn)GE4%?Rt^eY=v|C=r6Q3gy?a zImk`l9q>C84OoMBP7lj*>xC$TQ*(2A@eO#l#5spQN^Y};JD8v#Z46{88CeQ(<_~KA zuEZ8?H5SguVUCi{A;njerZseRY3t~Va)2oljRx?J6Ud(7zP6K0O5sT5Y;%K!jds6>}n~WKrV74n^bDxp$|kb zPGCs|$-@sHy0Zrma7H|LEawAyf6s0)LmmJWiHP`y1k;g$#gm}WJ;<~V6-+~>0TSEn z_YguMB0|<*h4w53`&40GX8^Y&$o&(kTA_1($d!aDrW+{G2xBEARy52JjlHP~Bf3ft z(pQy(-AF0OxKzV>o}vy{Ni1|5>`d|>rDpza`5B8gXl6-n&O z$ycQs&2R&d3&~!2nh?^Y6M!c}N=$}`6e{5pk`<|OK*1KY2>}g79KZ)owk=7xhn+%} zL@GI$JK>9uyi5=Cmk*d_o`#Vm;aOQUOtXiir3}GT zk%zi%nZfCzFqD;#=7yo3R1zf*(I>xx^T{w}AcR!~xv2Dk`wWpTl5@LaAtV=|j6;rB z@?o6pqXukcj>01MRp8&JB$$D~2@_8Ey%O)|&;}oD z6Rt32Fba?^5!VA%&%u~?!|w<9tq+NQ5DI;bw2;^V_d*f@iJp`Bl&T2LE)~aQ{ZXzj zzR$rsCs5;#Cm66Tmc(2Ti&@M@It7OZe0zPCYH`G_BgGB`eR3hDTG$2_QEvlkO;Fbde1Lb~%xTg?J) z625V4JVYW*z;N6~aWaI@D9##9b;fW<;&%*^?L_cK;Ht5}^E=|P-X;Bk0TD=l62)+{ z!DgVx8@zK<6F0@xAnppD+}a=oX>TH}8ety7Sp4QTQ!CJ1&hHq-JGWiNopsrYGWOz~ z+fZ%=L?8EDWI&FKunLji1^?ZMXpX<{Ku`i3&9FSzaKYy~(V=N~QtYfbL()!*5; z3QtY|UK8$fX zBiR7S72-dtn-2eo0B#(5$_<_rj0$KiFEb)tar9CE$R?w@z92;x`Bn>}D-V^Bq9Q3- zP+dqC%i$-ix7@ci*6V8ExGf2-PQ^hRdpHC7rceBo`^f}3k${q*#o+cvccc6s)ip$_ zl#$^Hq0FCHyZyj`6v){M(5DBvlwC@ADo@R-Jsss0VVL-Gp@^K57now4bI3T(!yzXF zZI)YGf}1`8V^CvV2DgWDPfKD5cFGCpACzh=BSXmL>aBovDwvtAhTUi5q)!tSm6CL{ z)D{U}$SY;Q3IIsu267g{SDS+oh7N~vki}gY0WlaJgXM5V*IAW96e=GuGMqA0+LC9O znYptK13>Jisu~cy6Nudwo8YOK*X_ZPq~L4Z27MO5A4d{YEO06df>8~*T9g8rx)^e| z0(g`{8k9~X1o^bliV$Tg7Tz59j6go_WEFP`DwW)HkV#URmp$#m054lmTP4=u*lHKG zVaT5Z8Sv5; zRC4P&nMU<61zCOZ;WVoMh@ySaHB%I6q$!$(jwO{$18ijI=47QUnkgm2RUFmYYtFxM zd^Hz3EBKS<5d$P{&z<-g87zY$0&97BZ5zlNIYd7=g>00wtw9?3WS`vGkbJ^H(|xU< zn#&zTb_yMpW`|IO2zv_$YITsoc|0Ghy$C6cMGu$wRrj3AhE8HURY=Ne$iunFr=5 z_6Csdg_1j`SIJ!6C*sa!I^oF1A>KxJkA{2lN9)@tTiK<32MyefuvX!2tLCy@BHoTv3it| z>qUW>iR>9RK%@W}6>HQFtK~=a$T(#j=#o4AmqnIkKf&ap0Lx>^EqR(T8X+a?QBylS z+XY9E)yjOVC37??t1JMgPAN+;Q;;z&+y6KvaJ#EXN!R~4C9uzm+x92qKTiq#?^w+# zflRZ8y?QOj1oZk6VFb~#kKjooh`>G{J3kTF`{nT!5nAxlfc-rl&xi1}i-}G@mWZH= zvQb2e)Tvsgc|_YWHBu6i%5U9FgaZ}0rkKifaN_BXNnL4@lPc&M#uNJ~qRfj^wR`39 zTFpz1vZ_hd8PLp=u2e)@OVfm|PFjW=Q~&!NM%|H-y5n;$ndBr2l(QrCylQaa=Kt*N z$wjgtE6VC~#HxOkzWPfmquTr?ajei!8f_bG-6}F}u&s?`ZHiV~d0E_0*2ZvS3e&!m z@9GggHb&c?Fdh4ptsWg=W1KD%*bVnxGd9)64v_*(1{>VWvm9{7GSKuagA{bHd6kN`9(p*Nx`~BdF56$ajW{hb6LOSNqOt$!c_wr3)U}hE^kBJ2ePi#iILI_g|@SBpkcZI zci1h&L2-i))kxz854JH%a~slSo4!war<_U4W7xZ-G6y43`m;9_E^!JRZ~j-@cdH z%NGV+BUNjo@Hj{Us(djBDE}63Z3C&F25%y{WCkZC{U-|GJ*o)3QA7`Z>Pih7Gs%H64ogSFqU8>z9 z&7dgIZLIvk4(*=%-HT>=Jdi(LTG}&bbwV%y?iRttnY{)aEeZ~Kkoe-QYw!6_RZNXz zgndnB?+Xss=9Z9_TZN;n;^$kwZ8y~UmhY(fJL)Yfa}=D@C3V(Vt4~vOoa6Ii1RPTr6xme@*rh?xW?&YGt)P|6qP6Mx{E24?vYMDq%ilSc3@eTYbx zb<~y;f8ZHkmJeDc+NFYSH`MUpbUd|Z521rmXmOOn*jl9WAJ{id9n)ojwK%|S(2BJm zF8%f96xUIqyCKeXaJu2v%E7j|L)UcOlWuZUC{)h7xAr&x-!~U0&2MX2;Wo7I8~61~ z8`>(`M-6o`yq_31uART^gPWV2-Iz3P`|7|M|ML>#;pn}bgC*%D$(A#3_jU`?8QDj) zDdpPWOvgtRj??=XZM&b5+4Jar)r!yu+e?i*Iv1@Tb$S2T-v7Q=xGCiO+kJE^UmbZf zHdT8_*1(0AU1R$gr`sCFK5aMLjd9D@GF+h0YS)(Bhy$Zawbce5iDeN4W5{b)YOV)u z7{}j$QvA3Gq5&Q*H>uTHiJ=iZ1)r>$G>#Zz6=|<9*Ks3zpipB1+wyc+ZCAMoVVpm@ zFEJ!56#=PkF6A!kH$Kd;y}En&{%d2lTpE{oE^WUm^kavebr1KkCY{_9bh~79O5Q&z z=D@i9otT4u$<7+jPTCWWZhUkoaD3;nd37j?KxU1sMYG5vPja3yj#%>a)6}__CVJQHJ+h!`R`;JDw_N;f zB8U)-^x?PlC=f5Qk8VHGS8tlfWy?nUxFI9`jP`h3?Xt)rK49cDi*k?a{Tdw-;ZiA=m{0_&SI205-Ys#l>!gGy#k3=eG>li$L z^0_Wv+c$Ey*e9RJI1KmEAiGuw@o$HrbJFH8TiY^%XUMTzj{D;0zbFDvdmkbOk+iap zz-}_(IT2!s1%&mU+5EuRr*{^K!_$<(Gus-@ExC5m)i)z}j?wl$PV-_msv{=Pjhg)8 zZLd>y_p;|KI=fx9E9TU>55aST%O<~edwc5tEAC4GV(i+6XIiEyA!(UvW=fI}T1l2` zwq~XzNh&>-c14>?n{6a}NJ0o9#A68|glV7lnQ14P7D+;~#S{K>Pk4}b`Tp``2*&J(`eU%Ysn2WodpWLXud~wyq)s$|pvA5Yf10vTSU)&%)$aqonW?Ms! zeqzEht`Ba6M?NlMD(<$j$E4fd2oES?-r$SFOCI85IeTzT@>;Sa-pdm!5#HLO6r!Dj z{bh3`6mIlR_p+X?t~1(ZUNk7at=*ecKcu~a8&jsk4m9THbWD30qa8=}BqfcwuQ<+0 zw72=q{t<*Od74)3)g5owZBQmqJZSYh`1sTGBP%_J&ue;R^X_hhL0Le^>Pru(?*)!I zFJdM~1^=}~ov%4-LW;whws6XaUGrv{&PfZpX}*+2U>$jVeDc~Ysz-O$oVxq=@=J%I z{>OGV)bSLuU#{)hQTDj&#PNE!7n6dt#Q5Y5n%>GN`!$!=pEQCehgPi|HrJs%JT|eJ zJNi2~0JSgm-;J#Q)N@0#k(N*UaCOgT+!b(m^)m9)>tom53{n+pp0CF#r{PR3XgED0 zJ<_%amt>0grOH})3kiPbRD(7>lMM!=XqGae3Gx6OO~A>%Qr)@IG&HXFq~2Q< z+TnsxJahH_Il%<~+#y~)N{`CY9$945hxMM{NbT1nGL7;^BxN$kShOh4OJS&AG#P5_ zGiS)+J_f1CakF{4=g^>NCb`3L%k*~7;cNStdW1d3znm03+*vS|VY=NZRbPFBqs@dR zBX%sTY1PN!!S!qN;McWA;5O>VlgeH zdk#8zS%M3_vR8n^Eg?usp07>XumI<4R5GS?UecB1(=*15pMTcw(1oOZ7b1KemME6F zm4@xlQuCb{6f=8Khtq-E?Y@)Oewgh+n4gkw;Agrs#@@$p{=qUIKl39W?ETsE4^^l8 zSzd^l6X-Yp@Pqc#skgQdD|SE7pPsx zXxr{3+Tmq!a&Jv1d)lG+U9lFHy7B>B8*8Ve{Wa#VoZ}! zPE?a6Ai_03mxy2K|G=+Q{$^c#93FA65>!EEpn{q*TGO6Lj$yYrY+pp$RlNGSt0)0i zmWFg=gmB@TD&ua=?#=j%1llb%*L`>w0`2gdabX0){MM>+#PX8U`FkzsZ7xc2&-4^rRS!@ zD|W{o@XUa5N^iE!z+Zq#`)-U*<eQVY$iBd=4)Ua2I`w*|-A8*ni=z4XqFy z*1sEV!z+Te{y9c0oB&cCxAK^{5^zq>Yhd6?p=*@(LprYv)*oBhLc>*n)$2b|7OBdC ze&VWN!5o!Ux;P=|DbILM-FOO@sFk!V28i zDB&dF@FL1ci6;Rf;|foa*8)fGDQ-fMH*gurdZ>VFM~S~`rxAD^u*ga!NuKuvdao_p zFNb>y=M+!8ki~U@_u?kDEbbYQFKZl=!F5Be+`RXA^ugy{Zae1UaWBB2u5~_+_Y#cW zPgj%Y^?*i#U6&m0708WR$d^MO=p1+tCHlE>9Z5gGpp!i45;OIQ4dsWqI$u z!g&Xq&F>wO#i0*`OX0tP%17}GIoxZI*hL1)@p@sJ*Th-!xE}Q3w8Aqu+{>@`oxmIR z`msC?CFEJQ&Qbv-Oln_IWsKs1FoCqM2BoqFkA(qFN;C;fuw0#{j(Y?SLzcWz=QTrE z3yrIRYlfRU2|XG(^r0*7r%X*=6X2}N4`||=z(D2FGfmzDAU|uJqK#{SoQq2{b@;U) zLER$LYC)|?BaY0gfrh1#bE$k03_EUDLB)ySwz1(9T@N8h9=urwv?@5U%Gr|6D~F+d z{U!`t8N4hwugOd+0r8$ipP4iP%utj6$l@1)s+P+uHa{Qa5t_Mrc`!YxY(3W_7ZxQq z>h0y-gVy4d+xv01;IwDo))d+e;EY)%a|m}0aM?+e!;V*hJih3|VI-Sw*kxL!rdoGM@$EXf^K1W~D=GFsO!(@XFu?{3QOX=D@^&tOniI}8!AGTo# zkvxFYp)-{f7>_}tY~lq1O2Ba~^1&v8at9n5gI}&hmcaGY*(>F*Jb__Ghr{GEpFr`5 z6|WRgVxDO?9~~#6#5>vReNQQJTi|qUVzz=+JIs0foT$Kh450_Beeux>w1u~yGh~(D z0j=BqxNP?uFs|BoTQ>C#Y@NMpx;*+&o@Ch~6a{_>XjQJk=RAk${gw-5(TC7K!j=y* zk+1QP;>0Qt{GA2om@Dv`c+`dar`6>FK{_#4wqn)ts?6IlxN}UjWbL&ev^g%zf z&ufe1O`gD<(@Jc4#QCx5B?NZB#6t+dC?Sx;-Np_=^kdi+yOpib(GKoM6`~YU+reWO z^`63{cGx`gd5=PC8!R&a;HP6!2QJ6{yg*@4qZY`j z*!fgZA_0@h{8>s%B=E@zLX^}bu&89$P8zQQnzb9o(-X@fHzVDFCaHkGl*9=(l0pzW z#Y|`Pl!D*zEEy)h1YBGWB{Td>VM^wLIGdhAlwju5F{V%e7HE00tOUUKbvR%nER^yK zmRqrO-Lo2s;8}Dz&BnP1-mf3_+J;pKSB|_q!!{`Z#*G6OY)Jv^e4!V~UQ+<(8grI$ zl=H!1^u&FfqC6=5GhCUgk_SVzKaS;gjg?7nckCeccV*20mCxUgvZB_+bAj=PXw*7YaB9$y{14_>?c6&CSe( zU1*tead|N1rIihbmJcr&;YZlC0=S7krpv|^LfC@FC>vZ6pjGR{;upik+cD>ud;t)u zP1dk@#lSaQQN!d3AUgJxF_TvUMYE@FqvOg!jZ*R$c$HulHF183la7bT zYlU}pd>2K23uNf47irKQLTTT7ElqwCyr{e%q)BT6)l*3D@*lty#MVf(2f#sMl!SW# zAxjl1wbB}3uO*UXdJS-6NX07cw0gMTa;ZdHuO2?#NTTSZ)xoG;t5)jh)xq%5@f;nG zIzVK0SVvL|u842wc+>(mOtPc~j;tPjfb3BNx$_XimQ=&zu}BhmR71I&#Sw~74AJew z2~-m_&O<~Us)`umrp5MCvxU&BD-O{m3W2;KdNDXw0mi;*j+HR%rdBX5vjT!GcsFRY z3UKy)q)yK)2S1?@=%MA{88}KnPb-5Q%ghA~0ZO1r40B`%OVJ1X(E^r~z)=~G8BG5Y z^Z{T-BC}Hf@f)5rGeZS{i9r@g08J@JGg&6ZFsrEP8p{arElKJKo75udI=5L=1fv6^ zV{Q5ifvdwgZQ7F39^5dxN@tfBK)nSbD32oW7+0pkNz8{ror4@|xd={VP3>a{OJH5I zb2`JZ6wa02oxmWLLG{S}(X_M*NT0GY3{0w^S@-1v9lJUpdFUR|_Nj+8ezrXA#CnMD z@oys$?!!@@VV(y2A-rCAR6(<;2{3X{IxGRrnj7Vc$}PYN`!HP5xE1Pm98V=SwZh)N zDBERdeSnd_4DkaL99&v~=Y52mD-=KAh@arXWYzmJ_V1xdd8$MfB|7lQoBUR``!y)} z>j%nh=mmyv|6g*YJyQJ2CU!yIj=OPk)Tf|)?R1O+N<_%4@~c%)ZU_13AqK?cHn2u= zib!mO(y0%ch_S68E*h~y@puckIE_tHbZmjo$MV-GZf=3+2gl%*awH(Uy6~-Hr9`^k z)Mq_{Yxzs}s;fN$JR%%&LJizKrahSwT@B$p#0fn_PT*C;A+_Kq-!CBTl1~mkT8_e<*fE9@Oh-3 z3)z)GHFwm4>?&Ay@wyjqt6(QB=OWZp!e>J@eVRcfAg#!r)?NXaT1OjS2~JlP-09qM z=&pX1LhmdCM$K9r!>$Zgq8Av(Wng-y%!`p#3K&^4I!oc^#)g9ok5V8c&$-DkDFsKZ zFSD3FC2(svZ8=lF1ZH2GTg*%r0FwSkS@y+n<7w48)|z6e{9p--fETwz-DZCg7})r@ z*_ado>D7@Go6161Z>d0J8x+EF(ky*;e*vuCIN6?^Qvhm6ZnBLEqqGtP!}%#i=CMd+b{)Bk`GaRE3UBh3cz_XxzeW*J44=wr|ObNduMT0r~4$#aUd7Wixbw8a_{M9(XOGDsfxVcb=^p;lTW z6jV>})uJ^5($3PgBn_|uV|X47a4PM=Y;8$Bltd!R@Tdo)UW2FFJ#~P%>t}6Y9at^a z7^#z42Pq9}7U|IHpriBEY8{n2=$qemN=H}=8GH7Z>ZH`dt^O@fxBQNi{e%dXU_Vrppa2Q-3jjwP#VM#d*`nDs0y}nP9#usIA2)7zLTwNNBC{{lEFmPP zuQ1e&7J}(fI#btP2uREH(A5)yQ2)V)S)EnThtLGVDwwe@q#9ByVa%mUQ<`!m)D;F< z(1?|=t9ZA}H-V!f@SsZ>bi2)&_9y3Xk-Wzd8K7^ABcFfqg+mqD0! zY#u|u6!sv4jln8~2fV7`%=0DiY}(VcOt}(>6jX#VNhOd}d*LWkEC5nt<$I=`02I!X z-C0@1fT_zYvOucm+oTks#5lc?tgXf1nO{A@CZb5H@3Tn7C_(SWlPp#-Bw6FsfT=0u_8M65 zZt)1RaV@woTd6un>mUo+n_A}@ARXz4nhi~GmsGkwyic^OGJrJuWPHmCpxvlc7^0Qij^&J zB7aSc;*J*BO}%$R(YOUN*X)0y*d~FC0nICwR3s2OX8IJR6%r`7Su<9{tQkIYM`&qq zo58>ArkbXpNovn(IyONkA~4NRr2h(Ic2YXUfUH+5%JOPR3oKQqlEg6g+*)g@LiN&LXI(xpIwaAcFB* zG#aTdgy13Qa?zb61Wdd`RuveIUgimQRj|6YG#=Ed;J%}2C8SrvvTXb@=&l4D`qA7f zVSd8vsq{7F&^z_G3O&0VwpA2gqvw>tMKoS|Xc>Uk^z!NYUYU04oDY0$MvHIFtS$(%Qgw zHZn9kS|RmwH%G})0yD6Q<2Qr5YT9Xy(1+l0&8$T;@d0d|lo6t3(g^xlC!-deDPiX1z8ct}LJcCP)j)x4 z>1i^z2CN-Kd&vGZFk4dhko=|^F!H5jR)b!Jn*}Ab8vgua=2%L6HT-d~XEw#Y8d_I< zilg+2p;z+aJSAHUuM}jfDDh%AZgc%L#a;}4G1MkXs2Gs9M2|`o!*stiGitX8RxPv- zq$Z01d0#T9RwC$WNou1u3*i8^KqW$WCptSpH&h5Wk(|{v7J|&2_@Pi*1(ORG_yVg6 z!pxg^pj`!p=Kh_qrV<*WP?o*WNW?|Er3uT>IWuQ0G276TbO|Yz}z0J zNdlO^&gnVRT>v{T&AiGoE(Uw;ldD+Ui=lnG=`$P0Lin<8pP|i~A~=NJJ&wU8d4ka*b)mAUf)PGN=^|Gl(-^4uN}dfv^!NnXGvw0>k$-azum=i}wLuR(wou3ToP z)IOIBeFdub!zRg-ItTtW>48L~&l21^z#o}2gwPJSzU!PJF|iGLWx7wwqQuOM=&Y4; zR!@O_aHyGLUkjw_RF5Rw>VO?HY;O^A9>cR6mt+;}AA|A8b!QdkwnK0R>50OtHt15E zJ%bq125ZLp-67HLg9c(tiW;rZZ6S72ENX$nD1C^cdkak28**K7QVX2(U9nbiQwvy& zE;5wdB(VH1R~Kzzy;M(9`a>dJUrOVVUbv!LRlVU6xP%N1RCjy?^~n6u@MwlV&^p)j zYk~t`64&V{*Fj*nYOT)JTEN^|WUE>rMZcIy?yQ0PAJ#1=r`Lc((#3=1MK!>f)!9h? zSPjUV*G+D&hFH_&k(3kF5bc&>NeQk72dc($3bh(C!~FM9TE#F0nM;(EYM8V+>;y$1 zhWMpjPbf>ouz5t@NlK9zYDP`Xr|cI4rsh!VM1ZWhHPkgCC?Ar!o4P~<&Yd|$R3#B) z{Dn)Wf(R_e$v>oa3c+#8V+pT62OF+jbX%DkQ0E_kLub9pPcz$$-G3#S7 zluo>`nH5?L5AIzNv-*qRF*0av;tL_TRK3~8rw}TT{9?Z;0F8959qdH~kf3gv!sZsh zjQO28Y?T73AA>E-hXP`Yh~1M9P4yeX*}MXHb6Q`Wtx^c_{LS-3O7;G^| zn+LMnFh{Ol8L(QZvvp}g$l8W17n)dV$I09l^JQ6G=qa3{f4IS0U)uSP2%1M zr{~qLNIi|vbfTP~C2RyAw?ZAQ%tkmmd*uQxw??oE`~zi(X@GNbJMy(M8=$D5qfNW7 z4i0U1Ch26-&zmwcv4TnmmJ|Op1gQ)HO6iQ$<2$hrpyw*2T zBE+Dq-quf{4q)uRZj%Sy;njdh(Lt&Olpo092S2t)(sYdH4=xqY#{_P3$1h)2?4R~x!_j?4`md$ zgK`xd5hI77Mgij{ zU{`yuE<+pXp%wEf3~Cwlj4&O;P%VR)`FoU@StXEgAXt@|Q36ZFqzlX(0d#H|k;hCG z!0TP}BUlN=NaPM5%_0gQSo6>`R$URC4LMkC6Hy39{9Q-c#20}zawOQe6~UqF>wRs= zMPQES0prbW@$UI#^VBDqGvS9@O+DD%#c!aDac|wpLC9 z+%lc%sl{%D(tO4REpY?HuG)pyYG?#M)5{-7?MS{OzZ_}UeMm+AcGCX)aM=BNoo3nt zKw9TK&A=u=X88%to(EDpOyflppkW(mW+MKUI6PJ(>me+9wj*969qA27KT%)zNUF~( zEtUXMk1Uk}C2)VY+8)JaC~@K_=d+3^k&l6woq^)eRyd3tW5n`S=zNz{L`-c3#vhfZ zh?T9d6EO~AL>pK+C%jf@Zi9GxvoON=4k$zYSDeuT^(T>H?ID3Q6z(AUw?Q^7u2rEA z+4F&kwgi8a037-K6)YS;FY8N?LK`3q^vOcHnSPx-u`tDGUih;{J&qY|@#rpyT40cBVhlClNbjiHkwI=YuCJqZt0&r+AO0 zT@1;`od06oErLX~J)SoDMbLueKbu?#7`tQ_6#)0l#Wn1(0${(bLZkOx>eg8L>HG;=y9a3#6mh&ssK znhUd7C#Q1-xqzYtj@*n~sUFKs$pr)C2ITPafiVpUYFa5|VUBuQIYeNNJwCFp$x(I+ zl6I(AJX@fk*A9;aGkO&yZLt3j_o0d=tzfo>Wv?hic99pNe7zRH%zvd!2^eHOUZi9q z0TyES>WPm)HwZ<7JRSmaZ&;F49!UL0Bo&mvDfUsHc0(OHTYr9sP9IvA$ni?3kk*{BAdpzs4Fxf(tocLv3|8pt{u zqAA2`aO2AbQ%Kc-%#~b9iWqj^FDRiTh+)1Zy@s+z3^O4?g{mipqkEgDQrksPz_<`V zO%cJ;85=iK14YmrdHg1oDuU$ZsduTGBB_3>dsGOQw@)?G^%KJ9L+9t|P7#9DGFE`D zsu0w&S51ZORZ{;GcvJz3+9ZNZ6-+>S6f{-B%b<@}p&ZHg6|ct8NR_b8nrco{ss!6j zmp9Q8DgcS;t2A~6%u=d9Nn26@4yjEqXvM4S6ux0CP-W9^u`nN;aR1`-LLat3>AyiWR<=IAs(BZUb0sCSBFcUYbvegQ~7{xu< z*#&UFqv#Dwfc&x7`qXGvmC#8_yhA0401G2(+c&^`B$tWqtsbYBgYV~2NJ(@QZXx3dX z1Vp8>x)+7e?NVi{%Miky=1;F?y{Ur4-o49pRfK@Kw;-|#kk~>*PzhN0l*X+DezhFV&2s$%IfMa4mHG7Z zNUzzvAcuaX3^oRkW-+=;rSVUOTPd7J{#VB55_pdc6Q*AYw1#%LGG~>*L==x=o)&;( zd8{d`w-~T+1FNnWCLjZrWl@Y0E@kAhG>QQivO&%!6Un^_s=p1X2v)9ne$b}85X{FU zb=o)=!hHR0OW0`z@NP(CKATVgwTC(=oHhBNg5skbw|v-On75hJln02+GC8SvfTE`j z9FIJBrL6stW1J_ALvR~%VcgjJ3%F^yQn|q8=YkLm6iD)bC|h+$!K59!s@A0wg{>&@ z@wL0ej8;JI1@x`l7C>g`5zW2_piCcTN9wr`IiD#;h!#sWaV1e zHq~r5Ij{zh*S3gEs(}kb)!WG3)o=nikSKSnVNqDqI0_Hx=d+zdC>qtULauccMY$TT zPhW9^k|BokC=f}B6+;Jd$WdI796=0{;vfbroJtjnz~ot>BlWHbD%%eSQIkYqfD8!g zA`u|>Q!}+g2*{ix>Yf$?iY86c4HUv!Kr^a@Ey$5hldA;e4G5#1tAGb6073JskowzcP35q*Xp=0x zyd26`X$R0v%ON9S{V{rT84!pao%G-`C_)MrBd-)#&oY)XGD_i%(W2dq&{8m*FMpEZ zR0?M1=H|@E5_p5`HfE^+d{CI0r7eK96vT1Tia`Yhv{@IC|3sxdjm0enF{PlAC4=l- zw7^(-MPNvEoMPis1QsYBX|uHugzx9K*(^fwITX0Hu`ZOxqu6c*aAHW;AMEr3K*Rk) zu@*xHj#NcN2}q;ktK$^5x5K(cI^zi`9e~`AX~eo#IFIOE@n#DUE}L(n28$pzG^&o; zE0o5+A)yK~j!jjkUoHn^hF8;fl}Y2+%%l>jKhEYwp;XV{IOc(F3z9S*h2S<1trY%! zh+iYTswHRu=jL6Z+8OomH2j*n&iOi+^ifGnCe(nJ*XxxO)oKuPXFsNRi2(aL>GcT7wFWT?HdXM~~&)0yBOA%b3TkOqF zDFA_Z%Oq}7F3{e^zUP?a0a7y->agnIboRM!9iLjr8F_UH`Fag>HlF`T7F5Ib{DVs= zld54t4O-A1Vqi@^=|;UGf|X|?GO5N$|3}*nbTK{ZH>~W)*^!+3tQkN_hFNXjl2E1*Qd ztC1l{%xVLR62U?uqYaFGwOWZ`t$@^r&x(8rL?8#PlD`BPhc5doQ6(^c|EOK+>k( zb*2GQN1VE&b+ZBN=eo6OZD@e2D+}DoIW>U75BJEUYk-E-Axcs;ps>bWvOx`$qaS%# z4LG4~DHNw_Fj=~UN9h*>wl9p*D+Zk9wLpqCqEF-)rtB8O=piY5${{iIhm4s{eI$a@ zXx|mZRtzd=djYjt1WrgkQO}BC#f`=O)I%a*xZH@Pt`os(TkkBYA-YHU=g~+TOs(MFxD})5Ky=eU|kg`AxA1CR)PAv ztbE9-1YY;s7Z6qnXgPmEMjbpw{wrF41te2+HqiD~03t_k8ovU1Q#O>+MpwXf6dtE% zltVn)a6(^F4tL`$yy@2Ea0}s&ezXjh+_F_>Se3yGw2gq#TnfaXX$KfSrGTR4&lv3` zkfl3LpP5)Pu+J^D1o&tl3{$rRjNcu2$P5!eqx(_=7C`_gJRQ#pFNTUFoTZIl5tQFl zbG0!mf}?NlzOrE#O6?%FO97x|UC-{!hf~N*;~dJD>NT9me6ZOtYY(S94_Yw8DlHEt z?bueq3C)9Mq?e-{8qkBbnQ{AarG86pb}lq&_)g&pbHND(*ttEq(tR?VM6~|`W1##3 zn2P+7%rpUD+vFIMQjob)e;fFf5d07s^0aDc+(*u%cOZU3dnMK51p>Ww;Uatp` z8Zrh?djTCGj8QWD?t!>7?fJkyFWNJpZTZkE!+Qo1DBdK??*e4LHp=RCN$n(Al`e4I zx7Jn8`JN|$c1z^Q(@=up=fpGe9#5ovn2?DQ3?uvy5+6(H zL7}r9l9wObr4Zc?48&Iz8rmRo>fBXCQX8naP0J!?x5C{vHHsps6%=)jE>T1YanUXi zcO?r6kZ-fzYVT3j~9<0|QH3H_Y(l%%Sg!LBf z{yMNk8)$UY>Oh>X7NJ9~gAZt9k&axQ)DF~fs)ZFJ$G+Ebu7$~H0AyAz2wfBX$meRH z5(x-$WDVT%d~ky7Py>F?uMeSItcH8hgrSu4)iCR-0gbYx8ulinZlb&qgU2?7WJRgf3Zlrz@LWC}_ zhWb_r2@m{nx>wNp5g3ftU5oT%E%F%MSRwfLR!q@dis~r~mgwpWrEwEoEg@(upYwWF zZxtXjRUPhDf$F1e3&EudwmP2j14b3(AprqbE1|O1r5hqE!36Oqnsp_dc-rklyITRs zols00TLGPjFVXLo1GfE*zM>o~E2cZp-OGUxP;`RcSO!TU*Kg9VmjM|CKI!|*q;$j} zmBEq7z7>qqrJ#@ONXDH~&_s$6Gp7WwurM>V1meiaCd}9pKrbp(MSz*DHW@`w`-kiw zHpWFL(YNkP8@obj+>WhO2<>S99b2^kP9pyU$1fkOWBZ%gP5Dx~Vc*J!QA_G4bMNOu zI0|cX;`5;|v}7fxKM$StCjoj_fY9kw~ku0m4Q+ z+NMQB{v2dDX^(Dzt^N@TT2+m3;bG))t@Z}+pdY$Sa=H)EXkQaa z#CWUcSYpP{6Vz;cIYmqf~Np|ZvedPCeBWHfI{Hcb|K5X`pXNlPR$8t2pGJyr5a zj-fIm2l6x$g}luc8J`|N(7&r1rPr+E)2&H)macZYb3dcF_QCgtqp?=mOKMY1}L**y8I%R`k>-o?P4qN)55!&XM<4Q->zP7;ie8IkNQ*P%yOv=1E?k%c2z z^yFy-CdyKrM^U=c^3)O><@A;5O3!e4!`BEmj&mGE>Gt0;{bJ89of;hVRbugs&UwSN z%V`8t9$mS6FoQE^elhG1PBRZ+5rkqqJnC8<}7`x()d`4ksA*nKZ zwsL*+)y{6UnH0At!QW>zxrD}<(K{kYdKPkrpwZ)YJ3Bx8Dcw)TOeq)8l; zNpW+6kW@wglP}z69_rWp`L-Rw8 z7g%)(&Wt?S;M|&Tg>Bb zB)>`9O*3Ld?h(ctIgc8$n8=JNakRZI(hLq|F?Cv1tgPF2TCQP|DS9fNGvYT7-^M2! z>cx}XaVL!4cqq+i*kH{_-!*=#KWnu9h+(Sp^>tFvQO6VX?apsf)ae8kO42yQ&|GUB zInQQt?-r6r*1 zE35oDG&X>FdGn?XL8NDH>*yL+xOt;O4a#&%TX|O2CMmu{4Tn-m3fi+Unj9^stBSu` zY8q#ja*{mSXyY`L$5b^rZQ*)Dt71jssLdLPf10J`&dAQ(WZWP@N5FH{F{*7(qs$Dg z8<~dNv`p(bk+n5WEp1G^9AtiU%=FIqU z#-2k?s^)96$7~t%%u{6tN_}Z^**j~4mwGrU-=TNXj>XE}TGb8zBu(SYE?<)!2h07~ zR}VFI`&pG8tc)zWdURplGLUr_#!s<0q5j;+!qk1+t|IyLF>?ZDd%IVs`dvChpSaw~ zyRN3s=I@M+Mb|FkjWn11rQMKcc>VI8IVQg5(j<%5E({$VIFkLK>D`p?AtTJpN#HQ-{_2qm|=|!(V+McfJ^TYt*($<5}92r*;R_ ztB(v@b$0&4F1LE?`a8oSFYkTW?e98WrZG71M*iX#5jUnczpaeAC%dF4ergU1>O~h# zr}ic-(|kN}cT7ci^XoLtnNR2Jj;*~)y>oHPo$i2;1>X`Y-W9V`8cgnAQ zI{(qfhWfkBH?d=Z$Iwx~dmpb=tXq3i_jB)=d!JriTK~EF!I#emrs4=fH$iXFRKi9= zBr%gBYoON>>d4oL7&~P9wk`PKR$PiGjV4SHZm^7%+|uhiNVE%$Q$tA@ z5Bt&QEmqm+Sdyk^k&!zh(8O{*xye=GkG9+&5;FE2QQ0)k`FQ>Es|=0n!cCLoJ>8=< znOc>Jn=P|E*}+@$$z7paW+XTcf7;4i`AKCfU9DARFS9^jd*vz)%S-iYI_vhLG?~?Z zcx_JU(^RwEW9qO*Uu{fns*&Bw?at>6NYjNqrk`gyr zw2vBbkZUt3Y0u7x_R*uXY;7HqlJ;e_k1;)HtLGoKH}wsD?97E{=Ej*N?^1beWV_IA z{`M!y8TO~fyO!8#XGxPGMtF^zU0jj0|611Li7OAzUi>2Iz@0abCvVUy*H#QqDNtT8 z=p5cvvN+Yya=P1`6-!1QZmj8;a<>NQj_%V-_d$i4Z8h{_-lQA?lm$tMo0DOFSqaW&( zER~TZg&3^ZtmDRnX?i5f2!6=MS7#m(m}wT#d}dppj`plfl|`W=<=Xp}5i5H}jX3Ye zeQd%}w8uFz66ngt{u_qSBQ=kQs+4HQ%}#VX+L?$y-;OJg=EgbE!C-A&S$1S4w$?4+1{d4KQAtQ6OT`uq1 zx8CQJV{@tdsH^85pVwskxl|lmxBl#^RVym0oEr{Zx_)bcMaZTViym9M-m0s;7*)7p z$=h45cdw^in%MhnDgN+ozEWgn{KWH~!*?{;7`R;C@kz#egwU;c)|7cfUZBsI=?mqo z^ple>ocEo)qp@5DomRxDXUeHJuSKaia3QzX%3+6*U|VRauWWz~gZt^79n&0^_IXmG$ws zcb`|h{qp70moGRO^uP2^U+z7@>wSKt>Qu5aef?6@xBjYoUu5~ZDt!uy)9iUFXg{cS z*k98AtQtzwE98%t*Vdys6h&h_sF2sO`10ie6MfSF8y5Ph%W3tGw8W7J;oknfL7wUc zICbSQGNhs5!JeVv{vi=deLN$4$KdQSCdlV?GFhFjR*({UK$Y-`n`3mDMENeSip*}4Ji3WhX#as zVimuElS6f6eIif=toG2LkYL}KVBhfYrJ>#t17%8qp5YPSx`9=a^$PGAcqHo?zT#`8 z@X#<{PoIIeur>*iA%UxcP_x+0(2!8y;H3e<5x!x*;a{6o4G0Pi4Dj_?iYlTW1qMXK zAo50)l>^Wy{C$^7yE0Iu7!bZRFks~>1Xp91z7|=lU)2ytR#(=t#1T}qe!;D}4637X z5wCF_Z^$wvlBeK|l*~-brc5-km}oME^usk;ELz6s05DEn23uJw=${!H3AHj>1T90f zde8*@2<7WM4KyE**GRw{cH<52;xPcS^BotGus^?T@|@q#Eh>HO_n>JWXgd$DQHnSG zC}UVELnaZGWl)4ADW3NC6_u0ddH29O!L zDuN{E?HL&O+osP){oL|5Y<{Kmfkwq#jdWwfq9=I66LolmMQml_XuA;>rC0ng8ivKe zrN4vtdo2F2mIgpdWHp*(4Bu^(F)WIc`HAXGr~c2WPVOs>U~6-r{T>+&zKmh&W*Ng1 zn=ryqlJ@@BFH#LI{ntbKhQXg#|93M z7$OIk{`*jW;4cFpJMZE(`gmw{rN|n-$j5+UPUqOnNCb4X^fF!wba3gv4;15J1JE*W z<27>D873T(Gwdjk{RYe)1NIfcJZywgU_X`q4}c*yIRNY~0`_?w8kxM|iF`Q(4BOT* zkN4}y2ABT(z?A;x!~-yI72q{03-E^ghXlj4Jb46kU|b8)2se_n(C?-cor6pNHPCNV z`jy)c0Bk>m*NFEu?7ydA_+qmHf;Tvq8ivuqrT;#>p9RVQ*z{VwMrJ(TP{1b|_CCYl z4*ohD26u4jzlQs5h5SZn4FDIk;x(FD@rJ!8l?+ex5E1afUQ`VD;L?8$9H%vgfYbU} zE)GELm(w^WWB6IDG-Hq!s6|E+4HIlLer8`^8~a3)-)u>v=71`avW7&B zoJJ)iL`j5D&tM)%pQQd5K=?jmiJuaD8jNKNcJ7=?~l@9RNM^{iRfTyIMck zGsqWJ*Z)aV(ns(51^5Q~Ed7U%2S7_TAMEv2!2#YOKEBwC!K;EoW4=EK@mlWd9f6ex z`9^pmHOv!L4_*}*xYk(j2k265>^ES)m;Yzs{i^B>hWxu4zx2T`FvK%ripAhD|M1|S z4f+?wa&RAhQ{k5`{4de|gZerc`Y#XvvycZAAI4>&pnpK({}p!swpIqi{`uK| z7%_#Xy^^ohZsz83z6LH(^w42Jmgv;Q#Q0sC<<(7(%n0r;Ibes+=}t~_U9AUvKcs}wld)e6 z-GNT0&qM!Vzu9!U1)Z^s&Zg6s(V5GnWemno&!ezHoA1wA^Xvxh(O+pR(&x5xdK4YK zhyIl|GKYztp?f;rF$$G2rrHJtu5#zNSh$%vM0#;uBD{j<1k4R!c)87wT4o#cwJdO2 zs8^6vpfATI)^>TwGFMZRa9gI`axb%JQ!iJ`fim;(0Iwi+g!_EkDd<@&x{mTT^N;jl zPg}9j%_-0}0Bg@Z)ZI0Dg`1hBznAL*1cx5rjjp}94k2FVPJZqjwh4M4YddP8t0j8R z!Ow>q81=PHQ?H;v1oK;4mZn~A3`;k2CrfY6KwDmBb}QXo9ZUvbnFjiB*cfbotj}J- zF5zBW)Nk(3{q%J;4e&CH3b1F=1KfiG1HCv-em{=m$LHQ0Ho_G<_D7gLu9l$-&8DsR z+V539uBK7GF4IhW-57xwT-%^&0iHoF%YB&AaYeYJ{$S%=h~bHY#=wc5X3xat;cuLv zHdna2*@gSMqPa1h7Uhk`{k8odPgj?4clNYZ3tdeI+7EWY<}b#J8;It}$IqKPLtBA=>bb zvHQCZ7@Y(=#Vka)cQbde^m4U}^crY?aDV@C-T&5{M|yLeLcPo^ztI*(Z@=m1v?w1= zV5C>z*SW;#H<;m%)`7pb=@0XZ@bBsB5Q&b+58x}!8Fn<$i))<7mH{m z>f7A^hQCB0It=u6wG8w&ckuJ(eC1ug?c*=&axk6!GUxvm{|iSv7Oh!E45HzG$fLaw z&qI9tM?Umlqq&7afh+!z?D+odzlSe>Z?kYIP5)*tzd!r0@!entG$$_pNFMw%8jD3T zArSHK{~z>aHlQO6@W$WZ?5F3y!`n}5Z!pb=dIf)%W&air^D<`yBA$-ka|%Sbi~TB> zf5XS7MY+3L`eE>qEJo{dfPeot`sj&t2ro`xAevVUKN!Ca_jGfz{738HpVt5Ht&LDj zR(f(={JdPJt#Wr;@sHNYZ|nUIuM2~webXa;qo*Jp1n|(h_z zwUAC2jq2F>dk3!=(3QD?=-MvQCq^oJ%@AG2dLmp)^~~kAvG&X9tLDtNL;57rtH0~2 z?t$LH4pLc+>DzMxEKt2U0e%CP1_v_*zSTvS^Rat>`W$3gEMuWdTVy`aO)>Lf_BxungNdckG=QAdO|&O{rWzW&RISU>kmQ{Q#vSw4eUnx zSNg{U{bfXYb6i%rnIZiG>FDlA)?$yM9H$P9A2aXJFT~OOD?V(c_>fM@5BNZKAi}S^ z)IM`ZHLQMl-{kxIbAFFc>H9y)3N)0d69)Q^=JH#6^9J4@=#{i7Y5y=9pd%f?Gm7Cl zIZ}#$CY`zb>-#n=>7W_X`ag^xn+isNr|UerU*y;EE@RC5`aa_;{=G2(Kj0tPy>$9d z`UYw??ECvn`Y-QeBm41v%!Z~9@E>G5xj7(Pjj`MZE1YZpeY_Fh$2)-UU+HgPyiO(v z*9bXLbTqZ7iWC&q(!faPejh)3VEj^h`-ky|U{wQsxr|WnAhrp%PO}yM8d$5-yeJ}Q_?MrvV-nabz{=j?>I3@lbuXGX_$VSKHYP2O5-v9dA0ups>mR-idh& zq(q20LVm=jl=W~ORxNa6#Cme3nYfu@_UrHh(guIEVr literal 0 HcmV?d00001 diff --git a/Data/2_Silver_Processed/Options_Market_Data/2026-04-08/GLD_options_2026-04-08.parquet b/Data/2_Silver_Processed/Options_Market_Data/2026-04-08/GLD_options_2026-04-08.parquet new file mode 100644 index 0000000000000000000000000000000000000000..e53aadc33d1ecdc57b9b7947225f58343dc32e57 GIT binary patch literal 101607 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 !dG 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 literal 0 HcmV?d00001 diff --git a/Data/2_Silver_Processed/Options_Market_Data/2026-04-08/IWM_options_2026-04-08.parquet b/Data/2_Silver_Processed/Options_Market_Data/2026-04-08/IWM_options_2026-04-08.parquet new file mode 100644 index 0000000000000000000000000000000000000000..948ede0df07d94af84a1002bca1c10aea073218b GIT binary patch literal 55129 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 literal 0 HcmV?d00001 diff --git a/Data/2_Silver_Processed/Options_Market_Data/2026-04-08/QQQ_options_2026-04-08.parquet b/Data/2_Silver_Processed/Options_Market_Data/2026-04-08/QQQ_options_2026-04-08.parquet new file mode 100644 index 0000000000000000000000000000000000000000..572f322b265845ee4362f065d17c9731934778ee GIT binary patch literal 88350 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%0DTy{D8xIl={nF_A^_)M} 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 literal 0 HcmV?d00001 diff --git a/Data/2_Silver_Processed/Options_Market_Data/2026-04-08/SLV_options_2026-04-08.parquet b/Data/2_Silver_Processed/Options_Market_Data/2026-04-08/SLV_options_2026-04-08.parquet new file mode 100644 index 0000000000000000000000000000000000000000..6fc1719a7b4ec2f41844437bfb968351206f67ab GIT binary patch literal 66052 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

BNqL9vW&##djuJl+ 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 literal 0 HcmV?d00001 diff --git a/Data/2_Silver_Processed/Options_Market_Data/2026-04-08/SPY_options_2026-04-08.parquet b/Data/2_Silver_Processed/Options_Market_Data/2026-04-08/SPY_options_2026-04-08.parquet new file mode 100644 index 0000000000000000000000000000000000000000..9bf926f55da0742bec1765d12dda31b778e14b1d GIT binary patch literal 103343 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

*vTxE@ z73@`;iSHsb!rM==--;sYVFrK2tsX+g<=oZH|K21pF6FJ%mBSO!sqss0SHm)~bsy~X zszFj!^LhaNC-n1;qgCK|nfE4GCAdVnXE3K$LhK@r*9R`@31}KuT2V9p20}Gx+YB1T zPN{&Es-E5HB0pi5iYk7pVByb3kKESp@Y#0DDo4h5Q2M2<(k=Q8PIDCT^A+rC9NhH` zE8wL(&uCc=-KkaQMP__~G3Ae;Qpf**4)-*3WYP$PjoZ_*vUn?T0)!JGJ0ocMFW9iz z?@jT|5qR-<70w_=py61`J;!C}&VDHMvXl1+Jd<+%D<3ut@yBMKd{rt)oVu1-ZOW&U z$0j{b-mjyG==hrq?SU~Z5`!aPG9`N9l;|-qNnGw`iC;bKwZB1}qc6?Vupekz=Qp6NOW_hcVHx<&J z*WRg-fcAIc$FHdoazD60IA;QRk`Z2r4zxqzS|G1gSMnlMF?j4E7f?afgj)o0Ce^&cq^uZ17}ZbLiJ znN=ywhb#`s?T&C4xGh6ml_t06ACe);a~FOMJ}pO@ry2KeH&!5;I&be(aMGnxpLgC-~z3_3Hn>A?yEBH{$7M_PA_Qszl$S{{z05w;`+QzqTRkWzQKm?@7wF zxfupICK9fpnaWLMnQ>`~#Gd5aDxF6}=GUrUI$C&Jbud+AVQ`(OQxR+4sdarq}<}aY@vX(+Zofzlhl_l zU$IX*G}csOn&WbdO}*0LS*BBF#Vohnvri_f-gN4`n&noWy)x1CC7O%X%~u8NlZ~Cc zM9ad_d`(oZY`p0b?KLsx>+bK9yYIAQ+Qu4lo7cT^$!C`6Y*V+e`?yd3N$e8c-HsL; zD|`Q62Q%h7O1ByoHcXYe=>B?%vU^^JLG46^eIJ)7A%d|{`@XBX)pt~m7X9yg{rgdP)s{OIc7PL899k1+D9nM;|urJ2yMEm{;qxH*R zq{hl?v~L0>WJUxhTKk9}P@`*@nK;|APjl;|MNBjoNk_7MwVh(b95ojg7qRF5pMV)R zFP)2YJavAJ(oagnkhiVoOr5Tq)UtimxFKs#rjdu@d%s+L1qt1=(^c@reS|H3wMX4_ z;;j$<{fll%M>Lz(m`EL5eL&^^U>DZqXju&{%X8-I9{t-F<$BIybFZ|+ljOkvJ1}FU zDg?;ocR-*UZuvk2h~ zA5q(M=`YFt>vXoMh}q?>{_-fiOlQXeu?L8S=l{>?tu@2fBeCZhc_xr3I&l-Ht*>?nX7$Idg9m{vU71 z8fTVnM=}vhT38Mp#q$rNPyH7*WX1gV4OyObeELhHN$|IIF_sx-^n^Y4U#y(BTw+u8 zKfvSf?khLt=wpBSE9VypoPCm_{4(^m5qIYM@P!BT&Rkh;RNP}ZPx_0xZ;P{Ig||c| zw=wz9{D66UXyc_R=Uwv<+Bkf}%(#?5kNewHM>x5Q!Zd;d1DrHwea*8Dn|UQEz?r|_ zN`6*ELBRI^glGKqGk=p+fs*Mo++@|rioHH{r};*1No3=byC%B3R$q&p8^3-|VocL6 z+djX!e3#xyyQ{jtm8Z!Yqyz@;ah~=4Yhjqd)1*LG*ZtqWS5FB@T`pq$iS}OZ7A3J4 z`J!D#j$!Cy<&;7-y)2ICJP>bjy> z-qIgCcR}mA&&SF$w+udczM%8qXLO)#Kb$ppVeggCo*72}@PT=*ve#scJfq$XFBehi zy*44d+2&m;=i^D`)t?Nb_T%=Y8OoK^`?>u){_B9p%{hDq>pn@@4T%7~y{G2-DsQM} zpT)hG4QK>85MyDKUljAw#cXk7cVYOT!qwB)PkR-bh!};|g^m51q4L2|VsqmlP`l!d zbL}d&d@@O^$0th2u%<2VI8OzR7cO<53Ek?mx*=wt?iO7 z_Ka~_v9wy)sKP|@WTCg3cno8iS%!3E_ZiIPgYnC;U+v9K6zf}54s_7JiqH|XL!m_tDv$a;IoL~QXqWt6dY~6h+ z7q*N}AaV~Ggu6>uI+GD2zGvE3=59IgGe{y-v z{9v2EFYL*Ejp02q7W^}n$p3z0k#L?aV_EKq zj=PyRb}X6|Sv>Byd+V%g-zulfebrLnwt*2sssbgPCZVYAZSUB*)>f~U_&A)UPB4liRO1?B&WQofnxtG>{2Bk5QzAmO3#;eY+ zFTJIZ9nYSXP!xFV^lg=a=4BDW#X;u}#8#>8T>hpeus^&%R@3sHxlR6Rp8k&;vb^`o zKMPJH9G!#p`cz{(yZ<0YYnfJ30+vCU{{HarC zn$TS}@h3I{Pjj@Gj`Y6>{7m1Hgm@{w8<=YJvKV|Kl!u+mImnElFOkN($G;(VMn59@ z(tCN>zTpe;Crkx@g1Afub;!~P;qOxEfx?K5!)4mjsSKtKol0dY&=Dww!TLP%BFmol61t7 zW>8zT-qHCT#9#&MViCew;n){D>CY9JM)(+qUMY(hFu@{N!FdR2G}qFF`lV}xjjBm~ z(XBxLylg5~H-a9fhgc|4JSW4;Tz67`UF|5gt2$kmhilT$N~c?fAmkNTrXj3f1ijZu zi%I9KW!dbre*>>29>Q&g7h`ZiY#1wybqS9jGSAYfW<0r$1=eGh)2V&f zcyzoFhIa`on3`(ofPjbSSBu4PeMqOy1@>SU=uwGC*R7W6h)DL8F1v%dlm7EPR!&V9 zQTzh1aKEqM*#(v+J+d3mF1cdyA0tp9efvhd-c-P(OKia!U$*R_JE>!YJcN~@+I7(l z8RkA;cNMjJRW7R#{UZ-k9(ctN|NF59mzhWjrr1o!@FGj=C!P9^pgONzd#KlV!3Imo z8*0EWIfK=O4RVu?iEt=;79$X2BS<5wi;iO}9+OM89HLW4@ycI1m5Y!1=`s+cl1;_n z<91kCH#(+PL2W^RoTsc@Y!@~3J&Lv*Ffp+Bl-no!X=a-H!87ZZr?E^bp;-jcEMK+ zTJ*6uNZ67cMpQ~*5kI)V+PM3{{U;ar*rtw(5 zUc9u7#Yp;0M}DP89nuZLw&O8QHg%5WPrs$hG@?)8u^aC)EKIU4p~76dDV>f8YC}>H zX5>yq==$TM9Qr(T;zGp~1W|36djKXoz~eg0@!*#(k2ABWVq`9t=#)~DH}%=l5c`b5 zm1Lr`QOwr|qw%1Or(tNsOx9!cJ$TGxnP)JhVQ6K(qf?Q1;}@Rr9Jc#ln=0s<;pjjP z#I<9hh~QA^QiiU!NEb!;oF32ZJ*Cf5qfg>6^|AUKlr@NQhJC<8$CSg$(y(nZSV7bd zjI61vMt9do^rFewiMMp4u_Fm$_nC-O7qK_nb-NLg@hB6M2%>zGjHpJ-Ty8moqPR1d zIP9(H=zuvDD}lhbEVk=mI<`|18%QA%9dZ#YHBSt#!4P7pMxD2GK*8-mNn`kd_fl}w z?Zq?QDhS%Cr_xt$vKCY}zki0)iE^%YCW>+3%l)?x}?_{2** zZo<%jfd`p4J1Gd;o;_Z>Ldr~+jr^O#mBi*L!sBb0Ycj@tj-eNi4`J*4z~hA|X<`b( z`8-KZm*RprMFrw$O2_+uvBpO+P8PQRN*o9(*azWAO4V4NN+gBHm|uZz8Z}8bp4x`T zSF!f#9fVq*WJ_h~s$p$xxi(^Sq;qS88RMWr5ssXdt(qc%$#AGaO!@#O#SO+C;ybh0Tm@{60=!PwWni*t_#6jWGU`EGBWa{)!mC^0R66w#i+KU# zX|S64a=Q+X6)}%Bm>v(rEJ@dleoB>jlp008`T}pv#6j+W3Gu)UO|blvuzhhna@{15 zXXu7w4{@lsD1C!44|fbby2+HEs}?$KP7y=2VMH2T$E}vYrtzjUl02w#%ufNU?v73O z9SOpgYs5frlWEjMS2b!KikmlB!RsjOc;2~%@VFd9I3B+&$ircpN-fnjq!O@frI>GR zhaq3OZpU(JW8tH5j0I`oXc@zY&SRL1K^7n2DL4onhc)DZpmC^Mn0p{5DvHNf@ZKY= z+#yV429}Pe4H{yYC}oS~Q^G3oQnSEn^K{R1JnyV*q-;@LHf6v~k)__@vnzB74ktDr z=sXesJ(F7Snmd(;wYIY4X`|i+*sf+6Hy7Dl5PiQ2b2)W}+sr@*-VAj6tA=pv40-~>^kc~h6@;xMo0Lqoa}k3& zma8s>Lp6vpa&@5I>mp`2c93Qu1C_#XK9$%pFVV4x6_h_$QtTxiNXvSt z|8kHWGH`rw_?5J#ayiBG3?oEcr6b* zXf}(`71=0*AK^_NzWFLc@Ro5 z24BdzTJpM)jh&#zpHAdpCFbKX4X^P?kk?^Vo3@vy5qPAd$lyI6}Gc+DBZU5qPZ zS%K`A%`Hc&U&GS0JWHpl@bU&Ms*L47CbI#Fljn3{533sKOHVZd@dho!QM@APHl|o( z8N}E38t@S-%VE@Y4Dr018pD)zSPon(O!*Tg>4y|@4F6p)XC8QPAC``TIe*6ckMLP8 z-v5U8wydL(%IMJ3IssqojV=Z+szW_YW!F$i~e<{ZI z!&;_c+FoorG8s+eRTMH77rs>BRS#Q$`%a3EyvvNIlj4*j9@REY9HZz81?Bv6EQ_5k zgWDudr!)(OkxzId@-MFmY$+$#AfyFE9>?Q__&>cP7e#L}@*xDR#W+_itErDk6*zv) z5c6DZ{>y*ckf}xg;14KVV`|is>(={EpntRNMEDCz|J_9<#dDGQzh339F+Jw=&lDeb zktym$(J4aF=xPY$DC>|$V@!@t6A+(WohHaORZFMKu60Nk;y6X83o9R}P8U%-qn5## z9O{t4)QpYJ5Y>57ogt=|rIsl^yVN0*Wmq4bDKWpl8sB86t7oxIWgWAm%qGWVNw1h) zlOKfX==z^eU_*SG^dD6 zI5FHKqUOVx$x!#@>|;zkr}>C6DbTQ&F*(?5CR5{z?LOv|2$x69sn?J6GBsoTXNqb~ z4&5ihu@9H#H3TBciXo@~Md=`YIo!wcQQovPEnXq(jmd3DHz>94wrFU)vH$pq+SveyLYzgN2)F!O_6Nx-bnL?&={iS?SmIpq$Q z0}Z~rmjuo|>>Xn+ILA|vGORg6`58KR({c>syiG1nYw)HCa~hpIB#c|)1-_9Bo-UPV$My(guLLh$vy&i6B*fOp za_s4B>@MCZ^;(Le9C)W#azY_NFQs^$MA49v=v0&duM4GcLV2IIlxuYdH_paA5m+i1 zH@i?&J0U(KMo_-cHyb-LpG#m?nQaM%Wl;gGSRlkT2xSVso31z1$jD()Uya*lw*lVW+Ly}^C* zoAhS0uWs5Fy>FRd%g3j}jHK8Ysm)ux)g`F9fHhY)Z#m$hu!YfZ<%{yMjwOV7&^5Ds z!--$n=H^~B`EZBRQtQJV-zfV@Zat^XaJ&%jle<#o01n0QMd76|fx%sEabL^|bmhPQO z(tIiFmS;+CG1p6M+#165-fJZeKg$uI;)}gGTSm9bx$mFjy;3lpM&)qtGN0$WZ(-Yf z(_+i+sPu?Ak+o<;ZXj8;PgwK$rUf5k$~Nu&v_NF@f$3&*RSuTf9acH?b?0-H!#|D= zsT`>}H@8X)hZznpik+r})xwUC5?D%6o+cs`eIQI;`*5&Lm7t8b_Y%QINBwf9Q`BL} zV=ecds~+!oG4$brDLf@^5HBPkv5?_-=DC@nx-WN~ON}pQdwh+bk2_&XEp!EbQ;^%c1R@c+qU@IgQ986VGcUq)xn``!YA%l|}U4 zU!W1nhuY*%t5evPcE$UG|aq`rcI+q{fB{nalm@N2BQM1-~KgG}Xj)(1;X+-VVFK0VJ#+|u~h;wVmd;vlNXLS{;zI@_U6$<5nQ zl+R$9Y=3oO&XJ@=BAf)57uTqb#pxQ_&mBz`xt};_WG%ntm}Ab>Hg6-x@VDoTrbK9^ zTE|7~xD^o>x%<)AxNB}1ig%;-7u(&vez-Q`?v3NUU+>=Z65uu)pOP?l5!n>A+J(XX zNb}LXd&EVP+V35l7USk$B7hc%VPVeh*R(VxC*|`lx2z+Ob)R2^{9ir%mbn7U+o%54 z;rMM_D&SZlx$R;2TXQeUae|08t>~Z|2OQmv$5v_dLUYQ^yC=sdIDbu{>)KO2zOimp zcea8P+feI{n`h0EJ6>T4#T3VYJ}fL>_u4~?9_P@LEodJwi5(ZQ)Zs#ia(uO~mW-#P zm3`!`r#op;50F+^Yt?hKt{?lY6;DO=E{(r+@tDNDJMu2A_XMIvH*DA*o6xG9_=szg z_+a&LD=RriJ5l&?@rJ~t=e3cE>ResBvkzXqOq(|2O;vTtsz~eti8RTr$+aBb>2$VswE0BiV zVvDjBggh^(r`DXGH~mG!`EAoV4pI1KcT<&=lY8@x;0MAs@vo+bwl|h^K62m<8a9=T z&+#bE?KO|YaEJ=By;Jar$KGf>p3b9DBrMF_ezt=s-oS#hX6xlBId~&ECE)nuIK)2^ z=7@O*=P+G;Jn}iOOy)>1_XH*T?Tmh5v63lTd64q3lsoKl)9`$2&8zO5MBmunPZl$d z4m{fSaOqI(wTFt~t*>Uh`}6x+>pRL`R!>ksa)o=UP@==bbp5ei-;G5kMI{^W)O@W+ zAL=j1e2-{;J1JgrWn*SYXJfLf#1jEO1qXMUw*pVI;Otx=?jh(VJ5?A7CMC>N>a>To z;0H%_eR`e0e#!#h)th3E%55CY&UQ&pQF0N`bI{TjNfPigbgQHZi;55VdhE4hYvrgY zKEAClujCdb{C<;W&{ac~o2MkAQ;uwM%#!sKpLt4sq%R@&`MJ7mayV3K>dsu5hX$0t zVSwH~=KYZQ4tY(3_w?RQnV0`PPxJ2mUOMM~)PxTzPsB5fraylqOzn;m5I*G=@E8>U z@1UFy$4}8_(Hn`oIgc6OfcC_O#-8W@AQwZ$NQv?m=Fv(|4%30hAn>jq6&HnLp8tdc zvJG)6jl5UDyTa7Y*D1mb2hW}*(|WQ5{g&B#2MeGS^pM~rR`xgxuDMg>%~4F!_kQut zGJEOKcP$E!KkBL(&MHt6U#luU=hg20Vso$Ba6TEe=_Gp3>#LlVv+%F@fkHZC!4syb z!shs*WmhlsCoI3Zy4J*eM!|s+?zUB(0y2hKv!}-yo;a^&q_n^)WfC?GP_bP{UxS zsZdXZe6-xyhrcVaD@+aw#+?yg^p0J5C|}DiYrnZ$LRN~f&N`5H)Lw5NIES9KJoMns zq}TdEU+gPOau!UBrKNEkGU_R z*OnDN`+n=q8zNZ$hUTpmA0Q~q8Hz$)?NEwlcwPt46R2)HjTb=$05kd=CBu$m5R} z1Ak6QV2nFxJKw~{5}acVs56tQv{_kK_ z^JdGGFNR=D%MjDJh1WIlnOF>WbklIvOAlwHX7mGM%&#~D)8v~?3-AF+7Fs+o(p0o( z@1BT`6+TVC>O8R2!=BNkPNESdQ4ZVjzmfGGP)+1t*zf=W5{jZyLI@!$B9>^Zi}eNw z5EK+q5j%DkMX@8g8XIE4ML@-l9XqtJD^XIssE(bFgA)_?5q}OwQoc1t9agTmD z{S?5&OHAGI;CPO;03k*vD|{V}{=W&1;v6R)AE1*MfTKT}P2ijnVU$bptuF52NDz3D z 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 z z+uz`4QZNnXJmtf4-miWzz9kAdo^dfgQ7Tumx9=m@~4*xIohR^L;8`RgC-nzl&5Z1sy;*}uM<8SJNYq~Ho!UO(igRErq z%>5wiiyY)oDvtD!irj)@MI6=IHRu=z=%u=x4Vd%4wEm^S8Vfqh$^sew;2JH2H4oPD zzU$DxCUa4V(u5D~9ldq`9>3y5^i*7?2bs&>x_@omO$vrNiHL*!;E!Z18}$n^i1RP z5+6=bNfxYONs+77>xdJ_H;dTc09LEd-&tkq0-1>w2z;wmjhiRc~@E2&98xe**Gc(}XXC~%rBx7y} zHx%3omOu9FhdocnAh8p$PXYGfgCm3rfESYO;)1y+p;34t7c1;_eV`Xs%IPx~Sap!k zBo~)SOqW;}7kFZ^;;=%cQ-k|6_#-xOzz2F8!-Hm;E!N?+2{n<=TyeBpuU=$lC3b=ti;Gg&h4L(`vB2Gjaj}G<)*yw!NYq6?~kcmqA zG4~FxH@EVwt!Gx)WCO9e#l9JNtz4ZGj>Bs%;KJ+JJO{HQkOD0P6qhWfA z=?gY~zYy^EarsyBn}b1Bn{Snk5A+M658i%0i-{c-V1QX+c&CB<3&cuckHhh){8VNj zhK~+9r<7Oac-7<;lVuk8*B;<|_{D?0m#y-BnLMn&M{j@Sd@Bzn-qVXuA`5(UY+udv z03A%~u`2;EkT@SZ&rp&I(#H&r?>`<~$ouL~6gHmTF@XMK?L#r{!_Wbah>0yw*yQ&P zB6KD$gxEnyUw-0C4>ve1ipRdWl}wPbAWbZH63Jvv g_#uy#>JZ0DdAtL$B@mkPzxYRZGnPOIVTQT>5AwBjasU7T literal 0 HcmV?d00001 diff --git a/Data/2_Silver_Processed/Options_Market_Data/2026-04-10/GLD_options_2026-04-10.parquet b/Data/2_Silver_Processed/Options_Market_Data/2026-04-10/GLD_options_2026-04-10.parquet new file mode 100644 index 0000000000000000000000000000000000000000..b4a322d3047b46b392b4ca6822c76855c9ddb505 GIT binary patch literal 97820 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 bL!3eKcn7{#0^iE{691@A;L9SjT*UKV6nkqJ literal 0 HcmV?d00001 diff --git a/Data/2_Silver_Processed/Options_Market_Data/2026-04-10/IWM_options_2026-04-10.parquet b/Data/2_Silver_Processed/Options_Market_Data/2026-04-10/IWM_options_2026-04-10.parquet new file mode 100644 index 0000000000000000000000000000000000000000..1575f631659311e6b890d5c04cf992c40a8c29b5 GIT binary patch literal 55039 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�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 z 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 R;e3gI%-`>1m^mRG{4b0%79jut literal 0 HcmV?d00001 diff --git a/Data/2_Silver_Processed/Options_Market_Data/2026-04-10/QQQ_options_2026-04-10.parquet b/Data/2_Silver_Processed/Options_Market_Data/2026-04-10/QQQ_options_2026-04-10.parquet new file mode 100644 index 0000000000000000000000000000000000000000..1265b1cad763aa228107ad5170a151d18067823d GIT binary patch literal 94351 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

ZrtKaYMe&2YO=vk88soyr=J*8!N7_|3I6}md6k7 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 literal 0 HcmV?d00001 diff --git a/Data/2_Silver_Processed/Options_Market_Data/2026-04-10/SLV_options_2026-04-10.parquet b/Data/2_Silver_Processed/Options_Market_Data/2026-04-10/SLV_options_2026-04-10.parquet new file mode 100644 index 0000000000000000000000000000000000000000..6661d6560cf89d65484211a926fb38edbe747e0e GIT binary patch literal 64385 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 literal 0 HcmV?d00001 diff --git a/Data/2_Silver_Processed/Options_Market_Data/2026-04-10/SPY_options_2026-04-10.parquet b/Data/2_Silver_Processed/Options_Market_Data/2026-04-10/SPY_options_2026-04-10.parquet new file mode 100644 index 0000000000000000000000000000000000000000..9cd19521e04c9d28a2b2ca31579164943132be44 GIT binary patch literal 110489 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 literal 0 HcmV?d00001 diff --git a/Data/2_Silver_Processed/Options_Market_Data/2026-04-12/QQQ_options_2026-04-12.parquet b/Data/2_Silver_Processed/Options_Market_Data/2026-04-12/QQQ_options_2026-04-12.parquet new file mode 100644 index 0000000000000000000000000000000000000000..5ebb7f9c2b37faf4648081cb082a614f8de2c312 GIT binary patch literal 101291 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 I+>EII0t;(6TL1t6 literal 0 HcmV?d00001 diff --git a/Data/2_Silver_Processed/Options_Market_Data/2026-04-12/SLV_options_2026-04-12.parquet b/Data/2_Silver_Processed/Options_Market_Data/2026-04-12/SLV_options_2026-04-12.parquet new file mode 100644 index 0000000000000000000000000000000000000000..425d7b58e5829f71e8cb2dffd4ef117868f6adff GIT binary patch literal 68576 zcmeFZX_9do7!X2;iU9!=B^X8{Dr|y4K!SjZ!4VuNTCrG%qO}?n6%`b# zRiM`5j8-jbYtc@Cil|_*wu;tToDj$2jMm!oUkP@&?>^7_o-gOq@z=fAUemR%bq|K+DR}uO`x4SO8DCoZ>POpxmmKRWO;cs#7!gS3iF}v5@C+T z0TFDXUqUHidSMdluK^|kbr@Fk_plAYjuVr&vH~d+8K5Jy0P4CtBJkD4F#@S>zcpUw zFCQy>rJ>CuT?b%U6f#x~{*M>)Gl;@0MsL^#Yo-?cKr&c|C47_J@s++b8W;xQE8;vz zl@iCGkI7>`1#;2RHW-DChFHcIFwvuF%jS-<@}H##2h1!Z{-Xy}L_6aPN>`Bo8ev|g zfQk4vu9PIFG0_?ufe~1G#6}xQwA_Z#rMm*NbS8j`gVR+m%*Tq8GH>}wKmn#V-B}RB z`G!3toD}Q@FN{RD#9E-k3oUs>H_{s22RTj}cA61OLt9u*3S8Y8a|a02At4dxDGl=| z4Lp9s_QR5`xY7tm9l94KNC|`j69h&&O9~q30MR$hNnozL77f~Hgji4ne1Xa|Vjc#e zu$0MGx-v}j*rKbn07!npFfLSj`eEx4-dJo?GF=RE=O58OL`QPBnt98N47l{C6ilO% zk&0PV0DN_SiNbH#yT@QC)N6T&4ihlb=+aWig~Kuq;>fr{+$lmpWE$vfMhLQCE>nV- zh{;eh=2IXMwvzP-0tYY|+G0Unmz-%uH>~}kF|s;0cS~I7<6VD3ap>`~o1|0~j_NVwm ztIZ>gU`fXuss(`&A3&F2K1iTLgpexBW+rTkK#=EQOBoo1UFf#kn)j{y%9f+M(tVH8 z;~l8JuGP}QxWri~8Y*vKF^&iBd=7{G{~RC%E_w3+ntD1;_3$HSz= z;WG|eNc;sda4g{xiGJ+HTq6EXi-cgBS`j5rFw8%(G+t z{mo-@xi}-8g}SAS>S=PCNbo5Z$xWxyXSVSL4D%CUSz0218siFG^{}N#!asGR>ol_7 zfwWYx-m$dIwvKQ>Ndl6qtek!nhZu>&NC&}N0YZk63Q_?&;u8vAjhDxF^hJf8T7W$4 z7C_&j)wNdOLbf#{h4jOM`#Hc~KkO)ljJeJ%*40A(Bko~5q@K1>lVuqT`)i&vyQ73g z(mF&v;+_sh*_PUci$cbTW{X{b>SKgi+v!MVUvw?W-9}+sddymGhH0srwf(O;?7~k_ zb<3*R)|T>LM*{ZGy3>qK=xUa1I`V&j4Va%o%wNOOl`H;FGX%cy2-iFI{I9FO_Ff&B z|6gEXhWQ#6n7_%w5JpGwlEU&@@OzEtUnPXxTzNh6ubzL*fOubLB7VTwI6ntbqDJHI zbjOYgwYfo{>nMF+mlnaUun2a-erwEPra282V+y*QdWxwK;^Q}wupQR(Kg3b=xV<=b$1VQ<@rsq+dOZ6o$&KBN}dT;X&~ zZ|WW!!-zcz;H0pz0^d-rt=JdR4N-Y306Uc;Ok<=T4S*MR749w?u2L5oCJ_4qd~`A@ zPzKAFFTh$@B(VbFX>dXP_;rQ^rH^DD1eks917H_sq~KiuQYW!O1b`QfMi7HgpN#%A zL?ehru_XNp8$iR95g@V-9?BPf$x_02(K_=8=;{z@_?pQ9sR*mJ7wh1UY3U1p?9h#a zzcPm)AvF@tsB;nsF40aYoRWDEBDYdLa)?w30MJ}wDOyG>py8z1!Mal)O*bjx zrqMn#lgwkmA6P_RhcF@a3jw`2Uj(?Y;nY~Cr_wp!*a01CAW;RsQxW%8Z=@DmiWj&B z*wPe4e;W~Qg34$CQ>0854IfXU%_BH~hQ7>k%!a|i>n*&hm*E8hM>pFD@*=81a>O#| zqp@+sK&+;_Y|TuI7TKD$FYJ{Q1Es9%*eU z$Fr8wyfQGbU_|X8>@}U^K|M&cC&f;|=59f3kx)TA^k|F|**c7N^oZ3NNm#RuFj(X7 zAQ7j#cJqbeeF}nvoP*+dtiZ_7ja0KD=$9N{h-UD$Tj1y$V#hinQto%!QECa6{v!8> zz&~Vzwd1sqWGhE$#6X?SqPiY0F&Pdg^d&2vhLF)d!^`3g zP*N(*{{CHPFse^80GP%7oxzot^yFabO=l)ZyWbcER>n_)nD%q679T$*WQUI>N` zEq~G|&LnV{XD3km!7^waGVFARaT29xKPgUbFktl581XG|4}IZDf~h$MsW6B$!V1Ew z(-7SJ1*(PB(NLR%uzPUWG9@~PnP$xj%d~=F#{g;ibgHH2LA!_r7zJiwCBT2#NnHu! zB`Bp9ObTx6roe)M+X$h|r$ksmbIh)50Zx{K7Vw}(T({CvdVFCyd(*m+*#}FGFW}z^ z@L!LK=nuh7ucZerKkJm0Y?xFUn;Gq3$CTnlw40RakIYg)4Y1U#Ea_%GTOzsuI2WVG z7c?Tu#&ORh1bYb+A5rEQ}VUmkKVm8Gx(%8zpF+o?c*$VKG}+@DwzW!ohj0K(I<39oR^% zjAaCl_d1Vj2yoM<;Y2OXj`G;#=L^rw_>CC=9*(reOGwYjey_h^^rsP=GUz6#2$xWP z){@XE{^GpQVgAslOC)!&h1#JnHI7EqLmM@ak42am+8PG^gh`;K$8WG)p@%j2O2^(n z3BcP2cp(Z_^#X?@@O~I|&(LQ&3a3s>2|YL0=hM2_H=RM)V`+gUF!%fqC2ZyO|9u3t zB}LtUEsYt&s>HEt!;T7JIPO}ZL~x=4%H}Ub=;ktg6ex{Zw4yUJ)8a2IEtJxh;eh)U zg-i2GXn~fP;r`W)KpI;`y{)6P;VdrKT*BpAIlxc$j>h_3X%7U{$^qqg79kZ%piAoz z?zL87dU_a70#PkvKpt&35D;UQb1-tR$z?7%-|9hhvy^ZM55p*HQ0k_3MreUXY5GTD z@cgtJsS2EhsK-a*0DMP)*vAd4-~)#t9I1eQYnZs!X=xuY8?ENB(R}c^a)yd=lK_F^ ze;kEs$)87|=M>g|ABDWfVcD>k8WJqMWDuwW9ukLSakNAXQ>4ZWvoz{5>0u|xoCBj8 zH5mBm6wnTIygmT=h+#|-K))_=KKe)9M{IWJ9V2uhP_wXCmH@##2iZ0FcRCw!26W~l zN&_D&+CtL<7P!ggx;a2FuQQ+40oQ!6F}FZ%|F_b7u=!s{KuRny%?FzfSYfwacADrk zomoiD0L=EpGTPz-=vW9T524O97Riznj2Ox9wLWghaj00zM ziV#HXAPa&}j0Aw*aLX0|D_Kjq%PQK2`-|KVQ^Z(wtXWJgWB$gPgMS-qVVQ%2!eQxT zMD}rXZF-LRkCOOLqJm1Bb^ju$=^ZB-2Y)K5fa%1Ept@9K9paab$Dthu2zqG$pCuKC zf{sIb@;U)dIyfuYv2hY{gb#u=k9I)QNpQ>waPa97_LVKH=%8*79i<^Ugy)u1c_F}u zW?I2e&_jA?9D@jpet8s9D+(h`E7fD@s46RQ9t0bsXqpPqE;L{+4m1%a8pP2rnEkMc zw1jQ=dkOggq(DFn-Acn89D}4Vok-!pP`zNnJZ;5BoSn?!za?t-w1qiBvorzOP8)1v zTeS|!O1NC3PAL#eQMsZ`UyLLKBaP@pQALDDseX1VBfGp$(A_vj|*bQsI)r-nSzG zg3@RtGAg1+(rm`DZbml5-=WS++9%3w8YrAc@N#Dmn$igjJ(-0J0GUINc1DMfm5VgM z2cc_rd3Gi{WLZ{IZdBW2j zE!ej?Pnc~@dyH^AmXZHmn)8I{#KuEi0J8(uYnZP~D93eVAh0KhTnD&m{|>gp5&m;Q zr6AOX1F9(3iXDA(Jzy2hU&x7qcUU!mbJW4Yn3J2KdQ@m59cw|M!wp)XqNl2(=XH6m zqyG02(FRsAlc*zo5(;;x!^?84D7OQ2_%oTqKT3$Hxe+7LLxU3wjQ=SAN}q&Xb%xID z$5=2NrP#N6I)nl_eUQtDn+I$WEns{{CQryD*9gK6Cy8r4X3-sITRUAdn;InUo|``; zR=H`I71q|7t8ludpt-y%v3Gam^5DRzGNk{47tZ~RPVgahu=GF`VZwr8&Petmk$@<0 zC~X^RK?0SI7HF5Cw4+MLZ-Xcp8vf&uO1r7_#A~3Gh`KFc|C|X+kK;whpnoqr5V6cO zyGk6M%`+ezK0VZxw4#G5TK47(6*kM6xfv9M%A3QH|5&*LlMajk_fzcQHC#)H9OFMQ z`v)e}RYD8@IpZHA%&rnKbqB8hS0!M+hVeQN2wLjsTyq}K3=5v{KT5M8qw)2~{~lqU z@s}VY@8*!95U61g9ZKw}lrfMH>NlwbK!kDFp)C+CjGRv$f zq@r=5`@MWa{Iy6e255qDQ;RF&_8u+^z5aQB?PR&q{rf;!N88`8dCix^FC8EMChWM< zwqHPmCSt>ztYpnZs5eB}<_e?vg-*rI ztWuwAmr}J*TG=enlZq$tIG4y zUf~k+7dmg}7xyw=u`|{!lpd^F?3Z)JK25ktR?9C5D83@f)Gv~st6CCLc}1L^zo=^q zzcjSzibGD_BKN0NOT*f)bTSF^6gCn0I@wi8zCO=WTAd%Qz3Nz$pXcQhu`JGb)v35H z&nKjMSwha$&Sk>I%IJvY$;DTl%k_(UrBp9Zsl4h^k-ykCBVxtKrmND*y2XC8t5=L| zzv@~gT%uVLQ7~S1O;)F060okiAVYi2tucQ|(DsPJDaLE^rn)5|2dfLGz=X``OzUYt5@b+@1fw9>7#Y;zh8XaOBuT?E~V!E zb(Pn>HOrR8XXw_HHeL78o>-PJyJpSC_Uk=)Zh7Jo-P+Bv8%llb^5k_jYqx7}s1lbg zAGTfh!7k&CUd9v4Qx4XAus7#M?=)_Ou~xTkfAJ09%-9tp&(*9uSb0O8y==wk7Tx;8 zO*i~}Rw~aSLn@+5peelRf_j7LcZ{}9z z)JAT6SbTFpYwW7I=Z7w8<{DRVO=Hv?S!{CWkq#kqW!j`O$+mJC(E!QpT-b zo^o`v^iXS*X8G!Zj6qxE7h0pWCs(hWeRPZa^VS&N?){=AgSL9Q-O}sh-hY4H(XBrH zZp9`pe}C=vLECzz-ikAxe1F}+quc!E+!~x_x2Cvu(Ds0mTk)B3Yf8@@-5zr2mLYrj znhh<3c7$HIm5_6C&BmukcZ5B^HN<4Mw#+7~T<3N>F+XnYX6do==zh18ik7e4>Jzmy zF7#n7q@Qzx?{UD`rS!wT)ytJ?NNKCq~00XbaLIn zgU9wvn{#JWv)%g2+Niy6m)sfM8n^!Nxnp~0AG$N9ZTb4ITB1Ikd*RO5_LJ+sd3x;A z`Ooi+Blg8rHqjLe-R`Cd2N%~!Yb%!YyPGaqQGC=Vdf)QYyW?f2ifcn^_pO|BcY?yc zq%Jyo|NA9(Cn^V*oJ^_RzwXf8NtzWU^%>CzN-x~a(4HzeJ-hb6#^-n6;O$ErmqdTI z+3jAYesJmc>uNvS-tXSz#1*AKY>)nYSL(ef##5!|4%U9Ych0>x)9gQNs*OIlzvSN3 z%)uXCJXd@0;Guh2*(*N0)Dr#0;S2Ys<(&HP^3&QczIlG{EtCC*W}BGG8n^q|`GYrH zl^(CG?RS5A(TWY%ePRxsOuheh@u>|hA;%A$o^yXjnf*tt(J_a=FS$RneDFuNQ;r`# zcj*4CiWMK-&4~H(;)VOOD^GoNfA;Y&FF(KkPL=(}wk0uNU3L34r*81ZhwF}i)za_R zIgKkeKHeVl_3hMO=Qf?%`1IiMukX+K_1$LskK1cwzIj;k>%7*%AHO(v{F|qTetmC2 z+lr50w#0n<;=-@<+fRM`>gn-sUp@bI0TGoETYZ(4yv-zxFSBy3tFj4g%as(Au|4(G zb|c#s%IeE(`qouD%xznw5N#61=xdxx+wzq0o9sr^)kqJwE!Grl61|~6BEQ(SL|ebf z;hnl8?l0Pw@}kX>rTU|u@(20)_{~o1>yG+_K3JAmu-SQs{#dV(50)G2H%q^$JLWg{ z!HP7|7TIxqZ9wURg3S0W^7D1IA%`CnW*2PfdQ*Qq^x}h+IrUrIpVb`?d+}hENwigA z8(XK7KP<|R-|FdlqAoi0;p(D-tzJE2PsELU_#IcDHA`db$IBlT*TruS zSbw5EBlJ;8W5M>I9kC5lMm{QSs^1>+#fgS#b02-!EZU(x9((%j(nlLw<9CFfKXH2Y z;YS~}73>&rGxoc=7awhGuip{&?8JBTUp)Glh|77~xWeDQb(FW!~7H13DZ@+akb!>;7@Cx6%;`ebKf;jUpj;(pvU^2sh^ z!>*JsPX4%e?vqc_#Ge?C$DP|>`eb*e;ggZ)Po6t?_{pB^!cRuuj5~k$;*-5O4WEpC zcJll;FP?mA67Np49o$qSe_D}m*gf9$R8wu}(|tvSyC?P>eBtECr~8W=c4zcGb>Z~f zrw7W!dop7NU;MuG>1XAJJyS-Ux_IvJ)6Xjk_e_0b@J|;nK0R33uxHvkr+&Kp;^`Mv z;=S2R2Vc4>e^yy%*!%YSQOJ zAAI>?>9enTwi-U2d;Zkrr-z??-B$SNyqkl6d2#XCH|-6d&VP35msc;IeM=lFOt$gO zR$bbwgb5W3UF(}|`nOk0R#xQojK5+xs=Y>bx?)M+`YR6awjWVA?8}ddzv}d1`%z`W zzU3q8uS&mcKc-o^ui%aNYx1AkYqh8Mt$e5cn)`3<$9aeSMN8wadvE~&`qT5%Ij0Y7d{%!m?6>FN;WvElE}roy=#Sz$X<7UvZbJIhsWc|ao;4E@ zR<_H`f5unVXqT~ckU50XUV8nLz^P;|lSyVWbyno472`vc%sPgYGR%CmWs~ttg%zo= zVn&is<{K;WjTM7M%UoTa+Q+**w){G=(Vh?i!w%vFwk(O|gv8`1B=MYtB?ej%3rUq& z$dUw3MtD@vz>*~V=SOfdmZSo43dJ;vZeuLnhJOW#5=$uL zXiE`eDfE^i&Qc8KB!6F(5QC)-V1&nam4N_o9iBFfYsRuNmLJJwvLp~Ag75_6>5E5; zryrhBJpJ(uz%vj}n1!Y+3Ae1s|8qr_M7-XZW!t)cRwMsjCA_+lj`}~BS>+w$DC%H> zq0Y*J8QL_uSu9O@__mA3uff_#%Eh{k`jd zx0>~^K-@OALlcDy2xDc<3T$kJoSnT$?9fT#=+xQSMd~VZlXvOb&Aq$A!?TB%w@*){ zs#kAcwO=2Ne?VYRFbV0a?HAgAz`!uZDx8ndMGlIJwvJ)-WEkC%oRslK=Hw}FP9<3()B3)p&F(in^zHsL2Fx5dD{MCNj#W|;lOCIuR^btm ztiYDD6FD$l6mn3;I~691kqM)$S+P7U(aNJw(6%1iy>@t)`|RwwOZkZ^BDG(LC?FxI z(7Q+1VW|^H=zxJtM7khRWMj+4rUY7L3?p6N^N*V!kP!U7z`!z*0-azlE0afEjt(Vc zx7#Wb=Tbltukx_9%xqT3WjI@V#7!QfV#TwV-!Xn}DDeevC~M;TycZXcdQ&rM%((Ok zliry8CMB2dXDfEWJFhNV9lmTe=F;p^@~VVvE+La=6E5@t8|4@wVS9LatX}q>NQ2oC zMMB`%Z>0oM;Or8io9gcA)!TP)pFMj&9gesiR?BCcZ{Ekq|LMte~VU9$P&2 zc%1OK;ZcZ%10d7pfA|@t`QLxxB@@2xdaav;P~H6R*8jJ7y1JCR{>>qd-W|Jdw?P!e ztF>SDsoB_{mwY-V$JaNMXKWr17wnqn&xikddZx3Th96Xab?)zeYThSu@sT&a>do68 z?kV~{wika(b8^^#^Gd#c$JCFuPwdGTeX!5(-34C!+oECb+z|EPhc9~i?T}IrzVC}- z;o+VNKH%!?&H5?b_^01}8Q5*HoIm_EIriXVSAM}KQ7N^Do%zU;^ET4HT zJmYHLepW-Cgzs{3dU1X_;XOk0&-)Fq;Y-H8`fRa{h|iA*jh)si;g1Y`@-g~aXR}@4-bC-5$e!k<=c`LG#`EHA?&R7i{#ILNP8;Iop_-(6OR`Df391>yXZxY--;EehiYSIcgWa2&`#^d{Bo4r%!xH*DsZ zn7;hM&QZy4{t(P7hpd~e=n~AE*^nN@+tq5nU0xo@zsoGY1|su!2mECFBshRSec-*s zaYroXJsVuAN1bt(PK{{Z#Y3$NaRJQ@2{x1 zIfQ?Y<0~fl4dL$%TK$83RsuiHbhZ7vFAcm|jI0cN#IrnbHlBaJcF)BUekIm-+C^N|H(eF>mPIC__aH8_NI1=;|(#J_|K|hdBKen-#bi< z<-b|@aN=a!SpFSFmuE+I>G?k2L@skr(DOG(P3qmp{sk;wRp`5LW)_ApV?Z?+Ig`M)EOZ=Ph*_ z7|Bz{vbZmdfnrPJEHjX0*Y}A-DjX}yu-ym z!X`(@@)YY=m2v!+RPEm$%*Wn6yk~9ic)qEEDoQ;6wBK=l)`$dt$*Wmit0Y5s=ObS2 zb|;7M-ygYkYga@f@8(lIB5`9PPpR_cMIv8*`>ntaMU9Un8%o)Z1{6XO8`}#3_WNv1zN;Zxk zb}(V+{uyb!t?#WHLq?_Zhc+$Bxu+Y?Pjz*-U(ss<-@UN%Bc;Y#S+G4#$;Y^knRzCvH=n1H0d+tAmyf8y((u3g#5C`G;m>!e*t$MEE0Bj$ z7bUzul#iGb@uDp?nSUYuDSGU@WS)dij_#sO;-}9&Jf(4dBHxRG@l528zDW@u!iVh0 z)K#5H;J05rlrc+|z{}`%#u@nh)X|^*vMruBi|^VbzVg!QrddBF{(GeNdNVTNYja7x z$$z*0|B>GRAL;#n8tJuVyOf8=yR39DhkBJ-h4bE+D|4Ou!QF7aF9P_|68yX1&u1`< zsKtxN@jc#$w>!Tjd!U^czpCbma`Y-se)>ShiS^(Gu9EXkd_z6MAkdPCy7E`%GD$=( zRuY+5LZm32xlFGTC;l$}0&wvi375@gIEaM`JHEU5FaK=C3XwIh8qLgQ3D2a6<~qL! z=dwkQ!?$KL%hGmBaG>3BfUZXMi*RPXD5-L9xHn&ZS~^O;y9{3iT}M|WY(v2gFcLedz{)v-T@3%+9) z|0LFuD`E|4!SVa9xSV|y&b12L!}Wq{_V;k+vM76?70;CuRxKg6YCS9Ay}xDmI;+!& ztC}a>)cM3iRl#=Zp~@Dz`S9M|g^x76z{q~xhvV7%1CTU05W*?h)L@)B196HJ9`NP4 zCRW9(vWbs4lXwD44}%hMYCh@88QHxuaRqS&N-o%?iy;w#tddADK+Giy1MPX0Mr6xB zReC%}w405nS3&+z^X!Z82&r)Ns;BBU_F=fHjc4mk}fGy-8#1ZYz>UKy2PuzimC(l*+ zR}wXs$XWhhpv9fsa@iCBqG;c`f;Sjj#b0h8%A0$8q1SDDzL@t{?2Dk(ki zBHax#()nICam1D?MFu6Y<{H_7uNpGRvxYMA&`?C~G>BxGGvd0h~#NPHqaMKoBHf*CNCT%tBW9%GInm) zWw5bcklZ#;2v;W$HB1*QV^@`u9qks|#x9nsa!BBG1?dcFae|sUJBl@=6Shf2s%*C2 z4$U^|M4=V`)Tu}aJ<^ar3KPk1g&Oj_P)ME@rjaM$!UMTNNN&NhT@ROP?a4K@kz6jU zB0qzNH(_#H3$xuDh2&vj8F>uSI6qaFkyq&Z12&O?Xj#LS+W?GEU5;!(9T81#V)u3u zONg^rOPo}RY)NNvE0L*X@K<`$P1Q>53XN>NFI4jql&XPeFL@fWA#(Y|ORb04C1Up) z_J9)NtyEPA1-*HvI*vW;4|AX~G&u_I8Ch+pSg|^r1Yyr7gSjTwZ(x?PFq{312N#D% z#Om4kQ2@~^9`>T2ezJ)O3x%vHjH_UK42)H>KLkRIW{5#`HDG$d8+hJpC*5PUY>Of* z2L_aoE?g!laWCWGTPb;kEXPaBMXmZDlMy&f?}>Bk2|k#gYSm85DK2 zD_6wcaaL(b{pu#-2p56GEV zMt+B_C9r5#sxtPxKr8{(?8H?>WN0J~TssMLEGMp$(^zL$jOzm84eYAYkdnegcC?qc zo%9kn5nq*rwGG6F26EsQ%(ao_S>@z_yjaK<1arkgQ7G?}X2*_=Qq{2;v8pOIHwNUm z8#%d%^&HHVlc5cDEEO;EyF5q8Ch9@N3o&91aBGxngh>2@UY8TaWh4?lqdtnOV=skr zbx2ufvsL|J9Af%IN?he>BDSg@G<$3y0F(rS>>CEhLOnvDH~#PrA*xIg`XEhSCSpwi z>P+|cPH1iB#Zcn>^q&3UvULk>@F^UlKNpl>@6ZEuaWs{enCag#? zoK!PmW8rHBS=o+7L=>CIp6>)jbd1#yJNNv~h|%g0`@)cloBg%K3*0*3t!iXTeDI}H zs>}TAefE$SbrMGP<)y`r(`6)-!`~CZ zVetLIo8AKqT0#SrOFY*|PG+UCBHalY`&|^Gf%Vio+3{H#G6=i(fE-oHg+dZ17mC>W zXvj#UTq`1v;D|=(VO`pzPqeZ6SQwBYg-Uh}^<}>fK9R}J!nGXxWUx4&By!E{?8I0N zTb&r&$TlZK{1n4fO5!P3h}eU}RXqD7MP(vugfJipNvd$yQk$Lwo1V`qox!U+ zE^q-|u=PC70VJ5!8z(8#J8~A*(j?bAu!}TO1I1c-T_+MKPwdQ+0f_agwBk%!>DqU)hUByCa}8LU2hM+q9>JSiik62!G}#3x=Uolepwou zWGB|UYh=@N;JnKSvs1`kAut!e%Y}Al(#Z3MD)L-j=|CPgRJoVS$n~sB(v($)cvC`J z3G#QTeGTfYc zjlnq_|E7+l`KTs^OQYg%w=OcA3~_W18jqXDcg+X>yl|S2`tMeAK5Dn5ZB)lSjNJml zDyj(UoL0pMy~?VrL_y6}){;SrYSwvJTD3qnv8>vr>&)hATZKuoQ0P&hSSa+&r>`Qs z6nP3AhiZ+`vshCj>|U(U2|WuGOsB`W40=5B6g8YD=5amNYHB#2vg{hJ`_`g`c3!)y zboPEYOluiE>VkkBD+f z8J!y?9XYi+%605KW{F*T{sTtnLl^E*fR{%eu@ZJ)tI-L2|Jrx^OWyrKa4-6uDq^W;rC_R_bd8*OF9>5j!1?U_#aoSDF`^F zIa?6;ot_wizK@SI1fLtd$PjXI>JdZVE;*0H+ADbxOJvGB?~@)h1Y8KuWwlFtbEJdEIM4$FGvJ7SS}81GY@Z6)+sYqGNIp8p_MHgT(DiR}c_P#f*lf=A+hH;S(v z>o;cVqJ+@fyN@LFzyFo>kO2?tBZmxhY?{$2?0M^fPT{||KkCFYT#zJUzw^Y#hy_CL zt&KWS@b$(>NtD-_LC(V`o{5r8+Il9s>#XZ%Vib$LzSnzwF!B3X<+iQg$N7GK{rkb1 zV_s+DgMOTN)}Xzy^=!g`hO=vigflKbgy`lRsqX7llwD&xv52X4yEgBNpl=^h)Uc%J zs2R@5v8vCVhZ_1laUPZw8|*TCcX>r&s?^ufB3 zZyu{k=@R+*u_dG4nsvo$w7U3_z`kq2glM-(d4bU~Rgp)nZF*jWjZjgLwlLxxsOCYb z?O|fxd)&n4`A2KLimRD^myga$aGiD{czx*1A19q3BQ0AzV(i>|QPOemJ%8ewmdk}0 z)8Zv5O;$^~EisN?uC6ssSn2jaHgR=qh})zOQfIqmluSODs@gEC<-!|fi+$vtTUMu( zPTsL;UFnoh_MIzz^V4dZ2zK9U@1Ld)Z_GF*`uxJV(^+p`nQfSM_})RmTcf6){qU`C znVV7aaTTUow+vH6jVyhh$;!>UI8Dd(D1gNHm`pmi%Ue5l9aWj0o|}CnDPr{W+HOlX zSf5aRG5XE=;G37Gd>7&R(af_+Zw%`5W9mEIW?z{6MYnf;p7X3*&Xr|--RImWdB=V3 zt({-EzkBb{GxvE9PW0{m-tZrn7QFZD%KBf@#@)JE-|aULcEOp)H@gQ*U)rXPVeDki zZ(S7W%j8uq#CISoUmR8K#b3w13Evip9YV$tlNR)uq? z%h&QcOQMxm^7Agn^NhqwA<#ZS29iWgyZu)SL(+vTUngrxm>lY(sPCS zaJy%L|4D6+!r+TJJy!O+UD;#R!0lJBt>SG|*NYYml1`quGRCuH>-&QPE=+Vx2;;V` zNs8;|{lV~&b8gHqX6)QHZ`9itwyhtx&~1D1g!i8hFUi<=OEDz5(OO(OIobci(y&c8 z9He(A<~Ed0&8X_qW!mIstL&eT{;12%ntx^chd1WUSOSuJoVN3t7ntCdk=Nt2tXsJx z+HPV|u9cl)ZDNhBvN*d2nkT`FT1}q<$wHZO15`}0w#Z7@v#5>HPRuS^XgeXNtVSkS zm$XECwRm5RTV~mnjDF*a4^)3Ro%3F6|E5H%*f9Oo_5{=0r{{=23jc9(?ngDlvwLow zbNkR6<7Vlr-}t!pxvJ^o30BM3y64)3X0BWMWQ}+CJn59yP5FD*mv3GXFmmFSm0@<1 zx4xecH+kE-vCD5Qcb>HC*7gmvZ{ONcwxrkX@~!Kp+}>Hfeb?<>yAR&J{Ygb_uRFUx zJ2&Odp30V8clLhu^!A-kt89Aj_CMkq!RfR(n+US9FmH!tp= zdh6R)uk5p{tUASKSKD+i$gUC1+T2zn>U+2Ch@^AZeMdVF9lh_E>$^***XpNy<$rwe z?7I&H=uXZf$z9iqM3pS`!PQ?4*KH_;?~;~ zp|hP(a3(@FF-Kuzr_7^vn!2Q(FrPZk+r-y$J&PsLoGPEOvg^5lkCt7@_g^CWB|k!E z*R{MVSDUr{N}=0i)9S}=U9%f?A5L{{s8*^^}TZ_Hl2naS$E4;nOpTjIDUQ z;KyMTZsxWr>Sm@I`Zt^(Fl3cr)*{D2hCM%w^L}$i*wCTfGWQK1^i7pH!4@99t3$JNg+J^X&m7eBvq?V~R)zx(Lt zFMe5I?OxfusPov$EA(d=BV1nk;pYu@=IeyU-URms!j=I%V=KvM382>pq5#VcK~IE0 zK1et8z-ihOj|U!wSSeKS$nfKA$J09m#E1$cHxSWtT1kczZXEkDHFY zF=xV=5D_jB!kH9dQsp;T?F&46#X?*iAo|M-_qG)hLJ;AtMUHoCI0Cqx;W)$W6U&63 zg{zpiSmjrU6syJMY(uzrCsE+p@MOUp91pJm`5QQ}+!Y(y2jSlNl8mR}i|=?a!r#KT zGB?>RL@hzqRqzHo+E%SWhCGqRzeukjUx5^phbjjLUsPy{Q-!Aw4i7k|YuQKiSAX;u zfB|?kh*n!v2(I1CROIrJ9mO#v!ykEe9B}HTIQrvQiu@2}mN;TYCm<{0GKI)5d4DHd zWy7l~S%z0Nl2__F@?5PYPY~ok43Fy0I^S0-Nh`wL>*{O-)=J^U@b2D8*w z&LM}us4DES4i`R+;YXg}JoBSLK`!IW)gmq;x3Jy=bU!vAqk`{0a4xapqm~Ma&GCm6SQPk`9 zL6}ZcLeC@d5sCfWrFq#$It1Ps>UMUH4)gjUo?~}MgErg2#yK?Te$E5H95A{cFHXdH ztYeihI+y-}a=_~r#OoOKC=}2`Ig|N5qM#o#%604vt+}h9ucZjF6!dPV0EvIg$UsaB zR237`9tCUir@v=q3p6+jxY6VY*jmm8`e8LSn1mdbx{3|##p!V#OGEAqvffiHL%JdZ z88zai$|f0ECQ^b!QFlkkwH&nX8LtT>4=np9X}a=oX#)a!B$#f&hG{! zeD`FMM>uD-A;o`pkCJT-KcT_NDUn>sQi5j^a$!$4vikJWN5-C@(tkR9ay$8cPaS(c ze6ogI+(U;Zl505W-2~@vWi^p|_}J1Hp+C05oEufhYA3vJDV5g9%SDo^m`@c$)CE zJ3ed_k*Nn_=+n?FUW357A}l@kc#p`Mj)^Uj8Z(H1SaK> zE@JJ2Ox)|>Pd_;$B#)O$IM$XwQI*unviOyldm`tK_TQ1zdjYn!XXTIwY6UP7BCT00 zB-fBNs8 zWveTRo0?{F+KD@8-(AI%1N#(NWytA?71PU*FxTSr3K}eR7kcL)VA+!>t50NcG!dn6Oa+*dGW! zN_aab#(s63yOJYBu0eW8jT8X{y4_HRR4ybRLihmtX)_RVdyj_Plw;&|G+ffu zEp<8hRSoqJBVi6vu!T6=tJ08GDuZSHF;sZU8N6ra3 zbks_+kc{yZ=Q|4h>!?vos)XyqO)6I=tQS(#ecqOrR*DEK7uqAcKrc=nH#D)ohGTAP zLpy27DkoRL$e+~ZFzHZCgAiVZ)~lOg?)4A~wEh&~v#J%R(f<(YQm zfI-6sY9ac4p;=WSkc!lMm5}%}lA4q)FSaK$9EA;_6f#vLUS2FFCUqi`{*9o15!=!W zEcC|8ZZta{*bNNJaL?()I`UFYCnDIRhbNLYIzYIP%a@mP}e-Q_fSixG>gW=LIo13GB~wz^0d&1yKh-i6X@AyR)tRP%?|EO4(|Efo<`C# zJ?EZ=#KV4)UaB%&^{VpW2I@$LywaZVdtmB=Rp2`~JS*eL=BN2gpL+>MJE!&<+BBm2(aeRD^*b>mg%g6RGfuv zT63?;toEJ7nP7Oc1K6s!XRGk55H>!XGm;C1*(4Ru1$ky?k^w5U6lRhPLpEy)6*tQp z?b!k?hL-dNT0Vto^sZjXR?&p}j6IOahGMcksSObokDvH!knF^&rh7_U59vuyjCAXX z{9lHTSUEjY-Uj&Y`F8SlJGR6LCeBG&Q>Zh8}WCFkvN@%KWm6_WOb3i7C- ziadlsU2CXt&#{NOg&n?Em_r^@yZaP+`9x>utovFrdZm6;AGYgnr<2 z{66CzY-Y8Rgm7B&NS)7K=%(nxwoZ??+P=;l+W%i?4rzwToT5wYL0r6w=;^39t%g(1Ln^S_ z|2Y-N%BHhUvC4gHXM^?u>zt%dI^sNRSo$#+Frs7qqfJ|#D$!~)W+DU@*Hbj$LH^>k@*%?N4d$7|C45J-Bc@jv*OH>E^k#iF6}y_ zF)60gzvurJ>OFfX18O`Ag09x}=)ni*yxx!3#d@zBy)f3NbZSj(&yDk}mP130Sj8-T%_U!G4E*EA0Dx-Tv@YXGd}^T2s@giFY~bJfYsd&TC73Kz-1)`oM8H zMK!iPO*G-RHjyS#c`MF~W?P*+i8aW$&_c^;J;(y&TIr7e_ClJkh-L)y5<%p(X;wnT zhPGH`gKKMb4D5ZokNQyB77_SpvK%k!)gwAuOBScmw6 z$b^0^8_Y?)3AX+3RX%bU@SrZR)4(VHlGGEp1=U3KC@>}J?9@S4k>bMUMq#Hyk~GMv zP~#Zok~-5d+HLY@NnI`3y-kkE!IScXYW3;m;EQrzW3_(5On-6g$h=|iivo)uSH;G4 zH6?qgc7EnGSbgZRQ@sC)pw5Qi3p3BgIy65X+_m2=uj+&WPp+RG!VA2e{arQTs4p#@v za#=HCT<-8e#_@$w=lZv;jarrZluVb7oV@dMY24J$KVLTLt?EgvVftjR^L{g)TQOsj zen37j=f?2dvF|?cjvP1tcY)02IJ<6fS|3q#alojx{s#Mr&b3TX?*Tn(T~%dB*m+P! zn}yjcuPq|^d)aK+_z_+iOkz&bwx;nzG)p2UtQ;79+G-{*O|=>oyY5WDd;>_K%JHPpr#$#!pg3ntn zz8SjMdeqeY4beZvNKM0j8h5ZdyUVnZ*AGUy9riyP?>ZrWlg>`Lfz$}SOwGB03%rgM z8ODA2;B(ivTpqXl^j4Li=cVkbR`z)3qp3GmSkEXNI=Wx2N70#y$351kzP(fV#RetK zEzW3++Oc%zn}(P%vw9d`=N5YuG=B8XFS)K8bFQr(v2o7LO>d;ky}hSzr*}7ge)ICX zOjX~7svSrBuABF0U*x#=o_=k0YSP%$+1=-VUbd#xG3e*<2@{`xu;_#N*RMB{&TqHZ zG|j(yiFb{8t7^M3=4H~4A20X=Vq*GSAS^anZ%l8n|1pzK%Z)J{DG2hMm1GRES$Rbi z)L0OdZ2Mh#cC)MPt|FZ*EvK15UXH+QKz%r5+QEi=g%xM!h1rVrDB^WOuL2Dcsx+J4 zz06c&>rSsV(&wFtNVW~Tw%GM_w#1M=G3cz7>tS`IQ*hqoq+vF1NERz>xL%ctMdHwQ z=ePdY^FWbz`TwEpO~9H+zIO3S=s+hVA%rai#IT1Y8W0r}?Lt97LBSPVMo>^(P~1kG zaR~?tDhi5<>)?(HiaU-v1Fq<}po5A#xPpp;qN3ySe;eofKlk^2_dd_Pc__NOy1TlT zQ&s1@bTBT}rVQ95XdL%UP(n;Ow$0=~1?Jd(opsqW#sI7n_`9oqPCPEV#ME@1}oxPUl{J!leOA zF&H}6`JY-E_@PK0Im|U~csof;>77AbyINK5A76y!7W<|!mr{Zx0STfLgMyxjhPb3w z`-G@xB~1D|C3j$d&wO$&Y`7xRW#B-U`gNhb+llYmb@8!1-`;LR^XL_!5zn@EZR{2x z%#U75HslZJADg&x@K47~Ryil^e7b7*&-G7N$1Mmz4zdE=)@)fh?%5jW!Zq91PFR{^ zy)OCpPj2g1p7C&ZTXV_QX~T?NW1nw$HEV(Uv@K6|KHvCeU?}4``fJ(Pm^r^cdH$R2 zDWP>?w=~IG`P})ZI$CVnWwnTAK2z;5Pv~^v@SQ=@l1_b%7JTq^lrQw{bZaQtx+}?`+O9a;t1SQ~AjON*`EC;fK~N zzQ*`D1pj*c_~*j6H)ayFHwO_>Y5%8+Ff5r+pS+at?Jhq0s7sH%t#db^yT&0_x$PsYzWspiTD-8LE?{Xl zKzA&m9l%dPSCtpvT6uKnBeDN0boVc8*9Nh62)vyYa4gn}jscj*qguQchMA0wFom)( z573!F&zE0=WT3h#fOsKJ@+M!nRy?lu15|Crkkk~=SQX7aw^$)y0xDS*TYeK{m)juOaGB2!$m5M4zw4I~%W9jqncwTmS$V*PhmmTTo~h)5#A!l_p~1>0$Qz#%OYENMP445E9;~K2*g~1e9j*rs`CdRc>KZl$H9j` z0DdwsvHEdZ=3skV{Q&S-9>61B2te?dOFU}JcNlFIFgV!3*Vbl#HeE3)qxy#yKU#D7ggHJuZoSkK~~o1^HO4 zAkE1s=rIs0(0(tHwd7fG6kv@wriRNl0M=2U@uQg2+&C>c1Dx&#q={R}Eu;pb506mS zB^QyGc=Js%5R&8?@)6;4a$#%B5}KU?Igi)O1*)Xeb>@S01;p`e5Sb1eyzY0%!`h?4R$=mH+WGai6{+Xr~0FpqhS zT4!DY-V!sef~koGA&waiLCALBn1TXsrSjoeB_%ueKH_ z%WKH(;!^VPau#`9+z6z_0KgyxLUIb=zAUmPT2ovGLeFAi{bgmXrS=s=CBz2+C9qzM z3OX5^gX+jpF%i6EX>diyKj;i>;~At!2C8i>#9Bkv??^{Q;N*J_ zAec)&QJ};%9)JPbiBpJS3ZNsDH>`DOf>%>=11JuViwDlpmK~<#qD>W$#+bQRu>`FCGdT10mQDO(B050(OJxIg+rK>7%m%XIp1U0BBkR*)zg0C{!1S zp_GR~lUi3u$UnL|@+nfoeBi8;#DM#%$-82I;EUw7t^%M54~enlNu&Y_>WbFu#^M_C zPcpq0MuaFi#P>3vMvS?ItrM672p0GybI?WR-+u8nVbVT^TtD zO6`C?7TXzjBKU$zy8^uJz=O`yK$@3)Qq5Bu3_vRi#muEPvLbZt0?dLKA3+ggBv53E zt|LY|C^zAA-*ibRL=tJ?k+b)@IMS#qfEHOjG<0(cP8gQ$B5500k(x-cVj#{X&+-g8h0GeghlW{#DTf*32NE-M0;TT>!B>`wZpjBjvu7*e(V#t~XjL*q6%=V5LJvxF!4mK2$+dlj>sDjQJkucNr9x51- z)S+YWJpza+j6nd7RhTjcFPT2aKx`fAWY;S4YVsN#D#Ta@tY9vg>!KWh_8L>`C^Hc7 z&MfjR62SE3M)Ll04O+d7XC26!;u;{{g6RG59sc>K~fxdKJhm;zR$V%WaK0Bk`4c)V>5usdEqH;S3oSr@0) zh?&?fVjz-0lbP5+4}Ttx(!!%0D&Cf_#x)qkY+HvdVjBsF+ySdyhzZ4TW1(inz_GGq z%o@I7Rv_LYymh#<;N7BF^z(q`Cy(0!uPJ1f3`CrQUww#*!RWSS1fV_hII$L}9h+Rn ztZ~3;2L~d>!XIV8I;g;<_=8F`gt@FBUmHrvXHZNFO8yqzqag>&a}Cwx313lcUKtUn z8_j`YW)UL~KwXU3Kn^zLLV;I>fk`1o*>h!#cW)5UIbK0>0q?S9yE;t5MDW->Y#>;S zMlIwZ$T=WKk7F)#EZ9R&X61l9)c$6qEGLCbQ&TfS(I1p3Z_;BR3qUo!kgth3 zm3S7Koe>Rnj0MH;yFEG%OF9@=a?sy$N?XU%gORyd04gH4fr#^Z%g_9EWk|qqxdby# z9dY9oRAc>Q7`r`cczt9nH2cKmlz9wb;D2FwvHuSkUaK5@3c|2JqUY5B zAs`8XxdEaQNg*N$%|(`ob;;GsoEv{~F~s#?-3tIfX@NaSyh1s($|q)VELusBfXsth)UsZRfN!nP}2jU)C{G zHI;QTxNNTY0rlku3$tBTMD@>h%^fZjlY)fJ7yi}vW6T$6x8(L;336{!8hPTIBfs9W@}Q*1>lKhTdA!dZ>UoX}ROzh3iHMvXGl`SXb+ zpA{@13C9(B3cP|BU0pJ;r;Mm;v!$_P7R6;QE)mBkOHn*fAQQ*@+#aSrRSFk*knjSpJk@Gxa*pXOuwq4v~%GjrxPeVZq1eT_FkXAytmi>Dy4P1 z3r*LJ^kUJvBvOJ&|CmCf(fk?juwdRz?|I3X_ zSG5JTcJka4Wo&Xc^;%}f;eqdk1Eb?LHwF$Ilz3J;c*J4p;Mm)W%)!HI_sivHQf{mS z4rsM1W^|sYf9#2ZZGGB}-E<>#==fq+GAvnKdvjRIS=U>`TeSgGpKiPL)9m-6W#*wR z&<32v43;ucY^Q3=468BK@lQ3Ys-vM2SkONw;6t@v?*8(D2{%&WBh^W92Xkzf&x!73 z5|`STrqV!*49bTZv~+IVDHE@_4z`JpTsrnmTs2}rtnbeWN0yF}mmSLJx~{$~cC2_w z$g1`yQ$N@W3eRp?5g3r^b|X@d{vUdWOO2MRl&}!1^^SKMc=yb%`A>7Ed3x=-kus zBW^wd7}!I}D_6#j$r-aT+YLEb4lwY*?d|I(_YjUs+Xho#GV7kOo#8*+8(f-6(&0<)A;`fOg*?xMEsZ-;Lt_0zN| znZG40P%=&*&K`WI_jx)ceye`}V?)^4uony_?a>RFkiJ7rwq*<&KTfpziecRLwVtyq z?ZX7CtG4T0>k8H5wpOL5FW1GKlX&KC5~}WG$5jhXK!Gs-)}SK zd%P9X20V2n*_3u~shMxqou$K$OuT&{(Uj(`;(wO(%|CzO&x~GU|LT@gVo4jOg+=Ng zC~3&{_~Wq~E$J@mcGfgON&CDy)A!XG2Rd&d|FfZet1dhZX|$!gT7MdP;=onMj^!>i z*Cl+pOSlv5vEWy$OUpfJR8sp*Co`PryTGgXbEl%#;#yJ%{;}ouR2qM5hxsZy+Wz;t z&5PUlQqR_SZ~CKN0;r(%`QU%Q6Gea2RxA~TGCTsIE$dI+T3?Bv5XmU?;{xfI@4!^G zR3P$!*`8iX0_c5Ll}kq|ecCbqR#X=%I_kaLn_AxKgS_deGdzxY(-0fSS*#cRM-UqP z-I^iu$SNtTwW^BzGFt>N&=h{{373dA+|n(jhzAKfY1#Ovk}zL%oJF z0z>04gCosLQ$9#~VNV}s30L%mUo!l?+ETTsps}YT zb&LsJ_tC?Fx?DF}d2pCLZR<8fvBFD3dzuZrGO5;vn$0}ZW=g1rem9oe`=@B&WvT0a zi>}VJ%cG^G&aYi)@N&mR=&8p;YIp}0oOhN71vTNX9gUW;9(7VZ?YdtO#B`>PBejHd zr%N9DFMaF}JwL*uNwlAsm6E=6sYs*kMUV58@_R3OK)^}6_M}-M)of=vB{7QaN^iUR zYdX?_gYdiICre`8=?>AXFi)yD>=k`n=|eX?Xx`rWq$^z^iqXPpMC$~hp@$QTfT8<2 zx=RD?sj+AitD-@oGOYt$a#-4?Q0n z{iRex_lZ)8CNhg{Lt{b;yzS_`rokTqwp!CTUN_g8x&(2JN2XX%nbm4(c^3&Sd|GkU z>Y$V!dLkJ$RV1LEcMm;!5dMt&r}MSHkDYwR&2PHsKC07m&d*{+S<~ldT#?bP(UX%~ zxa0FX_F2-ep0hAI5-{RvJy&Dsus0POPbpp2qbt!MS=A(C1 zYhOE2m#UeaUUYrQ@%_!ww7E!d>uc$ZSthTz9ha|l4t@BF`?4W1xNTGeml=A`eCC-3 zZp-<{O{syexy$f55?%V5+maaN8FAtbx6XK6uJO1=&N{ZDhxLI*?$TW|@rkdE+-1v8 zd+Z{bxJR}-3x;iI;>t#5S#4`-;>dz{)q?ms&g<_sua4fSBNG!FSrSIlS*qBAfu-o?N2$r;^r;8zp3F(6Su;(WE>a!ma}cH z^~>n}nFBrI?;UqR^R{fzp?BPaE4c+nJ2Z2PhjceTc&wT0%u{sMC+ z&~7g8axe81Qs2XSjFLYZ)A9q416E?~ArwQ_Pd&vn_-BjTkqIWWbK`|t-x?z-YaPra zG_%)azOOmK!dX^tnt^m=aViinp<(sg==b?e|*K0fVLa zjlC>r?ce-#p`aiCojqn{mS{CJ;99Unq@Ot*D$=sfv}#+Jw}yU@y3ZKtU`NM}gid+e z92M(E@5_>iji^-WMZJGd6BDN#4eLjDCMOY*s0I+XiYddg14e{%Lu)iUq1 zNvu7+n|3r}sRK=W=i}dYzB3*AL`>ZtDl@HD6YI=4K^zduR3vR8~HR`Dp%y>whsaoNpmwG2xzB9|82x&_nTs!fF`)d#J5Jz}V!g5LJFcR28h^_z{y3&v z^pPem`M#C5*|Led%eU*?Moz9he6-@p8*anTis{<~Z#k~_V`q!H25!lo(;f~l8@bi% zA>p{c;`V;))^TUu8_ww4qI>biZ@9`=JiqXo`(?<@l`|3>xO+=I#oxBR;$HbIf7$l+ zOU@y+*O=;2&$$u*%-l8kOFieNce;F~`U%%_)SZ;#k9FM6>1TB>!k%-#yW2lVzxs@; zXk~Ana`J%{YaV`h%&qJ%T)w-hhO^TQagCjPpVO|`J5a7hYtNfG@yTu_HGF-W^KApj znOF*=SOtAEHowKzRZbIq=N_+GA)^zUe;qM$MkQzc@z@Qgva4KD-llouoC*C=kC=5^ z8(&PNkuyskj<=w#^S-eiHMx21*_=gobYClbqo8dn+Ijct;Yh8(aAqi+=-%Jvey-o) zPJ4Pyl)DV|pur8jtM&%#D26DEQyu9+i`xG1Z6co}VMk04R>w(5pK+MNg6W2{jciAn zd$zG530msv6tTve7JT$*XPd68_m>XR(d~&*S*~=z`Qc819xA$GqUyVHiY;By-p=pS z0dx9e6fvXgMKKdaRMF}!t&Y3(S*E{X|Bg%Udp~*B_YYjic6qJ@9-Zz|mdMoI=^gkC_^jFg1gTPwYQ0U<#m?drU3#d4eucCi{u^Q8H zk&1S5JQ^`TMV(qlvo=(f{9s3Ef`+z9mN3qtEHgCxJe5IEw?UKpj-X!@x31jRf4wG{2sg1G-JJ0JXNjr6oL{}p% zgZHh>lq6^RtLdK@Lmlap`kP-$!W^l4Kc~M-?%PwfQe&!ZLs!54YqVFo162pLZ;aS) zM*~`0-jslJ4FWg$17Gy7G^Z8g%gdv+s3*`-@-lh z8@YSzLP8BnyR#kY+tPau6KuQ0InrGPg~xmQw4t3xZL68M-kQo?<0{OlAaKtyD_aF! z*E!iXFszXob*{!=VVeBb9%J=q4cgfZQ7R0TGD>oN(ybL z|C<9pcll;cXGLr^@f>SG{rj2T-@n_O4(V0qaS@zfihq{F!%Vx&rD1Z~cVqUle0Jg;|yr z(Z58g+P2i{!?0v&qzx4+{Y^n8^B>oal3LT-wE}^`mijKaar2>riq>M6<=5k^Y1psg z2G>J2^ptA!5}$JltW@FIiYM|UQ>bGr8)d;@3=X%B*mC+-b@tfOXsNnXieYnd{8jJs z=5$=<<+NZgDgB&Sr!}KAd6S^eFJjs&vP?Nv?hP^HX=-0rk&BcLS7O=Ngl-TON{y-S zQh^w>rb&cnDV>59(~7758X@)mIdZCa7XuYyZz*Li%<+A`j?iOiat}Eisa?Jyw>7Q! z%3bJDzssnzm~Kh?bJj2)4{Fgm%$n1SkR?;S+~};K{O>cDHD^ugrE#wGgpy^moN0$H z*&m#PHT0$F=kz}c+tPlq>#x0zx1-il|HngJRCMJwebQU*q<(kwnN9DwkxbLZJ@dYB z-S2dpILD6Ab0I0n_Rw4LdaViF^f@S0^ao2HCdTl7eZtr!3yP*ET&0$@liGkqgNMI{G-~b&9BKp(3R<6- z6{esg<&!>`?pM-bORqP0?FP@FY%!f^Prn#$8;vnj(LrA63s(GYLmeh3{?>E6n$Adt zyr7{LN~+MP=~-=4hu&Z8)pcSBw0}n$$Y9qB;-EIbFM>KnK|FKn*e=ZkXJYC2l?1;|9$Et8I`70D$0~Jez0|nDd`|GfbZG8$M&dLYMm<9e&=3nsN4~m4(l~}KM6bSA1>smx4#?x`{FNgDUJd< zskVK@p!eJXm;SN2i*4!DH7LfLdQKA3SoEA@8b+V!KmQGPdk;7NVQ^bo9@^w$xc7=1 zBlzSLJ>H)FIj|s=oBDz)uiZDX(Un?VdYCfy=U3dXgZF%{x!#sewRya$sGo*XWr0-N z#5IkWyoIxT%eg9Z71~B_T}Xvy@Z|<>L!!U-Eq8p2^O$<0cib4!C+!E$zokIR?0d%* zhLlJ@aP4erH?beNxAOMN;FHaq_mZQ)M&5IFvw4Byg<2tTdC#4nJ)CPEidA&2g#Ezn zRQgNs#=MXy{2v-pz_f5MD@tnOKE?l%cKH4$?&IY6>~-~TxoXSWRcmGcaOsH}IF7R} zW7%eImi(5f^ukwezWkw7I`TW0t&EWd!%CnpySgre(Cd4YMRmHboU&AzFi$|8()aq& z2j94dZu3_BdEqcY*a1x_ZCW&Z7N_XSuqgh(@zW(#{ITG5b!1bx2fXyD~C%}LGU^d+WB8YLKe*#)Y<}(X9}k9TtT#sl8NcEis)O zaV=ogbhB$22J;}L!2*g3b;Qa#SDvD=r?)q*sNbDoPOFv<&G^#Ml+LhtHuG?)Id#!t zsIj6I@`q+6a~0I)H|iPC-jw!5XI>ATm_0qqSKixbM#t|o-e6K~PB(Ns(czb!a{9>9 zx>89iabb#G(hpEPNs%Xg z=eF!y*TX{fjq}~{v+d<+vD}*#tg8qr^Jy zM=nd*VwLoc8&MvoSD}0MT>f=eT<5o3wwYDl-dWAum8WsId)OgXdG*$NZew!q%R1J9 zzJED2(a`$?mlJPRa;uTsjtbl#+sJKks?C3P_6?Ue|6_694H@mmgAaDExnpl<#GHz5 z;6lRV9bH~=@fT*ro^h8_abeO+PPufPMbx4f+)l=OGvjSd?Vfk(HD#|A?Ut-+jG1}8 zVBP%=Z@8nM2bO#u2!8nMfd}nhTF?$dDm8s08o0GyUnc%}Nf2q1*rJS`&5+gK7DWiEWJO=L7mbEIu>TtmAO` zxM&HD4*B(u_xUXC9TI~H+)bIv_reWIBEeyLW~0=Mo_fM-_9&IPQdUO$Jxzkebg355 zVdfS5Dd@qcQLH&Vfq_m!AEYbAa)uU(pg@p7F@%X;lEai_1gX|n3Mu3=N(`?|m8wt9yYCfB~^em@+$ z?r`i&ZcOx$Dytc7Xxornklhe@TX|#84vpN=MGtc>U>|{Ab9<~``CB7*tl@4#VR{p{ zKhi4WQdtuhPy58ey(DKfY1@#fX3#~%;uxLLHcPc!Mt7I{$<7kk5f>N@(KJ2?2hEI$uUZ@1kYGWg9~Ze4<0IBCuYE_(D^ zapLn2Ty98M(P!@S?V>jmt3GlcZch2m{N2pGn6c#1@bfKP;Pu%pH=lgruC&bf(q-;f z?n#Kh_A?jwZThaG8UJv9D637iU%0B?NA~T%_=P*7Y%;C;%I)x1ckfa2iSv<}jQZ`) zH!gz*Lf3rYUX_~%4{cBA2z||x33-J6fG)mrIe%PL`aBU(m$PB)cP;@Vk&y0_x0N#f zAJqO9S^<4f6?wlZ@+)`dsTQ{c$|MW0C=SY0UbsjG?*e^~;Q-m!Jz&%^rXY|D8hNF) z)`%X?dbTI1iJ@=RE#mMjjBkfsq0OUCF@=q&##|$!oW}Rw?l@z0ixn|ZN6EcSXqRV8 z0!Ck9X(807!66$$^cXJN%7=)hz=tL(t5ry)uTsPF(a)d8a^tywv+21$_l*v%@wUN^<<`3FM#2UOS7o z9#K;3Mg=ifSF0hO98;E>NtJZ|VR?zI)`BMHWH-~NmQ+-$m4dxHwXFh?h4*-T&zv^E zRUr8*QKj*qCn5Y@oX{huko2uDW1%}}on^)Lr=@2Lr9pH%FTezWDbR+{7#`-$?Me59 z#DSIi;CE_jKWBe+j0G_IpOs10te$d8g&FHXM=MjsM5``SLWs9ewwQtGRVhoPtS7Zs zR+ZtC$+$mQ8@+5=P$RBcz3X% zU2Csqa29g(fI_0ou8Ew_C3}L30y=JVnx1{MIm0B4+V?Ju#;CrSt3rbpVT`MEZ z=)*62tvkod>8xl)p~k0A@`L@_QcF1RZ6fXp^UMUN@;tw zV5gR)i)OwUDxYKw03t;U;ccgD0k1yTC;y1KzCHl znKdy4h>lHQTE}CbxRzHu{PdNpRK|%DK63T%R-T(Q@Dn$`71{mBz5b~OB*Rafb(ksp zo-0$<$&wKHV%?LkGa9+1JyNVyz2i@DZwnu>LUU-x{Y%kmq!h=)^}4#*n0 z9@C5Nggd<9o^RNk*+J9H)rcAa#+NS$e8q`ga&h`eZ+aei!o40IGQ;Y|Q%-4S8gavt z-UFaIvhq3i`0TLT&vRdJ_k)fqfEqje?I@5w;!eMmC$*72;CA+vH(H#z$JHjT9`W;S zbDDAL)@`@2YVPRQ*mu9lZ*iI(Ysdavd7XRvbiY;5X)#swqK~YFCKO6nFC49!9lfm# zYAc16v6ZpCisjcU2#NjQSx){(Y^&1Mdqwkf_Ft_lQ&YnJ-|kymXw;SjvB4Ulc@|}& zoQRdPCP+-<(k<4*BX?A}B&JembAlNA%b8$l-0_!fuV5%;uJyZcEJBAZfZHQ-8)$ zk;jI3r<>=boN?Bei^C(*l`Bimxa#x7krUG`HZ%sicNZ**${J<4K@;NMJAToCLMN+T zF(R*_wTp(7Iawbl5b4IpFCJFoWb=EqsQoXsi$@Y?)hU&+&!YGxqczU97h{Y&tgST~ z8)&4ymV3^xC|WjQxRKrM%5$AcugNCQHnOi(ocFJYmQP!6)TTb_e3xpU1^iyOiF!fc zBXcv0ts0T0#UPGQ2rV)+jM9-9IVrG5@Q=FogR$j?x?uM%j;$5p=|twCBE)>XWKhOY zfhvN^Tdsi_8)n2_X-qS#*uuP3rKuz0(tW2>QIq1dNrZlx*$E@#*F{F%Uc@hx4y@(3 z*6q@~e_8v+Ep5NGm{6fpZkl4N#yEiOq1>FCso&}-pT!0{Ipt+XZFRCf#`f~voR^cb z)!E?_8`i^Vd0y^T7q+HO|3d))QxzGs5nI&2DeA3thE-+Nmv{Og1J zPCu}sZ{t???w`a_=}!5Z6p4xupNrAC%kx#*M2{J9y$7s+YuSM&GHzMeaQC|9u7PJg zhX{-YAGmH(92n;{ynfM;KZL7FvJ$-$JQl}ZNndrSC{Z_Y+~Q#m9+A>BA??%!iT&%);-POqX)L%d;t})Bev)m*oi(oSd=Y&34~a$E0I? zx2(CGvb_UyZNb>?Mr$iy6{MQ$= znT=@Tu(4gLb}lvEGp)_5gwU>cYx~YT@vco{MrhzLmD#K-O_^^8mIpo$>L(3UEKDtn zlX`_MQ}>DjP1HyoK`p`hbmer~?PYwwU)e_+KbE<7f4jzP&Wri#f9{!ZpRSqpY~ASB zU9j_$nL+4MC@?RgN}tL!MZQL)%Lp1bQDKs^{_fnnW@irlqF~NZ1c8q;Z31a zRYq9w7u&pHVZpM@{0enj-)q@XPu4u!8W!R;DthsO+RZlQ+FrhE%apf=w`97Di)(oJousUwRcBnL z#%u}i`-?Jvvx_T3!svj_{a5ap?&_Tw-e=gO{;N+kyXrH;BSt$7SaYc=yTc}r$nirh z*4?Sf?pyl5-5_|%nSS$x0}B}|L(q)$s7&9gO^TJ;5Z$8aoT>Rf4x*i5;p6-NRhYlf zbDRCxn2X%%QvNnbiUWo03K9-_3(H>HIFW<;pa+vT%WUK^)_$PYc}qNDwbu z9COz9X4j>eds4F;V_#;a<>bHLIMaJ^?ByPzGaGC7ybUxRdTsg5Lq&s%kH`GjnRxGh z-J}_&ArC%Vm!5i>5#6!YuaD9upvHG^-@M(!pLMbM{dz~sBSjNNyc)my_yf_t)C&`S zYTmW_r2Ulkv!C`E`Ol*ve|~x2-XNN2DYR3SOU9JUcl3^z3{#y}KPy=nKnQgrjZ$j&a9+#eJu5w%AY?;~x0ICwESgZl`!ne(;#Jd3k#h+`3{|9G#QDb7Hu5 z=$cM3H+@&1j4;wK9(*a`*~Zw*OU86Oc>8k7s@-;Qpw@zE>pR2ALK-gW!p z_#vl<-aK@qB zzij{i-H)eYPlb*D+$*Ivznf*7cHBJdc9zty%k`C4rtj!E;>EzDU2Yz}GGpKT5w8+D zcfE7t%Fp|qvJ!SR$`kKjF*?>i?Ux5p#`kjKm{DP;*_*k?&9mYdClv^yQf$uGDnA9_ z6tONExFA*ti?#;MbgsV7UVrEH;A?LOx4IE;Ql1|-Q@xz&sWECycMl9GjB_~c{8Q5s zlLe0*&4yeU;PA_;P|>rFS7%+F|5J0LE$B&mWKUMu7E&>c1<3=Kyb<1X1ZxBsV6;^8J!Rrcg33Gb{Og`maQR4C{4OptR-zD1IQ+1IYVp%n<{v4y2@Z@Rt1@Y zq$`l@OdO9Q*iBtuT%mIb0J5v&llB8)?LC@X~ZTMSvDyFkw2@%6GIG8JXB!}CiK zl=uWJY{>=O1L6<;G8OER6u5@tB?R8|upA*AAqPQ&a1+4?ApvPm#xt2nUx4d)gj|$% zsH_y$VJw+}Fc?k1TjmW!37#_~6pychofeBI)E_>r!KM~0iA55;wO>A3BoaqwzDklE zVe_J5J}pLb%W^zW(^@hTCOTX2z+aIbK5OT?=9kf3~p**k*jI7fGxuD z9a3M22eQzpuCg!~fob3rg>Ph*^hIb!ZW@sgpLtkpVlx(&42sO-O_Uf&vSM;2@)&Bh z2-cryh+W9%PCTJR3j`viESy8XiyTHsMc@#IBZQ#XLn9T0H!tmvFE7Ivcstw%q*|{= zssqF(3@VLc^IR=zvR-t!S`Jj4XG!;;QTDY4P;<0GP4@-d9ZnlMcj3qk3@iVCht8D>F^sOu;dv+AB0f| zvyr<(JS*4Lq2d*2&N31iS%BuzgO*t|wYIfecq4uY?mHsxH+)Bd^T{~pznO^28HDo? z6oPM{O1!fc_pucUS&nP&-;(QbuEq1bBdLx!?}gA0R)0EN|BiE8kdZfzL-EW>96#VV z4fon2eW%DW*n?^C%#VJk%&Ek9rNJ=7l1rc-72?AXo}#8BbOo^SR*?GQRFaHxSTw-i z3eWBaIUL0i4k1xD3UV3YXS}}`VLIY3=o(QU@H+;Qoq&5P#65}RckJ+oHKGRZs4#A- z&?YQN!!_^P(Fg>~k1zWWZ?B7jQ8T`a_&z9mKF$xyvhW=h@7xY!MGTpb_pWZ^!Z~lWybR~OS?)MlZs4{b@+v%b z{y2e5TiV9zRGa^hX+JIgar3{V+aH^x{?FJ}nf9K%dDwq>0}{_8LZZ-XNSe@Ct|7S^ zL%K++_D>~_=^0{6&zMq!`o+=b+ms2+xF3lg|QEV1?LQI!;b`b>_%e`;NIxlu2(ww!@6_ss}1cMi>Ui9V2UPUsfd+kaO7 zM~s1BBqPKi%Fzn8Mu_7^(KMl`XyE>-qCVETVWrcX-ijhrKBFu0eR@7!B5+T-en}f$ zW}Jhi1;W-aR4fz{h7@iuTcUKlSrxY;&SbIBJEBY<k+RI#5H!(Rs!0%D$?0J#ZPOz^EP8Xu z5_LdIGuz)Ke1&$RCngk-s5`IIodv-AQD%~A*e zZ_vjX*@O%)(fXJYorO{FDoN1ko5jRU!jwb{hb-|tw!UWb6eIZ(W{9xvVxDt(yPrzl9;!H9*02M5C7s8$lbw~sZQD{@x zVVwrvIbvISws_sq$*yICc8=P7mRMZhm9eh8$M9uSwx1IF8yO5@!s9N)U@sto2upo* z-(E!%T&q?3&X0#{r`J~{<|Y1h<;aXzzo$(Ya*Ei`>>I_TK4%=#RLp@hD?0BZ20~5^ z+9WU-4hfr$^9f0!Vmt8*QT4S`4zN6xl%}M&Z`-|VX7jP?Tg7KA=emDR+-Y5S&u!j8 zZ1Jqh?M>2*;uM~I0b|J#sfw-XZBURTqSYHTgt(G?Eo=`>31JG*ACSxTD6+oH%Agee zVjGzHOmQkhVzW0sW?QXvp_yZ^Jwr}~in|!OtSV3$Mv2|s*OnF)^ctLIVcq^G5587} zuDy{%`12>avi)TR(T{r>+25YN=UMcF&|Jqz%Ti+vO;ZSlqOX*J0dymzRH@+$$j9Jd z;mDNe&0*9HV{C;6cVMF)LF$ak7?LMiOG;|DR)#Gn2TJdp*}V0FnS0OD!p#1|vfSK+ zhxCNn5eufjap~a9Obarow`J0nsRI_T6hssd7{m)=$G@kIRr#RqzZzsTL{pXQ-lUoOK*aoA^R6ca)>oIL>Y{UF`hsiok#c~WOJ}# zHHl%^DVrTot=|&T#AQ|jo4&07ZF7wq8Rt9Jdh4<6+b^&4pJrTXJLIA`%&6(LmBq?Ak5yQ8T2BQn#P8d{BLqx})6p9uD9Y?hiiidWgT5;Se zMBSnDz|Tm8pP+JU*`U=i2bCpxgC>+H3WYUZs=^RM8+UrSdZ>sL2?WCC1EM&L;=|)- zxb`}Ieu*-2*B8gA%H3%lMwX+fqp{5gSx-prkLiR-ax7yEzqk=bYmQG6Z&EKZpRW7MwCBin24=N(MZ^DraJ_5TWuU zg+V87!v-b43{yRr9%Z=oUEcA|+&qbN*HBW}Xd zIi??t@0Lz|K7Na-hJva{OZ4%4Zrmd9IrK|qn`_vEw1(pI_$dfI zsdP&stR6AQQbCbWW5`CmuzE*AwE~E4B?|;ruY)73p8YV?Dd-6nQP9d$^Nc<}$1?~L z1fF{rA^e5_&XSi$S{;b+y!3EcY%8M!2Ro2k!1?m5cYDoCHhg+K<3C;IBO8L^K%UA(F2so9C6Q_bD})aSPZ4-wN+_#n z6_hsMd>eu(0?*yYBJli8oa|aF1GokZ*`N4aF@hHH@F0%TX~;ueD&$KAWKb>mC2gxy zgKn+4W>IJs8)XJT$h76!QXD-H5)gRz zH;Jg)mpJ+%`|ol-!9hnf`6D@&xu_Edpgps|%){L;Pc~bNgOIX6DklnzXdFq6+)u2N z%ZW8KTzEpg61kt*Z!3<*TktNEydRD~^T6ImF+Kbse*XmlZzu8;g*+wb1Y{%LNQT^T zA}1CiV;$rMe=5ArSr!Bs%sfsYA1`x)iCi@aULIZsN*@b#*kc;sEh%-4!b-~&bh z^Z?#L@sL?@G^kh4bRH$v<4Z;4esMS)jcedRDU8{eglzE1d@Y^@(V&jmr|>W*$BNU) zMjh%Aq}97YOn%oHP)7yiEJ~Z0Y)j@rUOI>CLFiAjJ>e2zVR8T&l{1Cua8|4$B3%q> zIE?v*J*yz%7cwt-UmJIHHRL#C`8cGxNvGhqNY#SI{Yk)OAGl$HV4@>TE!>s>q0pct zEfAh7(0W?tTMisOGw4wokb@o)1Z<&-Ye~3H&-{5#>_dj>3JAYMxnpNA6WAXx?K=P~F3UW6enr;x?T2Gns9$w*G+_in{= zDslv6lynmBCx7bnWSlOJ#1{vU3q0;L3y8=p5T-loo_AWEEBgcri6gpVz#R>nAi2eX z()`Kf%W3G$den~!)K)+&ApB3k`3`)YmkN1lZKI4bMRUbFL6R70lcUgcE6IuCGD7jy zTge4vn=T2Bl*ITh5r>gzT`7ia>=^}W3g@>oe1|%-l@+0r)_^!uTOF7jRr^TLBa_Io zNCWAYlY(!=@JJ7HF-9DRkx7AK@*X*oNU<6^>C4gj1CYcbfx-N#F`f1J@fo zXjX|PL@R?SCRf? zdNH~V598SBDj{wfT8Bg_a4-r3xc!B6vAqxi)_Xo0NrYjGa2Q$*6@- zc*Y6O4@Ovs^lETFRL5r*e&LdNoYNmA)uYiXF>(WnO6GlZX)(#E$ZzUs2}rgO5M2_f z0HN{wLVrg)ti>@A$BB6Hp^o=@2Up8DKab;7WOg?adU&}I-6a>TZGhyjAqSA5d9o-6 z2zl|Sx<^QV8vOjg-xPYjKksR!!HkfGAq<(9(}I*r04r%xOJQi-T+EBPt$+h>32CY0 z_shU$X?QILbj0`R?Ff9M@?gszypx68UBfkC)XSK{m!l8@+!~D}KjnB_He*QDW#0E0 z%kL?P)OZMr#rR@qoo@P}BYs0W-b21YSC>0iJ?ycNIvFM=|uIZ_X6* zD{?l7-}KNIBgye%-VIt3*n?c+oLm9?@kisQAR!~Xz$ePn*++zZGX3S}3=l^}!*}r0 z{r#WoQ$@BP33KGgG^?R(DmeD`yna{wW)pa>aD zBUKm~k`lpl3bcO-MoUH>a{+b{^uZmTSHklwcs>I8%N;5}7~tF+I%N2b2lIq$BEU?T zcrr}X5x@cC#*9?O{V2U4qQ>J!6Lbh7x&fEif>`DOlahDY;oPsF2_1Om0(0Kg6L6ov zJ2}L$AZ0V)?_22NFrYnh9vguRIVHB(bq5(-URkY+Ju0cddOZR+3E+~YXLu=sm*D|qn3aRw*b9=&kOLF02q3@?6M&J$gYaZ02x<<d?hwX*@&%79Mb25CR{UJ&ZmGF2_$Uq${orv5tlH*f%WfP5sXH z!fulXHkopHdf1D-GqB)C_#IL6&?jCnYiVRoQSHj-Ph9s}O~D4}RH(EBtq(6n-m)sp65 zi-lj1f%Rkt(N8fJ9uN$-E}t+3J)I0OU|Z~p9cU#FI3Nh56$f}K7^uz`L);W&2qBXZ z#8S*Lpbp5aTw~cO0d122RxO}_Bs)78NQ#406Y!g`cQZ8G37SR#%*w&ulgH7Ig2I&- zg25CLz}a$eQv~-c8=C?IyoGD016>keKXdE!uss3ASUhmkBdEW@p$=OQ5ni5y2xM6s z)||${bR59o<))BfX7bwNU=U(WFeo5YAlz%v(R>)s&@>VEi5^M7Vqmu>Fjb2|Ld1Yv zDhA6phVIs6_ai2CfQS+h!5qNQaTvwLl3<`dH<%+hmMX0t%zrabNVZT3Zm)(Oq(ftN z(7*)f>Lf^yfe~jw{h3fc9P*Yxk8NNEe=2cnyo;w_Z6s6Gl zdIva!-vN9TK$9h4;;5cX;|siQPl3`oP;(7*y_B2N3&x~HI&6S~zUF}K2|@VrZQV>w(~9WX7EvF&^7!CmUaMsY8(!Fi~`BB8mbfb3t>Y{7(& zpAjP9SVGq3bfPf{Q&5SPtugG1x*bg@awytD+BeBC4?OFT`NHG%5X?#RRO>Ilxpw z7fdejfo>(xb(ta78~}zOfV02g24}?G#1@s*VfVR0JuG`~4mO%AH>980MMyxV6ocjn za09c^Xzm&cjQ;75m4FKqT_d0oP_A zN{X>D(D+IKv^=0x!-px{%{+}Ms_S5;anv8euvfu17}!-V1>AP177PvdgD&{(HN$oR zciHfWe z6Ug`whJC))(LGhO*3n_u@eC(hm2xRM^Dvy;zlTwbWf)5!pc+?WOcxo&Kq{bH^C|2w z8MU`ez;vmm=x52a`}g=%qcRzNpg_nDt1h5cSJ0`+`8t!a`DSHOhEsVyJDE41dy|I^ zmr>Xm74!SHRj@`UpD>Ve=*D;~?qyqGxKvtbZ5vDYCl~bEh%K-c#j?Yy3g~+z4EqEj z9+e{`4#&`j-~t92q@qhO3yTUJ`!)~acs;{XYN_kMIcZiG%yeE)(Mt(F$-P<69DacP+<;;)#ZS49VEMcv9Pz-p4x``~u4*v7D`Dr`?!ND>g4lZT@m_PHbX8Gfu?Pg3Ylw zR^j_~>kNZAYR|9U$bHe84@K#>0&6QHI459G-15aS z*8RD+aNiNi<;$ej)>h_(-=~DIMjHn1;frSU!Kl7)*WHhQc%db43j&e_G2U(~KS-q|oz zN-QC_;?n-Z@%_%m z;WA>Wq=?2<8lQ1HBfL0m#n$x={2lJ`l8c!YKP=X4)|=s-ZJb{q6h9bo^X$@@hfnsk zsIM4#f8ohlvR?h#>nbn<^WU@TuB?ArK4m2A+snK9L%$aX&wRZy$6$`K|0dXCGy27k zLDcioO>di~ptsG-lHaOW40$6O+)0sA%cvd|HrPZ?y*^W2G@vzK;9y&7s_QbJW|?f@ z1Q7vPXC(13)UAXjikH&uk~uz+ocY|ce&gMmgq%gCg*IvydwiWo@7mxZ7q0@n8C9M` z+Uma*7+V=S3f#Auhggcjta@$0z3rR|7lohNV)|o~_xs5F-Z94g%`X)DxYjNyNiW=L zu|PnKxNW#BPu-vS78ePPE|;F>U{)s0`Wu3!y_Y0x>wgyWi)t#+^%^(dni4CZ+sbsy z!sc6@jWH=z3flqA z3DnQ1M5oqzyW>I%s%|z|Yn`>u$?>HBJNI7ej;`F^f2SR`LA-LHSYAY{l4FA46aB*4 zxF%IR2Ga;u?JB4g2>xR+E3vR(D)r!5&bRVKmYv-ec2#m{-1bi41I9<3H_q#Lc7#h-D%|~`!V-dcr6+JVY^?f zeLVM$8SIJO-!W&2n5VP0ZkVIfidE+m2F9D73*CNT)&4z+L!3|i7Gvt1SeKgQvU}}? z^r9cuH^XkeA5Ny^ZLc&qQ8xt*)~_#EO*J4&1U@a)uk?Aece)NbBY7I;CV#>5O#Gmj ze7yvW&a#lZxJmVv9IRdtR4o^I?WT-92uIh~S1{+v>!&RmR(wNnD%p1g_wwtN2Q&L7 zv&Jm$wF)m?ccr6(J~sZg(Yn(MxH22O+OGr`%MVia$^@%y1ND;lJSqhJouuT-6f7LE zFlsObKDv1EveWvL;8-ke`%`<=pOFeq+>wuMP4pt-Rkc!gHWtVSd*>z@J|yPoI7F;l`K8 zS;yNJ21&SPU%fgv<@mGBL%(U6@YS2!M;u=IslI7j9PRjV^I!D4jw9&Zf-Upjz4;2G z*~%!_7fBf|a*AQOfH9;rUoT5evosSD@1_Z>&B=6SN?U{id6!SSxCr?qNxlwW5h` zoD~e|10)|aGZpSQM2I2FVe%T$?E$-vFl7zsaL}1}rl1kMdjo(34QNT2*#ummLi+~2 z*@w%N2=_Q3C8P>8*lg8R0#l%@nNDu(WI3wtbJ&5MBS-sE?$2Oz zh+w^Ta3+G0VIz5x7K@~}=jQ7ZN) zx>&J!9u*?YE8p~8M3rKK$w&QksZtu8><|OEnm%CUFshU)=)CPbmWojYY@Y$yRE#39 z*iR7^V}fI@)#Ir$3LFg-pGO6`JWP1?8%+8R+2v+0r3l`j$&_Gw*((%3>8=kAdx6R= ztLmg3=vdZDGrIH{B6~%bJwq4&DDiF#a09xG-KP=)CE{J49?g=e zQE&ai1d99-sykX!!o(Vpdz`~)2G-PtfQMc0@KI8bSV@ck7W7j5x}L#%fHq2PYMIpyD8}wL4$G|pt*AM3nZ;2f zCh!4Xr$TkFz6-{KRcPk$plsYsh1`GqV>5nLiQbNoT*OP2NPl~5CmyUsX_j?DLasn! z`uhn)jRLK#U!6&mDbV@#LlzSf1sZZLwUkI!pbqQib%a=frcQ5LK;$UkGe}uDAyc5d zW*bLbszOEk7w}lT22|VIW*kHQ0HtrG9AgL`psczJ5}K?99T);B(nrW>TDu)4d!kL3 zKG!lV_EMWJeXnIyDSQT|A+uM=TjDS6)M7){fxHJTai9yHp{I!)YxunDx^f&QeS*Am zL;^U!Dfaj=O#T>EoSc(Okv&2TK?i)}--_fqD|b@c9-`Zgr#tA9CiL#uP7$N+0ota% z=FXHhqQ@SY8<A0x5rdDIv-gsD138#|Uc$61Yx2O4usUeHQN!!B?QR z48uQ&HaXgEoHd&$R-mfWV}}!M3RKvZtimNgIW40xN?k93PsS?)3f@al>!SM=CD=$H zE={t>P7M}3O;!~j>Qs-uxiQiRD>V@K4__$6B>IA6uaxQF?+Y%C*tHG|))f?Y+_^!K z(FM;rC6BRSwqU8?Sh`d)KoFkzhY2Ny5OAxO%)_qt7c}+CU4hZf1sW`3@6iB(NcJaM zDqb8!fs1uUs*`Fcvezh4DiXXxcayQ{l!`Yfn8M#k;k-eKRc-mw*C@Z#K87mmMB?yu zWmH}#I{*0WNowg!G{gcwOO?W@4gpgJ(qdkqMGdRNY4y*wL=0ctW|+P>NUQEZRT1Z$ z==^8sXzfoE>D5oskO>bL(|J!(#}pJwuYZbiek^`MZ)-#ML7da8+tFt3(0g<^&mxeM z{S{XKWMQ(cycO*_cYH9lx)m)bhhxMftq3HD1+}gf+17|dXl*U%_6}fS-b0k0(C-zk ztr^uXpZJc}1jhyD9GpRSYeuF^#SiD`_Q2WXdQ!G1>Y19Y)pGJ{#)h?bbR zmNVNLQ2*T%zGii(k?x`GxvX+EV&6Ub9Va3JvsfK;bJASgn1{tl&G_~+=#GMqSX_k z;2IGn`sEn*2KQGYtCNH7<2g!XlTBTR%ay1`P@rUWs?g4Fle1VAYE+c5WfB9vOw@>a zUb7bYvWHzW`50C2aj|0v+K}M%-9z+>cC=yyC4eq}+NC-=kY(7;TQorjI&uj_nBXO< zOfon~mAyn7H6ZBJaxV6!OU1m?PP&vL(5O_5CeTPQDP5qE)fhvdIRAYkCS?nr4F}OE zB?MZEf)9pcD{LW}@%T!6IYqz}cqiLR83HSl)237bO)#L&Rz?-9-uv8}%7X(_#3BLQ zB6FzI7?Zt6N9W&MOXXpL#3s7*4J<#@y+(|!FbV-2^YObue|pR_beN;Apv&7)-Rx`U z=rQfuImOyh!unqbMnxMsuAhus^PZrY3tRS5B#)YHy#x=DTmLb$Y1J*Lao+$njniT( z#pyB4L~utwrL75#GG@G{CpV#nNB9m#%mbtx>G+V**@%)+s25Yxh_HPLXP8wD==e6r zC{~>sMYIn6iRGe3XD@#{1TR#fn+YX(I7fy4>@{%@eoBcrV)ui1jS{&4ZxC)ubX;W& z_sc5LF}58d)C!cJSm{SxRiMawE$&3C0@Vk?9W^%<=&0k@u|%~3InD9%C+Za_W5KK+ z@oFWC;}$K$+mxu?85*omq3VadTbYsuwBZ+G0bI?jopoLl%3|$zX7JijsN=;y=)87B zw~Un0rS0gT+&h|553>r=hOk$ni`m>1Vw(cdOK+bd%s{SFUR)yR3Pd~dxRFrH(Wv=F z?+BS3-5xJ`Mbya=nwW8y=#ZoE(18_1utGZ{yvJI7#(SitDqah^dg3)=wW-neYo#?T zH#LeDuG^0vQzEYit}}^J1saz-vX-z=pjMfCe|E7PT{~A8&9;}@m4onxZ*w);x$Oxm zEw)=u$D7e2>pXLYTNCOt^qw`dq7l_lHhsmcYDA}T#U*BW0~+?k&70MvMrBhsEoJ4X z5o?g@57t{1+A`)sKYYCk^;W$Nz{6Asd*r(a?^L4f$?;3_gaOo>LBX6O~A|s`Vx=RibrzPG|9QCF%$B{KI%;H9LGxPErrnmt;Ki+6PB{vEJj<3X zl_RrbO@r}b6{2nW$_I~8Au8CYjOsQN)AAsI(ewaqi37IfDUdZYe-*8`1sQ#}Y#Ocf zIjU*?eJ)+}6lrYTckkig=#V5@#dGbjWp9yg=UYBC_!TM$@!NoL;3gy6?=l$G5764@ zakebu2K4i9-g8)GYNX6F-p3NDkxlcuv#fq7-`a18SF2EX zFRyznOpShe8o7}bqeg1`))ZE?8kJkj8pD#SQEfP3%HlVm5Xt^6OnHOWwyt=jx!jHs z)23w(NgFZ}5p9brnvv)4N!M7qYIN^Ourag5v)eY#6Ixu48D%5oUJBe2) z(SF*4C3uGto!gzMi`S?SfAPW#EHgE_)TAHBI;KV$WyeOaI@KuKr|bnYrU7kndiM>} ztPz#pTlp=c6i(w(X8%c*JVYnbZyv@ELOa9n+{N>h=s@y_kwl9ERWA#iL>yM2cbiVm zA&L~}`slvPh^Yz`(_ylW7z2cCJ9i0@u0YTKyqZHSQJ@`;GNpx&x^5HCm-Sow@@)p!;bZr7n-hzhB z$oPdOf)kcw{@g^%X+iiNizxcUW;Bj{^k@31CNy%Sxdp?e2^FqAJdd&d0eWz{qmWVd z0Br}w&S+{xtcUL{n0p%0R-Kj!O#epowf)s~%+?0Q$4%&Z2a2jZ4> zUX7wQvSzW?tI^Gy19q_j)#wN~z4$2=%HUb+;73(RpZj_szEp*tM0t$HQ&lMb*^D&Y zT7{&yzRtysR7mbnT7h2&<<@+l99Jq)=`_z@@r_D!KWtkqzD0=)<^^2G3zewc#pfZO z0CWbvD&e6-q?bXAR-%JK8*`$c5|MI^7^XzY>*+DMHVMdLiwdi4BOGz63-Me-QwvOEr8ZI96{y*s9ioHjIQ zXRmsCaJ$wtmOn#RJzb8{Dmsuw+pAc5aI-d=AZS9?-U(vH%?C(#=E=hhIN~-Hd^qOK zMl^R~pFzy>M)b5}Oe8b75#7C!pUJdsL_uqQJ;mJ9fYO!fxvWw(V&v#p<7Fz8%NaQi z_XmZuY}iu#sSwyGvUcRv%{CDkPK`({J09GL|8VkI#ej9@Jaz|ks7V?T%5|H;*V#po3r8S+?hG8E)^xBWs1 zWe7C%DQQQG9q8`V=~RKn#g@0BA+On&v3G32lK$6~(lu;B;Jg=bH9;GiQ~yIGrIsaV z;zv)$Bu`MyioSg)!H<#6nGKgIZjVrlCHEf1_7URjy4p(Nz>&?{e^^P0fs<$!as6qX zEojs=%i%P$hgyHKsRh0M?eSTfTMO#9|@s6Df+5zU!D)SsEqh;llo9bncq zpaZ99=a}2TsNOL`&79MK9zslp<==ox$H6%W+y?Z3anqNjR-;ihBd4+UsZoO9MILK4 zy#EnY!pc*lcQNuGS;N%mNAq+U%O3R1D}!d%V^GAtZVq^n3Rz9QF%&OQp#yg>PsMFP zFSXsBjq8J41Hpwq0ax#Q^8x&*62b6K;+vI7x@m?2&r~8MxLEi!CE9Y`z2-gc4c6%RsW0$xK#!`xW_${`kj7SWJR8bQD7%Hv18X+y{!+Xh zoRNsV{&=_wjd-@(9nVxDx3DG8Soc+^^6j?UEV>%qc<+9m#Z@EYxjQ$pCack+y6Q!& zxoXrYIXi>3O^psxJ;PZS)hKLV+YlDJ0Zsi4F6nVjAk*I*_A=`mP~h=f zjm(?|v>xJwEKvg*UT58(WdVKU>z!oTs?m@G8=kP#DpUeAjAyBk%h|d}+(U(0tELv< zbkNBVb-@oSk+48{244p@$Ltz4o~}f<+d9S&mlX)h{XU8~3J%+&0VPBlIB0Iqb`zr& zXj#8sju7^s`-4{OBSwG&2k{2NQGq~Yo+eBofVRHlIAN(kzn%2hON>&WB47@}Nr9+l zzgG}J3dGSlw4Lx#pwT~vt|p=tNaW^_LzE~Wa=J8|Sgt^$`Z)&^=M-qx$-~~nZ3Q~V zIdc@>r$ohD1e@@iN_1h;*g6(ZjWlt`&L;@ADBR?kC_lf~?L%zI4F3>aGR181?x~tB z3VS#mgFkFhV9$fa78yo2j*(Gt>k1iF*F`R)alCjZ=*D3&Cm3c46(^V$S@ILC-cn8h z-D-)zgJ71!z1DVB)l?n(gYsG({wbcPu5*3xe7)iF7*G8nP1T;TrJ#Pk0m5c@a2RH# zQi_MJ(2MXkbF4KKS#LgNhnLztGzxe4^yz^oSxKsC>@adC&jBU8=@`9ASumSd zt>!G&sjLeJdqHSRZuQS}95ha6QO7;A8>L;2fK8NL4!c9E{9zvJng*aG4V zZ{_DVx;+!Pio}_E!)_)2pf`MM7Tl(`M%rtso4CeN-@QQ`r$78b#e6SX|82cWM&Mcd zms00cZxvC52d@NjY-{3+*-wn0(nfuK>dHy>+&wayPE6eozm4k9ym+&I^p{ zsrRy;PaEA?$MYQhy7lDmy@E!yd!cu4X{CdlPjN~G&bnDNq3f~WQlV6~;-v8T-GX`{ zaV_&VUQO$P-$vQD3F_E`JFsO2qiw^AEp;3daJC*p5j^tSQ3O4aSt5clfV``4SqxqHsg1vzgo}B!2H6cM)7(%& z{(_6-IC`lGzxtQghph}4t{^XY3#sm9Ve2Ow7c{B!pui{TEj`RvSn{kW*wc{V9kPC6 z@UoC1i(h@6W-rMP3%z1{$aq|U`*Y*45IbZh3at1dD@;@pmTAxs}u> zIF3*hrnu%F9_QZJdiu`5pILyj)xGhzm-p9)VNEfbHSqbhzG?Tr@nuCHY54Vq zg*^Y;h#ci|m&u|T2Mt%atMjkkF>F{nt6yI8&LflUDo>r9JeywgvfrG_vZpJErFKS} zK3w_sZS>sNu$7(m_IdA;dGp>=#ABpaaW|ed-84BSJ0LQXS8&t1b6tVX_7gGl^+(&9 z6dG>NS`Qbibw)1Ol#-}eFd?@{;lF0mYD;%@!h%&reVB~c;lIv+>(o|`8h<^#X$~G& z%v>Zc$@Z1GS}n}8Zxb){TbpCG$nM>C<)Q&)vbe=VhCQ=dBKy@g{wrsuFy8+$9hjGW z&1_l7v)0;zsJS=As;DO%&J_>6=k4{LHf@FeW`tKq+*~8eV2>#8yCQ0oTgGyg_lTv{ z{g-|HT6|#{b7TIQpeqzR!uOV~*`(5w#H)&APouS=%Y6#2SR|RnJw3ZzX_?}?LUDGp z_2iM)R!8(2>*VLV^2nw98}vZ-b8EjzLUSWGletM}!|rFPmitb{O(&JDuvL_e`{^4z z-^XUVO`5CS@@*@bqLfNn)YN;G zDSDssM5})9m(8SwlMu(?u0XGS%q!)j>wA! z@3UEFHf%_ZJUy=5W?kuoeKoV!&K`2K`SSM1M}PeKZ2C{r=Nww=w#MOG6Y=c=^}gZb z0*he!tO400!#I&axQYdB=42%rTUyWID zgJR#c@A3Wn_Z0a0l+y_h?-~LHf0!mu!IS(W&as+g3ho4WC<~xZh%oKI!iFj7QW!cDq0pkF|fR=qicy_G&=m+ zWorv(W59w8G;TsSf7{CyGh=4PCnu)Gnpk5dx&x?YdYS35lFa1kSELrdaI69P}C1gPXvb0{>^z_8s^u)}}Xi0pQ zHjNEOWM_To23d#}my)2(qQz!T>nfBf$w-V%(AFZ`WX_zPnw z8Ht%)%^IboNm5f16QZFY^e8nYD;M_iLSfw$7)5eow5BWCBqAjB4RheTI5;|)eew)EU~Uha zU@#LZxs8|ue@2-~3#sNza~s$U3={Mzl&*QwHeX0FT|%*GrPv&&kN{}o{KL)2Up+S& z_<4)$u6}o$W^LQG6w`AQo7YsEb5uBrl)MM6pLYlxMf%~1^b*@+BE* zp;jp9rU%wjY-F=-%IM^nj9@rU!}!A--GcdiC%!A6&o}Ezb8&R`gjW~%&+iGYsq`xC z^C5qjs!z#O3%8A8+DWk~+)S}KU7^LLBsU+GEp8Cw$)W2V`~;y0+2#PNt7d zZLaTw`PoAGaGtAR>c{h3hX_a{!USX3XQ@3w>=}ulu#y&}l4h!=+9;1wZ1()98AlhP z4RdgG`-JG6djip&=;&P}Lb9f|{bHJFJ=JE#&lH=|W8{!LG`;_Fi+lIfp5T2xqz@SU zocTW@vck${*L8}G94Ork4+@IVyFD)j5SjIoeQsst&xk~1_tbw5^%L=;1^IXd#dKq= z&AAGyjZ{IxoCphkwk~l1bGGq5UqxP_24?rve-4wBU|L|MvrJzE+8k@A+H9;PxlM!A z@-J^&@1FWUfCVyA3+rmGX-%-rX&KF?Y&i{Jb-%-%#AWx?e-4ZNmlW25d|F8{y}O2D zQ+=Iob6!CL)l$trI@!3JZ2X*TK9Fdaq}Kx67-;%pn9a@Q44bM~bO6`=cqwv>-BbVl z7(amfT$gB}%63ysi>KODKWEr%tY!e%?q7P4V7sUOd$1pvqX%`>HDW1fnt3)aUNUXA zuY<#tdI;f=uzL*b{2L5o<^!0R`R58z3-mS3w1{eRcP(p_*_T$Gxdo^)QlpLfe7d?C z`%9I6Z0Rx0M)}=8Y{~TgJ6%w(Hn?fsCKhNxTgyL48nMhVpHz_4CH6i+Mv$dc#CJ$LXJ3S?S zdO{*uF+Dp?lKU}Zdfe2+_$)F#Eio$=?5|iTo}QhW`i(vB6X+T7kx-dogSMt%%%I7Kgsx4gZ{#z?B0hS3VhLp|0UW#v0J-C|04503t4L!cL(}c z`WNs%!RhA&_DROSLiS(QcXyzl=Y0YAe~DtSA-V(XO8f#6*yue`)5qk0HN4M!hwcEo zWq$$s6D0m$VfQaLr914;^Zvtt!Ix8j9k)ykmSZ@WK5q$0-c$dkqJ=}GS$g>2!Dv961aUSAq^$ljG zD+~<{iWs2{`j{>0Ka~8*6$T20!VvgR{)`n0U4$M}gg!#y6rtx7O`36=-P4P?XN=tQ@#HEF%Ci;fw`AwZZCBl)P>E}6SYMfJ!V_bx*HqALRB`(b; zD{7qIFv!b;=UMSi$ukpt+^0o~LsR`y$o8TnQ4u-Q#7?fsaS`JIjxZ%2p5sM<)8m{& zlcIcm_)wp0dsbwGE7S{2N)V;a>T1(5E-e*cerU_pF;48^Ds~QajrY~I73VZ&MpQ%~ zUkl4IHNn@1gq=+GIW9dsGfo8k7Jc5�bZfIHy@D{+_~=sI=77IN#8uPsj0Te!Q;_ z;L0cOQ^y`(%e&G)551FcxuL#6$Skv#~DfD z$rr}po8#{9NzTJxIDs~&MTy5`CPu*AIJ(b@hjDkcpB5Vto*Cuio*fzCsBJ$zoSeVh zI8iFhQ9@F@XbkjcykrK)Hl+Vdb0@_H-9rIToNIFRm&5Z=yi=6{q<08h)jMKK?y}y57_P;gfGvh^}k~k;V z541(nTMzwopOxU7Ix{Y{Yc5IpP4`F!K1hyt{A7Ls|FIE)Goye8Ng4t=%ZeAJerTKI zg_)5My^M7JAK)`RkPma7@%MB7S$0Gq{}rxcBV7N7{NOk< zE-l;@{^tR$%=$3*J;;|Vpu^O}2-nnj=fI?R-!9qJV;{fZ%kFgc#hm{m`IiYY7I@Yp z7ijozWpo_KJdop`%Ax-n%|*hOy?>`WKIZ-R@Rc0zl&PWV9_I36-hWN*rU$~DgeQYO z_*XQR2Rb1YWcdFN`f}3R2wK_L1I|9n?+I_8@m_bDm&B!i)MfujhQ&F1q=HO`dZDR+ zySy&F+=Co*pA{A1nnc0}T@3uGmEZr3KE{F#5$Btl3iC?hhm^OOvEoqIzvF{{S^mGr z8xm4i#`=aQ#YMPhM~SEX9iQ}At|z=krn!HxBYLn?z{cpZ+y0r2lA0%W%8|s2!zEFF zYnyZ{)03P7d(k~pI~U#c>L-2fksh^nwGTgmwA0eVfwnaE_Hfds0((0*D#C{!=j=z? zT3{3AK$$Vg@#)jFwz4P{p2y5g$kpgxC!ou`SirT$&YbF(=RZ}L9WZVT*ppyaf3#Jj zQsdJDHM*Fzw*yjKpj<#olGfAkC0&6JW#Mrg`JOBc0MBBI7d-lb`yg~A-G{Lup5QO= zNjD;td>77wcdzlJuQ8o;Lqs9qR(SZ4?>^*v5ZRLFH1c;W`O8ZK5Hg^>;Jl$jN%tfq zQj;hm6F<5>P>W3U{bVl4>;Nyfp+nt-Lz9LMg*Ok6WHM3f)M)$}%`4e)fCqe=;G3K( zcGBu$O;)g`{;Uu6g*lp3P5(ZruNnW}@e}kcqN~2A(08gk*&jfZr)E%q4e~|vTl0$# zzddHg`-W$Woxr{T8$AkiEtxedc(``_q;PtKH_i z%f^TC$3Y!U`6(VkGE_h|>=CM|^deyp#ZZ*5TGukmUo(F1&RQm^K?0uQEtuq&Zq7~&K%o}nEo zP@gbx>gWB@5c#M46G`^xV;_M3$?_p2_Mz+0PP~v5P~_x)>_o_T4H1%okWcZc5j~>7 z>`1XkUaYS>U+hHsv*XD^P!*aapR_+;V`e-_Y{rc2#4Lw+iNrw@iB;EelJ0z literal 0 HcmV?d00001 diff --git a/Data/2_Silver_Processed/Options_Market_Data/2026-04-12/SPY_options_2026-04-12.parquet b/Data/2_Silver_Processed/Options_Market_Data/2026-04-12/SPY_options_2026-04-12.parquet new file mode 100644 index 0000000000000000000000000000000000000000..ed0d485549b1f6a8465c5de69466bf6519ce7b7a GIT binary patch literal 106045 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 b#Icl5@4(&?*qZad_=oGX!QuQFf%g9cb=QiW literal 0 HcmV?d00001 diff --git a/Data/2_Silver_Processed/Options_Market_Data/2026-04-14/GLD_options_2026-04-14.parquet b/Data/2_Silver_Processed/Options_Market_Data/2026-04-14/GLD_options_2026-04-14.parquet new file mode 100644 index 0000000000000000000000000000000000000000..a197d781fbeb36e58ddcbb429ac40c678af3edd0 GIT binary patch literal 95137 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

F!t0Vk}icHbh8W-B;dHb zww|n%Ku`3O4Lv0=ZQ&;i!ypN`|7fx_^pgPBGJL*aKMB0Xy8ZM4C zoGpR69ff@iH%dUExNwOyl|o5W>`F3D3OJqj3+E{yY3kK{K}HdjAY9>kR0FaqI{Jl` zuw--DICf(VFv2uUSxI#;aOz}R{m4rA<_aq~y2#H&-5tl(s)kkl&khj86@w#ANZ}&| zEIGG!voKNtdoF0M6z*4m=Su6hf_X(ijTpUN7^i^dveTc11#-Y?{9M=}hbEl(M3Nk0 z@1!gy2FoGKc;!x2eH;}IBFbbyKa-b0)XAV32_E9647|MFt|WBOU-VzmM$C}GX9?pS zFbq1n$-*fG>PGcY>b+w< zOREmF_6gT=SW377)u*_ARWPY>7w{+*Fh)f@d6WUF$4I_b8H~8LrIepg3c+iOg9N6< zpfbxsVG(?sS$9kzDFWxK`PYT!3YelSt`c_2LA4x-gK}`3)!UwMmjew6D`J`)n8^PL zTjZd+3?fGk+<^g>#2Pt_zi28V7Rg~6$qgV#Ian@UBqqMfz^&(?3q&@~>nB;yh%GWm zKz@fbmI1nzCL|r7$3Vy7|lcC`}Pkg#C4DdA<))QKE7C0u(T+s0%!!olyY zlQ=HOi=^>GdG_>SEf_ShPz-8`_2{YeS$k$&P_R)VJ6{afmT>cMhI z-gwR;BHJn2iKW{2MPMM{3B)Hb^O(0zGE4j9C)aKzp=E7zcC<7yLdx`juKF`Cx;uvmw-ja*9-&q z55agn2;LSLY6?db z!R5)>*1|Rg+`n|#OPH+yw;Q|G33n&}*}>C7kpfC4oj5BTtANLEm9K^6a&Q^?^trHI z4ng|+Ukabg!SDW&7s6Uxzg6l+#7;RJ{jlR4kt2ggn;mZv2W6lz9(9MLo_R+&$pGEx&xEb4il6D~4HM#r0Q zmBBQPMV-VH8H`*L(?ZOXL3DP_3t~R%7kW??5rjM~@|(m;8T5K^EtfbhgRc=)*~A4I z*gl$`Mcj}9@hC*H91wQC5?0Cqy_DNRBL%QRT=Ipa0z_p=1BLV=;M`I?6C@M?S($oCkXrbXA$djzDMC?)v*&U?hxssY}O=7Fr} zI%uxG(^s9>0K2>Bxi>IblQvLYs{!&+y{lU`Ku71~xlETv==1IUYKrq4DA-W+h@RaH zr{|CB$8cx^^m;9+maicJ4Gmq^2E%rKy-g{74f;M-1$4i5IF7iM;oJuIAAak}NWk@p zD2=XY>*ig>E#3Z^$E$8XEAJJ=Hte0PCV2<0I1lJX$nUD;d9*`&<%V2(ayv*oZ{DCN zUjwRRD+aF(l5W^Mph#XrGb$oV@EcIkxpd_V*s#pw6kXX2ap+Jo+Zw>4?7TKByAJmE z81|5rTnl05oKChx37K_6)%4n)L)3TnV6J&JXywo*a9Pz5Jj6ean_LCow{=$NCs#ns zo4cp=l@*|gIGNX04hz)g_vM*afaE}|8&6pdxfp2Rxs(IaIdgfX)YJP}0#Zu`x#h9nh;jIrddQGu%b?8KYY^Ef1&dYJ zEXa3KSd_X%M3zV)b~@FPY?DIBH48KHhZH6vUr9DfK?Pq(jtmTjRGE@g^ve*Ck%MJ0 z`;7BPVj`{^q~*!sGB84#o*X8F1tmjDi8V4nnrA*SLJmD~ViO@USc7~UaR70#v0$qMHwubb#i^ua>mTR^U!u+E2~$C2YSLF+xrF5|)+CTTFL*0jYj- zj2RZl_q#kFrcQ5wO0JI;D-72?2EJGaYk`OHFxKQ+7}PGlz#dTp_N!7IIIc>NOk+-B zm)3O6Qw~iDDjI|vSPd$=K>uzfM2&mZrXN-Tin51F9;X~!(x=z+HS8-BKt(uQGf?%*1*7eZptLP6k}0e@JT?Y{W1NISBQ?oiUBHLjMSPMY4|! zJkb9qKnCB9zr80W$zc8OU+M^N86>(&UJ|Hh{weBy_1*q;QcIU!U}iRg5(5j&1pJHmhdLN*U84g}$#@MZ zlfHXU0^h(E1lDxt_Aa~5Sb*^a^?BjcoLBG}!#`?~@1bd%cD@?!7d?}6?RR=~d$(TC zdkZ+6)wJ}N-SG&cX5egPS<@3+jz3FWMt_9bJC`_tenE;|6R}tZ5ombG0r>neEJpUmcoq6dWCiL? z5XR>rCll@`MyH4DLtn$GCC@*M~eLg=GIPbI6NQ5I+4HK<<@7!WJFh zv{WfnmV~b&W2C_Qjp0wGAWwh}d)j&_EV#SYi##fYgV#FdlG*6zU;v(sMgPWmSO~dY z3URNE){tAJuzId@Aekfu`e<`c@)(|vdW)Ej_$U3Q51A%~U?g72eTc^uX4A-gDPXw2 zPWTdW+K{8}Jf4j@^eVTlR9|c^B=|&jWSq9 zuU$=O$^mJ3I&0y{gG+~LUtdBT>R*Oe z6U1Y|-_H zaQW>w-H*uA;X2n_TMdbvB^vyPWnKI~e^Duzpd)3ls040)sr%hvSP3-agfX~W0utY% zCWDS*Xj~9`%3xXvZ0yK(5x5pZVa~UKg4kjhoVg-JP*()reYDOA@{1tt&58Shv?8d~ z9HkVjEdpNI(+`4~MbPG=+bmdC1XiPt_Y-mu2O@ncG$;ZSgDP8LtpYwipS(txsDQgh z*&zq_DZmZ`BEl4mqfl0a3&Ry~%wFerp_u~qhKb6AU*sUXJm`^7M*(S=mm$0@hv1#Z zdJ&n(!_KlCkh)n8^rkp-A_AYo2$^fDE$U6=Z-~Bf_&BX_eJWiJtnZkpphSH&RBcZx z;@s0!YYwMAltH1c&AC*>>k%6z7gNv3z|WO)jmSX#C>U@*br-G&^M2*TD#YihC8fk_ z84UaW+kFDt>3LyH;<6k%2d%m$9H0P)ho@Ev_bNb^p&Kd?76a01Uknt*kcWY7erYM3 zL3#Z8Qt*r?Z|UEy0E8Ryyy$WWz(9n$c|EwCOY&h^Vm^Yx!+@FH2+vo>#?yHn-T4d& z?clTeR1=-m-W@j(y#iBa_#UMsEvqi+DXY8u zRBmn+_&vU=t6xwFYV=i|yjIM|Fy9o%rD6ODhCP@H^NsK-=4qrtxzt9(jFCDB2^BeftKDxKg>^|PK_kq%K+g)IPqE5 z#Y+;OWWZT-=Q43p1{vii>Qd2e%tM-r?1}yg8pgC1DO95#CflVTb6qzkty&65+f7eH zo??9UsoCTujN1t|dZuMayKre5>WjctOV+1tlEQ^G6^DvG|&XU4w zyH%;A6XLuRyY{Bdlmd2_NY0Z2r$3w|M@eA-0t<33eh+yHa<~*;v~M^-I!mEYBYP*g z2<4m~zLgA;f-CaCj2&KC2E=Pp!Iy`VYQY{$WL4IQLXlE z*Zii3yaj~mv*~v`V11#;hrYL?I}Y5|4oMgopdV?6@vquS=+^C!@^XYsyy+V>qZ`HW zZ3C4%5MKWkPF;8tOR;zZ2v?kF5v{On|Js8zdMhmd@o2Kz=N1UzzRyu}Z-G^V@6BRV zHbFW%kc`<)un8wDGr19H+gy$@D>3fkdAN9j6Xuz$ee0$!L3?w`c%}NWdf-%EJD~1e z4_26nrT$wznCC~GPM~hFt!n&0mBJpHFH11*r6})u~KWn@tSW3wby6pwRvhWE3y`XF~D#Ct{voT zKa+@!pTKy{aS5AQ1Nb=JvkQ@T!*#))Rs+J9wN{(}^%6E6#{6oFEeSSBh0qxpzD4YogTc|&ZUo37=g#8Y#B;=37`RH^D1#d-Hoi(l9A*0Yd}r!p z#AlZ^o)Ft)(5|lbjEIy$J;o)7+sG4OK!9jQzvGGf2qIVx$`^Ys2(1*Ld!HL26f0oz zhAl&c-xY9S_|~U_#3DerVl3ES3_ih0Hw;FUz)Z%`M1xS|lc%hl#dj}*N24k#d0ORA zpF7ir$EtwK6@y3UC!>BqVpXrc8eD%LnXT7c4cUUrgE(PI7*$}}M_t$eQ4ig2vodPI zo&IA!JGTZdU;vF}UI(T~v@lAW;HXB+e5P|F96?3NF1Id8=K%MI)Y3|BTSf) zKAm3L(Vb`K(gBa$ZfDX9+TqOh3O|a+8~Cwjj~VW?0tbvRK$QLlO!V$^X_8h5xV`-* zP4W`VbKPgCwY5O&XU28vf>%Jn2gS^6fcN{VcB=>11554M@9LKIux8Zs)hu2e_!cgl z!g8;J2inWp*$O2%k4+Ec@RVK8MX%sFwC((mrPo&7g^Tr~tAUI7Rj;%fPJW?ea6_vg z@V8wOu4NUVd(gsVRRO|_Y5KvH&>S%Ey?!wI7gN2oc#akD^(^bVzIO#AXI2~VtScZu zmB1w~2X!Qvcy8r@wAwSCX*t9p;N&Nl!5a+p^Y50yz0>*=_@QOc`}a66zI_>R#O;~} zqEcut@!nyuu>_9iX0-~uivYt7cZCKD(89PBF%kLD&S9~{E3`w-%3>l+2I+y1^hh4! zYz%ae$C39%qA@K1aSzUGat!L#3A3-H8B0N@!}b~ZO#&<=%F{?Z??Li)Qh;%o>QOgI zeJR-ELL{F{0HfWHNCx63j8Bk#q%g(sS~_Vjg@WA~%g8-acz3ltmS~m1tuST};xy(3 zBH%KRl>q-<$P~f6;x4|Dx2POKj7&9nE*0?5P;;z)TqSVOj_PGq17+_XGreoiyYk{< z8kAk}%oyJqKzF#1tyu$XLE0jAP7O>7`P7STQ47)BvZw0Y`mT77djAFp@+Lp2wY`AB z3F#lH-&-LNWe~9KmYE>27;rfq78Dmj?n1w_f;&avpcbYf99aaxYU4rJsDP|z zMYDzZIG#wT39l#svlznNgo+`pw?d za$NrxpX^9Q{Oy2oMB=Ip!jLc{o*^%Yylmv@lj)QyI=wOvvtpx3NsbJ7@=(?>_nah32%erB~UcG zb%-Fc7}zHmLku)a!TRd+!@PiUNW}Oqe?S@JpgrausRGNR?m_H>H8A_i`e_^oe6E;B z#Ez(e?*j);n}J*pS_9Cj|7aE~_v<96fLx%0})VH3}Itii_;SifW85rYLK zpp@R%7F;L>Otah~pcli#_#Gl)y#g?NnJS!(I1&jS;X65`sjpp1m>~az_&If`914`? z>j-tkl_mZe#69GHBygKZ!Mr2HQ^YCsdod9x74cyj+Fb&llZrn}MgRM~`)3Iej`4XM znA8AS7vGSIe)s)OjLcAw4~|)*mxk+;yZ_~gH1so=I=VoXp&ym%FfZ+#6et;1E7LHJ z#Y5gL?KjM4YVN%*O^opf__8Yv@r!c$j(wyn;+iG&UbfQfOA}d6xE70^b#3FUTSZU^-T18pi8xR)1?J z3nV~6+(3@Q_z(gIa)K1JFmS9tuo84J--X|!3^s+fJUXzis0-f+?G&R*p-i1?%8swkRfk@TEI8OVuO{w3J z&qMp1dQjFCM@^kA0}QjgCfv~8#ce*6S}5zvk4htC&{NvnGtEQ>E%XuEq#^cG@=k;7 zhj@LY>FZQHKM?a%h{K5E^Bx^05Z6Z{Z$;pGvx>3xAO_*}{hl$@fK}SXljxnThV+>1 z8h%76m{xq+WRO?_Coxf0P*?=x4$L|vC@%tZ2j&u^kmpDILKGoyG0W#Uf$I(3P%f#D zxORz#Em@2>m5~=lhD#v_6S>lmPc(R^wS)9RzxCbQ<7qY+pL2MbnTEKt)qmS9Qcnt# z9iHZsTKIf0PC~xHxHiUj)80wI;K%s7v}#G0y&=Cypd14NX;KL&^=|(lFG|4eaq;K0 zYZ8!P_`)z+0+H`F_dIk^0;;s5Ll_@@ifQJDj!GZ{(+myq?=w_%hHm)05%?UMf&EUn zXKlDZ0{5Qk+8EB0KuBzSeOjdi@U_(}OT8S+zr42Em7Ix5`#jbkX$z|D1AlGpdTn(N zuTxj^=WDAPoBwM?8Tg7k=BPZ|o}t-lWM`f_Q0%lKE$Jq@w^>HkG@Zos$iBMa?5V-| zz0K!m&UB6ALgz9@g@ZL>Tw9-P&J7 zq0Pvo>1yqYwm0|Ejx)0B6K}b-k9DnfLUg35nQhEu_gbCgf=Dx~+cDF^YI~>W+M3%B z<+vu*GLKs`2Dl!Mot5oHKNEa!pog}`+`m+Wz3tu*v9_kC<`&*P z%lktUc4_)pY~ibav>Se~UDMBAjV4QGj?D7hF=0VnuhN1jtIM}{1clWJlzAdmg@%x% z391SWT*ofNz;RRsllAHKA}VOrj<_^|puM(h|z2fM_?x*7voHiE;L|>)l6j*KFifC!Ju|$b-$1L}e*^`uf`4hbRnfTkS_K(X_2ccn#)` zPO+|g^OKHSH}rRjiKS!=)1$VA514g(%dA2VCT+o1P4|bfvoGiGIUCk6(1X3*y~UDy zA?cpQQrju>BuDmMiksLoFh)(NlyI-yVDwy>aA#hlNIf^Q?_j@NHU4QY=GA)7UK^7& z7Jhcozh220vQGMV(Z|H_Bc{iOY-)eJI6g!-&%@SS%f(KcHj^H7*Gn*R7n?=z9kEZ- z*DSJs;aJU8yt}3jLpN{t)HE}wOMW0S8z;te%!twgU#pyxJC+A+IZ)Z`JL<-Z9V<4e9aOTGTHoy- zzcPNy!TQKP^ha~=hQ!`E*l67}S`rfvH@3eL-bJ4(_9(LI)tu3-?Yz@2DdTecr?1vwxFZlWK#f)d`OXcK;8|vfR zcl8?BIN{JH#e?x5{CjNbIC|*Y#whsK{%rGiwRFl8kx0$NC0sMqh<;niV7p2pcnTx+ zaRs(ou?dl5rMuWOGVQo_8uNloczs&y?RbwQZXyH{@figP- zon5g>Mtumjlas4!f^W7dW#~z#Y3p^8taSVKpBgiHR!jJvvysOv{QajaXi406lYZPX z#^2d{!0wc%k;g}z^q(3Sup29zo)}qUJ}pEip+~@oe!|d*X{#^DQ`?gIje8X{eS5I| zAy(Z9pbl_}u#;|N7HQk*#g2@!QHZqmm`@xOJ7Y&kQXI)R>F5;Tnw02x%wqM)QAO#- z$&ZqbTQz7+Tm6Wc_E|U6u5Z?iU0H5Zh8CT4*)zZ_Ghmjr=d4rX>$Bz@X3RdHSajNN z*1-8yoHD?Pvd_G~1h0mbvbDxA1Urg5<lzKEF0O`5_hG=XUL=~jm4klh2LD1Gh`FPzRzZN8{1o~zJoS@ z)9|2P+?~gC$c`|6;PIR5ENkAb=q-8-PxhUNeD3}1s22}Cdu`#(G%-6LGvl-u_d3rg zsXb}DhsBb0(G%Q9Tpk+#@Ys@dZKV%H++n+Rw0don(p+_IFC?}<^p3aYTYuK2Cp|Is ziJDRN$TXa{_fnzHkS%iyy=TXyq(=Joy*=qkfbYcvKD4Ey>%yOUz1@}C?mTbYTfWaG zW={ITDSi_K(W2&IoQ%G&n3HFg%aV&noEY~6u;9av46Bh@vwG-S zT_`UykGOQ&f4RwgL64Ga+&<^ly;RkH*mT#*>cXBUflDV;h-AmDE}Yr1e0fD=MK$wE z?!)Clp{EX1y^gwaxqz!J7R}0&nS1qp)HrX^?eRiJNRR*H-lDTZ%$N?y3^vne_g zzuIY8>dQq}MwH&0w&tRM@#@j6>oZEHjnKZDn&MnHVpabhYp?d%_j=8P>!o{+tUX(| z|IH@#vB59;g{5j&AGDNRs##~!C!bRr!#_OGSrL8_bM?+Qnp+rD`e_^fuE5B!&6{k1`xh20-+iq`|rk%3r z<_X<#;l28644=%+*Vks$MfslhFV8eg$YD$_-*W}1GGm`z}$Nhi7>9SROV(IIsUUn@Zze8+d%f?^@Be zy0uy{?)H7i84O3~BRcz%2bo!EZ<@BzME9uqJ${WxtlR0@H>W>d&saFa_4hj_trwbY z2F3fs&dCby)zW+MZH3zx7e=P$@f?Q6&+v_ZDc?rk?m2AyiMX1V+xf@x_6%RI?`O+?(MMaZdrU0`ag!PcHY>g+n~m|-&dlA}Y53^c}(<*bUovwMze3H{6*ZsrB){O3|DKU2I(mkgG zj}6?_G1>jT>)wkQK7*FWM9;4c;apWT3|?0@W%2i6WAikRTh1L>n5K0xIo`5yMSM)5 z_kdL?g@MP1A5xWre`@(6uM$yHzP3se}=)}R>7L(RJzTL04+n(va z4e&e^)yCPos*RS@79J60W10#2DFZ+c(O^$JFg`+1yOm z+$GU3ZYOqErMT9krl8(hdusmB36^wsr=01%r_v@acAc^PzPC>Qnf#d9Yi7jxDy-fq z%*R^N&dQvS%AT=3KylP$Tb6B}K{3So zZyN1I44nHoV7Bm}-kEokPtE&uu{f5VcxL(Pm-A~3=3ITc=j`fBFZaBTExFOM`rO7n z_KRP=C|R3Zdu|dXa2icx%I(*l*^z?+MSM=OeP}`UNT0mi-k6a$O)wH5)TH@tPmtG|fU{?q#xmT_hy$U*0Zd(1m_{uFt zQ1I4)mut?(=dw;ZX2dS5tgAf>1yj$4?0a0fa%9QXXIo!$Hfk-Li@ zEOg3^!E2s59c>MmgW<{O&AAm-Khle@KWD56^B++C_nH;6-fXB5EdKOVpQ75DoUSLK zcKH?*J*FO0$fHtuRMo}~U4Og$heI^sPw(LegNmC{j>i|0#SESv)xns8+X?3B_0^_Q zdg%$-1ZA_f7UiS13G2rXb!}Z6EJyM6$1p0zwI9VQgkp1mG7Km-LVPElqU0M}Eu@SP z|G*zr-}s~4+JQ53`=~2xyj$2}1nwr=NW4x}%csyp#Uetri zVi^VYz#fe0+8lhn95*YVh`;~1<&{9)Xo>yORejSw{@6^Vl2j^wTSTSK#h2WJSv~Yn z1pd%fU(uuUzxEzU;W1Y&@$*^ksb@;j)9g#*^;i|;8NAAGMd)I0&rqMf6lWoRq3Z~9 z)w<v(;vuf4i z;3c8mZJa>QRiS@ehUz3WFMsduLu#I@mi;_wRd9%pr+4?aRDCkntO#7a9J^Kh(_=-j zPtaojpirL>pH)A*)$v~*9O&=ky%F;Fiv#^v zu12}s?k5bjubw z2~eBlY|m5u`o}Im`~9^?&d=-qM zApPCPt-q3!1S+Y&w*Kc*|D<2KMRpWYxw*KyE}v5~OIE0aVls!XFLMnF-Jp9GU-gRY z68dZFe=by|!@8wiJ5J@c1({twMmLiv)lit~mGqSUDq-E@OA)K?@YmM=55iDQb_=V& zK;?FXneE-jFw1*J|KrYF|1PZS&i>N+p9|ysTN8K7JpPW#t!|{6T@$ODT_|9n(C+*C zkBY+nq96Y{bN-m6Kec_gz)m;r5io1Kr*4*TP94SlS{Fq%pue{M@AvqJxWC$yZmD~> zQn~qa&E6kinO%6T68q~mfGV-Sw*K#8|5zXYV6wVpC$&+znQc_F`Y4WB=K~fB|CP*D z3IDbAe-}>S_hnM}f3=F;Qezq1gEX^)xty`Tz&^eZ?U~A~js5HM`q|mP?diXIN}!wN zUi%Mw;vRXVjW*Vd#m&3PK@-Yj273m1d#>Vr)!ty@kI*G-@e-Bw4_aknV>ExEg^@}3 zzlZ?vn9tu@yZ+r^66Cqu2TwQo3r;e@@A~@t1bQ$2e?8nSx(oNHzP>uhf5{4OAJrFw zRxb};_pbvhyaIfdgsR$?`-FNT2=m0#gH{Iy{$^qHC+S^S>>tGbtNp(#@9#kGSIPf$ z#^0{NH*ke#sMUyH@A*#${->M%8?5~G8vfygzg@!raoGO^UVoMTw}by($=&eySE2uI z|C_u&jp<(}*q;vkPlNq$2>z?kzaIOW;Q!+gBaZl0;LpatNkX9hPqXP?&HvNw{l$U! zRp2j&|0eoRgZTezbpP$E{3`pe$NtNL5l{Ro@n_?ISrnp)Uq$_F{4b08HP|MNM2yNLhm!uhk) z{STM$Czo7x^l!qwR;&nAHUD+&|7iVxio3Su#El@jACM2&$1UeEwMGalUZpAzBfJu@ zMmBO;w>OQrBQVQNz*hbsznk}*o)KDMgv*;$9Lkn8)6+eDpYAED{F3VP#=d0FL(l)O zH>3(ATHzjquUDe__=Yq8BF2Tq>S=*0;M+wq;)`gpqXJ^Six!Kgls4V;7E4@}(5za! zR4%I*gqO))1YXuIYZrgKd;b%2oICF~dGquB&z~#w*)f|j*1<1*zA$#hi~%zl8?gF7 z%o)ZJJf+FcIsB&6l4Cpt6#;KDmNMYsuOQN{1BNkU_bKL#>*h3Bhn9QgtM-OB+!dd- zM|UHG`w!`$InCx0ea@#&(zD!sbNn>$s>-riZ;iRSt#VJ3bG7A&Pt8^M(EJs!J>Jt; z9d5d&J_&p$X^x0qI1jz;#8s}#p=T>{uWHh@Oxk-$JoA~m^J6S^|@#XY;8HV;&NlJULndeyY&>PpWy656*p)ko3P9e3+Ou2l$r zNX~%tWI+aNtKZhi4&QYGnv>9PEqfkpQ`OTLa%c3Xk>@T$Q(p&ORnniiWWOD6B(PDp zA2(Xy=TXR0#&0;?ZUVof+LE6Ve#0eKO~oE}1P$)FO5i!euJxJx0_(TSK76CMYklW| z{AA|r0_fha*&6p+8!qXe@_T;mTiJXQH=H?FwS#Ywzm@Q*r(G-A@FcS(`R~jaA`XUe zwP0W9Kl1EN2p=RLf}gG8MslD{v9Jkng&EX-K%X;Pfz21^ZGHqV)7z9=`mlQwWU+7> zE6@DkRel-z!!+_+@CE2)B>cHVZ|+rWB|F3&bbNKz5C4m}2^)vpaGGawSeXrx17Ffr z@Rjsn`;z>!f*&S5PfOyO-H)v-ca`$^EG|#|?3vA9mH(E=v4~k? z2OmD0qd9UO@^~>1y_wGi(`0h)?8sqnr>|kGE`?8**fNK`S>B!5u!%dwdGL~t?Qtd~ z$l?Eof2p!Ykh!r$XGicdy&c8gsn5^(EI-R$mBV<=NRZQk=OobGK0B97@|d26p4O-R zaTX&!W&VB(9wXEc+)5JImGndTb{YAOb}kNHT>o~lF{iUKvfMuR^mXV@&c#XTx-z{6 zQ~gj!l+-DxF|xYtbu~(|_tot@_T71Swl+CgQ$pz;mfT%DUQAx>Tpl zT=P~3Ab3&8pgAUtd$!H-dmgQPMp0e{Bj>b*P_lGH}|(= zwr)SPP*0++&TG{$iD$Mri>cmjkFKz;J?hI&!=hH;uokZmG#;`xI*Y*#UYlqiSe4p` zFP%F21%=uOhsG?$_~wy%jVEeD8XdG1Mw7-Sjqiw3eL~NO9yek`06_14U#U=g(h0<5 zgC_IV2Us*~6>LG^_RXhCy4{_VIhKaArb69}x1%7(K zXIn8V_$%NG`On1@IP)_6IQLag}o3}4Cd+vWNc_(x|2M7jP&@()`c=yfE% zK~KcVKifd?V9;OdAyR zkG_|&qk02m7dd{NJ;Nu-iulw+Gns$TJNY(xHDlbR$-CQJ-c>HI)c14$lkz$WbPeUC z45q~ru@zC0lHTR=n^Jz!Zx`f$qNPc%Va(&HsZg9!yb%B9J^Fp&|5D!;Q9ZGDR^vl{ z4ji$5U@*EWAi{QDq>FhtK|2@U&)sZ^w%1C4|9xqZ=dzP z%qM&;$Cvh&mlEIQ6-G4Bqtm&%)ewWTLtP2N5OF~F8B$buAG62D{0Jv6#!o=}_CD90zwQCF+spY35Gc!kWGL zwK$`#7VA*#ZF?D1aB8ty#TG42hy#ja(c1R?oS?V8x4qxz{XWm{_utFoK6{@%@3q!m zd#%seF*!Qb-<7($yDE}gtz3ySAr3)ygpdGjK!`>gr11}OC9YCexv%SSCs&E9jjN4& z2vOPnQ7rpY+Q|tmyQ!@4JnqDC$DIhec5rom*|n{VFEWiZ|6QNf$d~btzwJfh>hiJ| zq5GYbDvyE_IqWap$b>J8{zyrQ>Th!Yc97=z)~@r1Ch<$`^hYkb51 z%tcLZq!BX-;oJP}gDc=0{(BJ@%`YsJZ}ZC$=bnF z1)Nmb3)wWl-+-C;Dg%umYD_>g5%?MsIf2yj7%_wJaaWGAHx?RJ+7*_D-7$mb4qSxn?lV)&610lM>N6DnU0lq{M0wD{Ci}d@3Uv!SO zNQ&WnNd}iFC7bk^XVhqGL7HJSUoZ+Sqne4xH@Ythlo=4g5l2bXW=@cXsT&Aiiy!%a zhy}jj`hTebesAXf)D|Rr3U2=^r$gA)`+vrdtRW(hO2Ey)Lm*Z5HstfKp!sI5D+amw_vrUg!ewJF2DuHW&)4QT$d_@iL6~?3 zG(Sl%MkhgNFw0KEDDcB%u!5ow*}mqevPx3k*aR z6o6yCT~&5jA(hSNJ>$iAGY2ll_@(o#4njH=1wkkn5yUAs@tZNsvKmApo>bV;VcbQu zhB|>x*~>pZfGYC7iZwyuIA3%?q4yR;8WD`@qV1$tkTV#&Ga#-8DJ)m{7Gi_ZM){5L zk^?_HPh+D^7c2iGjvk23fYbLGwQLlzwb4_Th}~Z z#FnjMDCEaSj%EBm*MMF@?=NyT4FxxdE(-ExAi8*4g853Q`v96U9U3BEj6o_Y` z26Q;$LL2TdV(4A1&9*F%&ysRJ(hZpf-J*_?ZEJW62XWgz=BqbSK{OvL=(h8SjXBm1 z)#7N!5NIr^p^|V??~H&4NQ0fAASytk8L*bFlyCGDq((H8=y&;?4c1&*^eR4e$BOec zuC}s>um@*M5J6TRq5v$noFIS4^27v@!}@N2upBFdpv)jg-ax~_4@lxz5x2fT3Du}v z!VA7Ll-Z=8Kq)9meoykXo5`d_sEyb-RwP)TioLb~`y4M|9daz21hGYl{YPx!`(JB< z@7R3*Q8(ivzn%WCdbOy?|60?+_m{nI%Hnt7f35psRs7t+>t>R=v5VIr41e(O%ft2n z8986UYf)9)wk(hYI+g}#9g^fx1|pV*=i{Ng-fIRn^;7}gjW%Lv<(EXnwv37rh|@-_ zC(1*R9d0BDjq@Fuq8WUN6em6(`znjEox*oniTT;^#k__|>nd|76GA&#s&y5LeYpY@ zzIfqv5+uk{S!C$y^*t*~_2|CPNtP7%0nf%N4lg1D*B=v%YNaCIs9egg#DD8O7v!LuNT&=i7E5fC0+O*N_TXlj8GsrxV5jC6z4ts=#Wt8|k%oiFmtwdm`Ulmj? ztO)Si4+mwG%vvA?LvZ*+SmE^nlsMM_rdVFVZ_xIr<;4(%3jD6H91tjmetMB(sf!ZB zZ?@26n>i8^9cl333@$>EAry*?vM^tazf~EQ3+w0eOSg!J5C}K>J-NurMIQnr8r? zhaF{!H+AQC0dEC>m@n${^R(1?5yNsp?I$meofaEV@f2DaTK<&-o5_iZ692PBYXyP~P2LUig4PcU#DETATa)`V*hWR#@GZ%|(u;wc9 zuqaLgFSXE;kmyIy^mugXQ^YR}Nj?Qd+@*j~$B@CR7QUioM_A&cm{0)kCT#iy7B6Ts zgSRjw7V?3VNLwBdEGe`E_YlX-wo($dOpVp+WXL zc9v?&Q;GRRxrMh!#yE-6_zj)oh6eq4Vcp{at@z+Yj3ek1fdN?tWigE2d0Vi|jAK#0 zWZtZBU*e#Ub7ftI1h%KtVxAa3vxZXK#MAN|uXumtQ_o;a8)4~7A(hZ8QX_Vd6#k|1 zB-WSs#OCt$c_Pr-$hr%B1*4+Y^Lbnv3+wK0 zi5wsEk_0DS$c4*ooOtnq&TA%kLEmy4SLxuc5?^R%G(a6*(7NImC48G~-i-K5n-{%8 zO+h7hwXw41XW$#10v>k_Z^=QgIFmOeTKF1%&E6>u?}%Y?^apdowfwlq`D={6R`F!K zE7+C=DRp?zjVt5j_osjeUNT*gw!k6W5u`vmBP@j(ysSzsvI-3VIfdYQaF^$XJ1D>g zk#ukxNwl}+4Bow=#Q2nN255^6fRmKBue(+ai(?t>QbUL>`fHixB;fryK1X?-SCD^{p4%-4i)KI1GYUId?FO?W|F2RmpQ zi*Yne0A**xtHN-*jE5lx{%C>Bzfgs%c^}Eg3M30eTjQ)QVM5yi9$k?$o9p_V|?A_@?bn5V1qzCoIF@RI7PY%(vZ!~Fu-7y z;skn0Suho~XGHVfCLR`Q@fFj$UFQ4Kih>tC_&6xSG+FhCrtzKxuKi7TP z<}dL}nL;xI->bzfv$TX%T1Me%YaC;vNCtvrfhmEH?w7fKE&F%y*0~GM4A$!YRZ;dL z@6Q;g1tDE;|H#ee1)kgOeIm>wHZ0Fd)HPiSQGol9G&Dq)`8i0b*$suqE^aGw2Swm{z0Vxw!A=P;{!fk$VHEfda{ zEM)nfvdhARg!#^EtMh$ymqp2i^If*Hf_`b2?a~_NOAl5T_~l;imM&Z%JIWRYlwP*a zOjsa4SG_Q#>asYeaDjU(TNK`O*&(-Kfya~TMNyrX9rJ|w3Y+LcgY1f=Fd^SlT2pA$ zU2!TY%=hw%E=o+h;#}I0?-No}G&uK4_i|x@${4*kwe*ThMM6Qp5jBfPR9$hcEG+Py z9KB?8(-mn|LxJC{nk8d9uk@%EF4QiJUOHZORo0NOFko%X(#g83ZjFTtgSJN(Pffcj zZ)#W=a8eL(!=k7s zHOt@YyxNaHmzMTN0Gh82s`u6fFi6&gcoS1ilD)<+>K zN-!E$t}MOgr7{&Ij;LL^w(6R*ELb#l?-VcQLBcBNhKmv(INh=a9j_T*mgpDtRGcGR%;v(oFnnWiP9 z&(*FySan^KQ?z7Et6|+2P1pT$k1ZMdq;}oco!1BCiI%3@#FW;`TD66yrQ@Y_rAKwG z{v}0AC;G&c9ZzcwC_T1xa!6g-H@U5W<)Y$DW6b*RN?U^}OvO`2)U7{P)f!w`R6Koh z%m+U-wT4t3E1of{?t@F6t)bPTWjPCDHe8Y2&^4Hry}q_?L#ysaSYy$$H@C-pcq{Ej zc+;_EvkumMcsKXPz!uT++@moYAC%sRXfrLJd#-Ndld2n$9YxFEX^r{lS<{WE_dAa* zfA2}%N56I6&=b3oJe$~ZE4MZ#Oe~o%JzQ=R))p;UT$1k-yUA`;n?ZKGWMRnRO%8L~ zVia~O3XQRwoy*!{Rf#JWk2t(pdZ;ZX2)}T1aPIL{8=oBB5%u)ukUYE9!o*Pj8K^wp&}dFz%D_Znx7K64!pV_Q)rb!)}ji zT)cMw_PE_sN8KLXbbRf>gGYAHm~;D;7Q1y-N8|RqUUqv-TjIJe&K=n^>(K32I~K3| zvNi70xfgDa?L5Bj>nBG(eedb*aim*mwT-cIzT2I2;h@r5>CwuCVRtelOG*#>822t7 zb!WWnMCs9xqkEUlxidl0t*pUl{A^{}or$VJWyePx{cP=_JCn3a%1%x;?puH1&Sc$* zvTtS`-M8`Sohhu_`o@LE{hQs|GZO}_|8DKk{oBLZvyzvrKfB#{VArVjsc9$HpF4Q; zz@9nn)6%6wE*_~G2qg9i__XXh;Wpt;rf`4<=3XXKvv;L?+$pMU+d z{k6Pq8(M7Qt7_fu<`fRva79{Qbu{em%#tM=uKC0tIzH;|>!l|)w1(6l`ex4EH_E$x z*k+9X;=8iDZ&nQY@Yaa>FU}ph`&Q+W5ARHl|Hls(?#`+@@!{QB_5Zl^^zQ8HZW}um z#(#Om?Otxfpp6gK)_>U=c5hDOl8ukH$A5Ke)V;Y)CpJDgSpU`CIrrXf>Go0Q(fF?) zl-+x$ZO}*0&eebY}h8l;t9Saopn}qQRwa)81@>NNj>_#@! zO26nR&@SC%KP90~{zJz?-N{W3vm5F>o^>o@_M0V(5)OOH?-wQ{ZFXMQaM&mOeo^w$ z%`Q6Jza-s$i>yAuh!11@=RFTs&m=_r_cBKvMc#yr>C^cW zBj>F*asJG3ef{50A8X{xC|}8Pz=Srv{95=PnZ=DDnOqY`fIy~^8C()c<6t0gQsT+2 zM1-W%nC}ziX@bc;~OHU1D zkfRunw`#tN33wwDyXZ#QB$3220fjh+Dl-2&0WtIHf15da?wa-MqRf9So1Z5JArg(w zvczPK!qTV%1GBe8$(Hr=bJEVjPZnw zZANmy;#bHc1!pa>KJpWhMR>V%GuGYDi}mWBc;xk(i9tOF*FWS6V*8{Xd(*IOSpN|x zygxWS*KpOTY?xn}`9^oSAfagJ)bHmWnQR?b^O__=;k;O|<#I0bTq)W%{!n_rdhw2{ zPxB0$opw$P-;}z`_2cVvYsP=(wtMnFF2DXouTOVeeElDWdp+Ex%a2X^Xilzi$M@4_ z{rGE$#|qQ+l^5QO+LV&FTDNV)?vc|&l3kwLbhL0Ql6__3dTZwuNh;S9f>o!d>w0}_ z>*8FT;C)84CUtk3=6pBls#BT4KZ@6#Y0r&pU;Cr$+<&%I<|g_5a&k)0k6+~_^^+zU z|7SXi>hoAi$C4g-3;#TxQ;y_)eym-}Ck^@-^V-w1u}t^SdR)f#4!{$)WYB(^Pa|ET$dj^?!E8kJBBSpy;rWXdv8I@6|N{Dpnyy~9S05$ z(}M+TKK%amuhJhtZvOG(jH>26>WjG}BYfgNp0~LrROkm`qk0I297>8 ztM2-n1IG^O@4`KioOzmWiL&E9UcRHgCX?dxvFeHcdBiLBwbk8xcLH$NmrcGM2dP3l8F{)lBa==|S-HuJ-Oj%9i|A?}b`GP>^XkKD-naL9I?0oLQmCxT z*`Z`>SA-h}?vGoe`n+MlBu-x~aJ54_>VTS@2?Fl&K$JRuBzvtkuflNPM{rhTb zf7WkW)GGTpElcw5XR013WAWKPydL8k$UKI8^KjgtNcJ0ArymSu^SjL+ZT-n0Rxx75 znWnE2**BX$PTKRWi9Nh?;tvLd$uyDq5W z*ryXseLfA3WoJK~upvJwhCO}uuIuQr2IgTbT{a*mnw_mG;|}!Ivv-@@Q&wpr*u(VB zoNt=Mz1w5%{K{~4>~+uBsFZM~|Jm2!+5IrKdHQ!Z--&l- zr$$%Q6d&%+eolC=Y-6-5Q-%(k`RUhEHmf^Pp009Zo4IqHmxFtbWnKxT;E1C%uUh>dDfA&Suy}nBw1KH>5(eF=jxTp^#hX+)k<5I9Mc{cqx(D zo!^oZc`KITs_E?%Su9hJSzi0NEk-PxZeV-jFVA(k8_g`YO{Yb(Qz!9vhq0NF_{_r? zH$bRr){B!#lqiAfB1BsI+YxLs$I;e-Vig%ERyb*iPNWik9L%_nv@nfWDnH7K2<9S~ zLxMz-iB91Rqp8LW31C}uBJIvk(6RMp_!|`p2eQAI(dr;k4&5FkDxn(#MY&!Z0$2j3 zv}ch&MqI8H7m@)Y1#Q-dlBrvNQHxiSn$@AZ<%Yg$Lic!!3h8O3NK3~kMT}N?h%1D0 z7AW9|6#d6_YFBl*UyscL*xA!RcQSY5gRVU$~eW@3;2+MZr z;We+uYrbCD+didgk6!t?z1{gUdhb%;6<(@0l`YBGfZERx$xe$}+l(^^ng8^n}5?Bh3uFmD+Z_^V6k$sjd&5hzNhll#IK zzU(h5r_TncD{1Wjk&I^a!((oLO$kwJs)>(SLcCG4pbs8NN;sMxa6Eg8s;Qj}40ORX z&O3@T@oAu%MpCnc{H{r(?Rr5Ijl6=?F@0Pm-BPV7q5Jh1phh2;F04JGk82VxzoPd} z6Fz>f&ln(_JlRT|M?|J7TJM8Is40iKr(+gBk5$WPUb?7*-g-q;O3kl`8tB)rf}6Qx zvLtjy8Vc-3h^pv2X<&7aVQK|c4$V@~--n?}#LyxMRSg0c6H`Fy6pWrTNZm-EnoxI< zDXW~;C7M*!n=d#z1hb!QGO5TzvzG3QM{^saI+Gp=Q>RnUXdnP_F=#q38iJM_gNa=? zKx{k$P$1A_iY}2D<`4rd{21nxq(cX*b$|*^0&ggb0Oc+Z#0d4_>I4!F78`V;N*Wl- zb0Ng6BEh0edLal6uLg?J=+Xf2q>AUsB`x~d;wRG4X&R(-{ncr-qAy-gdW%|UM<2{) zpAr+9s{jpL+|_y1&P}bLwXWzr-Z`s~5(mtyOoWx3w^la@m;a`pluR!_G3U_^ea37_ zq}>hun7BFQCrI9LaJD|XlQa}3kZ;W8c|byX1A6g9<})p3e_MrJxUZi$9eYwj zA8Jhv)IAhgN&adr$tzBvK0%=F$zbfqH^N1ERAvBb)oH-W-i!kS9FmbYV-T8N8VWg1 z9i=XZWTCJmjKpxES*7%=U@;>)Qz!KaMsJZpAeOBTU5*VzA8x)#?Fm4?e*MiI zq#s-xEq4A_{X}hK%;{>Jg%;@_?5W zpb=u9Z3t8|Y88NKc%d5~NKl3!68+J)C)U!e5a+dPDe=NCYW38VlipZ}o4J9=uo;$1 z)h)EZSyKrdDxEl*gmh0gNL7juVqp#1MgDfGkUY)KqmT5?vxU^972G|OT}TeMw~=ND z_%;2pJkplkK^|bnkBU{~mt&RGN|(hbGhoAR56@E2VIiVYGQ(U!?`kzd(pS_(r}<)% zE}oDZACr#g?l+J=Y9W2A4}`T=nI)m|a!`IxFLg2*vlmVzL_p<&$yPaO@VgAKLZo5% zseuZ7Slme-$qPl~cX1k#KxkL@ z1i1JtASwgA|fK;|c7Uj|}LLtw#QECabi$uqP5$ZN-HPBQ|-NG?um{=um=|6tVRSG-%h^Hf#t0x*R%+-L z0F@78t67= zA~cMFMtwp}LRuS*B^jWM>m!hLCr;f!rzS|-gmiW)l)%y?EWLjU_;Vr&uhY$0$+RO8 zoy|`WL9&d<)5fR^NpO1}ox-447Yzg%PKH5YJnIL7E;gsrXQ5!q-3Vx!%m|T!9*1#4 zD#XcjQJ6T{Bf*XYVfTfYBxLnoEeV7nppv)Q(<&|MCu*|@b@ay;cJpYn*FYNjLzG?A z(9U~&AQwsAIKOM#+h~d>7BCH)m3Ux_%yrMgq3UL?04oxRqgg`ivk9?-Oxu8AIo4_% zt(~XR$t6(#LVGFs!CaD3L2j6vpmQ?Go%SZ|NS0E4x{5qEcamREm4Ih$Xe*<3wjixg zT!Le}lb*B}S3%R{(s(CR9v$N>Zty5~B(7rS(IUn?AV5lUHH@@0QX)^Vr+Z>FGBOxD zZ!pMoX9zUP{#cM>u)$PHK2J#_1J${tzlY481c)Ubxk3`9X@b~R5FHqPHK-_$9tq!B zO)l+~nM=qQ@&-Fv9Rlko1hupvnqaqzP6&X^e-VIv)C^V=e~{fr3oTYZ03wjX>opCp z*HF|SR64K5TvVD&4ly5>9-SRO5W zihqQ*a4w`pAm|v2s-ce>7dQ@lPGThn`{-CFqx-yA=S1I{*zSWPxHy;8r06);5o6}X zNk>nwiR&@;9nL5lzckwDHhIH5qkQToPS!oMg_n=^9N5$n;~3S_V(qSLX|Zw8-6^ql zi0b4f3Y&?oDAz@Ic&4>OB=<%~N#vuJ1&)!OC3OxFXFC?U2eoPI+}}K#QQs@~+NOGs zcOG4?@0~|I8x;92;~SKP!jeMICED)_`z&Y9MP93tQ;WRUrLQdV`5@=JqP`#HIWJai zDM?+d-ci1Calel%zgyh@(`x5IqR&nm25Am9&mZLX#huzg1HOK4m87k0)7ty%&z39@ zhje19kGVwrJ;+cn2mipH#RxJ%Up*^!S@LSfsIOt6B(Bk0p>8pxE(x=y%LodB! z?a=>nVW30U_0l&S!f#gWa~RlO_0S>WenX&RWa`-o-$r&`+wyJH^G8>|)f0hNBcrYp z8>5BZTN@4b!PgpNBynCVda|Vb)(#=fc_3g@NeohrF%DtPjn;8N9hEVTy3P`7_o&X6 z1>!Kyh{tlDLj~GbKPaY3pg@shqPb;(O0?S((sh#jus8zMEFBOzgk+ z?8-p{YFt(&O*|Pp)Esg#f9T-w_QOMmM1?)-9(#<$)j33VHZBlHG$+SMoS$~oIlflS z#U~%Gx*X#WeW9|>A^3TRF?pus>O%kUw!EduG4^pTJ>%T2pG-;c-sU15sWxQ={v&STfKZ}MH2Cf9eSTRU`r+!7;st%|dCpK(^3f{8mF z)*c<^buMk(=vQ-+6rf{J1=UPg8on>*S`4LhtQOs=&ItrYY+|%~rE5Z2z4!=E8ABSZxUNre@8BPD`z#B)Rdsbz#FMtG%bAV(T1l)l z>)MJ0pPkoMCe@zZx@w5QZQJUhsiU^789Bb}y3^+Bo1+zfL(eA z!X43}O>sZsURS|D`l_i?{Xl$O3-p!OMEz0|aQ^rY7(wwAeWF5ABTv)#uge<1&& zY}LHizOb3Hfi6_7+wjJBhsJ$4>r&B_jdQK=Nd(_h8V9>J_$ImD>Vi`$`Vv4L!h^%{ z9bP;6U~(6b@mdla!-?oS@ghm=J>v`D#K^jodYo9HhoL=JL&MwbYD(!m#8&XD77sff*&vlUi(-G!GI;)fEa*9g>R*Z-^ zF$0L=ohiJ1Q!f}I1crh$`M6%tNXrgk5}yh`pI1^w=CJ&Z0Siq75`O6SGnsTR3qJhP6$OKcVGZwRr#5o)Z@;tQA zLeoe>F}&t4SulrV{#04I}Y!Ule=8)_3&6 zdOVq3+&rQXX@zs$nOZ_*rYifBE-ckM3@3gYan_U&M@4Sy6p@lV`J{}Xhn*ppqo`Kl`D$&uZaWLukjm9f`HLH>S@(LQIJErxuQ@gFsxPAhj^lg@hH`n6!iY983T^t zx!F7dQfDwFQ`<;QHAtL8!qDI2P>f|CT9iY3gouSeARGftxim3At)TAy=vQk}QJo*$ zog`mu#kcyQ_F|P;1~F&kG^!INB*@?i+g7n#LVAhP=omTd?!X?fpZD-f6eHN0GYK`7 z3O%0ckK7ZEd8jX{BJJq>x|xu3noiPqDvum7r;++ondnqP&+47ELi)JLTu!b)ta8JomWPg9PkWSEoqv!q1 z3_{TXfk+@Ktl+i}h~nn0$poxWLaUVU%{)P{G7sd)i?lSS2e!4Vx=>i_#Evl_3TZPT z{-P4Ph5zVn1z!G^olAa(Yw-xhJpsa$dzWi@hwdpLkQn$cAY#OfMCho*u&0<85* zRu$c+F;~hvM8sa6C!%A5cb3wOAPhZM3v^|GxXD~XANPY_z^fBOUkz!mpv(KH6#z4| z)UA((5sz#w?a7MDiJOM^d%I))DH5PF-QXgL;I|0Gned=hVr%-p%3`aut>dc0cLy)Gy{SWm+x&MUK$zUhwK3nvo-S$ zPdYG;a&kk{0UQbt2SoNhhT@8Z^!Y1l9esb8CWj7X&Ur#AOob#=CxbCgL$JL0Nstoj z#3DwACzuLp|2TCTSyv37i>W)Pl7S_C^pG(_6firV$ZR3RQwIDahib#sjdVtsx{b#1 zTn4P)LC1zb5+?+Ua_O`njQU1kRxZs8$ZDdC{54R_G=2b7-bg<<(Hk{l;misUGnwA* zCrT%MQu2t(q@atv;BtC{pJjc_T3}!a^rS+RN64v6I@belRdQ_I9_YYMig`FgsRcSC z;RGeMM+~XT;gz-kT(*MJ!>tuYC;ygRh)v!A5J_T3ZpnpqucBhl?v&w1Und~ZH zPUWN>%(!Q+g72*(kIXIPnYkMNcQW~{n7>d_1(=)B<#w2zJ;v*%`3p4!62VT1hn;$wtVS)5CAXfbV_?H2o--STr>JTEKz^S~#4xCX} z(UZwoynKi#hkPh+aG>sqrd+x$-qcC<%5`@107HL~OjJqcn;WTB6y8=uLbxMDd34=C zO(in-gh34*4>fl}OSc7!3hA>TF@txm41`_@z*sZng$^VK=njSFUO@{6fW31yA^>ZC zIBmxG0*0yRCzjlAOKAi0R6$4jV0}<|aw4XSJu$n}N=>2V{$5YSGH7%ulz6;LRx>LR`-z zizHM#1dqCSjY3{wPtO{lPNp*KC%w9YwnY^Iy^b`c1AR=R+6b)0XJE08gk|9_VVJ0q z4%2}anW5m|yCEXL#Jja*qg>}m4+Iq#f@$g05TLF^7ITE1A)~eaq874T-eyPV`r*Jl zEibgkPgFp19X?pmEoz)wZYm72+6RJ>;RT*f^AJj4c(l;K-X^fhT?4=!^*vhJcc}G|~nKljTN`9jXDg^GFv1wZrLZQqde23{cer`>Tux zJ9=XLUSL~q$g9c|i9X<$mq@0n=-c((&`-@n9V=a2H@N&8)B$6fko58Yx}Zq%c&OvA zxfZCS$nKF)@Dl5A`u_&&(6zw%4ZDU%B5XPMVesVJD&e0#VhbGg#3^4ABT313idU@2 zcXs{1L^7f(_S*Cu*apwYFN`QL!b_;6IcI@G_?`5ap3~2^9POENSXuA*Mq|pNUb9

VmR*%qV!QTOh)0moGP>;q5fuAT^NjO}wO=zhqcRv~5jZvcXQ{ zWgjCBJ8SJ9&NIU$j11CU%L7-s=E={vt$cyQKnvkI*hzV$%R`Af4`OJ$3u02@q_5_u z80Fcq4)ML_JaS4<76mz*yvyEnPE_yQ@63D;T>Ea2_K4S+q@eF7o-yk-tynd<;m)v= z4xv2LEu8=JKtLcuni_3-Mo5M(=o#@Eu|~NoP|M-d(ji zmB%864vBVMGwgg)-0OZkibrb~v_Vd7Uys^rwffdv*5Z zHS5N{egFG)zr_Ds>4fFc(z1!GQbv?b`ZE?GU7xvS#fbG; zJ2tIdKlS6i=hjdAv_|^D^nJr)U&%grZ00LNf^>&h^$gy>sZMO6fh3HK?2^=G@IJeX z_mvQvukQ0x&i}yC`RVGU8Ckyj?ImBdAARMu9y|as=CSjJoI0m<(xfA9v)x}mrvBXh zjZp??=t!S67VOIOj(2Q9AeL&dD|ujJAQia`QsZuy?>6#%JZz98w~Sm-EtN4MVGdwCujOvug;EA z1}^nKynn?@-dVWFW0m1xoBxptu6}-G^!_v2C`F%od;4YImj@gOOFO?{T(nF%*7-?@ z(h!p(d!;}+ws6y!wZHeHVk7?yQX-X&Yt zEV~~Yf8hR<7{{Y`hIyw&i6;E$IO5za@3o_T*yf$@G^1$M{4tl#Zd(^~A-`o^`a*SU z>BO~Jt!4fh1(VlL-F(pJgX}M!wg%@MRo~d~CXYW@{s2OB3~{}rNpk(I3xw$GtFYXg z=re-xcRNZ_x~@mWo1wlFU~SaLi-aT|PL~lUMjW33_X3~|5;0;49~ndvTmzNBO_NXq z6Xeka@a?>;qhDOr(4(U$1dIKE7;fF4F$dnyCU87RFoMO)M%?9P^PgS|z4{F3x=^Bm zDF^dL=%r>BeA}fT6WCHeZ#de0_$wJgC2nCT6&{Sgn&MF)7bQ!!NCA~_9PGDDn&P0A z2;*&;_iOYr5o_tsdYs?4^dhZSv)%%FlR6^gn8Qv$EcWK zkuVYy4y8TtZCSW3kqOf2i8xRV5Q<7&^pX9UKGdHH zD(OZoPINbmn+89mzdDB|sWmymzU&G2t^HdnHd(;YJ`84olBtETW^}llfz!7KED_=Y zCs3lPAa=-kOhtvlF~9S-6`tt5f9CNb?|5OsRehX-?m4f4y{M0C<8Nw|ll}0iKi8D= zmo++RN&~!(Z^SBmT4nHfs^A`ElHc%7)%dblEobw8N@*S^2tfq{?qwgyk0#v6!LU*LWESoYCUrXK}A(9Ah3}bO6w1S5t+EO8Z z6<|vy0$gL-)&)dl7U$5uDe4m1I7CxP%&2)f5swsJh)>6f8pu%8JrfIR#=@@UFUjy% zHO}xJ^H2l)va>uQF)W(TW2nU7cD%!~+Gs_Tsfm947wLtqvj>n_m-xb_tF*{34DNk_ zu;33^Bv>usKkx|wOu*uvtAS})z_Vz%8g%I^P9WZ<7J9M|EVNc&Wz@xTg}~edv`t4` zMTIoS83_kbHN7oDg2Gw&&74VoE*6pwa|6Ahujvh&r=?g$zBlLL-awIx94SsG$3Xo? zaRNP~pOhMPa)?rNa%ej3XUYc!=)hc9`A$6)x~%ipa4dWee_ zI@%)wqQXEZYe1EBK^)*8L3=Wtk}8&&J7~=?IBC%%A$%iaOcL6}FpYgtW^EVtW0KJ! z17UDi=}bC&^v)8}>R?o;4HD(jBY}{d`T&jgR0r-b!QJ3NNew!h>x&(H+E*@@j3iiK`YmN;30^+!5D^2LyxKx@q6_v}2< zc?zJ3CIKFM8o8X^NG@n(u!UX(!n0wB?~ zMvNCBs-)X>5ZaGJMOE~xAhnEq+m0{o{-#X2R4eKbX85w3nf$$pJ?%}j)kl;-rpZf0 zJjN;m7$l>&-9VHcP{5Hc;zGC_rR@oHj{xIY?beZBi_3A5rGvC%q#t4YH-e%U#hs)D zPX3;I*d-4%JSr+7otQt-ln}|y26`zF)C|Cy^ZYbz7}U@gExfbKNgs#`uANomd!LM^ zG?_ba?IeNR!T257$#A#qeY-zuGN$XBzFp%dj>utBQsPU<)Mrg8$xsYMNZ01Vx*bKZ9@h{>8e7#O5 zznjs48crJTD_7ZIx0Z>-E%-02D&gVb8j^;1DX`x_KYy-i;qLhy1fc{qXRu1g!8sF5QP0T026Zyz@)ePYw$BV zI!udns~-+H4McfQzbpxDR`WX!yOa1J+Z)ocx)0cX-cy`OJT;YsM`@OOpw1XK@cXe8 zyqqf$HBk>ShEK5p-K=rom)+M(aXF;Dy%bnzE;&(SsyWXR|ZF;pqD z2uZ>(tH^3iCk+_}WZ)2w4ZocX8Wx(=Lh2NcNp6faD?rv9dLSA?6&7t)5hki2al09f z)TvhY6Kc`)2@Wp}AA6g9GPZH=foaZ2ACfVoFBE*%R5?b3E?IU|( z`^zyvfeh47k&0pEIRUT9In4ubZTw{;0FWT06VPIX@EX2fbHFQ9&}%|+9{>$`xLX00 zo=%>$V;k(obtAa~H@(^!e*G$;E>_s&W!4ZBs@75u0p@?Y159z}VyUZE)m9G*@C`O9i~UQjB{fXP)~sk*+( zjqJzc8Er1E<^PUnSS}pb{wJRC*IWypvEQzv^8YtD!x%=oce(YvM?bIw7c+wRiy8hx zf9ez`n@IuV?4{k!y8F~6CBa|dIy`NrKsqXOub{`Px%UOKj6#1Kw@IZlZRA-zoRM7x z_#m{oBt|sW#UqS( z!McA#HUgCo?N?Y;v?suY4ZVIGh~g5J^*F zoz1bpD0a_G3CKBH`NG?_FvdyXJ($#C#ylvb9NICYsd_=r*B&Lu^o&Yhy&^!KeK;k4 zs^seFctwF%YB$Rj3)zPJ)Wm+f52p_D`-*mV@;?^T-5h-3&F+K4Ztm|sWWb|qXNItC zPOFn+Gz;t<2a0~@CX!}uqDz|v)!?#J9e|x8&o_rudB4PP?imFu-UoFQ1-Eu$z{I%-mx>)BD67xK6|VWqXBIJskM zPEyY(#VY%r$1{hy1ZM5Lo|GK$$$wm{C>S|5(Y3%Lg4O|Yw=E<6nc_f?aqm8T+#`LS zC`6V~;5JJ(zDRvgHlaA|iEQEuQ;6H7HKS&^O)kqi=r-lUIZxa&Hx-4*v$mDZl26^a z)8^>ZPY$&HFs<^C1bD{jS;p+_3$uF8ICOgNiWxzNqg~wVc~ONFyg=P_xSWJ*IMGKQ zC2-(4WYjU(-FlH@Y{qJP@$t-{dgDLtk61c-YRlSTuem&JJ^xy@pl@@|;eXw#80UX} z!yDgjBd@;sojLy1x6Zw~=+#+2WY@ns`_j9%V{@+*$B&&8)B53}v2$90WGK+UbW7C z@?*iK0`{x4u0S@qZPmhk*)IW&Kdx2$u(J!$cyX=b<*kZ7%Ojt4_9=&ig^Wy4nuj+&EfmuysDUp?%-;ob`rqvu@jl{R_jq=e6B9ya#WWsEmX=oowl zP|=JpXWFMsPpbOS-uTw)AJ>k#a_)NI*avYdUK=-BIJtEE!XTfrq%{CDGPmz+T|fQc z&DIZcRyys#jfzn_KJ0Umzfp1b*p!dndvUFzB+WHHEy;C$H_NY73Vk2l?`Gd)$c+2f ze$yANzP{CZOm`NXGWAY|)Rw(lyW9P+za2C7wTep5wr9&ftN-WbVli8D{&Ve~L-s7z zuc1nTyVk!1#rr3`C1H|}^sTCk5?1`6&Nea8iFswd=a%`Nga!QO;&$hU^ZFlI?ZgjX zSFmm?2Pp?$Q?LVHrHOsU;AffxdImlHOvzF&8V~+r=gGdiyTGY%mn-|B&+0|*zU9j7 zE?zCQy5)*n8{-lmbo5~6dwoW+Z)Nyd|5$C}*KVxe`>B~W)pE9?;*x%7k(|w)apH_z z(2G?*U+TK~Z4btM7Ib#Cp(p!jX!@=JhZJmM=%98_CncNzcHS7}G9^1XK<4T2u_u%4 z4RJWU#fx!m$0pvBcr!bm^ZTL?k#cUBZH(gat0_*vLqyg~wf(_Fl>A z`Z^!B{lLb+dms5QTXSdNW$;bN&r2p}13u4veM#S*Ecv1PhmIX`Rx`cv+6kLptiyZ% zy2h~{>~kyUX}f|H?Am~xIbndTY|hBbe)&kreyXqOA6V|mLgZ_%P5$PtzG+12E2eCJ zwyfgZg&rw^Y~+}kM_fm$*v~tzlm}1g$AqW9^qBRyKg;;BX?jAxaQxhO&wGt2{%nnR zWtM(a0E^w8@sCj(gBY%aMRZh$vUHDEoPsulv%~!FuTIL?gub)J_kH5Vg1>zj@$Ewg z_HDps#|p@evxQ$S?8410-+RS6vGxy(pM7I={XevQc|eTa_xLl@G|f~~(=s*H%rxzV zVM@q)ZVQs42t^c%EGY`v2O(MB?D1Mc2qAlxm(d&An^xJmoNppbZ_-DCv#UjwFLK(l7KfkBi`h6C+$Dzk7MV! z`FD+`^eFf7Jt;ySw6C#yc^~kg<*Zce^cOwd~5ZBXI)?|DBeOdcVicCGT?eNVHSrDqD zvGRHZiyXCLr%iQw4>7URqF(RPBrUFef*X?AWUABRz?#b+phs=ZvUlm9pn2^zk-^qa zKsST_h~v}GUh0|+pB_Ga+p^#@>>fL|oHv$B7-qMxYz}CLrUTn$SpnZcAomyVS@Q$F z_4f0;YR@2N&o%VjVN8*w1<6Zb}kmUMnO>{@hlaY2g?33x2G+P+_x z@RrMOT+pt9n_UC08D6v?b0>Ch^t`7>DlZL@Z=I)4Qe&?K=y~!<$@H&Jg39@1YWLma z8t&hR#DZbVT`w7sms^&>aH%0td7Cg?+NI=DdBBLFeILX0BOivgxET{|$RC*S)|g1@ zeWPv82*{8eU1!h2T5wSI-jo|#2fyzrKX-hjkmSvw8Ad%6KU+6AU)ccH_8iCm79{ZH zy`E0Tp2F8YrR7(Cdj=t`4&i%`y@W*{_QV`0my$rO2k%amS&{CC=jQ6qbR>OO>W17i zwk5U;bHsCpHo?M+gHQKlIFORPNyHBAd-gr@duP9}D;a^-r22!};C4d5K6|at@ZIp` z%KZD^V83ntQ$>J)r0?(kgR_rM20Bi!Id_9W^fk-3=a^`a%&3Q#q8_q|sguUY%g?Mx znLNg1zoiD*##~-kRl^}G%_k$HV3VWI7wvz(NRPAy_errnARwqq;D=AV)b$EG>Da!5 zUMX9$X&wD>==^QmN&lAQoSJ^MNxx2hVRn7*s$HY`By`rPi&f)|$XNA!(Ia-|^aSIO zioVbH#ujr)vv{<|lDjN&rd%?Paf>2`k#5Jowot^HZXWWnn4<%hI|P}LzE4tmGmdZw zU)??qaUN-T${xcQT>j!dRPzRh{7B!!y?afQtT^R)^FDf3YUE~ay5jK(+Fmnsb&y^M z+;|wDz3?lT)6>ntf!tYa#dRKSPXZtH&l@$gC&^qj@AvK|He|~u#-}GyHe_#Bt|7(_ zBwe_@(%uT>Bw_~rk&%NtorWHJA|n~~w>GRX5|O#5f+JUqHzg+@`36>l5pg&y96NeH zpFF*4zvN>mj|A}#zYkulO=_p>JhDB_C#$|J%r~20M1JwF>N9oTcW4~`hufxZU*Y!G z=qDK;_~bW{$&P7V3`x3RmG1Ct0okJ4@4R+aE%?ND?`im1NM1{`~knM#7&d@@%0A&w_bmgc{ek>=r=;Hrwo%tP!u9~hah!>q~ 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 Z)b$Sjjs$;(^ArDG{qrmSh?8|n{{mBAmKXp4 literal 0 HcmV?d00001 diff --git a/Data/2_Silver_Processed/Options_Market_Data/2026-04-14/QQQ_options_2026-04-14.parquet b/Data/2_Silver_Processed/Options_Market_Data/2026-04-14/QQQ_options_2026-04-14.parquet new file mode 100644 index 0000000000000000000000000000000000000000..a10bd6c01190f60b3d44df2776410f9419c391c2 GIT binary patch literal 99304 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 TKxoeY;UD3{5CXxU9_ai(p1=Yf literal 0 HcmV?d00001 diff --git a/Data/2_Silver_Processed/Options_Market_Data/2026-04-16/GLD_options_2026-04-16.parquet b/Data/2_Silver_Processed/Options_Market_Data/2026-04-16/GLD_options_2026-04-16.parquet new file mode 100644 index 0000000000000000000000000000000000000000..79edea98816669751e2a09429b5e727a696d50cb GIT binary patch literal 59523 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 literal 0 HcmV?d00001 diff --git a/Data/2_Silver_Processed/Options_Market_Data/2026-04-16/IWM_options_2026-04-16.parquet b/Data/2_Silver_Processed/Options_Market_Data/2026-04-16/IWM_options_2026-04-16.parquet new file mode 100644 index 0000000000000000000000000000000000000000..24303769a9d3057230420133bf949cec5070e92d GIT binary patch literal 34115 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 w{e`8Kj@G>~sP`qE#9Z5v^5JP`nlu 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 literal 0 HcmV?d00001 diff --git a/Data/2_Silver_Processed/Options_Market_Data/2026-04-16/SLV_options_2026-04-16.parquet b/Data/2_Silver_Processed/Options_Market_Data/2026-04-16/SLV_options_2026-04-16.parquet new file mode 100644 index 0000000000000000000000000000000000000000..a3e3edcdbc3930b1fa162f7c13a2419b4d048328 GIT binary patch literal 43532 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

_Hh+u49yio7d%bDY)N)EbIZ)Ni!z4>d?*7#)w=X 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 xSHkNmOjjKbB$lQ_sX8Veuj3DSs>MT`YT Date: Sun, 19 Apr 2026 12:45:29 -0400 Subject: [PATCH 18/50] update config files --- config/SEC_Processing/global_processed_registry.json | 2 +- config/runtime/collect_data_state.json | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 config/runtime/collect_data_state.json diff --git a/config/SEC_Processing/global_processed_registry.json b/config/SEC_Processing/global_processed_registry.json index 4da52b1..f32dbcc 100644 --- a/config/SEC_Processing/global_processed_registry.json +++ b/config/SEC_Processing/global_processed_registry.json @@ -1 +1 @@ -["0001632063-26-000002", "0000858877-26-000052", "0001193125-26-140574", "0001972928-26-000002", "0000002488-26-000064", "0001225208-26-004132", "0000804328-26-000049", "0001193125-26-144028", "0001225208-26-004203", "0000050863-26-000069", "0001852540-26-000002", "0002044259-26-000007", "0001628280-26-023698", "0001104659-26-038249", "0000858877-26-000048", "0001535527-26-000013", "0001225208-26-004199", "0001768266-26-000004", "0000006281-26-000037", "0001104659-26-041034", "0001225208-26-004201", "0001685760-26-000004", "0000804328-26-000051", "0001628280-26-023648", "0001225208-26-004202", "0001140361-26-013190", "0001075531-26-000014", "0002058769-26-000003", "0001075531-26-000012", "0001882285-26-000007", "0000829224-26-000064", "0000829224-26-000066", "0001140361-26-013192", "0000875320-26-000157", "0000813672-26-000040", "0001628280-26-023696", "0001543133-26-000002", "0001104659-26-039613", "0001628280-26-022956", "0001652044-26-000031", "0001628280-26-023706", "0001018724-26-000010", "0000804328-26-000048", "0001628280-26-023690", "0000050863-26-000072", "0001201872-26-000008", "0001104659-26-038682", "0001999371-26-007656", "0001193125-26-142372", "0000950157-26-000465", "0001065280-26-000134", "0001628280-26-023646", "0001628280-26-023704", "0001104659-26-040661", "0000909832-26-000039", "0001628280-26-023379", "0001140361-26-013191", "0001628280-26-023701", "0001201872-26-000006", "0001225208-26-004342", "0001225208-26-004200"] \ No newline at end of file +["0001104659-26-041034", "0000796343-26-000083", "0000773840-26-000041", "0001225208-26-004200", "0000950103-26-005904", "0000006281-26-000039", "0000050863-26-000072", "0001311079-26-000002", "0001652044-26-000031", "0001193125-26-144028", "0000002488-26-000066", "0001193125-26-151343", "0001804954-26-000002", "0000829224-26-000064", "0000796343-26-000076", "0001730168-26-000034", "0001140361-26-013192", "0002006416-26-000003", "0001331845-26-000003", "0001730168-26-000032", "0001782135-26-000014", "0002058769-26-000003", "0000773840-26-000040", "0001201872-26-000008", "0001628280-26-023379", "0000950103-26-005766", "0000773840-26-000038", "0001184223-26-000002", "0001104659-26-040661", "0000796343-26-000089", "0002067677-26-000007", "0000773840-26-000034", "0001193125-26-140574", "0000796343-26-000081", "0001628280-26-023648", "0001193125-26-142372", "0000804328-26-000051", "0000950157-26-000465", "0001193125-26-151637", "0001628280-26-023704", "0000858877-26-000054", "0000773840-26-000033", "0000773840-26-000036", "0001140361-26-015421", "0000773840-26-000032", "0001104659-26-042880", "0001201490-26-000002", "0001535527-26-000013", "0001862209-26-000002", "0000858877-26-000052", "0001628280-26-023701", "0000789019-26-000070", "0000909832-26-000041", "0000773840-26-000042", "0001628280-26-023690", "0001516908-26-000016", "0000002488-26-000064", "0001225110-26-000006", "0001730168-26-000024", "0000804328-26-000049", "0000006281-26-000040", "0000796343-26-000078", "0001972928-26-000002", "0001018724-26-000010", "0000909832-26-000039", "0001628280-26-022956", "0000796343-26-000095", "0000804328-26-000048", "0000796343-26-000080", "0000773840-26-000037", "0001543133-26-000002", "0000813672-26-000040", "0001201490-26-000003", "0001310204-26-000014", "0001202443-26-000005", "0000006281-26-000041", "0001193125-26-151329", "0000796343-26-000091", "0001104659-26-038249", "0001104659-26-038682", "0001225208-26-004342", "0000829224-26-000066", "0000796343-26-000092", "0001730168-26-000030", "0001628280-26-023706", "0000006281-26-000037", "0001621597-26-000002", "0001882285-26-000007", "0001075531-26-000014", "0001140361-26-013190", "0000796343-26-000082", "0000773840-26-000035", "0001032834-26-000002", "0002044259-26-000007", "0001652044-26-000034", "0001201872-26-000006", "0000796343-26-000097", "0000796343-26-000077", "0000796343-26-000090", "0001936006-26-000012", "0000804328-26-000053", "0001225208-26-004518", "0001905272-26-000002", "0001193125-26-151366", "0000796343-26-000088", "0000796343-26-000079", "0001227733-26-000003", "0000050863-26-000069", "0001628280-26-025108", "0001065280-26-000134", "0001193125-26-151397", "0001852540-26-000002", "0001225208-26-004201", "0001628280-26-023646", "0001685760-26-000004", "0001140361-26-015420", "0001225208-26-004202", "0000773840-26-000039", "0001225208-26-004132", "0000950103-26-005654", "0000006281-26-000038", "0000858877-26-000048", "0000006281-26-000043", "0001772458-26-000002", "0001065280-26-000137", "0001730168-26-000026", "0001628280-26-023696", "0001193125-26-162189", "0001628280-26-023698", "0001665364-26-000005", "0000796343-26-000094", "0000006281-26-000042", "0001730168-26-000028", "0001140361-26-013191", "0000077476-26-000019", "0000875320-26-000157", "0001652149-26-000003", "0001104659-26-039613", "0001225208-26-004199", "0000097476-26-000094", "0001999371-26-007656", "0001225208-26-004203", "0001632063-26-000002", "0000796343-26-000093", "0000796343-26-000087", "0001075531-26-000012", "0001768266-26-000004"] \ No newline at end of file diff --git a/config/runtime/collect_data_state.json b/config/runtime/collect_data_state.json new file mode 100644 index 0000000..26016b2 --- /dev/null +++ b/config/runtime/collect_data_state.json @@ -0,0 +1,10 @@ +{ + "last_run_keys": { + "gpr_monthly": "2026-04", + "macro_trading_daily": "2026-04-16", + "news_daily": "2026-04-19", + "options_daily": "2026-04-19", + "sec_ingestion_weekly": "2026-W16", + "sec_processor_weekly": "2026-W16" + } +} \ No newline at end of file From c4314b27a0da5ed68cbc55083909240b5c7ce85c Mon Sep 17 00:00:00 2001 From: "Xinxin(Maxine)" Date: Mon, 20 Apr 2026 11:43:47 -0400 Subject: [PATCH 19/50] upload cores for prompt eng --- Scripts/core/few_shot_config.py | 38 +++++++++ Scripts/core/financial_config.py | 129 +++++++++++++++++++++++++++++ Scripts/core/financial_ontology.py | 120 +++++++++++++++++++++++++++ Scripts/core/prompt_templates.py | 67 +++++++++++++++ 4 files changed, 354 insertions(+) create mode 100644 Scripts/core/few_shot_config.py create mode 100644 Scripts/core/financial_config.py create mode 100644 Scripts/core/financial_ontology.py create mode 100644 Scripts/core/prompt_templates.py diff --git a/Scripts/core/few_shot_config.py b/Scripts/core/few_shot_config.py new file mode 100644 index 0000000..234ea9e --- /dev/null +++ b/Scripts/core/few_shot_config.py @@ -0,0 +1,38 @@ +FEW_SHOT_EXAMPLES = [ + { + "scenario": "Macro & News (Geopolitics)", + "user_query": "How did the recent Middle East tensions affect Gold prices and volatility sentiment in news?", + "extraction": { + "logical_reasoning": "Macro Step: Middle East tensions (Geopolitics). Meso Step: Safe-haven asset flow. Micro Step: Gold (XAU/GLD). Metrics: Price & Volatility Sentiment.", + "tickers": ["GLD", "XAU"], + "source_types": ["news", "gpr"], + "event_keyword": "geopolitical_tension", + "metrics": ["Sentiment Score", "Volatility"], + "time_window": "past_month" + } + }, + { + "scenario": "SEC Insider Trading (Form 4)", + "user_query": "Show me all CEO stock offloading for NVDA in the last half year.", + "extraction": { + "logical_reasoning": "Macro Step: N/A. Meso Step: Insider activity. Micro Step: NVDA CEO. Action: SELL. Form: 4.", + "tickers": ["NVDA"], + "source_types": ["sec"], + "action_direction": "SELL", + "form_type": "4", + "time_window": "past_six_months" + } + }, + { + "scenario": "Options Chain & Volatility", + "user_query": "Is there an IV skew shift for SPY following the recent Fed meeting?", + "extraction": { + "logical_reasoning": "Macro Step: Fed Meeting (Rates). Meso Step: Options market reaction. Micro Step: SPY. Metric: IV Skew.", + "tickers": ["SPY"], + "source_types": ["options", "news"], + "event_keyword": "fed_meeting", + "metrics": ["Implied Volatility (IV)", "IV Skew"], + "time_window": "past_month" + } + } +] \ No newline at end of file diff --git a/Scripts/core/financial_config.py b/Scripts/core/financial_config.py new file mode 100644 index 0000000..b8ffae3 --- /dev/null +++ b/Scripts/core/financial_config.py @@ -0,0 +1,129 @@ +""" +financial_config.py +Role: Centralized Financial Domain Knowledge & Prompt Engineering Center. +Description: This file serves as the Single Source of Truth (SSoT) for all AI agents in the RAG pipeline. + It decouples professional terminology and expert personas from execution logic. +""" + +from typing import Dict, List, Optional + +# ========================================== +# 1. PROFESSIONAL FINANCIAL TERMINOLOGY (Taxonomy) +# ========================================== +FINANCIAL_TERMS = { + "valuation": ["DCF", "PE ratio", "PB ratio", "EV/EBITDA", "NPV", "IRR", "WACC", "F-Score"], + "risk_management": ["VaR (Value at Risk)", "Beta", "Volatility Skew", "Sharpe Ratio", "Sortino", "Max Drawdown", "Hedging"], + "market_analysis": ["Technical Analysis", "Fundamental Analysis", "Sentiment Analysis", "Liquidity", "Order Flow"], + "derivatives": ["Options", "Futures", "Swaps", "Greeks (Delta, Gamma, Theta, Vega)", "Implied Volatility (IV)", "IV Rank"], + "fixed_income": ["Yield Curve", "Duration", "Convexity", "Credit Spread", "Default Risk", "OAS"], + "macro_economics": ["Inflation (CPI/PCE)", "Interest Rates (Fed Funds)", "GDP", "Unemployment", "GPR (Geopolitical Risk)"] +} + +# ========================================== +# 2. ANALYSIS FRAMEWORKS (The Logic Chains) +# ========================================== +ANALYSIS_FRAMEWORKS = { + "investment_analysis": """ + ### FRAMEWORK: FUNDAMENTAL INVESTMENT ANALYSIS + 1. Quantitative: Financial statements, Profitability ratios, Debt levels. + 2. Qualitative: Moat analysis, Management quality, Industry tailwinds. + 3. Valuation: Comparative analysis vs DCF intrinsic value. + """, + + "options_expert_logic": """ + ### FRAMEWORK: SYSTEMATIC OPTIONS TRADING + 1. Volatility Regime: Current IV vs Historical Volatility. Check IV Rank/Percentile. + 2. Greek Exposure: Evaluate Delta for direction, Vega for vol-sensitivity, Theta for time decay. + 3. Strategy Selection: + - High IV: Credit Spreads, Iron Condors (Short Vol). + - Low IV: Long Straddles, Debit Spreads (Long Vol). + """, + + "macro_geopolitics": """ + ### FRAMEWORK: MACRO-DRIVEN ASSET ALLOCATION + 1. GPR Impact: Track Geopolitical Risk Index for safe-haven flows (Gold/Silver). + 2. Yield Correlation: 10Y Treasury Yields vs DXY vs Precious Metals. + 3. Central Bank Pivot: Rate hike/cut expectations and terminal rate projections. + """ +} + +# ========================================== +# 3. EXPERT PERSONAS (System Messages) +# ========================================== +ROLE_PROMPTS = { + "options_strategist": """ + You are a Senior Options Strategist with 25+ years of experience in market-neutral strategies. + Expertise: Mastery of the Greeks, volatility arbitrage, and tail-risk hedging. + Tone: Precise, professional, data-centric, and risk-averse. + Goal: Identify high-probability option setups with favorable risk-to-reward ratios. + """, + + "macro_analyst": """ + You are a Global Macro Researcher specializing in the interaction between GPR and Commodities. + Expertise: Cross-asset correlation, Fed policy interpretation, and precious metals. + Tone: Analytical, forward-looking, and focused on regime shifts. + """ +} + +# ========================================== +# 4. OUTPUT SPECIFICATIONS (Standardization) +# ========================================== +OUTPUT_CONSTRAINTS = { + "markdown_report": """ + Your response must be formatted as a structured Markdown report: + # [Asset/Strategy Name] Analysis + ## Executive Summary + - Confidence Level: [0-100%] + - Primary Driver: [Macro/Technical/Earnings] + ## Quantitative Evidence + [List specific data points like IV Rank or Price levels] + ## Proposed Strategy + - Setup: [e.g., Bull Put Spread] + - Rationale: [Max 2 sentences] + """, + + "json_schema": { + "ticker": "string", + "direction": "Bullish/Bearish/Neutral", + "iv_status": "High/Low/Neutral", + "confidence": "float" + } +} + +# ========================================== +# 5. DYNAMIC CONTEXT HELPER +# ========================================== +def get_financial_context(query: str) -> str: + """ + Dynamically retrieves relevant frameworks based on query keywords. + Ensures the LLM is anchored with the correct domain knowledge. + """ + query_lc = query.lower() + context = [] + + if any(k in query_lc for k in ["option", "greek", "iv", "volatility", "spread"]): + context.append(ANALYSIS_FRAMEWORKS["options_expert_logic"]) + + if any(k in query_lc for k in ["gold", "silver", "gpr", "geopolitic", "fed", "macro"]): + context.append(ANALYSIS_FRAMEWORKS["macro_geopolitics"]) + + if not context: + context.append(ANALYSIS_FRAMEWORKS["investment_analysis"]) + + return "\n\n".join(context) + +def build_modelfile_system_prompt() -> str: + """ + Specifically for 'create_options_expert.py'. + Combines the best of all worlds into a single System Prompt for the Modelfile. + """ + return f""" + {ROLE_PROMPTS['options_strategist']} + + [ANALYSIS STANDARDS]: + {ANALYSIS_FRAMEWORKS['options_expert_logic']} + {ANALYSIS_FRAMEWORKS['macro_geopolitics']} + + [OUTPUT REQUIREMENTS]: + {OUTPUT_CONSTRAINTS['markdown_report']} + """.strip() \ No newline at end of file diff --git a/Scripts/core/financial_ontology.py b/Scripts/core/financial_ontology.py new file mode 100644 index 0000000..cc65184 --- /dev/null +++ b/Scripts/core/financial_ontology.py @@ -0,0 +1,120 @@ +""" +config/financial_ontology.py +Financial Ontology Mapping Table. +Acts as the bridge between LLM business intents and physical database architectures. +""" + +from typing import List, Dict + +# Defines the valid sources for the 'source_types' field in Qdrant +ALLOWED_SOURCES: List[str] = ["sec", "news", "gpr"] + +SOURCE_ALIAS_TO_ALLOWED_SOURCE: Dict[str, str] = { + "sec_insider_trades": "sec", + "sec_parsed_json": "sec", + "news_qdrant": "news", + "news_scrapes": "news", + "macro_narratives": "news", + "macro_history": "news", + "gpr_index": "gpr" +} + +ALLOWED_CATEGORIES: List[str] = [ + "precious_metals_spot", "macro_inflation_employment", + "macro_central_banks", "macro_yields_dollar", "metals_derivatives", + "equities_spot", "equities_derivatives", "corporate_actions", + "macro_geopolitics_risk", "macro_growth_activity", "macro_liquidity_credit", + "commodities_energy", "commodities_agriculture", + "fx_dollar_rates", "rates_curve_real_yields", + "risk_sentiment_volatility", "earnings_guidance" +] + +ALLOWED_METRICS: List[str] = [ + # Options-oriented intent metrics. + "Implied Volatility (IV)", + "Put/Call Ratio", + "Greeks (Delta/Gamma)", + "Insider Trading", "Institutional Flows", + "Open Interest", + "IV Skew", + "Options Liquidity", # Maps to fields such as is_liquid, volume, and open_interest. + "Moneyness / OTM", # Maps to fields such as moneyness_pct and in_the_money. + "Time Decay / DTE", # Maps to dte-related option horizon fields. + "Options Pricing / Spread",# Maps to quote fields like bid, ask, and spread_pct. + + # Macro and SEC-oriented intent metrics. + "Price", # Canonical latest price signal for macro or equity assets. + "Price Change (%)", # Maps to daily_change_pct and mom_change_pct fields. + "Insider Trading", + "Yield Spread" +] +# Maps the LLM extracted metrics to actual database physical columns + +METRIC_TO_COLUMN_MAPPING: Dict[str, List[str]] = { + "Implied Volatility (IV)": ["implied_volatility"], + "IV Skew": ["iv_skew"], # Keeps skew retrieval explicitly mapped to the physical column. + + # Map higher-level LLM concepts to concrete storage fields defined in the data schema. + "Options Liquidity": ["is_liquid", "volume", "open_interest"], + "Moneyness / OTM": ["moneyness_pct", "in_the_money", "strike"], + "Time Decay / DTE": ["dte", "expiration"], + "Options Pricing / Spread": ["last_price", "bid", "ask", "spread_pct"], + + # Ensure generic "Price" requests can resolve to available physical price columns. + "Price": ["value", "underlying_price"], + "Price Change (%)": ["daily_change_pct", "mom_change_pct"], + "Insider Trading": ["insider_net_flow"], + "Institutional Flows": ["institutional_block_volume"], + "Put/Call Ratio": ["put_call_ratio"], + "Greeks (Delta/Gamma)": ["delta_gamma_exposure"], + "Yield Spread": ["yield_spread"], + "Open Interest": ["open_interest"], +} + +# Used to map event-driven triggers to standard categories +EVENT_KEYWORDS_MAPPING: Dict[str, str] = { + "earnings_beat": "earnings_guidance", + "earnings_miss": "earnings_guidance", + "guidance_raise": "earnings_guidance", + "guidance_cut": "earnings_guidance", + + "insider_buying": "corporate_actions", + "insider_selling": "corporate_actions", + "share_buyback": "corporate_actions", + "dividend_hike": "corporate_actions", + "dividend_cut": "corporate_actions", + "merger_acquisition": "corporate_actions", + + "rate_hike": "macro_central_banks", + "rate_cut": "macro_central_banks", + "fomc_minutes": "macro_central_banks", + "powell_speech": "macro_central_banks", + "qt_tightening": "macro_liquidity_credit", + "liquidity_injection": "macro_liquidity_credit", + + "ppi_release": "macro_inflation_employment", + "nfp_release": "macro_inflation_employment", + "jobless_claims": "macro_inflation_employment", + "wage_growth": "macro_inflation_employment", + + "gdp_release": "macro_growth_activity", + "pmi_release": "macro_growth_activity", + "retail_sales": "macro_growth_activity", + + "dxy_breakout": "fx_dollar_rates", + "usd_strength": "fx_dollar_rates", + "usd_weakness": "fx_dollar_rates", + "yield_curve_steepen": "rates_curve_real_yields", + "yield_curve_invert": "rates_curve_real_yields", + "real_yield_rise": "rates_curve_real_yields", + + "gold_spike": "precious_metals_spot", + "silver_rally": "precious_metals_spot", + "metals_term_structure": "metals_derivatives", + "oil_supply_shock": "commodities_energy", + "crop_supply_shock": "commodities_agriculture", + + "vol_spike": "risk_sentiment_volatility", + "risk_off": "risk_sentiment_volatility", + "risk_on": "risk_sentiment_volatility" +} \ No newline at end of file diff --git a/Scripts/core/prompt_templates.py b/Scripts/core/prompt_templates.py new file mode 100644 index 0000000..669c691 --- /dev/null +++ b/Scripts/core/prompt_templates.py @@ -0,0 +1,67 @@ +""" +Institutional-grade prompt center (Centralized Prompt Management) +Senior Architect Version: Two-Stage Pipeline (Extractor & HyDE Writer) +Design notes: +1. Redundant JSON formatting and hardcoded enum mapping are intentionally removed. +2. Structural constraints are enforced by Pydantic schemas; this file focuses on business logic and reasoning guidance. +""" + +# ========================================== +# STAGE 1: INTENT & METADATA EXTRACTOR +# Goal: enforce analytical reasoning and precise database tag mapping. +# ========================================== +EXTRACTOR_SYSTEM_PROMPT = """[ROLE]: Strictly Analytical Financial Routing Agent +[TASK]: Parse the user query and extract exact database filters based on the allowed ontology. + +[MANDATORY PROTOCOL] +1. Cognitive Anchor: You MUST formulate a 'Macro -> Meso -> Micro' thinking process in your 'logical_reasoning' field before extracting any fields. +2. Tickers: The 'tickers' list MUST ONLY contain symbols from this allowed list: {allowed_tickers_str}. If the user asks about Gold or Silver, output "GLD" or "SLV". If asking about market volatility, output "^VIX". If a requested company is not in this list, drop it. +3. Metrics: Pick ONE OR MORE from this EXACT list: {allowed_metrics}. +4. Source Types: Pick ONE OR MORE from this EXACT list: {allowed_sources}. + * Business Guideline: Connect 'insider/executives' to SEC, 'market/sentiment' to News, and 'war/geopolitics' to GPR. +5. Categories: Pick ONE OR MORE from this EXACT list: {allowed_categories}. + +[ENUM EXTRACTION RULES] +For the following fields, DO NOT invent values. Extract them strictly based on the allowed enum values provided in your output schema: +- "action_direction": Extract based on the allowed enum values (e.g., identifying buy/sell/vest intents). +- "form_type": Extract based on the allowed enum values (e.g., identifying Form 4 vs 8-K needs). +- "sentiment_target": Map the emotional inquiry. HOWEVER, if the query is purely about "insider trading", "Form 4", or objective SEC filings, default to "ANY" to prevent dropping regulatory documents during retrieval. +- "time_window": Map the user's temporal intent to the allowed time window enum values. Default to 6 months if unspecified. +""" + + +# ========================================== +# STAGE 2: HYDE SEMANTIC WRITER +# Goal: generate semantically rich retrieval text from strictly extracted facts. +# ========================================== +HYDE_WRITER_SYSTEM_PROMPT = """[ROLE]: Senior Institutional Options Strategist +[TASK]: Your task is two-fold: + +1. Generate a 'hyde_paragraph': Write a hypothetical excerpt from a professional financial research report that *would* contain the answer to the user's query. +2. Generate a 'rerank_query': A stripped-down, highly optimized search string for a Vector Database and Cross-Encoder. + - REMOVE analytical questions (e.g., "how did it impact", "what is the correlation"). + - REMOVE financial derivative jargon NOT found in raw SEC filings (e.g., "IV Skew", "Put/Call ratio") UNLESS the source type specifically targets options data. + - KEEP only the hard factual entities and actions (e.g., "AAPL Form 4 insider selling executives"). + +[LATEST MACROECONOMIC BACKGROUND] +{macro_background} +(Note: Use this background to inform your market tone). + +[LOCKED METADATA FROM STAGE 1] +{extracted_metadata} + +[REASONING CHAIN FROM ANALYST] +{reasoning_chain} + +[MANDATORY PROTOCOL] +1. Content Restriction: You MUST base your narrative EXACTLY on the [LOCKED METADATA] and [REASONING CHAIN] provided above. DO NOT invent tickers, events, or actions outside of what is explicitly extracted. +2. Causal Chain Structure: Implicitly follow this structure: + - [Trigger Event]: Contextualize the event (e.g., insider selling, Fed rate cut). + - [Market Mechanism]: Explain the underlying financial mechanics (e.g., yield curve shifts, IV skew compression). + - [Asset Impact]: Describe the directional impact on the specific asset. +3. Formatting: + - Write EXACTLY ONE dense paragraph (around 50 words) for the hyde_paragraph. + - Write a concise, keyword-focused rerank_query that would be effective for retrieving relevant documents. + - DO NOT output headings, markdown bullet points, or polite conversational fillers. +4. Anti-Hallucination: ABSOLUTELY NO FAKE NUMBERS. Never invent specific percentages, strike prices, or dates. Talk about directional trends (e.g., "higher implied volatility") rather than specific figures (e.g., "IV went to 45%"). +""" From c2089f61699cb37c6de02697c5ab563a3e8cb7f6 Mon Sep 17 00:00:00 2001 From: "Xinxin(Maxine)" Date: Mon, 20 Apr 2026 11:44:21 -0400 Subject: [PATCH 20/50] upload retrieval-related scripts --- Scripts/retrieval/__init__.py | 44 ++++ Scripts/retrieval/qdrant_retriever.py | 323 ++++++++++++++++++++++++++ Scripts/retrieval/query_transform.py | 249 ++++++++++++++++++++ Scripts/retrieval/schema.py | 143 ++++++++++++ 4 files changed, 759 insertions(+) create mode 100644 Scripts/retrieval/__init__.py create mode 100644 Scripts/retrieval/qdrant_retriever.py create mode 100644 Scripts/retrieval/query_transform.py create mode 100644 Scripts/retrieval/schema.py diff --git a/Scripts/retrieval/__init__.py b/Scripts/retrieval/__init__.py new file mode 100644 index 0000000..a1a73ef --- /dev/null +++ b/Scripts/retrieval/__init__.py @@ -0,0 +1,44 @@ +""" +Retrieval package public API. + +This module exposes the primary retrieval components so callers can import +from `Scripts.retrieval` without referencing internal file paths directly. +""" + +from .schema import ( + SourceType, + ActionDirection, + SearchMode, + TimeWindow, + FormTypeFilter, + SentimentTarget, + MetadataExtraction, + HyDEGeneration, + FullTransformationResult, + SECMetadata, + QueryIntent, + RetrievedChunk, + SQLResult, + AgentState, +) +from .query_transform import QueryTransformer +from .qdrant_retriever import FinancialHybridRetriever + +__all__ = [ + "SourceType", + "ActionDirection", + "SearchMode", + "TimeWindow", + "FormTypeFilter", + "SentimentTarget", + "MetadataExtraction", + "HyDEGeneration", + "FullTransformationResult", + "SECMetadata", + "QueryIntent", + "RetrievedChunk", + "SQLResult", + "AgentState", + "QueryTransformer", + "FinancialHybridRetriever", +] diff --git a/Scripts/retrieval/qdrant_retriever.py b/Scripts/retrieval/qdrant_retriever.py new file mode 100644 index 0000000..27ddcfe --- /dev/null +++ b/Scripts/retrieval/qdrant_retriever.py @@ -0,0 +1,323 @@ +""" +Scripts/retrieval/qdrant_retriever.py + +Industrial-grade dual-track retriever (Gold Layer - asymmetric hybrid retriever) +Senior Architect Version: RRF Fusion, Defensive Enum Extraction, Exception Tracing +""" + +import logging +import sys +import os +import json +import time +import asyncio +from typing import List, Optional, Dict, Any +from datetime import datetime, timedelta +from pathlib import Path +from dotenv import load_dotenv + +project_root = str(Path(__file__).resolve().parents[2]) +if project_root not in sys.path: + sys.path.insert(0, project_root) + +# Load environment variables (including model cache related settings). +load_dotenv(os.path.join(project_root, ".env")) + +from qdrant_client.http import models +from fastembed import SparseTextEmbedding +from sentence_transformers import CrossEncoder + +try: + # Prefer package-relative imports when used as part of Scripts.retrieval. + from ..vector_store.connection import get_qdrant_client, get_embedding_model + from .schema import ( + RetrievedChunk, SourceType, FullTransformationResult, TimeWindow, ActionDirection, SentimentTarget + ) +except ImportError as e: + try: + # Fallback to absolute imports when this file is executed directly. + from Scripts.vector_store.connection import get_qdrant_client, get_embedding_model + from Scripts.retrieval.schema import ( + RetrievedChunk, SourceType, FullTransformationResult, TimeWindow, ActionDirection, SentimentTarget + ) + except ImportError: + print(f"❌ Initialization Error: {e}") + sys.exit(1) + +logger = logging.getLogger("QdrantRetriever") + +class FinancialHybridRetriever: + _instance = None # Singleton instance for shared model/client reuse. + + def __new__(cls, *args, **kwargs): + if cls._instance is None: + cls._instance = super(FinancialHybridRetriever, cls).__new__(cls) + cls._instance._is_initialized = False + return cls._instance + + def __init__(self, collection_name: str = "financial_rag_gold"): + if getattr(self, "_is_initialized", False): + return + + self.collection_name = collection_name + self.client = get_qdrant_client() + + device = os.getenv("RETRIEVER_DEVICE", "cpu") + threads = int(os.getenv("FASTEMBED_THREADS", 4)) + + logger.info("Initializing Models for Retrieval Pipeline (Using Cached Weights)...") + + self.dense_model = get_embedding_model() + sparse_model_name = os.getenv("SPARSE_MODEL_NAME", "prithivida/Splade_PP_en_v1") + self.sparse_model = SparseTextEmbedding(model_name=sparse_model_name,threads=threads) + + reranker_model_name = os.getenv("RERANKER_MODEL_NAME", "BAAI/bge-reranker-v2-m3") + self.reranker = CrossEncoder(reranker_model_name, device=device) + + logger.info(f"✅ Models initialized. Reranker: {reranker_model_name}") + self._is_initialized = True + + def _build_smart_filter(self, metadata: Any, ignore_time: bool = False) -> Optional[models.Filter]: + must_conditions = [] + + def _val(obj): + return getattr(obj, "value", obj) + + if metadata.tickers: + must_conditions.append(models.FieldCondition(key="ticker", match=models.MatchAny(any=metadata.tickers))) + + source_vals = [_val(s) for s in metadata.source_types] if metadata.source_types else [] + if source_vals: + must_conditions.append(models.FieldCondition(key="source_type", match=models.MatchAny(any=source_vals))) + + # SEC filter expansion logic. + if "sec" in source_vals: + action_val = _val(metadata.action_direction) + if str(action_val).upper() == "SELL": + must_conditions.append(models.FieldCondition(key="action_direction", match=models.MatchAny(any=["SELL", "ACQUIRE/VEST"]))) + elif str(action_val).upper() == "BUY": + must_conditions.append(models.FieldCondition(key="action_direction", match=models.MatchAny(any=["BUY", "ACQUIRE/VEST"]))) + elif str(action_val).upper() != "NONE": + must_conditions.append(models.FieldCondition(key="action_direction", match=models.MatchValue(value=action_val))) + + form_val = _val(metadata.form_type) + if str(form_val).upper() != "ALL": + must_conditions.append(models.FieldCondition(key="form_type", match=models.MatchValue(value=form_val))) + + # News sentiment filter. + if "news" in source_vals: + sentiment_val = _val(metadata.sentiment_target) + if str(sentiment_val).upper() == "NEGATIVE": + must_conditions.append(models.FieldCondition(key="tone_score", range=models.Range(lt=0))) + elif str(sentiment_val).upper() == "POSITIVE": + must_conditions.append(models.FieldCondition(key="tone_score", range=models.Range(gt=0))) + + # Default time barrier (compatible with enum/object values). + if not ignore_time: + time_val = _val(metadata.time_window) + + # Robust mapping with explicit fallback. + days_delta = 30 # Default one-month window in current implementation. + if time_val == getattr(TimeWindow, "TODAY", "today"): days_delta = 1 + elif time_val == getattr(TimeWindow, "PAST_WEEK", "past_week"): days_delta = 7 + elif time_val == getattr(TimeWindow, "PAST_MONTH", "past_month"): days_delta = 30 + elif time_val == getattr(TimeWindow, "ALL", "all"): days_delta = 365 + + now = datetime.now() + start_timestamp = int((now - timedelta(days=days_delta)).timestamp()) + current_timestamp = int(time.time()) + + must_conditions.append( + models.FieldCondition( + key="unified_timestamp", + range=models.Range(gte=start_timestamp, lte=current_timestamp) + ) + ) + + return models.Filter(must=must_conditions) if must_conditions else None + + async def retrieve_async(self, original_query: str, transform_result: FullTransformationResult, top_k: int = 5) -> List[RetrievedChunk]: + start_time = time.time() + clean_search_query = getattr(transform_result.hyde, "rerank_query", original_query) + + logger.info(f"🔍 Original Query: {original_query[:40]}...") + logger.info(f"🎯 Denoised Rerank Query: {clean_search_query}") + + qdrant_filter = None + try: + # Keep compatibility with LangChain embedding invocation API. + dense_query_task = asyncio.to_thread( + lambda: self.dense_model.embed_query(transform_result.hyde.hyde_paragraph) + ) + sparse_query_task = asyncio.to_thread( + lambda: list(self.sparse_model.query_embed(clean_search_query))[0] + ) + dense_vec, sparse_vec = await asyncio.gather(dense_query_task, sparse_query_task) + + async def _execute_search(q_filter): + prefetch = [ + models.Prefetch(query=dense_vec, using="dense", limit=top_k * 3, filter=q_filter), + models.Prefetch( + query=models.SparseVector(indices=sparse_vec.indices.tolist(), values=sparse_vec.values.tolist()), + using="sparse", limit=top_k * 3, filter=q_filter + ) + ] + return await asyncio.to_thread( + self.client.query_points, + collection_name=self.collection_name, + prefetch=prefetch, + query=models.FusionQuery(fusion=models.Fusion.RRF), + limit=top_k * 2 + ) + + qdrant_filter = self._build_smart_filter(transform_result.metadata, ignore_time=False) + search_results = await _execute_search(qdrant_filter) + fallback_used = False + + points = search_results.points + if not points: + logger.warning("⚠️ 0 results found with requested time window. Triggering 180-Days Fallback.") + qdrant_filter = self._build_smart_filter(transform_result.metadata, fallback_days=180) + search_results = await _execute_search(qdrant_filter) + fallback_used = True + points = search_results.points + + if not points: + self._log_audit(original_query, clean_search_query, qdrant_filter, [], time.time() - start_time, fallback_used) + return [] + + # Apply precision reranking scores. + pairs = [[clean_search_query, p.payload.get("text", "")] for p in points] + + rerank_scores = await asyncio.to_thread(self.reranker.predict, pairs) + + for idx, p in enumerate(points): + p.score = float(rerank_scores[idx]) + + points.sort(key=lambda x: x.score, reverse=True) + + valid_points = [p for p in points if p.score > 0.00001] + top_k_results = valid_points[:top_k] + + formatted_results = self._format_results(top_k_results, fallback_used) + self._log_audit(original_query, clean_search_query, qdrant_filter, formatted_results, time.time() - start_time, fallback_used) + return formatted_results + + except Exception as e: + # Use logger.exception to preserve stack trace and line numbers. + logger.exception(f"❌ Async Retrieval Pipeline failed: {e}") + self._log_audit(original_query, qdrant_filter, [], time.time() - start_time, False, error=str(e)) + return [] + + def _format_results(self, points: List[Any], fallback_used: bool = False) -> List[RetrievedChunk]: + retrieved_chunks = [] + for hit in points: + payload = hit.payload + bronze_anchor = payload.get("accession_no") or payload.get("url") or str(hit.id) + record_date = "Unknown" + if "unified_timestamp" in payload: + try: + record_date = datetime.fromtimestamp(payload["unified_timestamp"]).strftime('%Y-%m-%d') + except Exception: + pass + + excluded_keys = {"text", "document_sparse_embedding"} + refined_metadata = {k: v for k, v in payload.items() if k not in excluded_keys} + + # Add explicit tags for downstream router/agent consumers. + refined_metadata["record_date"] = record_date + refined_metadata["is_fallback_180_days"] = fallback_used + + chunk = RetrievedChunk( + content=payload.get("text", ""), + source_type=payload.get("source_type", SourceType.NEWS), + score=hit.score, + metadata=refined_metadata, + bronze_ref=bronze_anchor + ) + retrieved_chunks.append(chunk) + + return retrieved_chunks + + def _log_audit(self, query: str, rerank_query: str, qdrant_filter: Optional[models.Filter], results: List[RetrievedChunk], latency: float, fallback_used: bool, error: str = None): + audit_payload = { + "timestamp": datetime.now().isoformat(), + "original_query": query, + "rerank_query_used": rerank_query, # Preserve exact retrieval text for observability. + "filter_applied": qdrant_filter.model_dump() if qdrant_filter else None, + "fallback_triggered": fallback_used, + "results_count": len(results), + "top_k_scores": [round(r.score, 4) for r in results], + "latency_sec": round(latency, 3), + "status": "ERROR" if error else "SUCCESS", + "error_msg": error + } + + logger.info(f"[AUDIT_RAG_RETRIEVAL] {json.dumps(audit_payload)}") + + try: + date_str = datetime.now().strftime("%Y-%m-%d") + log_dir = Path(project_root) / "logs" / "retrieval" / date_str + log_dir.mkdir(parents=True, exist_ok=True) + log_file = log_dir / "retriever_audit_trail.jsonl" + + with open(log_file, 'a', encoding='utf-8') as f: + f.write(json.dumps(audit_payload, ensure_ascii=False) + "\n") + except Exception as log_e: + logger.error(f"Failed to write audit log to file: {log_e}") + + +# ========================================== +# Local sandbox test (end-to-end retrieval chain) +# ========================================== +if __name__ == "__main__": + import asyncio + # Import query transformation and intent schema for standalone E2E test. + try: + from .query_transform import QueryTransformer + from .schema import QueryIntent + except ImportError: + from Scripts.retrieval.query_transform import QueryTransformer + from Scripts.retrieval.schema import QueryIntent + + async def test_end_to_end(): + # 1) Initialize both engines. + print("⚙️ Initializing RAG Pipeline Engines...") + transformer = QueryTransformer() + retriever = FinancialHybridRetriever() + + # 2) Example user query. + #query = "How did AAPL executives' Form 4 offloading past week impact IV skew?" + query = "What recent insider buying activity has there been for TSLA and how did the market react?" + mock_intent = QueryIntent(primary_route="hybrid_both") + + print(f"\n🗣️ User Query: {query}") + print("-" * 60) + + try: + # 3) Stage 1: run transformer (LLM) for metadata + HyDE. + print("🧠 Stage 1: LLM Transforming Query...") + transform_result = await transformer.transform_for_dual_rag(query, mock_intent) + + # Print extraction outputs for debug visibility. + print(f" -> 🎯 Extracted Tickers: {transform_result.metadata.tickers}") + print(f" -> 🎯 Extracted Time: {transform_result.metadata.time_window}") + print(f" -> 🎯 Generated HyDE: {transform_result.hyde.hyde_paragraph[:80]}...") + print("-" * 60) + + # 4) Stage 2: pass transformed payload into retriever. + print("🔍 Stage 2: Qdrant Hybrid Retrieving...") + results = await retriever.retrieve_async(original_query=query, transform_result=transform_result) + + # 5) Print retrieval results. + print(f"\n✅ Final Retrieved: {len(results)} chunks.") + for i, res in enumerate(results): + print(f"[{i+1}] Score: {res.score:.4f} | Bronze Ref: {res.bronze_ref}") + print(f" Fallback Used: {res.metadata.get('fallback_used', False)}") + print(f" Source: {res.source_type} | Ticker: {res.metadata.get('ticker')}") + print(f" Snippet: {res.content[:150]}...\n") + + except Exception as e: + print(f"\n❌ Pipeline Test Failed: {e}") + + asyncio.run(test_end_to_end()) \ No newline at end of file diff --git a/Scripts/retrieval/query_transform.py b/Scripts/retrieval/query_transform.py new file mode 100644 index 0000000..7eb6047 --- /dev/null +++ b/Scripts/retrieval/query_transform.py @@ -0,0 +1,249 @@ +""" +Scripts/retrieval/query_transform.py + +Industrial-grade query transformation engine (context-anchored two-stage transformer) +Senior Architect Version: Fully Decoupled Prompts + Robust Guardrails +""" + +import os +import sys +import logging +import asyncio +import json +from datetime import datetime +from pathlib import Path +from typing import List, Dict, Any, Optional +from dotenv import load_dotenv + +from langchain_ollama import ChatOllama +from langchain_core.prompts import ChatPromptTemplate +from langchain_core.messages import AIMessage, HumanMessage, SystemMessage + +# --- 1. Path and environment bootstrap --- +SCRIPT_PATH = Path(__file__).resolve() +PROJECT_ROOT = SCRIPT_PATH.parents[2] +load_dotenv(PROJECT_ROOT / ".env") + +if str(PROJECT_ROOT) not in sys.path: + sys.path.insert(0, str(PROJECT_ROOT)) + +# --- 2. Core dependency imports (robust fallback) --- +try: + # Prefer package-relative imports when used as part of Scripts.retrieval. + from ..core.financial_ontology import ( + ALLOWED_METRICS, ALLOWED_SOURCES, ALLOWED_CATEGORIES, METRIC_TO_COLUMN_MAPPING + ) + # Import local retrieval schemas. + from .schema import ( + QueryIntent, MetadataExtraction, HyDEGeneration, FullTransformationResult, TimeWindow + ) + # Import decoupled prompt templates. + from ..core.prompt_templates import EXTRACTOR_SYSTEM_PROMPT, HYDE_WRITER_SYSTEM_PROMPT +except ImportError as e: + try: + # Fallback to absolute imports when running this file directly. + from Scripts.core.financial_ontology import ( + ALLOWED_METRICS, ALLOWED_SOURCES, ALLOWED_CATEGORIES, METRIC_TO_COLUMN_MAPPING + ) + from Scripts.retrieval.schema import ( + QueryIntent, MetadataExtraction, HyDEGeneration, FullTransformationResult, TimeWindow + ) + from Scripts.core.prompt_templates import EXTRACTOR_SYSTEM_PROMPT, HYDE_WRITER_SYSTEM_PROMPT + except ImportError: + print(f"❌ Initialization Error: Missing core dependency: {e}") + sys.exit(1) + +# Fault-tolerant few-shot loading. If unavailable, degrade to zero-shot. +try: + from ..core.few_shot_config import FEW_SHOT_EXAMPLES +except ImportError: + try: + from Scripts.core.few_shot_config import FEW_SHOT_EXAMPLES + except ImportError: + FEW_SHOT_EXAMPLES = [] + +logging.basicConfig(level=logging.INFO) +logger = logging.getLogger("QueryTransformer") + +class QueryTransformer: + def __init__(self): + self.model_name = os.getenv("OLLAMA_CUSTOM_MODEL_NAME", "options-expert-v1:latest") + + # Load ticker allowlist for prompt injection and post-LLM guardrails. + self.allowed_tickers = self._load_allowed_tickers() + + # --- LLM initialization --- + # Stage 1: strict extractor model. + self.extractor_llm = ChatOllama( + model=self.model_name, temperature=0, format="json" + ).with_structured_output(MetadataExtraction) + + # Stage 2: semantic writer model. + self.hyde_llm = ChatOllama( + model=self.model_name, temperature=0.2, format="json" + ).with_structured_output(HyDEGeneration) + + self._build_prompts() + + def _load_allowed_tickers(self) -> List[str]: + """Build a global ticker pool (equities + ETFs + macro indices).""" + # 1) Load SEC ticker universe. + sec_tickers = [] + ticker_path = PROJECT_ROOT / "config" / "SEC_Ingestion" / "SEC_tickers.json" + try: + if ticker_path.exists(): + with open(ticker_path, 'r') as f: + sec_tickers = [t.upper() for t in json.load(f)] + except Exception as e: + logger.warning(f"Could not load SEC_tickers.json: {e}") + + # 2) Add ETF and macro index symbols used by retrieval prompts. + macro_and_etf_tickers = [ + "GLD", "SLV", "SPY", "QQQ", "IWM", # Options and commodity ETFs. + "^GSPC", "^IXIC", "^VIX", "DX-Y.NYB" # Macro indices. + ] + + return list(set(sec_tickers + macro_and_etf_tickers)) + + def _build_prompts(self): + """Build decoupled prompts aligned with external template variables.""" + + # --- STAGE 1 PROMPT --- + extractor_messages = [("system", EXTRACTOR_SYSTEM_PROMPT)] + + # Dynamically assemble few-shot blocks to avoid template brace collisions. + if FEW_SHOT_EXAMPLES: + for ex in FEW_SHOT_EXAMPLES: + extractor_messages.append(HumanMessage(content=f"Query: {ex['user_query']}")) + extractor_messages.append(AIMessage(content=json.dumps(ex['extraction']))) + + extractor_messages.append(("human", "Query: {user_query}")) + self.extractor_prompt = ChatPromptTemplate.from_messages(extractor_messages) + + # --- STAGE 2 PROMPT --- + # Macro/background/metadata/reasoning placeholders are injected in the SYSTEM template. + self.hyde_prompt = ChatPromptTemplate.from_messages([ + ("system", HYDE_WRITER_SYSTEM_PROMPT), + ("human", "User Query: {user_query}") + ]) + + def _get_macro_context(self) -> str: + """Load macro context used by HyDE generation.""" + context_path = PROJECT_ROOT / "Data" / "Agent_Context" / "latest_macro_context.md" + if context_path.exists(): + return context_path.read_text(encoding='utf-8') + return "Market conditions are currently stable." + + def _save_audit_trail(self, query: str, intent: QueryIntent, result_data: dict, latency: float): + """Persist query transformation audit logs.""" + try: + date_str = datetime.now().strftime("%Y-%m-%d") + log_dir = PROJECT_ROOT / "logs" / "query_transform" / date_str + log_dir.mkdir(parents=True, exist_ok=True) + log_file = log_dir / "query_audit_trail.jsonl" + + audit_payload = { + "timestamp": datetime.now().isoformat(), + "latency_seconds": round(latency, 2), + "original_query": query, + "primary_route": intent.primary_route if intent else "unknown", + "transformation_result": result_data + } + with open(log_file, 'a', encoding='utf-8') as f: + f.write(json.dumps(audit_payload, ensure_ascii=False) + "\n") + logger.info(f"💡 Audit Log saved to {log_file}") + except Exception as e: + logger.error(f"Failed to save audit log: {e}") + + async def transform_for_dual_rag(self, query: str, intent: QueryIntent) -> FullTransformationResult: + start_time = datetime.now() + logger.info(f"🚀 Starting Two-Stage Pipeline for query: {query[:50]}...") + + try: + # ========================================== + # STAGE 1: Extract Metadata + # ========================================== + metadata: MetadataExtraction = await self.extractor_llm.ainvoke( + self.extractor_prompt.format_prompt( + user_query=query, + allowed_tickers_str=", ".join(self.allowed_tickers), + allowed_metrics=", ".join(ALLOWED_METRICS), + allowed_sources=", ".join(ALLOWED_SOURCES), + allowed_categories=", ".join(ALLOWED_CATEGORIES) + ) + ) + + # [GUARDRAIL 1] Post-clean extracted tickers using allowlist. + valid_tickers = [t for t in metadata.tickers if t in self.allowed_tickers] + if len(valid_tickers) != len(metadata.tickers): + logger.warning(f"⚠️ Guardrail triggered: Dropped invalid tickers: {set(metadata.tickers) - set(valid_tickers)}") + metadata.tickers = valid_tickers + + # [GUARDRAIL 2] Apply a default time window fallback. + if not metadata.time_window: + metadata.time_window = TimeWindow.PAST_SIX_MONTHS + + # Map semantic metrics to physical database columns. + mapped_cols = set() + for m in metadata.metrics: + if m in METRIC_TO_COLUMN_MAPPING: + # Mapping values are lists, so set.update is required here. + mapped_cols.update(METRIC_TO_COLUMN_MAPPING[m]) + mapped_physical_columns = list(mapped_cols) + + # ========================================== + # STAGE 2: Generate HyDE + # ========================================== + hyde_result: HyDEGeneration = await self.hyde_llm.ainvoke( + self.hyde_prompt.format_prompt( + user_query=query, + macro_background=self._get_macro_context(), + extracted_metadata=metadata.model_dump_json(indent=2, exclude={'logical_reasoning'}), + reasoning_chain=metadata.logical_reasoning + ) + ) + + # Aggregate stage outputs into one typed payload. + final_result = FullTransformationResult( + metadata=metadata, + hyde=hyde_result, + mapped_physical_columns=mapped_physical_columns + ) + + latency = (datetime.now() - start_time).total_seconds() + self._save_audit_trail(query, intent, final_result.model_dump(), latency) + logger.info(f"✅ Pipeline completed perfectly in {latency:.2f}s") + return final_result + + except Exception as e: + logger.error(f"❌ Two-Stage Transformation Failure: {e}") + latency = (datetime.now() - start_time).total_seconds() + self._save_audit_trail(query, intent, {"error": str(e), "stage": "transformation_failed"}, latency) + raise e + +# ========================================== +# Standalone test entrypoint +# ========================================== +if __name__ == "__main__": + async def test(): + transformer = QueryTransformer() + mock_intent = QueryIntent(primary_route="hybrid_both") + + #query = "How did NVDA's recent insider sales from the past week impact its options IV skew, given the current macro climate?" + #query = "How did gold and silver price changes from recent weeks impact their options IV skew, given the current geopolitical climate?" + query = "what is the current put/call ratio for SPY and how does it compare to historical levels? Also, how has the institutional flow been for SPY options in the past month?" + result = await transformer.transform_for_dual_rag(query, mock_intent) + + print("\n" + "="*60) + print("[STAGE 1: (Metadata & Reasoning)]") + print(f"🧠 Reasoning: {result.metadata.logical_reasoning}") + print(f"📊 Tickers: {result.metadata.tickers}") + print(f"📈 Metrics: {result.metadata.metrics}") + print(f"🏛️ Action: {result.metadata.action_direction}") + print(f"🕒 Time Window: {result.metadata.time_window}") + print("-" * 60) + print("[STAGE 2: HyDE (Gold Layer)]") + print(result.hyde.hyde_paragraph) + print("="*60) + + asyncio.run(test()) \ No newline at end of file diff --git a/Scripts/retrieval/schema.py b/Scripts/retrieval/schema.py new file mode 100644 index 0000000..72ba3f6 --- /dev/null +++ b/Scripts/retrieval/schema.py @@ -0,0 +1,143 @@ +""" +Scripts/retrieval/schema.py +Core Protocol for Financial Multi-Agent RAG. +Senior Architect Version: Two-Stage Pipeline (Extractor + HyDE) +""" + +from pydantic import BaseModel, Field, field_validator, ConfigDict +from typing import List, Optional, Dict, Any +from enum import Enum +from datetime import datetime + +# ========================================== +# 1. ENUMS FOR STRICT VALIDATION (Retained) +# ========================================== + +class SourceType(str, Enum): + SEC = "sec" + NEWS = "news" + GPR = "gpr" + MACRO_HISTORY = "macro_history" + OPTIONS = "options" + +class ActionDirection(str, Enum): + BUY = "BUY" + SELL = "SELL" + ACQUIRE = "ACQUIRE/VEST" + NONE = "NONE" + +class SearchMode(str, Enum): + VECTOR_ONLY = "vector_only" + HYBRID = "hybrid" + METADATA_ONLY = "metadata_only" + +class TimeWindow(str, Enum): + TODAY = "today" + PAST_WEEK = "past_week" + PAST_MONTH = "past_month" + ALL = "all" + +class FormTypeFilter(str, Enum): + FORM_4 = "4" + FORM_8K = "8-K" + ALL = "ALL" + +class SentimentTarget(str, Enum): + POSITIVE = "POSITIVE" + NEGATIVE = "NEGATIVE" + ANY = "ANY" + +# ========================================== +# 2. TWO-STAGE LLM OUTPUT SCHEMAS +# ========================================== + +class MetadataExtraction(BaseModel): + """ + STAGE 1: Pure Metadata Extraction (The Extractor) + Forces the LLM to output ONLY strict analytical parameters. + """ + logical_reasoning: str = Field(..., description="Mandatory Analysis: Use 'Macro -> Meso -> Micro' framework. Analyze When, How, and Why before extraction.") + tickers: List[str] = Field(..., description="Extracted stock symbols. Output empty list [] if none.") + metrics: List[str] = Field(..., description="Quantitative metrics mentioned. Output empty list [] if none.") + source_types: List[SourceType] = Field(..., description="Inferred data sources. MUST choose at least one.") + action_direction: ActionDirection = Field(..., description="Insider trading action. MUST output 'NONE' if not applicable.") + form_type: FormTypeFilter = Field(..., description="SEC form types. MUST output 'ALL' if not applicable.") + sentiment_target: SentimentTarget = Field(..., description="User's sentiment bias. MUST output 'ANY' if not applicable.") + event_keyword: str = Field(..., description="A 1-to-3 word keyword of the trigger. Output empty string '' if none.") + time_window: TimeWindow = Field(..., description="Default to 'past_six_months' if not specified.") + + model_config = ConfigDict(use_enum_values=True, populate_by_name=True, arbitrary_types_allowed=True) + + @field_validator('tickers') + @classmethod + def normalize_tickers(cls, v: List[str]) -> List[str]: + return [ticker.upper().strip() for ticker in v] + + @field_validator('time_window', mode='before') + @classmethod + def handle_empty_window(cls, v: Any) -> TimeWindow: + if v not in [item.value for item in TimeWindow]: + return TimeWindow.ALL + return v + +class HyDEGeneration(BaseModel): + """ + STAGE 2: Semantic Paragraph Generation (The Writer) + Generates a rich causal chain for Vector Search. + """ + hyde_paragraph: str = Field(..., description="A 100 word high-density financial simulation based strictly on the metadata.") + rerank_query: str = Field( + ..., + description=( + "A clean, factual search query stripped of analytical noise (like 'impact', 'skew', 'why'). " + "Focus ONLY on the core entities and events to be found in the database. " + "Example: If user asks 'How did AAPL Form 4 offloading impact IV skew?', " + "you MUST output exactly 'AAPL executive insider selling Form 4 transactions'." + ) + ) + +class FullTransformationResult(BaseModel): + """Aggregates the results of the Two-Stage Pipeline for the Router.""" + metadata: MetadataExtraction + hyde: HyDEGeneration + mapped_physical_columns: List[str] = Field(default_factory=list) + +# ========================================== +# 3. ROUTING SCHEMAS (System State) +# ========================================== + +class SECMetadata(BaseModel): + ticker: str + form_type: str + accession_no: str + filed_at: str + transaction_date: Optional[str] = None + action_direction: ActionDirection = ActionDirection.NONE + tone_score: int + url: str + +class QueryIntent(BaseModel): + primary_route: str = Field(description="One of: 'hybrid_both', 'gold_only', 'silver_only'") + is_complex: bool = Field(default=False) + search_top_k: int = Field(default=5) + requires_hyde: bool = Field(default=True) + +class RetrievedChunk(BaseModel): + content: str + source_type: SourceType + score: float + metadata: Dict[str, Any] = Field(default_factory=dict) + bronze_ref: Optional[str] = "UNKNOWN" + +class SQLResult(BaseModel): + df_json: str + query_executed: str + summary: str + +class AgentState(BaseModel): + input_query: str + macro_context: str = Field("", description="Daily market background injected into prompts") + intent: Optional[QueryIntent] = None + transformation_result: Optional[FullTransformationResult] = None + raw_retrieved_chunks: List[RetrievedChunk] = [] + sql_context: Optional[SQLResult] = None \ No newline at end of file From 6dfee82ab97889161a3da92ab84104c8692590cb Mon Sep 17 00:00:00 2001 From: "Xinxin(Maxine)" Date: Mon, 20 Apr 2026 11:46:42 -0400 Subject: [PATCH 21/50] Update README.md --- README.md | 179 +++++++++++++++++------------------------------------- 1 file changed, 55 insertions(+), 124 deletions(-) diff --git a/README.md b/README.md index 2742dc9..8c8cc50 100644 --- a/README.md +++ b/README.md @@ -1,145 +1,76 @@ -# Options Bot 🤖 +# Multi-Modal Multi-Agent Financial RAG System -An automated financial research pipeline that synthesizes data from multiple sources (YouTube, News, Reddit, FRED, SEC filings, and market data) to generate daily paper-trading options ideas. The system uses a Qdrant vector database for knowledge management and a locally-hosted LLM (via Ollama) within a multi-agent framework to produce structured analysis reports. +### 1. Strategic Objectives (Goal) +The primary objective of this project is to democratize institutional-grade options trading by bridging the gap between quantitative market data and qualitative semantic insights. By leveraging a **Medallion Architecture**, the system automates the identification of cross-asset volatility arbitrage opportunities (e.g., GLD/SLV vs. correlated equities). -## 🎯 Project Objective +**Core Problem Solved:** +* **Eliminating Hallucinations:** Prevents "trading hallucinations" by enforcing a multi-agent checker-critic loop. +* **Unified Intelligence:** Syncs fragmented macro signals (FRED/GPR) with micro-market structures (Option Chains/SEC Filings). +* **Signal Precision:** Converts raw volatility into actionable paper-trading strategies with logical evidence. -This project serves as an educational exercise to: +--- -1. Master the engineering of multi-agent LLM systems. -2. Develop a practical understanding of how to integrate heterogeneous information sources for decision-making under uncertainty. +### 2. High-Level System Architecture +The system operates on a **Dual-Track Data Engine** designed to handle the heterogeneity of financial markets: -The goal is to build a daily research bot that synthesizes global market and social information streams to generate 5–10 paper-trading options recommendations, complete with detailed rationales and source citations. +* **Quantitative Track (Structured):** Processes high-frequency numeric data (Parquet) via SQL-like tools or Pandas Agents to ensure 100% accuracy in pricing and Greeks. +* **Qualitative Track (Unstructured):** Processes news and SEC filings through a Hybrid RAG pipeline (Dense + Sparse + Metadata filtering) in Qdrant. +* **State Machine Orchestration:** Uses **LangGraph** to govern the transition between data retrieval, analysis, and risk auditing. ------ +--- -## ✨ Key Features +### 3. Operational Workflow & Multi-Agent Logic +The following workflow defines the lifecycle of a query, from ingestion to the final strategy report: - * **Multi-Source Data Pipeline**: Aggregates data from YouTube, Reddit, News APIs, FRED, SEC filings, and general market sources. - * **Vectorized Knowledge Base**: Utilizes a Qdrant vector database for efficient, scalable semantic retrieval of all ingested information. - * **Local LLM Orchestration**: Runs on local, open-source models (e.g., `mistral:7b`, `options-expert`) via Ollama for privacy and cost-effectiveness. - * **Multi-Agent Decision Framework**: Employs an Analyst-Checker-Critic agent loop to synthesize signals, validate facts, and challenge assumptions. - * **Automated Daily Reporting**: Generates structured JSON and Markdown reports with actionable options ideas, rationales, and confidence levels. - ------ - -## 🏗️ System Architecture - -The system operates in a sequential pipeline: - -1. **Data Collection**: Various scraper modules fetch data from their respective sources. -2. **Data Processing & Storage**: The collected text is cleaned, processed, and stored as vector embeddings in the Qdrant database with associated metadata. -3. **LLM-Powered Analysis**: A multi-agent system (`agent_system.py`) queries the vector database to retrieve relevant context and orchestrates a series of LLM calls to analyze the data, generate insights, and formulate trade ideas. -4. **Report Generation**: The final output is structured into a `FinalReport` Pydantic model and saved as both JSON and Markdown files. - -For a detailed visual overview of the data flow and component interactions, please see `ARCHITECTURE.md`. - ------ - -## 🚀 Getting Started - -### Prerequisites - - * Docker and Docker Compose - * A **YouTube Data API v3 key** is required. - * API keys for **FRED**, **NewsAPI**, and the **SEC** are optional but recommended for full functionality. - -### Environment Variables - -Configure the following environment variables in the `docker-compose.prod.yml` file or a separate `.env` file: - - * `QDRANT_HOST`: The hostname for the Qdrant container (e.g., `qdrant_vdb_prod`). - * `OLLAMA_HOST`: The URL for the Ollama container (e.g., `http://ollama_llm_prod:11434`). - * `OLLAMA_MODEL`: The default model to use (e.g., `options-expert` or `mistral:7b-instruct-q4_0`). - * `YOUTUBE_API_KEY`: Your YouTube Data API key. - * **Optional**: `FRED_API_KEY`, `NEWS_API_KEY`, `REDDIT_CLIENT_ID`, `REDDIT_CLIENT_SECRET`, `REDDIT_USER_AGENT`. - -### Installation & Running the System - -From the root of the repository, build and launch the production services in detached mode: - -```bash -docker compose -f docker-compose.prod.yml up -d --build -``` - -You can check the status of the running containers: - -```bash -docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" -``` - ------ - -## ⚙️ Usage - -Once the containers are running, you can interact with the application using `docker exec`. - -### Run the Main Pipeline - -To execute the full data collection and analysis pipeline in a non-interactive mode: - -```bash -docker exec -it financial_agent_app_prod python src/main.py --no-interactive +```mermaid +graph TD + A[Data Ingestion: FRED/SEC/News/YFinance] --> B[Medallion Processing: Bronze -> Silver -> Gold] + B --> C{Query Router} + C -- Qualitative --> D[Qdrant: Hybrid Search + MMR + Metadata Filter] + C -- Quantitative --> E[Parquet: Pandas/Tool Calling Analysis] + D --> F[Analyst Agent: Synthesis & Strategy Generation] + E --> F + F --> G[Checker Agent: Real-time Liquidity & IV Validation] + G --> H[Critic Agent: Risk Exposure & Counter-Argument] + H --> I[Final Output: Structured Strategy Report + Evidence Table] ``` -### Start an Interactive Q\&A Session - -To start a session where you can ask questions based on the ingested data: +--- -```bash -docker exec -it financial_agent_app_prod python src/main.py -``` +### 4. Medallion Data Governance & Schema +Data is partitioned into three logical layers to ensure lineage and high information density: -### Generate the Daily Production Report +| Layer | Type | Storage | Purpose | +| :--- | :--- | :--- | :--- | +| **1_Bronze_Raw** | Unstructured | HTML / XML | Raw captures for debugging and regulatory look-back (TTL: 30 days). | +| **2_Silver_Structured** | Structured | Parquet | Time-series for Option Chains, IV, and Macro levels. Direct tool-access only. | +| **3_Gold_Semantic** | Refined | JSONL / MD | LLM-distilled summaries for vectorization (Qdrant) and Global System Prompts. | +| **Agent_Context** | Snapshot | Markdown | Daily "Global Subconscious" (Macro/GPR) injected into every Agent's prompt. | -To run the script that specifically generates the daily options ideas report: +--- -```bash -docker exec -it financial_agent_app_prod python src/tools/generate_production_report.py -``` +### 5. Quality Assurance & Evaluation Framework (Evaluation) +To maintain an institutional standard, the system is evaluated across three dimensions: -This command will output `options_ideas.json` and `options_ideas.md` to a new directory at `reports/YYYY-MM-DD/`. +* **RAGAS Benchmarking:** + * **Faithfulness:** Measures if the strategy is strictly derived from retrieved SEC/News data. + * **Context Precision:** Validates the temporal relevance of recalled signals (Metadata-driven). +* **Fact-Checking (Deterministic Validation):** + * The **Checker Agent** must ping live `yfinance` APIs to verify that any recommended option contract actually exists and has sufficient open interest. +* **The "Golden Dataset":** + * A curated set of 50+ complex historical QA pairs used as a ground-truth baseline to prevent regression during model or prompt updates. -### Create the Fine-tuned `options-expert` Model +--- -To create and validate the custom `options-expert` model within Ollama: +### 6. Implementation Prerequisites +All dependencies are consolidated into a single deployment command. The infrastructure is fully containerized for portability. +**One-liner Installation:** ```bash -docker exec -it financial_agent_app_prod python src/tools/create_options_expert.py +pip install requests pandas numpy pyarrow yfinance fredapi python-dotenv beautifulsoup4 markdownify langchain-ollama langchain-huggingface langgraph qdrant-client pydantic rich fastembed newspaper3k duckduckgo-search ``` ------ - -## 📝 Project Deliverables & Documentation - -This repository fulfills the following project requirements: - - * **Full Codebase & Containerization**: The complete, containerized application is available in this private GitHub repository. - * **Model Selection Memo**: The rationale for choosing the default LLM, including comparisons and trade-offs, is documented in `model_selection_memo.md`. - * **Example Run**: An example of the system's inputs, outputs, and logs is also included in `PRODUCTION_OPS_NOTES.md`. - * **Additional Signal Sources**: A note documenting other high-signal data sources that could be integrated is available in `PRODUCTION_OPS_NOTES.md`. - * **Compliance Note**: A section covering API usage terms, scraping restrictions, and disclosure rules is detailed in `compliance_note.md`. - ------ - -## 🔧 Troubleshooting - - * **Missing Transcripts**: If transcript fetching fails frequently, some channels may lack captions or API rate limits may have been hit. Consider widening the scan size and adding more channels to `tools/Youtube_channel_ID`. - * **`youtube_transcript_api` issues**: Ensure the library is correctly installed in the container by checking the `requirements.txt` and Docker build logs. - * **Qdrant/Ollama Health**: Check container logs for errors (`docker logs -f `). Ensure ports 6333 (Qdrant) and 11434 (Ollama) are accessible between containers and that Docker volumes are correctly mounted. - -### Common Docker Commands - -```bash -# Stop and remove all production containers -docker compose -f docker-compose.prod.yml down - -# Force a rebuild of the application image without using cache -docker compose -f docker-compose.prod.yml build --no-cache - -# Restart the main application container -docker restart financial_agent_app_prod - -# Tail the logs of the main application container -docker logs -f financial_agent_app_prod -``` +**Environment Requirements:** +* **Local Inference:** Ollama (running `llama3` or `mistral`). +* **Vector Store:** Qdrant Cloud or Dockerized Qdrant. +* **Credentials:** `.env` file containing `FRED_API_KEY` and `SEC_USER_AGENT`. \ No newline at end of file From f23ac7db4bd87fe89c7327507276309823ea96ea Mon Sep 17 00:00:00 2001 From: "Xinxin(Maxine)" Date: Mon, 20 Apr 2026 11:47:38 -0400 Subject: [PATCH 22/50] update connection logic for I/O --- Scripts/vector_store/connection.py | 123 +++++++++----------- docs/Vector_store_docs/Qdrant_connection.md | 53 ++++----- 2 files changed, 80 insertions(+), 96 deletions(-) diff --git a/Scripts/vector_store/connection.py b/Scripts/vector_store/connection.py index f582e6e..a7c36a2 100644 --- a/Scripts/vector_store/connection.py +++ b/Scripts/vector_store/connection.py @@ -1,6 +1,6 @@ """ Connection Management Layer for Vector Store (Cloud Native Version). -Implements Factory Pattern for Embedding Models (Ollama / HuggingFace). +Implements Factory Pattern for Embedding Models (HuggingFace CPU-Bound / Ollama). Manages secure RESTful connections to Qdrant Cloud. """ @@ -17,13 +17,8 @@ from langchain_huggingface import HuggingFaceEmbeddings from langchain_ollama import OllamaEmbeddings -try: - import torch -except ImportError: - torch = None - # ========================================== -# 0. 动态日志配置 (按天隔离) +# 0. Dynamic logging (daily log isolation) # ========================================== def setup_logger(): project_root = Path(__file__).resolve().parents[2] @@ -50,125 +45,113 @@ def setup_logger(): logger = setup_logger() -# 强制重载环境变量 -load_dotenv(override=True) +# Resolve project root and load .env +project_root = Path(__file__).resolve().parents[2] +load_dotenv(project_root / ".env", override=True) # ========================================== -# 1. 资源初始化逻辑 (模型工厂模式) +# 1. Factory: embedding model (device controlled via env) # ========================================== -def _detect_optimal_device() -> str: - """动态检测硬件加速器""" - if torch is None: - return "cpu" - if torch.cuda.is_available(): - return "cuda" - elif hasattr(torch.backends, 'mps') and torch.backends.mps.is_available(): - return "mps" - return "cpu" - @lru_cache(maxsize=1) def get_embedding_model() -> Embeddings: """ - 获取全局单例的 Embedding 模型 (工厂模式)。 - 返回 LangChain 的 Embeddings 基类,实现底层解耦。 + Factory with explicit device control via environment variables. + Returns a cached LangChain Embeddings implementation (one per process). """ - # 默认使用 ollama 提供商和 nomic-embed-text 模型 - provider = os.getenv("EMBEDDING_PROVIDER", "ollama").lower() - model_name = os.getenv("EMBEDDING_MODEL_NAME", "nomic-embed-text") + provider = os.getenv("EMBEDDING_PROVIDER", "huggingface").lower() + model_name = os.getenv("EMBEDDING_MODEL_NAME", "BAAI/bge-large-en-v1.5") + + # Guardrail: device comes from .env; default cpu + device = os.getenv("EMBEDDING_DEVICE", "cpu").lower() - logger.info(f"Initialize Embedding Engine -> Provider: [{provider.upper()}], Model: [{model_name}]") + logger.info(f"Initialize Embedding Engine -> Provider: [{provider.upper()}], Model: [{model_name}], Device: [{device.upper()}]") try: if provider == "ollama": - # 方案 A: 使用 Ollama 本地运行 (最适合 nomic-embed-text) + # Warning: Ollama embeddings can contend with a local LLM in production ollama_host = os.getenv("OLLAMA_HOST", "http://localhost:11434") - # 确保 URL 格式正确 - if not ollama_host.startswith("http"): - ollama_host = f"http://{ollama_host}:11434" - - embeddings = OllamaEmbeddings( + logger.warning("Using Ollama for embeddings. This may cause OOM if a large LLM is concurrently active.") + return OllamaEmbeddings( model=model_name, base_url=ollama_host ) elif provider == "huggingface": - # 方案 B: 使用 HuggingFace 本地加载 (适合 BGE 或没装 Ollama 的情况) - device = _detect_optimal_device() - logger.info(f"HuggingFace detected target device: [{device.upper()}]") + # Recommended: HuggingFace local; device from EMBEDDING_DEVICE (default cpu) + model_kwargs = {'device': device} + encode_kwargs = {'normalize_embeddings': True} # Normalize for cosine similarity in Qdrant - embeddings = HuggingFaceEmbeddings( + emb_model = HuggingFaceEmbeddings( model_name=model_name, - model_kwargs={ - 'device': device, - 'trust_remote_code': True # 适配 Nomic 等需要自定义代码的新模型 - }, - encode_kwargs={'normalize_embeddings': True} + model_kwargs=model_kwargs, + encode_kwargs=encode_kwargs ) + logger.info("✅ HuggingFace Embedding Model loaded successfully.") + return emb_model + else: - raise ValueError(f"Unsupported embedding provider: {provider}") - - logger.info("✅ Embedding Model loaded successfully.") - return embeddings - + raise ValueError(f"Unsupported EMBEDDING_PROVIDER: {provider}") + except Exception as e: logger.error(f"❌ Failed to load Embedding Model: {e}") - raise RuntimeError(f"Embedding initialization failed: {e}") + raise +# ========================================== +# 2. Qdrant Cloud connection +# ========================================== @lru_cache(maxsize=1) -def get_qdrant_client(max_retries: int = 3, delay_seconds: int = 2) -> QdrantClient: +def get_qdrant_client() -> QdrantClient: """ - 获取单例 Qdrant Cloud 客户端,带有网络容错与重试机制。 - 强制使用 HTTPS REST 协议,穿透 SCC 集群防火墙。 + Return cached Qdrant Cloud client singleton. """ - qdrant_url = os.getenv("QDRANT_URL") + qdrant_url = os.getenv("QDRANT_HOST") qdrant_api_key = os.getenv("QDRANT_API_KEY") - + if not qdrant_url or not qdrant_api_key: - error_msg = "QDRANT_URL or QDRANT_API_KEY is missing in .env file! Please configure your Cloud credentials." - logger.error(f"❌ {error_msg}") - raise ValueError(error_msg) - - masked_url = qdrant_url.replace("https://", "").split(".")[0][:8] + "..." - + logger.error("QDRANT_HOST or QDRANT_API_KEY is missing in .env") + raise ValueError("Database credentials missing.") + + max_retries = 3 + delay_seconds = 2 + for attempt in range(1, max_retries + 1): try: - logger.info(f"Connecting to Qdrant Cloud [{masked_url}] (Attempt {attempt}/{max_retries})...") + logger.info(f"Connecting to Qdrant Cloud [{qdrant_url[:12]}...] (Attempt {attempt}/{max_retries})...") client = QdrantClient( url=qdrant_url, api_key=qdrant_api_key, - timeout=15.0, # SCC 网络可能波动,设为 15 秒 - prefer_grpc=False # 强制关闭 gRPC,只走 HTTP (443端口),防止集群防火墙拦截 + timeout=15.0, + prefer_grpc=False # HTTP/HTTPS only; avoids many firewall/grpc blocks ) - # 验证连接 client.get_collections() - logger.info("✅ Connected to Qdrant Cloud successfully.") return client except Exception as e: logger.warning(f"⚠️ Connection to Cloud failed on attempt {attempt}: {e}") if attempt < max_retries: - logger.info(f"Retrying in {delay_seconds} seconds...") time.sleep(delay_seconds) else: logger.error("❌ Max retries reached. Could not connect to Qdrant Cloud.") - raise ConnectionError(f"Failed to connect to Qdrant Cloud after {max_retries} attempts.") from e + raise ConnectionError(f"Failed to connect to Qdrant Cloud.") from e # ========================================== -# 2. 健康检查 (Health Check) +# 3. Health check # ========================================== if __name__ == "__main__": logger.info("=== Starting System Component Health Check ===") try: - # 1. 测云端数据库 db_client = get_qdrant_client() collections = db_client.get_collections() logger.info(f"📊 Current Collections in Cloud: {[c.name for c in collections.collections]}") - # 2. 测本地模型 emb_model = get_embedding_model() - logger.info("🎉 Health Check Passed: Cloud DB and Embedding Models are fully operational.") + + # Smoke-test embedding pipeline + test_vec = emb_model.embed_query("Apple Inc. financial results.") + logger.info(f"✅ Embedding test passed. Vector dimension: {len(test_vec)}") + logger.info("🎉 Health Check Passed: Cloud DB and CPU Embedding Model are fully operational.") except Exception as e: - logger.error(f"Health Check Failed: {e}") \ No newline at end of file + logger.error(f"❌ Health Check Failed: {e}", exc_info=True) \ No newline at end of file diff --git a/docs/Vector_store_docs/Qdrant_connection.md b/docs/Vector_store_docs/Qdrant_connection.md index d47741b..aaa5e6b 100644 --- a/docs/Vector_store_docs/Qdrant_connection.md +++ b/docs/Vector_store_docs/Qdrant_connection.md @@ -1,10 +1,10 @@ # Connection Management & Model Factory Layer -This documentation details the `connection.py` module. This script acts as the foundational infrastructure layer for your vector operations, abstracting away the complexities of cloud database authentication, network resilience, and hardware-accelerated AI model initialization. +This documentation details the `connection.py` module. This script acts as the foundational infrastructure layer for your vector operations, abstracting away the complexities of cloud database authentication, network resilience, and AI model initialization for embeddings. ## 1. Strategic Objective -The primary goal of this module is to provide a robust, fault-tolerant connection gateway to **Qdrant Cloud** while serving as a dynamic **Factory** for text embedding models. It ensures that downstream applications (like ingestion pipelines or RAG agents) can reliably access the database and AI models without worrying about network drops, firewall restrictions, or underlying hardware configurations (e.g., Apple Silicon vs. Nvidia GPUs). +The primary goal of this module is to provide a robust, fault-tolerant connection gateway to **Qdrant Cloud** while serving as a dynamic **Factory** for text embedding models. It ensures that downstream applications (like ingestion pipelines or RAG agents) can reliably access the database and embedding models without worrying about network drops, firewall restrictions, or misconfigured hardware: device placement for HuggingFace is **explicit** via `EMBEDDING_DEVICE` (default `cpu`), rather than implied by the runtime. --- @@ -13,32 +13,32 @@ The primary goal of this module is to provide a robust, fault-tolerant connectio The module is designed around three core institutional-grade engineering patterns: - **Singleton / Caching Pattern (`@lru_cache`):** Prevents memory leaks and redundant network calls by ensuring that large embedding models and database clients are loaded into memory exactly once per session. -- **Provider Factory Engine:** Dynamically routes model initialization based on environment variables, allowing seamless swapping between local inferences (Ollama) and in-memory transformer models (HuggingFace) without altering downstream code. +- **Provider Factory Engine:** Dynamically routes model initialization based on environment variables, allowing seamless swapping between local inferences (Ollama) and HuggingFace-backed embeddings (default **`BAAI/bge-large-en-v1.5`**) without altering downstream code. - **Firewall-Resilient Connectivity:** Explicitly disables gRPC (`prefer_grpc=False`) and forces standard RESTful HTTP/HTTPS connections. This prevents the Qdrant client from being blocked by strict institutional or cluster firewalls. --- ## 3. Execution & Routing Workflow -The module isolates the initialization of the database client and the embedding model into two distinct, safe workflows. +The module isolates the initialization of the database client and the embedding model into two distinct, safe workflows. ```text [ INITIALIZATION REQUEST ] │ ├─► Database Route (get_qdrant_client) │ └─ Read Credentials from .env - │ └─ Attempt Qdrant Cloud Connection (HTTPS only) - │ └─ Network Check: Success? + │ └─ Attempt Qdrant Cloud Connection (HTTPS only, client timeout 15s) + │ └─ Network Check: Success? │ ├── YES: Return Client Object - │ └── NO: Trigger Retry Protocol (Max 3 attempts, 15s delay) + │ └── NO: Trigger Retry Protocol (max 3 attempts, 2s between attempts) │ └─► Embedding Route (get_embedding_model) - └─ Read EMBEDDING_PROVIDER from .env + └─ Read EMBEDDING_PROVIDER, EMBEDDING_MODEL_NAME, EMBEDDING_DEVICE from .env ├─► If "ollama": - │ └─ Bind to localhost LLM server. + │ └─ Use OLLAMA_HOST (default http://localhost:11434) and model_name. └─► If "huggingface" (Default): - └─ Detect Hardware Acceleration (CUDA vs. Apple MPS vs. CPU). - └─ Load Model weights into VRAM/RAM. + └─ Load HuggingFace model with device from EMBEDDING_DEVICE (default cpu). + └─ encode_kwargs: normalize_embeddings=True (cosine-friendly for Qdrant). └─ Cache Instance & Return LangChain Embeddings Object ``` @@ -51,37 +51,39 @@ Because this is a connection manager rather than a data processor, its "schema" ### Environment Schema (`.env` requirements) -| Variable | Default Value | Purpose | -| ---------------------- | --------------------- | --------------------------------------------------------------------------- | -| `QDRANT_HOST` | *Required* | The REST URL for your Qdrant Cloud cluster. | -| `QDRANT_API_KEY` | *Required* | Authentication token for cloud access. | -| `EMBEDDING_PROVIDER` | `huggingface` | Toggle between `huggingface` or `ollama`. | -| `EMBEDDING_MODEL_NAME` | (Depends on provider) | Specifies the exact model (e.g., `sentence-transformers/all-MiniLM-L6-v2`). | +| Variable | Default Value | Purpose | +| ---------------------- | -------------------------- | ----------------------------------------------------------------------- | +| `QDRANT_HOST` | *Required* | The REST URL for your Qdrant Cloud cluster. | +| `QDRANT_API_KEY` | *Required* | Authentication token for cloud access. | +| `EMBEDDING_PROVIDER` | `huggingface` | Toggle between `huggingface` or `ollama`. | +| `EMBEDDING_MODEL_NAME` | `BAAI/bge-large-en-v1.5` | HuggingFace model id or Ollama embedding model name, per provider. | +| `EMBEDDING_DEVICE` | `cpu` | Device string passed to HuggingFace (e.g. `cpu`, `cuda`, `mps`). | +| `OLLAMA_HOST` | `http://localhost:11434` | Base URL for Ollama when `EMBEDDING_PROVIDER=ollama`. | ### Output Artifacts -- `**get_qdrant_client()*`* returns: A verified `qdrant_client.QdrantClient` object. -- `**get_embedding_model()**` returns: A `langchain_core.embeddings.Embeddings` compliant object, ready for `.embed_query()` or `.embed_documents()`. +- **`get_qdrant_client()`** returns: A verified `qdrant_client.QdrantClient` object. +- **`get_embedding_model()`** returns: A `langchain_core.embeddings.Embeddings` compliant object, ready for `.embed_query()` or `.embed_documents()`. --- ## 5. Diagnostic & Verification -The script includes a built-in health check block. You can independently execute this file to verify both your cloud network connection and local hardware acceleration setup. +The script includes a built-in health check block. You can independently execute this file to verify both your cloud network connection and the embedding stack. -Run the module directly from your terminal: +Run the module directly from your terminal (from the repository root): ```bash -python connection.py +python Scripts/vector_store/connection.py ``` **Expected Successful Output:** 1. A log confirming connection to Qdrant Cloud. 2. A list of active collections currently hosted in your cloud database. -3. A hardware detection log (e.g., `Using device: mps` or `cuda`). -4. A test vector dimension readout (e.g., `Embedding Model Test Success. Vector Dimension: 384`), confirming the AI model is correctly loaded into memory. +3. An initialization log line from `get_embedding_model()` listing provider, model name, and device (from your `.env` or defaults). +4. A test vector dimension readout (e.g. for the default **`BAAI/bge-large-en-v1.5`**, dimension **1024**), confirming the embedding model runs end-to-end. --- @@ -93,5 +95,4 @@ Ensure your environment has the necessary libraries to support Qdrant Cloud, Lan pip install qdrant-client langchain-core langchain-huggingface langchain-ollama python-dotenv torch sentence-transformers ``` -*(Note: `torch` and `sentence-transformers` are required if you are using the default HuggingFace provider strategy).* -``` \ No newline at end of file +*(Note: `torch` and `sentence-transformers` are required if you are using the default HuggingFace provider strategy.)* From 4d1994f5943ca55639d648d22dd0f679df271acd Mon Sep 17 00:00:00 2001 From: "Xinxin(Maxine)" Date: Mon, 20 Apr 2026 11:48:29 -0400 Subject: [PATCH 23/50] upload query intent and retrieval logics docs --- .../Qdrant_retriever_docs.md | 101 +++++++ .../Query_retrieval_docs/Query_intent_docs.md | 109 ++++++++ .../Retrieval_Architecture_and_Strategy.md | 249 ++++++++++++++++++ 3 files changed, 459 insertions(+) create mode 100644 docs/Query_retrieval_docs/Qdrant_retriever_docs.md create mode 100644 docs/Query_retrieval_docs/Query_intent_docs.md create mode 100644 docs/Query_retrieval_docs/Retrieval_Architecture_and_Strategy.md diff --git a/docs/Query_retrieval_docs/Qdrant_retriever_docs.md b/docs/Query_retrieval_docs/Qdrant_retriever_docs.md new file mode 100644 index 0000000..9f21524 --- /dev/null +++ b/docs/Query_retrieval_docs/Qdrant_retriever_docs.md @@ -0,0 +1,101 @@ +# Technical Documentation: Asymmetric Hybrid Retrieval Engine (Gold Layer) + +## 1. Strategic Objective (Goal) +The primary objective of the `qdrant_retriever.py` module is to serve as the **Asymmetric Hybrid Retrieval Engine** for the system's Gold Semantic Layer. It bridges the gap between the LLM's query transformation (HyDE & Metadata) and the Qdrant vector database. By enforcing deterministic metadata pre-filtering and utilizing Reciprocal Rank Fusion (RRF), it guarantees that downstream multi-agent workflows receive context that is both semantically relevant and highly precise regarding specific financial entities and timeframes. + +--- + +## 2. System Architecture +The module is engineered with a focus on high-throughput, low-latency, and fault-tolerant execution: + +* **Singleton Resource Management (`_instance`):** Guarantees that heavy assets (database connections, Dense/Sparse embedding models) are loaded into memory exactly once per application lifecycle, preventing VRAM leaks. +* **Dual-Track Embedding Topology:** * *Dense Track:* Utilizes standard embeddings (e.g., HuggingFace/Nomic) against the LLM-generated HyDE paragraph to capture broad semantic intent (e.g., "flight to safety", "IV crush"). + * *Sparse Track:* Utilizes `fastembed` (SPLADE) against the raw user query to enforce exact-match lexical scoring for rare tickers or financial acronyms. +* **Defensive Filtering & RRF:** Employs Qdrant's native `models.Filter` for hard bounds (date ranges, specific tickers) and `models.Fusion.RRF` to mathematically balance Dense and Sparse retrieval scores. + +--- + +## 3. Code Strategy & Execution Workflow +The execution strategy operates asynchronously, mapping the structured transformation payload into a complex database query, executing it, and standardizing the output. + +```text +[ Input: FullTransformationResult & Raw Query ] + │ + ▼ +[ Step 1: Deterministic Filter Construction ] + ├─► Evaluate TimeWindow (Convert to Unix Timestamp constraints) + └─► Evaluate Tickers (Generate 'Should' matching filters) + │ + ▼ +[ Step 2: Asymmetric Vectorization ] + ├─► Embed HyDE Paragraph -> Dense Vector (Semantic) + └─► Embed Raw Query -> Sparse Vector (Lexical/BM25) + │ + ▼ +[ Step 3: Qdrant Prefetch & Fusion Execution ] + └─► Execute Qdrant `FusionQuery(fusion=RRF)` + └─► Apply Step 1 Filters to limit search space BEFORE vector math. + │ + ▼ +[ Output: List[RetrievedChunk] ] + └─► Mapped & cleansed for the Agent Orchestrator +``` + +--- + +## 4. Output Data Schema & Routing +The module does not write to a physical file path. It operates entirely in memory, returning a strictly typed Python list of `RetrievedChunk` objects. This payload is routed directly to the LangGraph agents (Analyst, Checker, Critic). + +### Schema: `RetrievedChunk` (Mapped Output) + +| Field Name | Data Type | Source/Index | Purpose | +| :--- | :--- | :--- | :--- | +| `chunk_id` | String | Qdrant `id` | Unique UUID of the point for traceability. | +| `text` | String | Qdrant Payload | The actual financial summary/news text. | +| `score` | Float | RRF Algorithm | Combined relevance score used for MMR reranking. | +| `source_type` | Enum / String | Qdrant Payload | Categorizes origin (e.g., `SEC_Form_4`, `GDELT_News`). | +| `timestamp` | Integer | Qdrant Payload | Unix epoch of publication, critical for temporal weighting. | +| `bronze_ref` | String | Qdrant Payload | Accession number or URL linking back to the raw Bronze data. | +| `metadata` | Dictionary | Qdrant Payload | Unpacked entity tags (tickers, impacted assets). | + +--- + +## 5. Verification & Testing Protocol +The script includes an asynchronous sandboxed testing environment (`if __name__ == "__main__":`). It utilizes a mock implementation of the `QueryTransformer` to simulate a full query-to-retrieval lifecycle without requiring the entire system to run. + +**How to Test:** +Execute the script directly from your terminal: +```bash +python Scripts/retrieval/qdrant_retriever.py +``` + +**Expected Successful Output:** +1. **Stage 1 (Mock):** Console prints the simulated LLM extraction (Tickers, Time, HyDE generation). +2. **Stage 2 (Retrieval):** The console prints `🔍 Stage 2: Qdrant Hybrid Retrieving...`. +3. **Final Result:** Outputs `✅ Final Retrieved: [N] chunks` followed by an enumerated list of results displaying their RRF Scores, Bronze References, Source Types, and primary Tickers. + +```json +{"timestamp": "2026-04-19T21:16:01.849708", +"original_query": "What recent insider buying activity has there been for TSLA and how did the market react?", +"rerank_query_used": "TSLA Form 4 insider buying executives past month", "filter_applied": { + "should": null, + "min_should": null, + "must": [ + {"key": "ticker", "match": {"any": ["TSLA"]}, "range": null, "geo_bounding_box": null, "geo_radius": null, "geo_polygon": null, "values_count": null, "is_empty": null, "is_null": null}, + {"key": "source_type", "match": {"any": ["sec", "news"]}, "range": null, "geo_bounding_box": null, "geo_radius": null, "geo_polygon": null, "values_count": null, "is_empty": null, "is_null": null}, + {"key": "action_direction", "match": {"any": ["BUY", "ACQUIRE/VEST"]}, "range": null, "geo_bounding_box": null, "geo_radius": null, "geo_polygon": null, "values_count": null, "is_empty": null, "is_null": null}, + {"key": "form_type", "match": {"value": "4"}, "range": null, "geo_bounding_box": null, "geo_radius": null, "geo_polygon": null, "values_count": null, "is_empty": null, "is_null": null}, + {"key": "unified_timestamp", "match": null, "range": {"lt": null, "gt": null, "gte": 1774055761.0, "lte": 1776647761.0}, "geo_bounding_box": null, "geo_radius": null, "geo_polygon": null, "values_count": null, "is_empty": null, "is_null": null}], "must_not": null}, + "fallback_triggered": false, "results_count": 1, "top_k_scores": [0.0145], "latency_sec": 0.857, "status": "SUCCESS", "error_msg": null} +``` + +--- + +## 6. Environment Dependencies +Ensure your `.env` file contains your Qdrant credentials and HuggingFace cache paths. + +**One-Line Installation Command:** +```bash +pip install qdrant-client fastembed sentence-transformers python-dotenv asyncio +``` +*(Note: This module relies on the system's core schemas and connection factory located in `Scripts.vector_store.connection` and `Scripts.retrieval.schema`).* \ No newline at end of file diff --git a/docs/Query_retrieval_docs/Query_intent_docs.md b/docs/Query_retrieval_docs/Query_intent_docs.md new file mode 100644 index 0000000..4dcfe65 --- /dev/null +++ b/docs/Query_retrieval_docs/Query_intent_docs.md @@ -0,0 +1,109 @@ +# Context-Anchored Query Transformation Engine + +This documentation details the `query_transform.py` module, which serves as the intelligent vanguard of the retrieval pipeline. It intercepts user queries and transforms them into highly structured, database-ready parameters. + +## 1. Strategic Objective (Goal) +The primary goal of this module is to operate as an **industrial-grade, two-stage query transformation engine**. It eliminates the ambiguity of raw human questions by parsing them into deterministic filters (Metadata Extraction) while simultaneously enhancing semantic retrieval through synthetic document generation (HyDE). This drastically reduces the "needle in a haystack" problem during vector searches and ensures downstream multi-agent workflows receive perfectly clean data. + +--- + +## 2. System Architecture +The module is built upon a **Fully Decoupled Prompt & Guardrail Architecture**, ensuring high stability and preventing Large Language Model (LLM) hallucinations: + +* **Ontology-Driven Constraints:** Tightly coupled with `financial_ontology.py` to enforce strict adherence to allowed vocabularies (`ALLOWED_METRICS`, `ALLOWED_SOURCES`). +* **Schema Enforcement:** Utilizes Pydantic schemas (defined in `schema.py`) to guarantee that the LLM's output is consistently parsed into strongly-typed objects. +* **Asynchronous AI Pipeline:** Built natively with `asyncio` and `ChatOllama`, allowing for non-blocking execution of LLM prompts, significantly reducing latency during the two-stage transformation. + +--- + +## 3. Code Strategy & Execution Workflow +The code executes a sequential, two-stage AI strategy designed to maximize the fidelity of the final Retrieval-Augmented Generation (RAG) context. + +1. **Stage 1: Analytical Metadata Extraction** + The engine passes the query to the LLM equipped with the `EXTRACTOR_SYSTEM_PROMPT`. The LLM identifies target tickers, maps financial metrics to database-friendly column names, and deduces time windows. +2. **Stage 2: HyDE (Hypothetical Document Embeddings) Generation** + Using the reasoning from Stage 1 and the `HYDE_WRITER_SYSTEM_PROMPT`, the LLM drafts a fake, textbook-perfect "financial report paragraph" that directly answers the user's question. This paragraph is embedded to find the closest real documents in the Gold Semantic Layer. + +```text +[ Raw User Query ] + │ + ▼ +[ Stage 1: Metadata Extractor ] + ├─► Validate via Financial Ontology + └─► Extract: Tickers, Metrics, Action Direction, Time Window + │ + ▼ +[ Stage 2: HyDE Generator ] + └─► Generate: Hypothetical Financial Paragraph + │ + ▼ +[ Output: FullTransformationResult ] + └─► Handed off to Qdrant Retriever & SQL Tools +``` + +--- + +## 4. Output Data Schema & Routing +The engine produces an in-memory `FullTransformationResult` object. It does not save to a physical file path; instead, it dynamically routes this structured payload directly into the retrieval pipeline. + +### Schema: `FullTransformationResult` + +| Component | Field Name | Data Type | Purpose | +| :--- | :--- | :--- | :--- | +| **Metadata** | `logical_reasoning` | String | The LLM's step-by-step logic detailing why specific variables were extracted. | +| **Metadata** | `tickers` | List[String] | Explicit stock or ETF symbols identified (e.g., `["SPY", "NVDA"]`). | +| **Metadata** | `metrics` | List[String] | Canonical financial metrics requested (e.g., `["iv_skew", "put_call_ratio"]`). | +| **Metadata** | `action_direction` | String | Identifies categorical actions (e.g., `BUY`, `SELL`, `NEUTRAL`). | +| **Metadata** | `time_window` | Object | Standardized date range used for temporal pre-filtering in Qdrant. | +| **HyDE** | `hyde_paragraph` | String | The synthetic financial text used for Dense Vector similarity matching. | + +--- + +## 5. Verification & Testing Protocol +The script includes a built-in asynchronous sandbox at the bottom of the file (`if __name__ == "__main__":`), allowing developers to independently verify the LLM's extraction logic and prompt effectiveness without triggering the entire RAG pipeline. + +**How to Test:** +Run the module directly from your terminal: +```bash +python Scripts/retrieval/query_transform.py +``` + +**Expected Successful Output:** +The console will print a distinct separation of stages: +1. **[STAGE 1]:** Displays the `🧠 Reasoning`, `📊 Tickers`, `📈 Metrics`, and `🕒 Time Window` extracted from the mock query. +2. **[STAGE 2]:** Prints the generated fake financial text designed for vector matching. +```json +{"timestamp": "2026-04-19T21:16:00.977910", +"latency_seconds": 107.96, +"original_query": "What recent insider buying activity has there been for TSLA and how did the market react?", +"primary_route": "hybrid_both", +"transformation_result": { + "metadata": { + "logical_reasoning": "Macro Step: Insider activity. Meso Step: Market reaction. Micro Step: TSLA insiders. Action: BUY.", + "tickers": ["TSLA"], + "metrics": ["Insider Trading", "Price Change (%)"], + "source_types": ["sec", "news"], + "action_direction": "BUY", + "form_type": "4", + "sentiment_target": "ANY", + "event_keyword": "insider_buying", + "time_window": "past_month"}, + "hyde": { + "hyde_paragraph": "TSLA insiders have recently filed Form 4s indicating buying activity, which may signal confidence in the company's prospects, potentially leading to higher stock prices.", + "rerank_query": "TSLA Form 4 insider buying executives past month"}, "mapped_physical_columns": ["mom_change_pct", "insider_net_flow", "daily_change_pct"] + } +} + +``` + +--- + +## 6. Environment Dependencies +Ensure your `.env` file is properly configured at the `PROJECT_ROOT` level, and that local Ollama services are active if running local models. + +**Required Installations:** +Execute the following one-line command to install the required dependencies for this module: + +```bash +pip install langchain-core langchain-ollama pydantic python-dotenv asyncio +``` diff --git a/docs/Query_retrieval_docs/Retrieval_Architecture_and_Strategy.md b/docs/Query_retrieval_docs/Retrieval_Architecture_and_Strategy.md new file mode 100644 index 0000000..5b3773d --- /dev/null +++ b/docs/Query_retrieval_docs/Retrieval_Architecture_and_Strategy.md @@ -0,0 +1,249 @@ +# Retrieval Architecture, Strategy, and Workflow + +## I. Mission Profile and System Boundary + +This document defines the production retrieval architecture implemented across: + +- `Scripts/core/financial_ontology.py` +- `Scripts/core/prompt_templates.py` +- `Scripts/core/few_shot_config.py` +- `Scripts/retrieval/schema.py` +- `Scripts/retrieval/query_transform.py` +- `Scripts/retrieval/qdrant_retriever.py` +- `Scripts/vector_store/connection.py` + +The retrieval subsystem is designed as a **two-stage query transformation pipeline** followed by an **asymmetric hybrid retrieval and reranking pipeline**. Its objective is to convert ambiguous user language into deterministic filters and high-signal retrieval vectors for Qdrant Cloud. + +--- + +## II. Institutional-Grade Architectural Topology + +### A. Knowledge Governance Layer (`Scripts/core`) + +- **Ontology governance** (`financial_ontology.py`): + - Defines controlled vocabularies: `ALLOWED_SOURCES`, `ALLOWED_CATEGORIES`, `ALLOWED_METRICS`. + - Provides deterministic semantic-to-physical mapping via `METRIC_TO_COLUMN_MAPPING`. + - Prevents free-form extraction drift by anchoring output fields to approved values. +- **Prompt governance** (`prompt_templates.py`): + - Stage 1 prompt: strict extractor with explicit output constraints. + - Stage 2 prompt: HyDE writer plus concise `rerank_query` generation. +- **Few-shot calibration** (`few_shot_config.py`): + - Injects examples for SEC, macro/news, and options-style queries when available. + +### B. Contract and Type-Safety Layer (`Scripts/retrieval/schema.py`) + +- Uses Pydantic models as strict contracts for: + - `MetadataExtraction` + - `HyDEGeneration` + - `FullTransformationResult` + - `RetrievedChunk` + - `QueryIntent` +- Uses enums to enforce standardized values (for source, action, form type, time window, sentiment). + +### C. Transformation Intelligence Layer (`Scripts/retrieval/query_transform.py`) + +- Executes asynchronous two-stage LLM transformation: + 1. **Extractor LLM** for structured metadata. + 2. **HyDE writer LLM** for retrieval-oriented synthetic paragraph and rerank phrase. +- Applies post-LLM guardrails: + - ticker whitelist cleanup + - mapped physical column derivation from ontology + - audit logging to `logs/query_transform//query_audit_trail.jsonl` + +### D. Retrieval Execution Layer (`Scripts/retrieval/qdrant_retriever.py`) + +- Performs hybrid retrieval with three components: + - Dense embedding retrieval (semantic channel) + - Sparse SPLADE retrieval (lexical channel) + - Cross-encoder reranking (precision channel) +- Applies metadata/time filters before fusion. +- Uses Qdrant `Fusion.RRF` to combine dense + sparse prefetch channels. +- Produces standardized `List[RetrievedChunk]` and writes retrieval audit logs to `logs/retrieval//retriever_audit_trail.jsonl`. + +### E. Infrastructure and Connectivity Layer (`Scripts/vector_store/connection.py`) + +- Provides cached singletons for: + - Qdrant Cloud client (`get_qdrant_client`) + - Embedding provider (`get_embedding_model`) +- Enforces REST/HTTP path (`prefer_grpc=False`) for firewall resilience. +- Loads all key runtime settings from `.env`. + +--- + +## III. Retrieval Strategy Blueprint + +### A. Why This Is an Asymmetric Hybrid Strategy + +The system deliberately uses **different texts for different vector channels**: + +- **Dense channel input:** `hyde_paragraph` (high-context semantic expansion) +- **Sparse channel input:** `rerank_query` (short factual lexical target) + +This asymmetry balances: +- semantic recall for abstract phrasing, and +- exact precision for tickers, forms, and event keywords. + +### B. Deterministic Filtering Strategy + +`_build_smart_filter(...)` applies institutional filtering logic before retrieval: + +- ticker matching (`ticker`) +- source-type matching (`source_type`) +- SEC action/form constraints (`action_direction`, `form_type`) +- News sentiment constraints (`tone_score > 0` or `< 0`) +- time-range bounds via `unified_timestamp` + +This design reduces false positives before vector scoring begins. + +### C. Post-Fusion Precision Strategy + +After RRF fusion: + +- candidate texts are rescored by a cross-encoder reranker, +- low-score noise is dropped (`score > 0.00001`), +- top-k finalized records are normalized to `RetrievedChunk`. + +--- + +## IV. End-to-End Workflow (Execution Graph) + +```text +[User Query] + | + v +[QueryIntent (upstream router/orchestrator)] + | + v +[Stage 1: Metadata Extraction | ChatOllama + Pydantic] + |- ontology-constrained fields + |- ticker whitelist guardrail + |- enum-normalized metadata + | + v +[Stage 2: HyDE + Rerank Query Generation | ChatOllama + Pydantic] + |- hyde_paragraph (semantic carrier) + |- rerank_query (lexical carrier) + | + v +[Hybrid Vectorization] + |- Dense: embed_query(hyde_paragraph) + |- Sparse: SPLADE(query_embed(rerank_query)) + | + v +[Qdrant Prefetch + Fusion.RRF] + |- dense prefetch (using="dense") + |- sparse prefetch (using="sparse") + |- metadata/time smart filter + | + v +[Cross-Encoder Rerank] + |- pairwise scoring: [rerank_query, candidate_text] + |- sort descending + | + v +[RetrievedChunk[] Output] + |- bronze_ref (accession/url/id fallback) + |- source_type, score, metadata + | + v +[Audit Logs + downstream agent consumption] +``` + +--- + +## V. Model Registry and Compute Placement (CPU/GPU) + +### A. Query Transformation Models + +1. **Extractor LLM** + - Class: `ChatOllama(...).with_structured_output(MetadataExtraction)` + - Env key: `OLLAMA_CUSTOM_MODEL_NAME` + - Default: `options-expert-v1:latest` + - Purpose: strict metadata extraction and reasoning chain + - Compute: managed by Ollama runtime (CPU/GPU selection depends on host Ollama configuration) + +2. **HyDE Writer LLM** + - Class: `ChatOllama(...).with_structured_output(HyDEGeneration)` + - Env key: `OLLAMA_CUSTOM_MODEL_NAME` + - Default: `options-expert-v1:latest` + - Purpose: generate `hyde_paragraph` and `rerank_query` + - Compute: managed by Ollama runtime (CPU/GPU depends on Ollama deployment) + +### B. Retrieval Models + +1. **Dense Embedding Model** + - Source factory: `get_embedding_model()` in `connection.py` + - Provider env: `EMBEDDING_PROVIDER` (default `huggingface`) + - Model env: `EMBEDDING_MODEL_NAME` (default `BAAI/bge-large-en-v1.5`) + - Device env: `EMBEDDING_DEVICE` (default `cpu`) + - Compute: + - HuggingFace mode: explicit `EMBEDDING_DEVICE` control (`cpu`, `cuda`, `mps`, etc.) + - Ollama embedding mode: compute managed by Ollama server (`OLLAMA_HOST`) + +2. **Sparse Embedding Model** + - Class: `SparseTextEmbedding` + - Env key: `SPARSE_MODEL_NAME` + - Default: `prithivida/Splade_PP_en_v1` + - Threads env: `FASTEMBED_THREADS` (default `4`) + - Compute: CPU-oriented thread execution + +3. **Reranker Model** + - Class: `CrossEncoder` + - Env key: `RERANKER_MODEL_NAME` + - Default: `BAAI/bge-reranker-v2-m3` + - Device env: `RETRIEVER_DEVICE` (default `cpu`) + - Compute: explicit PyTorch device control via `RETRIEVER_DEVICE` (CPU or GPU-enabled if available) + +### C. Data Plane / Database Runtime + +- **Vector database:** Qdrant Cloud +- **Client:** `QdrantClient` +- **Connection mode:** HTTP/HTTPS (`prefer_grpc=False`) +- **Timeout:** `15.0s` +- **Retry policy:** up to `3` attempts with `2s` delay + +--- + +## VI. Runtime Configuration Matrix (`.env`) + +| Key | Default | Function | +| --- | --- | --- | +| `QDRANT_HOST` | required | Qdrant Cloud endpoint | +| `QDRANT_API_KEY` | required | Qdrant authentication | +| `EMBEDDING_PROVIDER` | `huggingface` | Dense embedding backend | +| `EMBEDDING_MODEL_NAME` | `BAAI/bge-large-en-v1.5` | Dense model selection | +| `EMBEDDING_DEVICE` | `cpu` | Dense model device placement | +| `OLLAMA_HOST` | `http://localhost:11434` | Ollama embedding server endpoint | +| `OLLAMA_CUSTOM_MODEL_NAME` | `options-expert-v1:latest` | Query-transform LLM for both stages | +| `SPARSE_MODEL_NAME` | `prithivida/Splade_PP_en_v1` | Sparse lexical model | +| `FASTEMBED_THREADS` | `4` | Sparse model thread count | +| `RERANKER_MODEL_NAME` | `BAAI/bge-reranker-v2-m3` | Cross-encoder model | +| `RETRIEVER_DEVICE` | `cpu` | Cross-encoder device placement | + +--- + +## VII. Reliability and Auditability Controls + +- **Singleton/caching controls:** + - `@lru_cache` for embedding model and Qdrant client + - singleton retriever instance via `__new__` +- **Traceability controls:** + - transformation audit JSONL + - retrieval audit JSONL with scores, latency, filters, fallback flag +- **Failure controls:** + - retrying Qdrant connection policy + - exception-safe retrieval returns empty list with logged diagnostics + +--- + +## VIII. Practical Invocation Sequence + +```python +# Pseudocode-level flow +intent = QueryIntent(primary_route="hybrid_both") +transform_result = await QueryTransformer().transform_for_dual_rag(query, intent) +chunks = await FinancialHybridRetriever().retrieve_async(query, transform_result, top_k=5) +``` + +This sequence represents the canonical retrieval path used by downstream agents. + From 619313f4f7dfee91987e07fb3844c7ef45320aa0 Mon Sep 17 00:00:00 2001 From: "Xinxin(Maxine)" Date: Thu, 23 Apr 2026 08:18:20 -0400 Subject: [PATCH 24/50] Update Configs --- config/README.md | 192 ++++++++++++++++++ config/pipeline/options_history.json | 49 +++++ .../ticker_to_cik.json | 0 config/runtime/collect_data_state.json | 6 +- .../sec_processed_registry.json} | 0 config/universe/_manifest.json | 49 +++++ .../equity_single_name.json} | 2 +- config/universe/etf_broad_market.json | 1 + config/universe/etf_commodity.json | 1 + 9 files changed, 296 insertions(+), 4 deletions(-) create mode 100644 config/README.md create mode 100644 config/pipeline/options_history.json rename config/{SEC_Ingestion => reference}/ticker_to_cik.json (100%) rename config/{SEC_Processing/global_processed_registry.json => runtime/sec_processed_registry.json} (100%) create mode 100644 config/universe/_manifest.json rename config/{SEC_Ingestion/SEC_tickers.json => universe/equity_single_name.json} (85%) create mode 100644 config/universe/etf_broad_market.json create mode 100644 config/universe/etf_commodity.json diff --git a/config/README.md b/config/README.md new file mode 100644 index 0000000..fee9a0b --- /dev/null +++ b/config/README.md @@ -0,0 +1,192 @@ +# `config/` — Configuration single source of truth + +This tree is intentionally **semantic-layered**, not pipeline-layered: files +live next to *what they describe* (the asset universe, reference maps, +per-pipeline parameters), not next to the script that happens to consume them. +All access goes through **`Scripts/core/universe.py`** — callers should never +`open()` files in this tree directly. + +## Layout + +``` +config/ +├── universe/ # WHAT we track +│ ├── _manifest.json # schema + role metadata (owner, coverage, flags) +│ ├── equity_single_name.json # 48 Nasdaq-100 single-names +│ ├── etf_broad_market.json # ["SPY", "QQQ", "IWM"] +│ └── etf_commodity.json # ["GLD", "SLV"] +│ +├── reference/ # STATIC lookup tables (derived from external sources) +│ └── ticker_to_cik.json # ticker -> SEC CIK (~10K entries; written by SEC_generate_cik_map.py) +│ +├── pipeline/ # PER-PIPELINE parameters (no business logic) +│ └── options_history.json # yfinance options scraper: universe_role, storage strategy, … +│ +└── runtime/ # MUTABLE runtime state + ├── collect_data_state.json # data-collection checkpoint + └── sec_processed_registry.json # SEC accession de-dup ledger (moved from SEC_Processing/ on 2026-04-22) +``` + +> Retired on **2026-04-22**: ``config/SEC_Ingestion/`` and ``config/SEC_Processing/``. +> All of their content now lives under ``universe/``, ``reference/``, or ``runtime/`` +> and is reached through ``Scripts.core.universe`` — **never** by opening a hard-coded +> path. + +## Why semantic layering + +| Old pipeline-layered layout | New semantic layout | +|------------------------------------------------------|---------------------------------------------| +| `config/SEC_Ingestion/SEC_tickers.json` | `config/universe/equity_single_name.json` | +| `config/Option_chain/target_symbols.json` (proposed) | `config/universe/etf_broad_market.json` | +| Duplicated ticker lists across pipelines | **One list per role**, unioned via manifest | + +The universe knows nothing about SEC or yfinance; it just declares *which +tickers are equities, which are broad-market ETFs, which are commodity ETFs*. +Pipelines then **ask for a role** (`sec.filers`, `options.scrape`) and the +manifest resolves the union. + +## Access pattern + +```python +from Scripts.core.universe import universe, pipelines, paths + +universe.get("sec.filers") # ['AAPL', 'ADBE', …] +universe.get("options.scrape") # 53 tickers = single_names ∪ ETFs +universe.cik_map() # {'AAPL': '0000320193', …} +universe.asset_class_of("SPY") # 'etf' + +pipelines.load("options_history") # dict with scrape / storage / … + +paths.options_parquet_path("SPY", "2026-04-22") +# legacy -> Data/2_Silver_Processed/Options_Market_Data/2026-04-22/SPY_options_2026-04-22.parquet +# hive_v1 -> Data/2_Silver_Processed/Options_Market_Data/snapshot_date=2026-04-22/asset_class=etf/SPY.parquet +# monthly_rollup +# -> Data/2_Silver_Processed/Options_Market_Data/raw/snapshot_date=2026-04-22/SPY.parquet +``` + +The active strategy is `storage.strategy` in `pipeline/options_history.json`. +**Default is `legacy`**, which produces paths byte-identical to the +pre-migration code so `Scripts/retrieval/sql_tools.py` read-side globs keep +working unchanged. + +--- + +## Storage scaling — the 13K-files-per-year problem + +With the universe now at **53 tickers** (`options.scrape` role), the scraper +writes **53 parquet / day → ~13,356 parquet / year**. The tree below is the +recommended migration path. None of it requires touching the scraper's +business logic. + +### Phase 0 — today (`storage.strategy = legacy`) ✅ default + +``` +Data/2_Silver_Processed/Options_Market_Data/ +└── 2026-04-22/ + ├── SPY_options_2026-04-22.parquet + ├── QQQ_options_2026-04-22.parquet + └── … +``` + +* Pros: zero-risk drop-in for the existing `*/*.parquet` glob in + `sql_tools.py:183`. +* Cons: No partition pruning metadata on disk; just a flat date folder. +* Verdict: **fine up to ~5K–10K files**. DuckDB will still happily glob that + many parquets; the real cost is only in S3-backed setups with per-object + latency. + +### Phase 1 — Hive partitioning (`storage.strategy = hive_v1`) + +``` +Data/2_Silver_Processed/Options_Market_Data/ +├── snapshot_date=2026-04-22/ +│ ├── asset_class=etf/ +│ │ ├── SPY.parquet +│ │ ├── QQQ.parquet +│ │ └── … +│ └── asset_class=equity/ +│ ├── AAPL.parquet +│ ├── MSFT.parquet +│ └── … +``` + +* DuckDB reads with partition pushdown: + ```sql + SELECT * FROM read_parquet( + '.../Options_Market_Data/**/*.parquet', hive_partitioning=1 + ) + WHERE snapshot_date = '2026-04-22' AND asset_class = 'etf' + ``` + → only touches the 5 ETF files, not all 53. +* **Still ~13K files/year** — but with cheap column-free filtering. +* Migration cost: (a) update `options_glob` to `**/*.parquet` and add + `hive_partitioning=1`; (b) optional one-off backfill script to copy legacy + files into the new tree; (c) flip `storage.strategy` to `hive_v1`. + +### Phase 2 — Monthly roll-up compaction (`storage.strategy = monthly_rollup`) + +``` +Data/2_Silver_Processed/Options_Market_Data/ +├── raw/ # hot tier: last N days only +│ └── snapshot_date=2026-04-22/ +│ ├── SPY.parquet +│ └── … +└── rollup/ # cold tier: 1 compacted file / month + ├── snapshot_month=2026-03/ + │ └── options_chain.parquet # ALL tickers × ALL days of March + └── snapshot_month=2026-04/ + └── options_chain.parquet +``` + +* Writer side is unchanged — it keeps dropping per-ticker-per-day files into + `raw/`. A **separate compaction job** (e.g. monthly cron, not included in + this PR) runs: + ```python + df = duckdb.sql(f""" + SELECT *, snapshot_date + FROM read_parquet('.../raw/snapshot_date=2026-03-*/*.parquet', + hive_partitioning=1) + """).to_df() + df.to_parquet('.../rollup/snapshot_month=2026-03/options_chain.parquet', + partition_cols=None, compression='zstd', row_group_size=100_000) + # After rollup is verified, the raw/ tier is pruned for that month. + ``` +* **File count collapses from ~1100/month to 1/month** → 12 rollup files + + ~30–60 days of raw hot files = well under 100 files/year on disk. +* Silver SQL then reads: `rollup/**/*.parquet UNION ALL raw/**/*.parquet` + with a date-range filter — DuckDB merges the views. + +### When to escalate + +| Universe size | Recommendation | +|---------------|--------------------------------------| +| ≤ 20 tickers | `legacy` is fine. Don't over-engineer. | +| 20–80 tickers | Move to `hive_v1` when convenient. | +| 80+ tickers, multi-year horizon | Implement Phase 2 rollup; prune `raw/` after compaction. | + +--- + +## Adding a new ticker + +1. Append the ticker to the right leaf file under `universe/` (e.g. + `universe/equity_single_name.json`). +2. If it requires SEC filings, run + `python Scripts/tools/SEC_generate_cik_map.py` to refresh + `config/reference/ticker_to_cik.json`. +3. No code change. Both `sec_ingestion.py` and `yfinance_options_history.py` + pick up the new ticker on the next run via `universe.get(role)`. + +## Migration log (2026-04-22) + +| Retired location | New location | +|------------------------------------------------------|----------------------------------------------------| +| `config/SEC_Ingestion/SEC_tickers.json` | `config/universe/equity_single_name.json` (role `sec.filers`) | +| `config/SEC_Ingestion/ticker_to_cik.json` | `config/reference/ticker_to_cik.json` | +| `config/SEC_Processing/global_processed_registry.json` | `config/runtime/sec_processed_registry.json` | + +Callers updated in the same commit: +`Scripts/retrieval/query_transform.py`, `Scripts/tools/SEC_generate_cik_map.py`, +`Scripts/tools/SEC_Accession_No_depulicated.py`, +`Scripts/data_collection/scrapers/sec_ingestion.py`, +`Scripts/data_collection/processors/sec_processor.py`, +`Scripts/core/universe.py`. diff --git a/config/pipeline/options_history.json b/config/pipeline/options_history.json new file mode 100644 index 0000000..dcca0f9 --- /dev/null +++ b/config/pipeline/options_history.json @@ -0,0 +1,49 @@ +{ + "schema_version": "1.0", + "description": "Parameters for Scripts/data_collection/scrapers/yfinance_options_history.py. Business logic (derived metrics, is_liquid flag) is NOT governed here and stays in code.", + + "universe_role": "options.scrape", + + "scrape": { + "request_delay_sec": 1.0, + "inter_symbol_delay_sec": 2.0, + "near_term_expirations": 10 + }, + + "storage": { + "strategy": "legacy", + "comment": "Active strategy is `legacy`. Keep this value until Silver read-side (Scripts/retrieval/sql_tools.py:options_glob) is migrated to Hive-partitioned glob. Supported strategies:", + "strategies": { + "legacy": { + "path_template": "{data_root}/2_Silver_Processed/Options_Market_Data/{snapshot_date}/{symbol}_options_{snapshot_date}.parquet", + "description": "Current layout. 1 file per (ticker, day). Preserves backward compatibility with sql_tools.py's `*/*.parquet` glob.", + "files_per_year_at_53_tickers": 13356 + }, + "hive_v1": { + "path_template": "{data_root}/2_Silver_Processed/Options_Market_Data/snapshot_date={snapshot_date}/asset_class={asset_class}/{symbol}.parquet", + "description": "Hive-partitioned by (snapshot_date, asset_class). Enables DuckDB partition pruning via hive_partitioning=1. Requires read-side glob update to `**/*.parquet`.", + "files_per_year_at_53_tickers": 13356, + "migration_checklist": [ + "1. Update Scripts/retrieval/sql_tools.py:options_glob to use hive_partitioning=1.", + "2. Backfill: re-run snapshot or one-off migration copying legacy files into new tree.", + "3. Flip storage.strategy to `hive_v1` here.", + "4. Update docs/Data_source_docs/options_historial_data.md path example." + ] + }, + "monthly_rollup": { + "path_template_raw": "{data_root}/2_Silver_Processed/Options_Market_Data/raw/snapshot_date={snapshot_date}/{symbol}.parquet", + "path_template_rollup": "{data_root}/2_Silver_Processed/Options_Market_Data/rollup/snapshot_month={yyyy_mm}/options_chain.parquet", + "description": "Dual-tier: hot raw (last N days) + monthly compacted roll-up. Single rollup file per month instead of ~1100 per month. Requires a compaction job (see docs/storage_migration.md).", + "target_files_per_year": 12, + "notes": "Recommended final state once universe grows beyond 50 tickers. Not yet implemented." + } + } + }, + + "liquidity_thresholds_by_role": { + "_comment": "Reference values only — NOT read by yfinance_options_history.py today. The scraper still applies its hard-coded global thresholds (volume>=50 & open_interest>=100 & bid>0). Promote these to code only after per-role tuning is validated.", + "etf.broad_market": {"volume": 50, "open_interest": 100}, + "etf.commodity": {"volume": 30, "open_interest": 50}, + "equity.single_name": {"volume": 20, "open_interest": 50} + } +} diff --git a/config/SEC_Ingestion/ticker_to_cik.json b/config/reference/ticker_to_cik.json similarity index 100% rename from config/SEC_Ingestion/ticker_to_cik.json rename to config/reference/ticker_to_cik.json diff --git a/config/runtime/collect_data_state.json b/config/runtime/collect_data_state.json index 26016b2..ed762fb 100644 --- a/config/runtime/collect_data_state.json +++ b/config/runtime/collect_data_state.json @@ -1,9 +1,9 @@ { "last_run_keys": { "gpr_monthly": "2026-04", - "macro_trading_daily": "2026-04-16", - "news_daily": "2026-04-19", - "options_daily": "2026-04-19", + "macro_trading_daily": "2026-04-21", + "news_daily": "2026-04-21", + "options_daily": "2026-04-21", "sec_ingestion_weekly": "2026-W16", "sec_processor_weekly": "2026-W16" } diff --git a/config/SEC_Processing/global_processed_registry.json b/config/runtime/sec_processed_registry.json similarity index 100% rename from config/SEC_Processing/global_processed_registry.json rename to config/runtime/sec_processed_registry.json diff --git a/config/universe/_manifest.json b/config/universe/_manifest.json new file mode 100644 index 0000000..a5f1073 --- /dev/null +++ b/config/universe/_manifest.json @@ -0,0 +1,49 @@ +{ + "schema_version": "1.0", + "description": "Asset universe registry. Each entry maps a semantic role to a ticker-list file and declares downstream capabilities.", + "last_reviewed": "2026-04-22", + "roles": { + "equity.single_name": { + "file": "equity_single_name.json", + "description": "Single-name equities filed with SEC (subset of Nasdaq-100). Source of truth for SEC ingestion filers and equity options scraping.", + "asset_class": "equity", + "has_options": true, + "has_sec_filings": true, + "coverage_start": "2026-04-08", + "owner": "data-platform", + "notes": "Expansion beyond 48 tickers requires updating config/reference/ticker_to_cik.json via Scripts/tools/SEC_generate_cik_map.py." + }, + "etf.broad_market": { + "file": "etf_broad_market.json", + "description": "Broad-market equity index ETFs. Primary sentiment / beta benchmarks.", + "asset_class": "etf", + "has_options": true, + "has_sec_filings": false, + "coverage_start": "2025-10-01", + "owner": "data-platform" + }, + "etf.commodity": { + "file": "etf_commodity.json", + "description": "Commodity-backed ETFs used as safe-haven / inflation proxies.", + "asset_class": "etf", + "has_options": true, + "has_sec_filings": false, + "coverage_start": "2025-10-01", + "owner": "data-platform" + } + }, + "composite_roles": { + "etf.all": { + "union_of": ["etf.broad_market", "etf.commodity"], + "description": "All ETFs we track (broad market + commodity)." + }, + "options.scrape": { + "union_of": ["equity.single_name", "etf.broad_market", "etf.commodity"], + "description": "Full universe for yfinance options-chain scraping (single-names + ETFs)." + }, + "sec.filers": { + "union_of": ["equity.single_name"], + "description": "Tickers to be fed to the SEC EDGAR ingester (10-K/10-Q/8-K/Form-4). Alias for equity.single_name." + } + } +} diff --git a/config/SEC_Ingestion/SEC_tickers.json b/config/universe/equity_single_name.json similarity index 85% rename from config/SEC_Ingestion/SEC_tickers.json rename to config/universe/equity_single_name.json index a8a4532..5feea41 100644 --- a/config/SEC_Ingestion/SEC_tickers.json +++ b/config/universe/equity_single_name.json @@ -1 +1 @@ -["AAPL", "MSFT", "NVDA", "AMZN", "META", "GOOGL", "TSLA", "AVGO", "COST", "PEP", "NFLX", "AMD", "CSCO", "TMUS", "ADBE", "QCOM", "TXN", "INTU", "AMGN", "ISRG", "HON", "CMCSA", "INTC", "AMAT", "IBM", "BKNG", "VRTX", "SBUX", "PANW", "MDLZ", "GILD", "REGN", "LRCX", "ADP", "ADI", "MU", "SNPS", "CDNS", "MELI", "CSX", "KLAC", "PYPL", "CRWD", "MAR", "ASML", "CTAS", "MNST", "NXPI"] \ No newline at end of file +["AAPL", "MSFT", "NVDA", "AMZN", "META", "GOOGL", "TSLA", "AVGO", "COST", "PEP", "NFLX", "AMD", "CSCO", "TMUS", "ADBE", "QCOM", "TXN", "INTU", "AMGN", "ISRG", "HON", "CMCSA", "INTC", "AMAT", "IBM", "BKNG", "VRTX", "SBUX", "PANW", "MDLZ", "GILD", "REGN", "LRCX", "ADP", "ADI", "MU", "SNPS", "CDNS", "MELI", "CSX", "KLAC", "PYPL", "CRWD", "MAR", "ASML", "CTAS", "MNST", "NXPI"] diff --git a/config/universe/etf_broad_market.json b/config/universe/etf_broad_market.json new file mode 100644 index 0000000..c46d4cd --- /dev/null +++ b/config/universe/etf_broad_market.json @@ -0,0 +1 @@ +["SPY", "QQQ", "IWM"] diff --git a/config/universe/etf_commodity.json b/config/universe/etf_commodity.json new file mode 100644 index 0000000..3431f54 --- /dev/null +++ b/config/universe/etf_commodity.json @@ -0,0 +1 @@ +["GLD", "SLV"] From 6d3f8bbea4c13810f37231fa758c8cf4ee473cce Mon Sep 17 00:00:00 2001 From: "Xinxin(Maxine)" Date: Thu, 23 Apr 2026 08:19:16 -0400 Subject: [PATCH 25/50] update global docs --- docs/ARCHITECTURE.md | 518 ++++++++++++++++++++++++++++++++---------- docs/LLM_Pool.md | 234 +++++++++++++++++++ docs/Observability.md | 167 ++++++++++++++ docs/Orchestration.md | 328 ++++++++++++++++++++++++++ 4 files changed, 1122 insertions(+), 125 deletions(-) create mode 100644 docs/LLM_Pool.md create mode 100644 docs/Observability.md create mode 100644 docs/Orchestration.md diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md index d68d4e2..f460f90 100644 --- a/docs/ARCHITECTURE.md +++ b/docs/ARCHITECTURE.md @@ -1,132 +1,400 @@ -# options_bot Architecture Overview - -## Entry Point -- `src/main.py` - - CLI bootstrap and environment loading (`.env`). - - Constructs `AgentWorkflow` (connects to Qdrant and Ollama). - - Runs `run_data_pipeline(agent_workflow)` to collect multi-source data and store it. - - Interactive mode: user question → `agent_workflow.run()` → structured report output. - -## Orchestration Core -- `src/agent_system.py` - - Class `AgentWorkflow`: - - `_ensure_collection_exists()`: ensure Qdrant collection exists (dimension based on embedding size). - - `embed_and_store(documents)`: vectorize documents and upsert into Qdrant. - - `_retrieve_context(query, top_k)`: retrieve relevant context from Qdrant. - - `_run_agent(agent_name, prompt)`: call sub-agents via Ollama. - - `run(user_query)`: retrieve context + inject financial background (`financial_config`) + chain four agents (Analyst → Fact Checker → Adversarial Critic → Synthesizer) → produce `FinalReport` JSON. - - Dependencies: - - `data_models.FinalReport` - - `financial_config.get_financial_context`, `get_role_based_prompt` - - Qdrant / Ollama / fastembed - -## Data Models -- `src/data_models.py` - - `FinalReport` (Pydantic): defines the structured output (`summary`, `key_findings`, `counter_arguments`, `confidence_score`, `uncertainty_notes`). - -## Financial Domain Context -- `src/financial_config.py` - - Financial terminology, analysis frameworks, regulations, professional role prompts. - - `get_financial_context(query)`: assemble domain context by keywords. - - `get_role_based_prompt(role)`: return role prompts. - -## Data Collection Components (invoked by `main.run_data_pipeline`) -- `src/market_data_scraper.py` - - `scrape_market_data(tickers)`: market data → documents. -- `src/fred_scraper.py` - - `scrape_fred_data(series_ids)`: FRED macro data → documents. -- `src/news_scraper.py` - - `scrape_news_data(keywords, limit)`: news → documents. -- `src/reddit_scraper.py` - - `scrape_reddit_data(subreddits, keywords, limit_per_subreddit)`: Reddit posts → documents. -- `src/youtube_scraper.py` - - `load_channel_ids_from_file()`: read channel IDs (`src/tools/Youtube_channel_ID`). - - `get_channel_videos(channel_id, max_results)`: list videos via Data API (or RSS fallback) and include description. - - `get_transcript_with_fallback(video_id)` / `try_alternative_transcript_methods(video_id)`: `list_transcripts` + multilingual/translation + backoff. - - `process_transcript_data(...)`: cleaning, keyword and sentiment analysis, document assembly. - - `scrape_youtube_data(...)`: - - Prefilters by caption flag, skips live/upcoming - - Saves fallback doc (title + cleaned description + URL) when no transcript declared or fetch fails - - Aggregates all documents -- `src/sec_scraper.py` - - `get_sec_filings()`: SEC insider trading/filings → documents. - -## Utility Scripts -- `src/tools/fetch_youtube_channels.py` / `src/tools/update_compose_channels.py` - - Search/update candidate financial channels. -- `src/tools/generate_production_report.py` / `src/tools/create_options_expert.py` - - Production reports / options expert model creation (may call `yfinance_client`). - -- `src/yahoo_finance_scraper.py` - - Lists Yahoo Finance videos via RSS - - Fetches transcripts via `youtube_transcript_api` (same caption rules as YouTube) - - Saves fallback doc (title + cleaned description + URL) when no transcript or too short - -## External Clients & Runtime -- `src/yfinance_client.py`: yfinance and API helpers (mainly for tools). -- `docker-compose.prod.yml`: production stack (current). Services `qdrant_vdb`, `ollama_llm`; container names `*_prod`; `OLLAMA_MODEL=options-expert`. -- `modelfile`: Ollama model configuration. -- `requirements.txt`: Python dependencies. - -## High-Level Flow -1. Run: `python -m src.main` (or `python src/main.py`). -2. `main.py` → construct `AgentWorkflow`. -3. `run_data_pipeline(agent_workflow)` calls in order: - - `market_data_scraper.scrape_market_data` - - `fred_scraper.scrape_fred_data` - - `news_scraper.scrape_news_data` - - `reddit_scraper.scrape_reddit_data` - - `youtube_scraper.scrape_youtube_data` - - `yahoo_finance_scraper.scrape_yahoo_finance_transcripts` - - `sec_scraper.get_sec_filings` -4. `agent_workflow.embed_and_store(all_documents)` persists into Qdrant. -5. Interactive: `agent_workflow.run(user_query)` → retrieval + financial context + multi-agent reasoning → `FinalReport`. +# System Architecture — Automated Options Recommendation Bot + +_Last updated: 2026-04-22 — revision 2 (orchestration layer, lazy package +facades, unified observability, LLM pool)_ + +This document is the authoritative map of the bot. It describes **what +each package does**, **how the runtime fits together**, and **which +contracts the layers must honour**. Subordinate docs — linked in-line — +drill down into individual subsystems. + +- [docs/Orchestration.md](./Orchestration.md) — pipeline DAG, CLI, runtime state +- [docs/Observability.md](./Observability.md) — unified logs + audit paths +- [docs/LLM_Pool.md](./LLM_Pool.md) — Llama 70B warmup / keep-alive strategy +- [docs/Data_source_docs/](./Data_source_docs/) — Qdrant / Parquet schemas +- [docs/Query_retrieval_docs/](./Query_retrieval_docs/) — retrieval policy details +- [docs/test/2026-04-22/router_e2e_deep_analysis.md](./test/2026-04-22/router_e2e_deep_analysis.md) — audit report driving the current hardening + +--- + +## 1. System Topology + +```mermaid +flowchart LR + subgraph CLI ["python -m Scripts (orchestration/cli.py)"] + C1[ingest] --> C2[daemon] + C2 --> C3[status] + C3 --> C4[query] + C4 --> C5[warmup] + end + + subgraph ORCH ["orchestration/ (pipeline + run_state)"] + OR[RunState\nconfig/runtime/collect_data_state.json] + OS[Stage / ScriptStage / CallableStage] + OP[Pipeline DAG] + end + + subgraph DATA ["data_collection/ (scrapers + processors)"] + D1[yfinance_options_history] + D2[macro_data_pipeline] + D3[news_scraper] + D4[GPR_index] + D5[sec_ingestion] + D6[sec_processor] + end + + subgraph STORAGE ["Persistence"] + P1[(Parquet\nSilver)] + P2[(Qdrant\nGold)] + end + + subgraph RET ["retrieval/ (MasterRetriever)"] + R1[QueryTransformer] + R2[FinancialHybridRetriever] + R3[SilverSQLTool] + R4[time_adapter] + end + + subgraph AG ["agents/ (LangGraph nodes)"] + A1[Router] + A2[Analyst] + A3[Checker] + A4[Critic] + A5[Finalizer] + end + + subgraph CORE ["core/ (pure primitives)"] + K1[trading_calendar] + K2[financial_ontology] + K3[universe] + K4[llm_pool] + end + + OBS[observability/\nunified logs + run_id] + + CLI --> ORCH + ORCH --> DATA + DATA --> P1 + DATA --> P2 + CLI --> RET + RET --> P1 + RET --> P2 + RET --> AG + AG --> OBS + RET --> OBS + ORCH --> OBS + AG --> CORE + RET --> CORE + ORCH --> CORE + OR -. time anchor .-> R4 + OR -. time anchor .-> R3 +``` + +Five architectural invariants make the above diagram tractable at +runtime: + +1. **`core/` has zero external side-effects.** No network, no LLM + clients, no scrapers. Everything else may depend on `core/`. +2. **`Scripts/core/__init__.py` and `Scripts/retrieval/__init__.py`** + are PEP-562 lazy façades — importing the package does not drag + LangChain / Ollama / pydantic until a lazy attribute is touched. +3. **`RunState` is the single source of truth for time anchors.** + Scrapers advance `config/runtime/collect_data_state.json`; agents + read from it. No layer computes "yesterday" from wall-clock time. +4. **Logs route through `Scripts.observability.audit`.** Every module + writes to `logs/runs/{YYYY-MM-DD}/{run_id}/…` via `audit_path()`. +5. **LLM clients come from `Scripts.core.llm_pool`.** Agents request + `get_ollama("analyst")` / `get_ollama("checker")` rather than + instantiating `ChatOllama` directly. See [LLM_Pool.md](./LLM_Pool.md). + +--- + +## 2. Package Inventory + +### 2.1 `Scripts/core/` — Pure Primitives Layer + +| Module | Responsibility | +| --- | --- | +| `trading_calendar.py` | Business-day arithmetic (`is_business_day`, `previous_business_day`, `n_business_days_back`). Hard-coded US market holidays through 2027; zero external dependencies. | +| `financial_ontology.py` | Allow-lists, regex tables and metric→column maps consumed by `query_transform`, `sql_tools` and `router`. | +| `financial_config.py` | Static Modelfile system-prompt generation for the fine-tuned `options-expert` model. | +| `universe.py` | Loader for `config/universe/*.json` (equities / ETFs / pipelines). Cached JSON I/O only. | +| `prompt_templates.py`, `intent_router_prompt_templates.py` | Prompt strings shared between `query_transform` and the router intent few-shot. | +| `few_shot_config.py`, `few_shot_intent.py` | Curated few-shot examples for structured extraction and routing. | +| `llm_pool.py` | Process-wide model singleton cache + warmup. See [LLM_Pool.md](./LLM_Pool.md). | + +The package `__init__.py` implements PEP-562 lazy loading: importing +the sub-module triggers its actual load and memoises the result in +module globals. + +### 2.2 `Scripts/orchestration/` — Pipeline + CLI + +| Module | Responsibility | +| --- | --- | +| `run_state.py` | `RunState` handle, `Cadence` enum, `run_key` arithmetic, `DATASET_ANCHOR_KEYS` map. Atomic writes, tolerant reads. | +| `stages.py` | `Stage` base, `ScriptStage` (subprocess adapter, zero-migration for legacy scrapers), `CallableStage` (in-process for new stages). | +| `pipeline.py` | `Pipeline` topological runner; `build_default_pipeline()` factory assembling the 6 existing data jobs. | +| `cli.py` | argparse entry point: `ingest` / `daemon` / `status` / `query` / `warmup`. | + +See [Orchestration.md](./Orchestration.md) for the DAG, the idempotency +contract, and CLI usage. + +### 2.3 `Scripts/observability/` — Unified Logs + +| Module | Responsibility | +| --- | --- | +| `audit.py` | `start_run(tag)`, `current_run_id()`, `audit_path(module, anchor, filename=)`, `configure_root_logger()`, `get_audit_logger()`. | + +See [Observability.md](./Observability.md) for the directory layout and +the migration recipe for legacy loggers. + +### 2.4 `Scripts/retrieval/` — Gold + Silver Retrievers + +| Module | Responsibility | +| --- | --- | +| `schema.py` | Pydantic data types — `QueryIntent`, `MetadataExtraction`, `TimeWindow`, `SourceType`, `RetrievedChunk`, `SQLResult`. Dependency-free at import time. | +| `query_transform.py` | Two-stage LLM query transformer (structured extract + HyDE). | +| `qdrant_retriever.py` | `FinancialHybridRetriever` — Qdrant hybrid search (dense + sparse + metadata pre-filter). | +| `sql_tools.py` | `SilverSQLTool` — Parquet-backed Silver queries with Dynamic Time Anchor. | +| `time_adapter.py` | `TimePredicate` + `compile_predicate()` — converts logical `TimeWindow` + `TimeGranularity` into per-source epoch ranges. Business-day-aware for DAILY sources. | +| `master_retriever.py` | `MasterRetriever` — orchestrates query transform → parallel Gold / Silver retrieval → macro injection. | + +`Scripts/retrieval/__init__.py` eagerly re-exports the Pydantic data +types (used everywhere, no heavyweight deps) and lazily exposes the +LLM-backed classes. Agents that want to bypass the façade for +minimum-latency cold-starts import directly from the leaf module +(`from Scripts.retrieval.master_retriever import MasterRetriever`). + +### 2.5 `Scripts/agents/` — LangGraph Nodes + +| Module | Responsibility | +| --- | --- | +| `state.py` | `AgentState` TypedDict — the LangGraph shared state (including `iv_regime_pinned`, `time_range.source_predicates`). | +| `router.py` | Graph construction + master_retrieval_node + control-flow. | +| `analyst.py` | Generates `draft_report`; pins `iv_regime` on first pass for determinism across revisions. | +| `checker.py` | Deterministic regex audit + LLM veracity check; sentinel whitelist; rescue re-queries with rehydrated `TimePredicate`. | +| `critic.py` | Adversarial critique (bull/bear). | +| `finalizer.py` | Renders the final report; enforces deterministic `report_date` and reconciles `SourceCitation.source_type` against the deterministic `evidence_pool`. | +| `prompts.py` | All prompt templates for the graph. | + +Package `__init__.py` is intentionally import-empty — each agent pulls +heavy LangChain types, so consumers reach agents by leaf module path. + +### 2.6 `Scripts/data_collection/` — Scrapers + Processors + +| Path | Cadence | RunState key | +| --- | --- | --- | +| `scrapers/yfinance_options_history.py` | DAILY | `options_daily` | +| `scrapers/macro_data_pipeline.py` | TRADING_DAILY | `macro_trading_daily` | +| `scrapers/news_scraper.py` | DAILY | `news_daily` | +| `scrapers/GPR_index.py` | MONTHLY | `gpr_monthly` | +| `scrapers/sec_ingestion.py` | WEEKLY | `sec_ingestion_weekly` | +| `processors/sec_processor.py` | WEEKLY (dep on ingestion) | `sec_processor_weekly` | +| `collect_data.py` | Legacy daemon — now a thin wrapper over `RunState` for back-compat. | + +### 2.7 `Scripts/vector_store/` — Qdrant Client + Ingestion + +`connection.py` exposes `get_qdrant_client()` and `get_embedding_model()`. +`ingestion.py` defines `QdrantIngestor` which upserts the three Gold +collections (`sec_filings`, `news_documents`, `gpr_index`) from their +respective Silver Parquet / JSONL sources. --- -## LLM Fine-Tuning and the Options Expert Model - -This project creates a specialized options/futures-options expert model `options-expert` by generating a Modelfile and using Ollama's create API. - -### Files & Services -- `src/tools/create_options_expert.py` - - Generates the Modelfile, fetches training data from Qdrant, calls Ollama to create the model, then smoke-tests it. - - Depends on: - - Qdrant (collection `financial_signals`) - - Ollama (port 11434) -- `modelfile` - - Generated by `create_modelfile()` within `create_options_expert.py`. - - Encodes system prompt (options expertise) and inference parameters (temperature, top_p, num_ctx, etc.). -- `docker-compose.prod.yml` - - Sets `OLLAMA_MODEL=options-expert` in the app service for runtime usage. - -### Training Data Source -- During the data pipeline, `AgentWorkflow.embed_and_store()` writes multi-source documents into Qdrant `financial_signals`. -- `fetch_training_data()` in `create_options_expert.py` reads payloads from that collection to form training material. - -### Model Creation Flow (via script) -1. Read training data from Qdrant. -2. Generate `modelfile` at repo root. -3. Call Ollama create API (`/api/create`) with name `options-expert`. -4. Verify with `/api/generate`. - -### Common Commands (prod stack) -- Create model inside the app container (script uses Ollama API): -```bash -docker exec -it financial_agent_app_prod python src/tools/create_options_expert.py +## 3. Runtime Workflows + +### 3.1 Data Ingestion (one-shot or daemon) + +```text +$ python -m Scripts ingest [--only STAGE ...] [--force] [--dry-run] ``` -- Manual Modelfile-based creation inside Ollama container (alternative): -```bash -# Generate Modelfile if not already present -docker exec financial_agent_app_prod python src/tools/create_options_expert.py -# Copy Modelfile to host, then into Ollama container -docker cp financial_agent_app_prod:/app/modelfile ./modelfile -docker cp ./modelfile ollama_llm_prod:/modelfile -# Create and test in Ollama container -docker exec -it ollama_llm_prod ollama create options-expert -f /modelfile -docker exec -it ollama_llm_prod ollama run options-expert +```mermaid +sequenceDiagram + participant CLI as cli.py::_cmd_ingest + participant PIPE as Pipeline + participant STAGE as ScriptStage + participant RS as RunState (collect_data_state.json) + + CLI->>PIPE: run_once(only=None, force=False) + PIPE->>PIPE: topo_sort stages (gpr → macro/news/opts → sec_ing → sec_proc) + loop each stage + PIPE->>RS: is_up_to_date(job, cadence, now) ? + alt up-to-date + RS-->>PIPE: True + PIPE->>CLI: StageResult(status="skipped") + else needs run + PIPE->>STAGE: subprocess.run(python scrapers/*.py) + STAGE-->>PIPE: rc == 0 + PIPE->>RS: mark_job_complete(job, cadence, now) [atomic write] + PIPE->>CLI: StageResult(status="ok") + end + end +``` + +All state transitions are atomic — a Ctrl+C mid-write cannot corrupt +the file that agents depend on for time anchoring (Section 4). + +### 3.2 Inference Query (RAG) + +```text +$ python -m Scripts query --warmup "yesterday's AAPL IV skew?" ``` -### Notes -- You are currently running the prod stack (container names `*_prod`). To switch to a dev stack, bring down prod with `docker compose -f docker-compose.prod.yml down`, start the dev compose, and align hostnames/model names in scripts and env vars. +```mermaid +sequenceDiagram + participant CLI as cli.py::_cmd_query + participant POOL as llm_pool + participant G as router.build_graph() + participant MR as MasterRetriever + participant RS as RunState + participant TA as time_adapter + participant AGENTS as Analyst/Checker/Critic/Finalizer + + CLI->>POOL: warmup_sync(roles=["query_extract","analyst"]) + POOL-->>CLI: models pinned in GPU + CLI->>G: build_graph().invoke({"original_query": Q}) + G->>MR: retrieve(Q) + MR->>RS: latest_anchor_date("options") → date(2026,4,21) + MR->>TA: compile_predicate(SourceType.OPTIONS, TimeWindow.YESTERDAY, anchor) + TA-->>MR: TimePredicate(start=..., end=...) [business-day aware] + MR->>MR: Gold + Silver retrieval (async parallel) + MR-->>G: final_context{retrieved_chunks, silver_context, time_range.source_predicates} + G->>AGENTS: analyst → checker → critic → finalizer + AGENTS->>RS: read iv_regime_pinned, anchor_date (determinism) + AGENTS-->>CLI: FinalReport +``` + +Three determinism guarantees built into this flow: + +- `time_range.source_predicates` is **serialised into `AgentState`** so + that the Checker's rescue re-queries hit the same Parquet slice the + original retrieval used. No more `start_date` drift between revisions. +- `iv_regime` is **pinned** after the Analyst's first computation and + reused across revisions — strategy recommendations stop oscillating. +- `report_date` is **forced** to `state["time_range"]["anchor_date"]` + in the Finalizer — the LLM never gets to invent a date. + +--- + +## 4. Contracts + +### 4.1 Time-Anchor Contract (single source of truth) + +`config/runtime/collect_data_state.json`: + +```json +{ + "last_run_keys": { + "options_daily": "2026-04-21", + "macro_trading_daily": "2026-04-21", + "news_daily": "2026-04-21", + "gpr_monthly": "2026-04", + "sec_ingestion_weekly": "2026-W16", + "sec_processor_weekly": "2026-W16" + }, + "updated_at": "2026-04-22T15:09:02" +} +``` + +- **Writers**: orchestration `Pipeline` (atomic). No other module writes. +- **Readers**: + - `RunState.latest_anchor_date(dataset)` — agent layer. + - `RunState.is_up_to_date(job, cadence)` — pipeline layer. +- **Invariant**: `latest_anchor_date` **never** returns a date in the + future of ``date.today()`` unless a deliberate backfill wrote one. + It **may** return a weekend date (e.g. Saturday manual backfill), + which `time_adapter` then snaps to the previous trading day for + DAILY sources. + +### 4.2 Logs Contract + +- **Run-scoped** (default for new code): `logs/runs/{YYYY-MM-DD}/{run_id}/{module}/{module}.log|jsonl` +- **Flat** (back-compat for offline tools): `logs/{module}/{YYYY-MM-DD}/` +- Use `Scripts.observability.audit_path(module, anchor, filename=)` + — never hand-build log paths. + +### 4.3 LLM Contract + +- Agents call `Scripts.core.llm_pool.get_ollama("analyst")`, + `get_ollama("checker")`, etc. — never `ChatOllama(...)` directly. +- Role configuration lives in `llm_pool.ROLE_TABLE`; env overrides + (`OLLAMA_CUSTOM_MODEL_NAME`, `OLLAMA_ROUTER_MODEL`, `OLLAMA_KEEP_ALIVE`) + reshape production without code changes. +- Warmup is opt-in at the CLI edge (`--warmup`) or as a standalone + subcommand (`python -m Scripts warmup --roles analyst router`). +- Retrieval-side models (dense / sparse / reranker) are **not** served + by the pool — they are HuggingFace / `fastembed` artefacts managed by + `Scripts/vector_store/connection.py`. See §5.2 and + `docs/Query_retrieval_docs/Retrieval_Architecture_and_Strategy.md`. + +--- + +## 5. Model Registry + +The system runs exactly five externally-hosted models. The table below +is the **single source of truth** — `llm_pool.py`, the retriever, and +the ingestion pipeline all resolve to these artefacts. + +### 5.1 Ollama-served LLMs (runtime) + +| Ollama tag | Origin | Env var | Consumers | +| --- | --- | --- | --- | +| `options-expert-v1:latest` | fine-tune `FROM Llama-3.3-70B-Instruct-Q4_K_M.gguf` (see `modelfile`) | `OLLAMA_CUSTOM_MODEL_NAME` | Analyst, Checker, Critic, Finalizer, `QueryTransformer` (extractor + HyDE) | +| `llama3:latest` | vanilla Meta Llama-3 8B | `OLLAMA_ROUTER_MODEL` | `MasterRetriever.router_llm` (intent), `news_scraper` sentiment, `sec_processor` form parser | + +> `OLLAMA_BASE_MODEL` (`llama3.3:70b`) is used only by +> `Scripts/models/create_options_expert.py` to rebuild the fine-tune. +> It is **not** an agent-facing runtime model. + +### 5.2 Retrieval models (HuggingFace / fastembed) + +| Purpose | Artefact | Env var | Home | +| --- | --- | --- | --- | +| Dense embedding | `BAAI/bge-base-en-v1.5` | `EMBEDDING_MODEL_NAME` | `Scripts/vector_store/connection.py::get_embedding_model` | +| Sparse (SPLADE) | `prithivida/Splade_PP_en_v1` | `SPARSE_MODEL_NAME` | `Scripts/retrieval/qdrant_retriever.py` | +| Cross-encoder reranker | `BAAI/bge-reranker-v2-m3` | `RERANKER_MODEL_NAME` | `Scripts/retrieval/qdrant_retriever.py` | + +--- + +## 6. Environment Variables + +| Variable | Default | Consumer | +| --- | --- | --- | +| `OLLAMA_BASE_URL` / `OLLAMA_HOST` | `http://localhost:11434` | `llm_pool` | +| `OLLAMA_KEEP_ALIVE` | `30m` | `llm_pool` — pins 70B in GPU | +| `OLLAMA_CUSTOM_MODEL_NAME` | `options-expert-v1:latest` | Expert tier (agents + `QueryTransformer`) | +| `OLLAMA_ROUTER_MODEL` | `llama3:latest` | Router tier (`MasterRetriever`) | +| `OLLAMA_INGESTION_MODEL` | falls back to `OLLAMA_ROUTER_MODEL` | Ingestion-time sentiment / SEC parser | +| `EMBEDDING_MODEL_NAME` | `BAAI/bge-base-en-v1.5` | Dense retrieval | +| `SPARSE_MODEL_NAME` | `prithivida/Splade_PP_en_v1` | Sparse retrieval | +| `RERANKER_MODEL_NAME` | `BAAI/bge-reranker-v2-m3` | Cross-encoder rerank | +| `QDRANT_HOST` / `QDRANT_URL` | `http://localhost:6333` | `vector_store` | +| `QDRANT_API_KEY` | unset | `vector_store` (cloud) | + +--- + +## 7. Operational Runbook (excerpt) + +| Task | Command | +| --- | --- | +| Check ingest freshness | `python -m Scripts status` | +| Run due ingests | `python -m Scripts ingest` | +| Force SEC re-processing | `python -m Scripts ingest --only sec_processor_weekly --force` | +| Start daemon with LLM warm | `python -m Scripts daemon --warmup` | +| Warm LLM only | `python -m Scripts warmup --roles analyst router` | +| Ask a question | `python -m Scripts query --warmup "..."` | +| Tail today's orchestrator log | `Get-Content -Wait logs/runs/$(Get-Date -Format yyyy-MM-dd)/*/orchestrator.log` | + +--- + +## 8. Change Log of Architectural Invariants + +| Date | Change | Rationale | +| --- | --- | --- | +| 2026-04-22 | Introduced `Scripts/orchestration/` | Collapse ad-hoc ingest scripts + agent CLIs behind one entry point. | +| 2026-04-22 | `config/runtime/collect_data_state.json` elevated to "single time-anchor source" | Eliminates wall-clock drift between scrapers and agents. | +| 2026-04-22 | `Scripts/core/__init__.py` and `Scripts/retrieval/__init__.py` turned lazy | Imports no longer pull LangChain/Ollama into the CLI's fast paths. | +| 2026-04-22 | `Scripts.core.llm_pool` | Enables Llama 70B warmup + singleton caching. | +| 2026-04-22 | `Scripts.observability.audit` | Unifies logs under `logs/runs/{date}/{run_id}/`. | +| 2026-04-22 | `TimePredicate` serialised into `AgentState` | Checker's rescue re-queries use the same time window as initial retrieval — fixes `latest_atm_iv` oscillation. | diff --git a/docs/LLM_Pool.md b/docs/LLM_Pool.md new file mode 100644 index 0000000..114b0b5 --- /dev/null +++ b/docs/LLM_Pool.md @@ -0,0 +1,234 @@ +# LLM Pool — Fine-Tuned 70B Warmup, Singleton Cache, Role Tiering + +_Scope: `Scripts/core/llm_pool.py` + CLI `warmup` subcommand_ + +This document specifies the contract the rest of the system uses to +obtain Ollama LLM clients, and the operational runbook for keeping the +fine-tuned 70B model hot in GPU memory across a bot session. + +--- + +## 1. Deployment Reality + +The bot talks to Ollama for **two** distinct model roles — nothing +more. This is the single most important fact about the pool: + +| Tier | Ollama tag | Base | Used by | +| --- | --- | --- | --- | +| **Expert (70B, fine-tuned)** | `options-expert-v1:latest` | `FROM Llama-3.3-70B-Instruct-Q4_K_M.gguf` | `AnalystAgent`, `CheckerAgent`, `CriticAgent`, `FinalizerAgent`, `QueryTransformer` (metadata extractor AND HyDE writer) | +| **Router (8B, vanilla)** | `llama3:latest` | stock Meta Llama-3 | `MasterRetriever.router_llm` (intent routing), ingestion-time `news_scraper` sentiment tagger, `sec_processor` form-parser | + +> The *base model* (`llama3.3:70b`) referenced in `.env` as +> `OLLAMA_BASE_MODEL` is **only** used by +> `Scripts/models/create_options_expert.py` as the `FROM` source when +> rebuilding the fine-tune — it is never served to agents at runtime. + +Retrieval models (`BAAI/bge-base-en-v1.5` dense, `Splade_PP_en_v1` +sparse, `bge-reranker-v2-m3` cross-encoder) are **not** Ollama clients; +they live in `Scripts/vector_store/connection.py` and are documented +in `docs/Query_retrieval_docs/Retrieval_Architecture_and_Strategy.md`. + +--- + +## 2. Why a Pool + +Multiple call-sites across the codebase instantiate `ChatOllama` +independently (Analyst, Checker, Critic, Finalizer, two stages of the +`QueryTransformer`, `MasterRetriever.router_llm`). For an 8B model this +is cheap — the real cost lives inside Ollama, not in the Python client. +For the 70B fine-tune three things break: + +| Failure mode | Consequence without the pool | +| --- | --- | +| **Cold start** | First user query waits 30–60 s while Ollama loads the Q4-quantised 70B into GPU memory. | +| **Idle eviction** | Ollama's default `keep_alive` is 5 min. A three-minute read pause between queries incurs a second cold start. | +| **Model swapping** | If the 70B fine-tune and a secondary model are both served on a single GPU, Ollama may evict the 70B to serve an 8B router call, then reload the 70B on the next Analyst call — double cold-start per revision. | + +The pool solves all three by (a) centralising client construction, +(b) forcing `keep_alive` to `30m` by default, and (c) letting operators +tier models so expert and router roles never fight for the same slot. + +--- + +## 3. Public API + +```python +from Scripts.core import llm_pool + +# Get a cached client for a role (case-insensitive) +llm = llm_pool.get_ollama("analyst") + +# One-shot override (not cached — use sparingly) +ephemeral = llm_pool.get_ollama("analyst", temperature=0.7) + +# Warm specific roles (blocking, returns per-role WarmupResult) +results = llm_pool.warmup_sync(roles=["analyst", "router"]) + +# Fire-and-forget background warmup — good for daemon startup +thread = llm_pool.warmup_async() +``` + +### 3.1 Role Table + +```python +# Scripts/core/llm_pool.py +ROLE_TABLE = { + # Expert tier — all six roles resolve to the same 70B fine-tune, + # so Ollama holds exactly ONE 70B in GPU memory at a time. + "analyst": RoleSpec(... model_env="OLLAMA_CUSTOM_MODEL_NAME", temperature=0.2), + "critic": RoleSpec(... model_env="OLLAMA_CUSTOM_MODEL_NAME", temperature=0.3), + "checker": RoleSpec(... model_env="OLLAMA_CUSTOM_MODEL_NAME", temperature=0.0), + "finalizer": RoleSpec(... model_env="OLLAMA_CUSTOM_MODEL_NAME", temperature=0.2), + "query_extract": RoleSpec(... model_env="OLLAMA_CUSTOM_MODEL_NAME", temperature=0.0, format="json"), + "query_hyde": RoleSpec(... model_env="OLLAMA_CUSTOM_MODEL_NAME", temperature=0.2), + + # Router tier — vanilla Llama-3 8B. Short, cheap, JSON-formatted. + "router": RoleSpec(... model_env="OLLAMA_ROUTER_MODEL", temperature=0.0, format="json"), + + # Ingestion tier — also Llama-3 8B, kept separate so ingestion can + # be rolled to a different quant without touching online routing. + "news_sentiment": RoleSpec(... model_env="OLLAMA_INGESTION_MODEL", temperature=0.0), + "sec_parser": RoleSpec(... model_env="OLLAMA_INGESTION_MODEL", temperature=0.0, format="json"), +} + +DEFAULT_WARMUP_ROLES = ("analyst", "router") +``` + +Why `DEFAULT_WARMUP_ROLES = ("analyst", "router")`? +Warming one role per **tier** is enough — Ollama caches by underlying +model name, not by `ChatOllama` instance. Warming `analyst` pins +`options-expert-v1:latest` for Checker / Critic / Finalizer / +QueryTransformer too; warming `router` pins `llama3:latest` for +ingestion helpers. + +### 3.2 Environment Variables + +| Variable | Default | Effect | +| --- | --- | --- | +| `OLLAMA_BASE_URL` / `OLLAMA_HOST` | `http://localhost:11434` | Passed to every `ChatOllama`. | +| `OLLAMA_KEEP_ALIVE` | `30m` | How long Ollama pins the model after the last request. Use `-1` to never evict. | +| `OLLAMA_CUSTOM_MODEL_NAME` | `options-expert-v1:latest` | Expert-tier model (agents + QueryTransformer). | +| `OLLAMA_ROUTER_MODEL` | `llama3:latest` | Router-tier model (`MasterRetriever.router_llm`). | +| `OLLAMA_INGESTION_MODEL` | falls back to `OLLAMA_ROUTER_MODEL` | Ingestion-time sentiment / SEC parser. | + +> `OLLAMA_BASE_MODEL` (`llama3.3:70b`) is **not** read by the pool — it +> is an artefact used only by `create_options_expert.py` when +> rebuilding the fine-tune from the modelfile. + +--- + +## 4. Warmup Strategies + +### 4.1 Synchronous warmup before serving a query (recommended default) + +```text +$ python -m Scripts query --warmup "yesterday's AAPL IV skew?" +``` + +The CLI invokes `warmup_sync(DEFAULT_WARMUP_ROLES)` before building +the agent graph, so the first agent call lands on an already-hot +model. Cost: one round-trip per role (≈ 30–60 s for a 70B cold-start, +≈ 50 ms once already loaded). + +### 4.2 Background warmup in daemon mode + +```text +$ python -m Scripts daemon --warmup +``` + +The CLI spawns `warmup_async()` in a `daemon=True` thread before +entering the scheduler loop. Ticks run immediately; by the time a +user's first `query` invocation arrives the model is already pinned. + +### 4.3 Standalone warmup (CI / cron prehook) + +```text +$ python -m Scripts warmup --roles analyst finalizer +role status latency model +---------------------------------------- +analyst ok 42.31s options-expert-v1:latest +finalizer ok 0.18s options-expert-v1:latest # reuse — already loaded +``` + +Because both roles map to `OLLAMA_CUSTOM_MODEL_NAME`, warming the +first pins the model for the second. + +### 4.4 Failure semantics + +`warmup_sync` never raises. A timeout or HTTP error becomes a +`WarmupResult(status="failed", error=...)` entry; the CLI logs it but +proceeds — a flaky warmup must never crash the process that was going +to serve queries anyway. + +--- + +## 5. Agent Migration Pattern + +Existing agents construct `ChatOllama` inline: + +```python +# Scripts/agents/analyst.py (current) +from langchain_ollama import ChatOllama + +self.llm = ChatOllama( + model=os.getenv("OLLAMA_CUSTOM_MODEL_NAME", "options-expert-v1"), + temperature=0.2, +) +``` + +Target pattern after migration: + +```python +from Scripts.core.llm_pool import get_ollama + +self.llm = get_ollama("analyst") +``` + +Agents with `with_structured_output(Schema)` should cache the wrapped +object on `self` once per instance — the pool hands back the raw +client; wrapping is a per-call responsibility. + +Migration is **incremental**. The pool is additive — nothing forces +agents to switch in lockstep. Migrate one agent, ship, observe +keep-alive metrics, move to the next. + +--- + +## 6. What the Pool Does *Not* Do + +- It does not load a model at Python import time. That would make + `Scripts.core.llm_pool` unsafe to import in environments without + Ollama running (CI, docs builds, smoke tests). Warmup is an + explicit, opt-in operation. +- It does not pool *requests* — every call is still a fresh HTTP + request to Ollama. What is pooled is the *client object* (session + configuration, default kwargs) so agents stop re-materialising it. +- It does not coordinate concurrent requests to the same model. Two + simultaneous Analyst calls still go through Ollama's own request + queue; the pool's singleton simply makes sure both calls hit the + same `ChatOllama` instance. + +--- + +## 7. Operational Runbook + +| Scenario | Command | +| --- | --- | +| Daemon server reboot — warm before users hit the endpoint | `python -m Scripts warmup --roles analyst router` | +| Ad-hoc backtest at 2 AM — ensure 70B pinned for an hour | `OLLAMA_KEEP_ALIVE=1h python -m Scripts query --warmup "..."` | +| CI smoke test without Ollama | Do *not* call `warmup`; agents that require an LLM will raise a clear `RuntimeError` at first use. | +| Verify which model a role resolves to | `python -c "from Scripts.core import llm_pool; print(llm_pool.get_role_spec('analyst'))"` | +| Rebuild the fine-tune after changing the modelfile | `python Scripts/models/create_options_expert.py` (uses `OLLAMA_BASE_MODEL`) | + +--- + +## 8. Future Work + +- **Per-request timeout/circuit-breaker wrapper** — catches Ollama + hangs without killing the whole agent graph. Candidate home: + `Scripts/core/llm_pool.safe_invoke(role, prompt, timeout_s=60)`. +- **Parallel warmup on multi-GPU** — when two models fit side-by-side + in VRAM, `warmup_sync` could fire concurrent requests. Today it is + serial on purpose (single-GPU machines swap models otherwise). +- **Prometheus exposition** — emit `llm_pool_warmup_latency_seconds` + and `llm_pool_cache_hits_total` for the scheduler / query paths. diff --git a/docs/Observability.md b/docs/Observability.md new file mode 100644 index 0000000..49356a7 --- /dev/null +++ b/docs/Observability.md @@ -0,0 +1,167 @@ +# Observability Layer — Unified Logging and Audit Paths + +_Scope: `Scripts/observability/` + the layout under `logs/`_ + +This document specifies the directory layout for every log produced by +the bot, the helpers that route them, and the migration recipe for +legacy loggers. + +--- + +## 1. Problem Statement + +Before this layer was introduced the project wrote logs into a zoo of +top-level folders: + +``` +logs/ +├── retrieval/{date}/ +├── query_transform/{date}/ +├── router_e2e/{date}/ +├── Parquet_Query/{date}/ +├── scheduler/ +├── test/ +└── ... +``` + +Investigating a single production incident meant stitching together +four or five timestamp-matched files by hand. Each module hand-built +its date-partitioned path, which drifted whenever a timezone or daily +boundary shifted. + +The remedy: one well-known tree per *orchestrator invocation*, one +helper function that every producer uses. + +--- + +## 2. Target Layout + +``` +logs/ +├── runs/ ← canonical, run-scoped +│ └── {YYYY-MM-DD}/ +│ └── {run_id}/ ← one folder per CLI invocation +│ ├── orchestrator.log # root logger +│ ├── retrieval/ +│ │ ├── retrieval.jsonl +│ │ └── retriever_audit_trail.jsonl +│ ├── query_transform/ +│ │ └── query_audit_trail.jsonl +│ ├── router_e2e/ +│ │ └── ... +│ └── sql_range/ +│ └── audit.jsonl +│ +├── scheduler/ ← legacy daemon, back-compat +│ └── collect_data.log +│ +├── retrieval/{YYYY-MM-DD}/… ← legacy flat, still readable +├── query_transform/{YYYY-MM-DD}/… +└── router_e2e/{YYYY-MM-DD}/… +``` + +- `run_id` format: `{YYYYMMDD}_{HHMMSS}_{tag}_{uuid6}`. + Example: `20260422_153042_query_ab12cd`. +- The legacy flat layout still works — `audit_path(..., scoped_by_run=False)` + returns a path under `logs/{module}/{date}/` so offline tools that + consumed the old layout continue to function during the migration. + +--- + +## 3. Public API + +```python +from Scripts.observability import ( + configure_root_logger, # once at CLI / daemon boot + start_run, # once per invocation + current_run_id, # read-only helper + audit_path, # compute a log file path + get_audit_logger, # returns a logger pointed at audit_path +) +``` + +### 3.1 `configure_root_logger(level="INFO", also_to_file=True)` + +- Installs a stdout handler and (optionally) a file handler at + `logs/runs/{today}/{run_id}/orchestrator.log`. +- Idempotent: replaces previously attached handlers so pytest / + Jupyter do not double-print. +- Called by `Scripts.orchestration.cli.main()` on every invocation. + +### 3.2 `start_run(tag="session")` + `current_run_id()` + +- `start_run` mints a new `run_id` and stores it in a `ContextVar`. +- `current_run_id` returns the active id, auto-starting an "adhoc" + run if the caller forgot to initialise one (useful in notebooks). + +### 3.3 `audit_path(module, anchor=None, filename=None, scoped_by_run=True)` + +| Argument | Purpose | +| --- | --- | +| `module` | Logical module name — `"retrieval" / "query_transform" / "router_e2e" / "sql_range"`. Becomes both a folder name *and* the default filename stem. | +| `anchor` | The **data** date this log pertains to (default `date.today()`). Use the agent's `time_range.anchor_date` for determinism — this keeps backfill audits in the correct folder. | +| `filename` | Override the default `.jsonl` leaf. Useful for existing consumers that already expect names like `retriever_audit_trail.jsonl`. | +| `scoped_by_run` | `True` ⇒ `logs/runs/{date}/{run_id}/{module}/`; `False` ⇒ `logs/{module}/{date}/`. | + +Side-effect: the parent folder is created. + +### 3.4 `get_audit_logger(name, module, anchor=None, level="INFO")` + +Returns a `logging.Logger` with a single file handler attached at +`audit_path(module, anchor, filename=f"{name}.log")`. Safe to call +repeatedly — duplicate handlers are de-duplicated. + +```python +from Scripts.observability import get_audit_logger + +log = get_audit_logger("QdrantRetriever", module="retrieval") +log.info("search filter=%s", filt) +``` + +--- + +## 4. Migration Recipe for Legacy Loggers + +Most existing modules currently hand-build log paths: + +```python +log_path = Path("logs/retrieval") / date.today().isoformat() / "retriever_audit_trail.jsonl" +log_path.parent.mkdir(parents=True, exist_ok=True) +``` + +Replace with a single call: + +```python +from Scripts.observability import audit_path + +log_path = audit_path( + module="retrieval", + anchor=state["time_range"]["anchor_date"], # deterministic anchor + filename="retriever_audit_trail.jsonl", +) +``` + +Migration can happen one module at a time. Both layouts coexist until +you flip `scoped_by_run` defaults for that consumer. + +--- + +## 5. Scheduler / Daemon Logs + +`Scripts/data_collection/collect_data.py::configure_logging` still +writes to `logs/scheduler/collect_data.log`. When you switch to the +new CLI daemon (`python -m Scripts daemon`), logs flow through +`configure_root_logger` into `logs/runs/{today}/{run_id}/orchestrator.log` +instead. Both paths are supported indefinitely. + +--- + +## 6. Retention Guidance + +- `logs/runs/` grows one folder per invocation. On a machine that runs + the daemon continuously, retention is measured in daemon restarts — + for each daemon lifetime there is one `orchestrator.log`. +- Keep at least the last 7 calendar days of `logs/runs/{date}` for + post-mortem analysis. +- Archive older `runs/` to cold storage via a nightly cron — no module + depends on logs older than the current day. diff --git a/docs/Orchestration.md b/docs/Orchestration.md new file mode 100644 index 0000000..51dad3b --- /dev/null +++ b/docs/Orchestration.md @@ -0,0 +1,328 @@ +# Orchestration Layer — Pipeline DAG, Runtime State, CLI + +_Scope: `Scripts/orchestration/` + `config/runtime/collect_data_state.json`_ + +This document is a deep-dive companion to +[ARCHITECTURE.md §2.2 and §3](./ARCHITECTURE.md#22-scriptsorchestration--pipeline--cli). +It specifies the contracts the orchestration layer offers to the rest +of the system, the DAG produced by `build_default_pipeline()`, and the +institutional runbook for each CLI subcommand. + +--- + +## 1. Design Principles + +1. **Single source of truth for time.** Every module that needs to + reason about "yesterday", "this week", or "latest partition" reads + from one file: `config/runtime/collect_data_state.json`. The only + writer is the orchestration `Pipeline`. Agents never compute time + anchors from wall-clock directly. +2. **Idempotency by cadence key.** Jobs are keyed by a `run_key` — + `2026-04-21` for daily, `2026-W16` for weekly, `2026-04` for + monthly. A job whose stored key matches the key we would compute + now is *skipped*; no wasted API calls, no duplicate writes. +3. **Atomic state transitions.** The JSON state is written via + `tempfile + os.replace` — a Ctrl+C during a scheduler tick cannot + corrupt the file that agents depend on. +4. **Declarative DAG.** Stages declare `depends_on`; the runner + topologically sorts, detects cycles at build time, and short- + circuits downstream work when a critical upstream fails. +5. **Zero-migration adapter for legacy scripts.** Every existing + scraper under `Scripts/data_collection/scrapers/` runs untouched + via `ScriptStage(subprocess.run)`. New stages can opt into the + faster in-process `CallableStage`. + +--- + +## 2. The Production DAG + +`Scripts/orchestration/pipeline.build_default_pipeline()` assembles six +stages mirroring the reality of the data sources: + +```mermaid +flowchart LR + gpr_monthly + macro_trading_daily + news_daily + options_daily + sec_ingestion_weekly --> sec_processor_weekly +``` + +The four roots (GPR / macro / news / options) are independent — they +hit different external endpoints. Only the SEC processor has an +upstream dependency because it parses Bronze artefacts the ingestion +job just wrote. + +| Stage | Cadence | Timeout | Critical | Purpose | +| --- | --- | --- | --- | --- | +| `gpr_monthly` | MONTHLY | 30 min | yes | Geopolitical Risk index | +| `macro_trading_daily` | TRADING_DAILY | 30 min | yes | FRED + yfinance macro snapshot | +| `news_daily` | DAILY | 30 min | yes | GDELT + Llama 3 sentiment enrichment | +| `options_daily` | DAILY | 30 min | yes | yfinance option chains for 5+48 tickers | +| `sec_ingestion_weekly` | WEEKLY | 45 min | yes | Pull raw SEC filings | +| `sec_processor_weekly` | WEEKLY | 45 min | yes | LLM-parse SEC filings into Silver | + +> **Cadence ≠ tier.** "Weekly" describes *when* the stage should run, +> not whether the pipeline should fail if it errors. Criticality is a +> separate field (`Stage.critical`) — all stages default to `True` in +> production today. Dropping a non-critical stage to `False` is a +> one-line change when you're comfortable with the source being flaky. + +--- + +## 3. RunState — the Time-Anchor Contract + +### 3.1 On-disk schema + +```json +{ + "last_run_keys": { + "options_daily": "2026-04-21", + "macro_trading_daily": "2026-04-21", + "news_daily": "2026-04-21", + "gpr_monthly": "2026-04", + "sec_ingestion_weekly": "2026-W16", + "sec_processor_weekly": "2026-W16" + }, + "updated_at": "2026-04-22T15:09:02" +} +``` + +### 3.2 Public API + +```python +from Scripts.orchestration import Cadence, RunState, get_run_state + +rs = get_run_state() # process-wide singleton + +# Pipeline-side (writer) +rs.mark_job_complete("options_daily", Cadence.DAILY) # atomic write +rs.is_up_to_date("options_daily", Cadence.DAILY) # idempotency check + +# Agent-side (reader) +rs.latest_anchor_date("options") # -> date(2026,4,21) +rs.latest_anchor_for_granularity("weekly") # -> date(2026,4,13) +rs.snapshot() # full diagnostic dict +``` + +### 3.3 Dataset → Anchor-Key Mapping + +Agents speak in logical dataset names; `RunState` translates to the +concrete `last_run_keys` field. Extend this table alongside the +scraper's `build_jobs()`: + +| `dataset` (argument) | `last_run_keys` field | Typical agent site | +| --- | --- | --- | +| `options` | `options_daily` | `SilverSQLTool._get_anchor_date("options")`, `time_adapter.build_anchor("daily")` | +| `macro` | `macro_trading_daily` | Macro snapshot + `time_adapter` DAILY | +| `news` | `news_daily` | `time_adapter` EVENT | +| `gpr` | `gpr_monthly` | `time_adapter` MONTHLY | +| `sec` | `sec_processor_weekly` | `time_adapter` WEEKLY (downstream-visible) | +| `sec_raw` | `sec_ingestion_weekly` | SEC raw-JSONL retrieval only | + +### 3.4 Fault Tolerance + +| Failure mode | Behaviour | +| --- | --- | +| State file missing | `latest_anchor_date()` returns `fallback` (default `date.today()`). Agents still serve queries. | +| State file corrupt JSON | Same as missing — `RunState._load` catches `json.JSONDecodeError`. | +| Scheduler Ctrl+C mid-write | `os.replace()` atomicity: the previous valid file is still on disk; the tmp file is garbage-collected. | +| Weekend-anchored daily key | `time_adapter` snaps to previous business day via `Scripts.core.trading_calendar.previous_business_day`. | + +--- + +## 4. Stage Contract + +### 4.1 Base class + +```python +class Stage(ABC): + name: str + cadence: Cadence + depends_on: Tuple[str, ...] = () + critical: bool = True + timeout_s: int = 60 * 30 + max_retries: int = 2 + retry_backoff_s: int = 10 + + @abstractmethod + def _execute(self, when: datetime) -> Tuple[str, str]: ... + + def is_up_to_date(self, run_state: RunState, when: datetime) -> bool: ... + def run(self, run_state: RunState, *, force: bool, dry_run: bool) -> StageResult: ... +``` + +### 4.2 Two concrete adapters + +| Adapter | When to use | +| --- | --- | +| `ScriptStage` | Existing scraper scripts under `Scripts/data_collection/`. Spawns `subprocess.run(python script.py)`. Zero migration cost, survives independent invocation. | +| `CallableStage` | New in-process stages (e.g. an embedding re-indexer that reuses the caller's Qdrant client). Avoids subprocess startup; receives `datetime` and returns a metrics dict that is stored on `StageResult.metrics`. | + +### 4.3 Retry + failure semantics + +- Each stage retries up to `max_retries + 1` times with linear backoff + (`min(60, 10 × attempt) seconds`). +- On final failure `StageResult.status = "failed"`; only *critical* + failures abort downstream dependents. +- `Pipeline.run_once` always returns the full `List[StageResult]`, + never raises. Callers inspect `r.ok` to decide exit codes. + +--- + +## 5. Pipeline Runner + +```python +from Scripts.orchestration import Pipeline, build_default_pipeline + +pipe = build_default_pipeline() +results = pipe.run_once( + only=["sec_processor_weekly"], # auto-includes upstream deps + force=False, + dry_run=False, + when=None, # defaults to datetime.now() +) +``` + +### 5.1 `run_once` algorithm + +```mermaid +flowchart TD + A["resolve_targets
expand only with upstream deps"] --> B{"next stage in
topo order?"} + B -- "no" --> Z["return List[StageResult]"] + B -- "yes" --> C{"upstream in
failed set?"} + C -- "yes" --> D["append
StageResult(status=skipped)"] + D --> E["add name to
failed set"] + E --> B + C -- "no" --> F["stage.run(when, force, dry_run)"] + F --> G["append StageResult(ok / error)"] + G --> H{"ok?"} + H -- "yes" --> B + H -- "no" --> I{"stage.critical?"} + I -- "no" --> B + I -- "yes" --> J["add name to
failed set"] + J --> B +``` + +Key guarantees of the algorithm: + +- **Topological order is fixed**, so a stage never runs before its upstream. +- **Skips are recorded**, never silently dropped — every skipped stage + still emits a `StageResult` for auditing. +- **Non-critical failures do not poison downstream**: only stages flagged + `critical=True` propagate through the `failed` set. +- **Idempotency is delegated** to each `Stage.is_up_to_date(run_state)`; + the runner does not re-implement cadence logic. + +### 5.2 `run_forever` + +Identical per-tick logic, sleeps `poll_seconds` between ticks. Shares +the state file with any concurrent CLI `ingest` invocation — writes go +through the same `RunState` handle so no tick ever re-runs a job the +CLI has already completed. + +--- + +## 6. CLI Runbook + +```text +python -m Scripts [--log-level DEBUG|INFO|WARNING|ERROR] +``` + +| Subcommand | Purpose | +| --- | --- | +| `ingest` | Run all due stages once (idempotent). | +| `daemon` | Long-lived scheduler (replaces legacy `collect_data.py run_forever`). | +| `status` | Print `last_run_keys` and derived agent-side anchors. | +| `query` | One-shot RAG question through the multi-agent graph. | +| `warmup` | Pre-load Ollama models. | + +### 6.1 `ingest` flags + +| Flag | Semantics | +| --- | --- | +| `--only STAGE [STAGE ...]` | Run only these (upstream deps auto-included). Unknown names exit 2. | +| `--force` | Ignore `is_up_to_date` — re-runs even if today's key already matches. Useful for backfills and QA. | +| `--dry-run` | Log what *would* execute without spawning subprocesses. | + +### 6.2 Example session + +```powershell +# Quick freshness check before asking a question +PS> python -m Scripts status +state_path: C:\...\config\runtime\collect_data_state.json +updated_at: 2026-04-22T15:09:02 + +last_run_keys: + gpr_monthly 2026-04 + macro_trading_daily 2026-04-21 + news_daily 2026-04-21 + options_daily 2026-04-21 + sec_ingestion_weekly 2026-W16 + sec_processor_weekly 2026-W16 + +anchors (agent-side time anchors): + options 2026-04-21 + macro 2026-04-21 + news 2026-04-21 + gpr 2026-04-01 + sec 2026-04-13 + sec_raw 2026-04-13 + +# Bring today's data up-to-date +PS> python -m Scripts ingest + +# Force-reprocess SEC filings (re-runs sec_ingestion_weekly too) +PS> python -m Scripts ingest --only sec_processor_weekly --force + +# Serve queries +PS> python -m Scripts query --warmup "yesterday's AAPL IV skew?" +``` + +--- + +## 7. Extending the Pipeline + +To add a new scraper (`Scripts/data_collection/scrapers/my_scraper.py`): + +1. Choose a cadence and a unique `run_key` field name (e.g. `my_source_daily`). +2. Register it in `Scripts/orchestration/pipeline.py::build_default_pipeline()`: + + ```python + ScriptStage( + name="my_source_daily", + script_path=scrapers / "my_scraper.py", + cadence=Cadence.DAILY, + depends_on=(), # or (upstream_job_name,) + critical=True, + project_root=root, + ), + ``` + +3. If agents need to read the freshness, add the mapping in + `Scripts/orchestration/run_state.DATASET_ANCHOR_KEYS`: + + ```python + DATASET_ANCHOR_KEYS["my_source"] = "my_source_daily" + ``` + +4. No other code changes. `RunState.snapshot()` and `python -m Scripts status` + automatically surface the new job. + +--- + +## 8. Backwards Compatibility + +`Scripts/data_collection/collect_data.py` continues to run as a +standalone daemon (`python Scripts/data_collection/collect_data.py`). +Its internal `StateStore` now delegates to `RunState`, so the old +daemon and the new CLI see the same state file and cannot double-run +a job. + +Migration path for operators: + +1. **Today**: keep running `collect_data.py`; start using `python -m Scripts status` and `ingest` interactively. +2. **Sprint n+1**: switch the cron to `python -m Scripts daemon --poll-seconds 30`. +3. **Sprint n+2**: delete legacy subprocess wrappers elsewhere (none known as of 2026-04-22). + +No data migration is required — the on-disk state schema is unchanged. From 2edc0e2ccb5aabdfa730fb344549da1905199f46 Mon Sep 17 00:00:00 2001 From: "Xinxin(Maxine)" Date: Thu, 23 Apr 2026 08:20:00 -0400 Subject: [PATCH 26/50] update retrieval related docs --- .../Qdrant_retriever_docs.md | 219 +++++++--- .../Query_retrieval_docs/Query_intent_docs.md | 227 +++++++---- .../Retrieval_Architecture_and_Strategy.md | 383 +++++++++--------- .../Query_retrieval_docs/Time_Schema_Audit.md | 288 +++++++++++++ 4 files changed, 809 insertions(+), 308 deletions(-) create mode 100644 docs/Query_retrieval_docs/Time_Schema_Audit.md diff --git a/docs/Query_retrieval_docs/Qdrant_retriever_docs.md b/docs/Query_retrieval_docs/Qdrant_retriever_docs.md index 9f21524..c82dc1d 100644 --- a/docs/Query_retrieval_docs/Qdrant_retriever_docs.md +++ b/docs/Query_retrieval_docs/Qdrant_retriever_docs.md @@ -1,101 +1,202 @@ -# Technical Documentation: Asymmetric Hybrid Retrieval Engine (Gold Layer) +# Gold-Layer Asymmetric Hybrid Retriever -## 1. Strategic Objective (Goal) -The primary objective of the `qdrant_retriever.py` module is to serve as the **Asymmetric Hybrid Retrieval Engine** for the system's Gold Semantic Layer. It bridges the gap between the LLM's query transformation (HyDE & Metadata) and the Qdrant vector database. By enforcing deterministic metadata pre-filtering and utilizing Reciprocal Rank Fusion (RRF), it guarantees that downstream multi-agent workflows receive context that is both semantically relevant and highly precise regarding specific financial entities and timeframes. +_Scope: `Scripts/retrieval/qdrant_retriever.py`._ + +This document specifies the Gold-layer retrieval engine that turns a +`FullTransformationResult` into a ranked list of `RetrievedChunk`s. + +--- + +## 1. Strategic Objective + +Bridge the LLM's transformation payload (HyDE + metadata) and Qdrant +Cloud with three guarantees: + +- **Temporal alignment** — all filters are built from + `TimePredicate` objects produced upstream by `time_adapter`, not from + wall-clock time. One anchor, one window, all sources. +- **Lexical precision** — SPLADE sparse retrieval against the raw + query (or `rerank_query`) preserves rare tickers and acronyms that + dense embeddings blur. +- **Post-fusion sharpness** — a cross-encoder reranker rescues the + handful of true positives that RRF mixes with noise. --- ## 2. System Architecture -The module is engineered with a focus on high-throughput, low-latency, and fault-tolerant execution: -* **Singleton Resource Management (`_instance`):** Guarantees that heavy assets (database connections, Dense/Sparse embedding models) are loaded into memory exactly once per application lifecycle, preventing VRAM leaks. -* **Dual-Track Embedding Topology:** * *Dense Track:* Utilizes standard embeddings (e.g., HuggingFace/Nomic) against the LLM-generated HyDE paragraph to capture broad semantic intent (e.g., "flight to safety", "IV crush"). - * *Sparse Track:* Utilizes `fastembed` (SPLADE) against the raw user query to enforce exact-match lexical scoring for rare tickers or financial acronyms. -* **Defensive Filtering & RRF:** Employs Qdrant's native `models.Filter` for hard bounds (date ranges, specific tickers) and `models.Fusion.RRF` to mathematically balance Dense and Sparse retrieval scores. +| Layer | Implementation | +| --- | --- | +| **Singleton resources** | `_instance` pattern caches Qdrant client + embedding models per process. | +| **Asymmetric vectorisation** | Dense ← `hyde_paragraph`, Sparse ← `rerank_query` (or raw query). | +| **Source-aware time filter** | Per-source `TimePredicate` → OR-joined `unified_timestamp` / `publish_timestamp` range conditions. | +| **Defensive filtering** | `models.Filter` pre-filter (ticker, source_type, action, form, sentiment). | +| **RRF fusion** | `Fusion.RRF` combines dense + sparse prefetch channels. | +| **Cross-encoder rerank** | `CrossEncoder(BAAI/bge-reranker-v2-m3)` rescores top-K. | --- -## 3. Code Strategy & Execution Workflow -The execution strategy operates asynchronously, mapping the structured transformation payload into a complex database query, executing it, and standardizing the output. +## 3. Execution Workflow ```text -[ Input: FullTransformationResult & Raw Query ] +[ FullTransformationResult + raw query + time_predicates ] + │ + ▼ +┌─────────────────────────────────────────────────────────────┐ +│ Step 1 — Deterministic Filter Construction │ +│ ├─► ticker match (models.FieldCondition) │ +│ ├─► source_type match (drops Silver-only source_types) │ +│ ├─► action_direction (SEC) │ +│ ├─► form_type (SEC) │ +│ ├─► sentiment range (news) │ +│ └─► per-source time OR (unified_timestamp OR publish_ts) │ +└─────────────────────────────────────────────────────────────┘ │ ▼ -[ Step 1: Deterministic Filter Construction ] - ├─► Evaluate TimeWindow (Convert to Unix Timestamp constraints) - └─► Evaluate Tickers (Generate 'Should' matching filters) +┌─────────────────────────────────────────────────────────────┐ +│ Step 2 — Asymmetric Vectorisation │ +│ ├─► Dense : HuggingFace `BAAI/bge-base-en-v1.5` │ +│ │ (hyde_paragraph → dense vector) │ +│ └─► Sparse: fastembed `Splade_PP_en_v1` │ +│ (rerank_query → sparse vector) │ +└─────────────────────────────────────────────────────────────┘ │ ▼ -[ Step 2: Asymmetric Vectorization ] - ├─► Embed HyDE Paragraph -> Dense Vector (Semantic) - └─► Embed Raw Query -> Sparse Vector (Lexical/BM25) +┌─────────────────────────────────────────────────────────────┐ +│ Step 3 — Qdrant Prefetch + Fusion.RRF │ +│ using="dense" prefetch + filter │ +│ using="sparse" prefetch + filter │ +│ → RRF(fusion=RRF) top_k_pool candidates │ +└─────────────────────────────────────────────────────────────┘ │ ▼ -[ Step 3: Qdrant Prefetch & Fusion Execution ] - └─► Execute Qdrant `FusionQuery(fusion=RRF)` - └─► Apply Step 1 Filters to limit search space BEFORE vector math. +┌─────────────────────────────────────────────────────────────┐ +│ Step 4 — Cross-Encoder Rerank │ +│ CrossEncoder(BAAI/bge-reranker-v2-m3) │ +│ pairwise score([rerank_query, candidate_text]) → top_k │ +│ drop score ≤ 1e-5 │ +└─────────────────────────────────────────────────────────────┘ │ ▼ -[ Output: List[RetrievedChunk] ] - └─► Mapped & cleansed for the Agent Orchestrator +[ List[RetrievedChunk] ] + └─► audit → logs/retrieval//retriever_audit_trail.jsonl ``` --- -## 4. Output Data Schema & Routing -The module does not write to a physical file path. It operates entirely in memory, returning a strictly typed Python list of `RetrievedChunk` objects. This payload is routed directly to the LangGraph agents (Analyst, Checker, Critic). +## 4. Temporal Alignment Contract + +`retrieve_async` accepts an explicit +`time_predicates: Dict[SourceTimeKey, TimePredicate]` argument. If +present it is used directly; if absent the retriever falls back to the +single `time_window` value inside `FullTransformationResult`. + +Two non-negotiable rules: + +1. **OR over `unified_timestamp` and `publish_timestamp`.** Some + collections only populate one of the two keys; the retriever + must accept a hit on either. Without this, SEC/News filings + written by the legacy ingestor are invisible. +2. **Business-day snapping.** Daily-grain predicates (for + `source_type=options`) are computed by `trading_calendar.py` so + that `"yesterday"` on a Monday resolves to the previous Friday — + not an empty Sunday. + +> **Ops note on Qdrant indexing.** `publish_timestamp` must be +> indexed on the collection, otherwise Qdrant raises +> `400 Index required but not found for "publish_timestamp"`. This +> is a one-time schema fix on the Qdrant side; see +> `Scripts/vector_store/ingestion.py` for the canonical index +> payload. + +--- -### Schema: `RetrievedChunk` (Mapped Output) +## 5. Output Schema — `RetrievedChunk` -| Field Name | Data Type | Source/Index | Purpose | +| Field | Type | Source | Purpose | | :--- | :--- | :--- | :--- | -| `chunk_id` | String | Qdrant `id` | Unique UUID of the point for traceability. | -| `text` | String | Qdrant Payload | The actual financial summary/news text. | -| `score` | Float | RRF Algorithm | Combined relevance score used for MMR reranking. | -| `source_type` | Enum / String | Qdrant Payload | Categorizes origin (e.g., `SEC_Form_4`, `GDELT_News`). | -| `timestamp` | Integer | Qdrant Payload | Unix epoch of publication, critical for temporal weighting. | -| `bronze_ref` | String | Qdrant Payload | Accession number or URL linking back to the raw Bronze data. | -| `metadata` | Dictionary | Qdrant Payload | Unpacked entity tags (tickers, impacted assets). | +| `chunk_id` | String | Qdrant `id` | Unique UUID — traceability. | +| `text` | String | Qdrant payload | Actual news / SEC / macro text. | +| `score` | Float | RRF + rerank | Post-rerank relevance. | +| `source_type` | String | Qdrant payload | `sec` / `news` / `macro` / `gpr`. | +| `timestamp` | Integer | `unified_timestamp` or `publish_timestamp` | Unix epoch. | +| `bronze_ref` | String | payload | Accession / URL / UUID fallback. | +| `metadata` | Dict | payload | Tickers, impacted_assets, form_type, tone_score, … | --- -## 5. Verification & Testing Protocol -The script includes an asynchronous sandboxed testing environment (`if __name__ == "__main__":`). It utilizes a mock implementation of the `QueryTransformer` to simulate a full query-to-retrieval lifecycle without requiring the entire system to run. +## 6. Example Audit Entry + +```json +{ + "timestamp": "2026-04-19T21:16:01.849708", + "original_query": "What recent insider buying activity has there been for TSLA and how did the market react?", + "rerank_query_used": "TSLA Form 4 insider buying executives past month", + "filter_applied": { + "must": [ + {"key": "ticker", "match": {"any": ["TSLA"]}}, + {"key": "source_type", "match": {"any": ["sec", "news"]}}, + {"key": "action_direction", "match": {"any": ["BUY", "ACQUIRE/VEST"]}}, + {"key": "form_type", "match": {"value": "4"}}, + { + "should": [ + {"key": "unified_timestamp", "range": {"gte": 1774055761.0, "lte": 1776647761.0}}, + {"key": "publish_timestamp", "range": {"gte": 1774055761.0, "lte": 1776647761.0}} + ] + } + ] + }, + "fallback_triggered": false, + "results_count": 1, + "top_k_scores": [0.0145], + "latency_sec": 0.857, + "status": "SUCCESS" +} +``` + +--- + +## 7. Reliability Controls + +| Control | Mechanism | +| --- | --- | +| Singleton resources | `__new__` + `@lru_cache` keeps heavy models loaded once per process. | +| Connection resilience | Qdrant client opens with `prefer_grpc=False`, `timeout=15s`, `retries=3 × 2s`. | +| Graceful failure | Any exception in `retrieve_async` logs a `FAILED` audit row and returns `[]` — agents never observe a crash. | +| Fallback tiers | `drop_ticker_180d` widens the window and drops the ticker filter when the first pass returns 0 chunks. | + +--- + +## 8. Verification -**How to Test:** -Execute the script directly from your terminal: ```bash python Scripts/retrieval/qdrant_retriever.py +pytest -xvs Scripts/tests/test_master_retriever.py +pytest -xvs Scripts/tests/test_router_e2e.py ``` -**Expected Successful Output:** -1. **Stage 1 (Mock):** Console prints the simulated LLM extraction (Tickers, Time, HyDE generation). -2. **Stage 2 (Retrieval):** The console prints `🔍 Stage 2: Qdrant Hybrid Retrieving...`. -3. **Final Result:** Outputs `✅ Final Retrieved: [N] chunks` followed by an enumerated list of results displaying their RRF Scores, Bronze References, Source Types, and primary Tickers. +Expected console shape: -```json -{"timestamp": "2026-04-19T21:16:01.849708", -"original_query": "What recent insider buying activity has there been for TSLA and how did the market react?", -"rerank_query_used": "TSLA Form 4 insider buying executives past month", "filter_applied": { - "should": null, - "min_should": null, - "must": [ - {"key": "ticker", "match": {"any": ["TSLA"]}, "range": null, "geo_bounding_box": null, "geo_radius": null, "geo_polygon": null, "values_count": null, "is_empty": null, "is_null": null}, - {"key": "source_type", "match": {"any": ["sec", "news"]}, "range": null, "geo_bounding_box": null, "geo_radius": null, "geo_polygon": null, "values_count": null, "is_empty": null, "is_null": null}, - {"key": "action_direction", "match": {"any": ["BUY", "ACQUIRE/VEST"]}, "range": null, "geo_bounding_box": null, "geo_radius": null, "geo_polygon": null, "values_count": null, "is_empty": null, "is_null": null}, - {"key": "form_type", "match": {"value": "4"}, "range": null, "geo_bounding_box": null, "geo_radius": null, "geo_polygon": null, "values_count": null, "is_empty": null, "is_null": null}, - {"key": "unified_timestamp", "match": null, "range": {"lt": null, "gt": null, "gte": 1774055761.0, "lte": 1776647761.0}, "geo_bounding_box": null, "geo_radius": null, "geo_polygon": null, "values_count": null, "is_empty": null, "is_null": null}], "must_not": null}, - "fallback_triggered": false, "results_count": 1, "top_k_scores": [0.0145], "latency_sec": 0.857, "status": "SUCCESS", "error_msg": null} -``` +1. `🔍 Stage 2: Qdrant Hybrid Retrieving...` +2. `✅ Final Retrieved: N chunks` followed by enumerated scores. --- -## 6. Environment Dependencies -Ensure your `.env` file contains your Qdrant credentials and HuggingFace cache paths. +## 9. Environment Dependencies -**One-Line Installation Command:** ```bash pip install qdrant-client fastembed sentence-transformers python-dotenv asyncio ``` -*(Note: This module relies on the system's core schemas and connection factory located in `Scripts.vector_store.connection` and `Scripts.retrieval.schema`).* \ No newline at end of file + +| Variable | Default | Effect | +| --- | --- | --- | +| `EMBEDDING_MODEL_NAME` | `BAAI/bge-base-en-v1.5` | Dense encoder | +| `EMBEDDING_DEVICE` | `cpu` | Dense encoder placement | +| `SPARSE_MODEL_NAME` | `prithivida/Splade_PP_en_v1` | Sparse encoder | +| `FASTEMBED_THREADS` | `6` | Sparse encoder threads | +| `RERANKER_MODEL_NAME` | `BAAI/bge-reranker-v2-m3` | Cross-encoder | +| `RETRIEVER_DEVICE` | `cpu` | Cross-encoder placement | +| `QDRANT_HOST` / `QDRANT_API_KEY` | required | Qdrant Cloud credentials | + +_Depends on `Scripts.vector_store.connection` (clients) and +`Scripts.retrieval.schema` (Pydantic contracts)._ diff --git a/docs/Query_retrieval_docs/Query_intent_docs.md b/docs/Query_retrieval_docs/Query_intent_docs.md index 4dcfe65..acd8143 100644 --- a/docs/Query_retrieval_docs/Query_intent_docs.md +++ b/docs/Query_retrieval_docs/Query_intent_docs.md @@ -1,109 +1,200 @@ -# Context-Anchored Query Transformation Engine +# Query Intent & Transformation Layer -This documentation details the `query_transform.py` module, which serves as the intelligent vanguard of the retrieval pipeline. It intercepts user queries and transforms them into highly structured, database-ready parameters. +_Scope: `Scripts/retrieval/query_transform.py` + +`Scripts/retrieval/master_retriever.py::router_llm`._ -## 1. Strategic Objective (Goal) -The primary goal of this module is to operate as an **industrial-grade, two-stage query transformation engine**. It eliminates the ambiguity of raw human questions by parsing them into deterministic filters (Metadata Extraction) while simultaneously enhancing semantic retrieval through synthetic document generation (HyDE). This drastically reduces the "needle in a haystack" problem during vector searches and ensures downstream multi-agent workflows receive perfectly clean data. +This document defines **how a raw user question becomes a pair of +deterministic structured artefacts** (routing decision + transformation +payload) that the rest of the retrieval pipeline treats as a hard +contract. --- -## 2. System Architecture -The module is built upon a **Fully Decoupled Prompt & Guardrail Architecture**, ensuring high stability and preventing Large Language Model (LLM) hallucinations: +## 1. Strategic Objective -* **Ontology-Driven Constraints:** Tightly coupled with `financial_ontology.py` to enforce strict adherence to allowed vocabularies (`ALLOWED_METRICS`, `ALLOWED_SOURCES`). -* **Schema Enforcement:** Utilizes Pydantic schemas (defined in `schema.py`) to guarantee that the LLM's output is consistently parsed into strongly-typed objects. -* **Asynchronous AI Pipeline:** Built natively with `asyncio` and `ChatOllama`, allowing for non-blocking execution of LLM prompts, significantly reducing latency during the two-stage transformation. +The intent layer is the **policy gate** of the retrieval subsystem. It +converts ambiguous natural language into: + +1. a **route** (Gold-only, Silver-only, or hybrid), and +2. a **structured extraction** (tickers, metrics, time window, action + direction) plus a HyDE expansion used for dense retrieval. + +Without this layer, downstream retrievers would have to parse the +query themselves — a recipe for drift, duplicated logic, and +non-deterministic behaviour across agents. --- -## 3. Code Strategy & Execution Workflow -The code executes a sequential, two-stage AI strategy designed to maximize the fidelity of the final Retrieval-Augmented Generation (RAG) context. +## 2. Two Cooperating Sub-Components + +| Sub-component | File | Model | Purpose | +| --- | --- | --- | --- | +| **Intent Router** | `master_retriever.py::MasterRetriever.router_llm` | `llama3:latest` (env `OLLAMA_ROUTER_MODEL`) | Pick `gold_only` / `silver_only` / `hybrid_both`. Short JSON output. | +| **Query Transformer** | `query_transform.py::QueryTransformer` | `options-expert-v1:latest` (env `OLLAMA_CUSTOM_MODEL_NAME`) | Two-stage metadata extraction + HyDE generation. | + +> **Model rationale.** The router only classifies into three buckets — +> using the fine-tuned 70B here would burn 30–60 s per query for no +> accuracy gain. The transformer, in contrast, has to reason about +> options terminology, SEC form types, macro indicators, etc., so it +> runs on the fine-tuned model. See `docs/LLM_Pool.md` §1 for the full +> model inventory. -1. **Stage 1: Analytical Metadata Extraction** - The engine passes the query to the LLM equipped with the `EXTRACTOR_SYSTEM_PROMPT`. The LLM identifies target tickers, maps financial metrics to database-friendly column names, and deduces time windows. -2. **Stage 2: HyDE (Hypothetical Document Embeddings) Generation** - Using the reasoning from Stage 1 and the `HYDE_WRITER_SYSTEM_PROMPT`, the LLM drafts a fake, textbook-perfect "financial report paragraph" that directly answers the user's question. This paragraph is embedded to find the closest real documents in the Gold Semantic Layer. +--- + +## 3. Execution Workflow ```text [ Raw User Query ] │ ▼ -[ Stage 1: Metadata Extractor ] - ├─► Validate via Financial Ontology - └─► Extract: Tickers, Metrics, Action Direction, Time Window +┌─────────────────────────────────────────────────────┐ +│ 3.1 MasterRetriever.router_llm (llama3:latest) │ +│ → QueryIntent(primary_route=...) │ +└─────────────────────────────────────────────────────┘ + │ + ▼ +┌─────────────────────────────────────────────────────┐ +│ 3.2 QueryTransformer.transform_for_dual_rag │ +│ (options-expert-v1:latest, 70B, 2 stages) │ +│ │ +│ Stage 1 — EXTRACTOR │ +│ ├─► Ontology-constrained metadata │ +│ ├─► Ticker whitelist guardrail │ +│ └─► TimeWindow enum normalization │ +│ │ +│ Stage 2 — HyDE │ +│ ├─► hyde_paragraph (dense channel) │ +│ └─► rerank_query (sparse + rerank channel) │ +└─────────────────────────────────────────────────────┘ │ ▼ -[ Stage 2: HyDE Generator ] - └─► Generate: Hypothetical Financial Paragraph +[ FullTransformationResult + QueryIntent ] │ ▼ -[ Output: FullTransformationResult ] - └─► Handed off to Qdrant Retriever & SQL Tools + handed to QdrantRetriever / SilverSQLTool ``` --- -## 4. Output Data Schema & Routing -The engine produces an in-memory `FullTransformationResult` object. It does not save to a physical file path; instead, it dynamically routes this structured payload directly into the retrieval pipeline. +## 4. Time Anchoring Contract -### Schema: `FullTransformationResult` +The transformer emits a `TimeWindow` enum (`yesterday`, `past_week`, +`past_month`, …). These enum values are **not interpreted here** — +they are resolved downstream by `Scripts/retrieval/time_adapter.py` +against a fixed anchor: -| Component | Field Name | Data Type | Purpose | -| :--- | :--- | :--- | :--- | -| **Metadata** | `logical_reasoning` | String | The LLM's step-by-step logic detailing why specific variables were extracted. | -| **Metadata** | `tickers` | List[String] | Explicit stock or ETF symbols identified (e.g., `["SPY", "NVDA"]`). | -| **Metadata** | `metrics` | List[String] | Canonical financial metrics requested (e.g., `["iv_skew", "put_call_ratio"]`). | -| **Metadata** | `action_direction` | String | Identifies categorical actions (e.g., `BUY`, `SELL`, `NEUTRAL`). | -| **Metadata** | `time_window` | Object | Standardized date range used for temporal pre-filtering in Qdrant. | -| **HyDE** | `hyde_paragraph` | String | The synthetic financial text used for Dense Vector similarity matching. | +- The anchor is **always** `RunState.latest_business_day("options")`, + read from `config/runtime/collect_data_state.json`. It is *never* + `datetime.now()`. +- `time_adapter.compile_all` returns a `Dict[SourceTimeKey, + TimePredicate]` — one window per data source (SEC, options, macro, + news). Each source may have different business-day semantics. +- The resulting predicates are serialised into `AgentState` so that + re-queries from `CheckerAgent._rescue_missing_anchors` use the same + window as the initial retrieval. This eliminates the `latest_atm_iv` + oscillation observed in the 2026-04-22 router_e2e logs. + +See `docs/Query_retrieval_docs/Time_Schema_Audit.md` for the full +time-schema matrix. --- -## 5. Verification & Testing Protocol -The script includes a built-in asynchronous sandbox at the bottom of the file (`if __name__ == "__main__":`), allowing developers to independently verify the LLM's extraction logic and prompt effectiveness without triggering the entire RAG pipeline. +## 5. Output Schema — `FullTransformationResult` -**How to Test:** -Run the module directly from your terminal: -```bash -python Scripts/retrieval/query_transform.py -``` +| Component | Field | Type | Purpose | +| :--- | :--- | :--- | :--- | +| **Metadata** | `logical_reasoning` | String | Stage-1 CoT; audit-only. | +| **Metadata** | `tickers` | List[str] | Guardrail-cleaned tickers. | +| **Metadata** | `metrics` | List[str] | Canonical metric names from `financial_ontology.ALLOWED_METRICS`. | +| **Metadata** | `source_types` | List[str] | `sec` / `news` / `options` / `macro`. | +| **Metadata** | `action_direction` | Enum | `BUY` / `SELL` / `NEUTRAL` / `ANY`. | +| **Metadata** | `form_type` | Enum | `4`, `8-K`, `13F`, `ANY`. | +| **Metadata** | `sentiment_target` | Enum | `POSITIVE` / `NEGATIVE` / `ANY`. | +| **Metadata** | `event_keyword` | String | Short lexical hook for SPLADE. | +| **Metadata** | `time_window` | Enum | Raw token — resolved downstream. | +| **HyDE** | `hyde_paragraph` | String | Semantic carrier for dense retrieval. | +| **HyDE** | `rerank_query` | String | Factual short phrase for sparse + rerank. | +| **Mapped** | `mapped_physical_columns` | List[str] | Derived via `METRIC_TO_COLUMN_MAPPING`. | + +--- + +## 6. Example Output -**Expected Successful Output:** -The console will print a distinct separation of stages: -1. **[STAGE 1]:** Displays the `🧠 Reasoning`, `📊 Tickers`, `📈 Metrics`, and `🕒 Time Window` extracted from the mock query. -2. **[STAGE 2]:** Prints the generated fake financial text designed for vector matching. ```json -{"timestamp": "2026-04-19T21:16:00.977910", -"latency_seconds": 107.96, -"original_query": "What recent insider buying activity has there been for TSLA and how did the market react?", -"primary_route": "hybrid_both", -"transformation_result": { - "metadata": { - "logical_reasoning": "Macro Step: Insider activity. Meso Step: Market reaction. Micro Step: TSLA insiders. Action: BUY.", - "tickers": ["TSLA"], - "metrics": ["Insider Trading", "Price Change (%)"], - "source_types": ["sec", "news"], - "action_direction": "BUY", - "form_type": "4", - "sentiment_target": "ANY", - "event_keyword": "insider_buying", - "time_window": "past_month"}, +{ + "timestamp": "2026-04-19T21:16:00.977910", + "latency_seconds": 107.96, + "original_query": "What recent insider buying activity has there been for TSLA and how did the market react?", + "primary_route": "hybrid_both", + "transformation_result": { + "metadata": { + "logical_reasoning": "Macro Step: Insider activity. Meso: Market reaction. Micro: TSLA insiders. Action: BUY.", + "tickers": ["TSLA"], + "metrics": ["Insider Trading", "Price Change (%)"], + "source_types": ["sec", "news"], + "action_direction": "BUY", + "form_type": "4", + "sentiment_target": "ANY", + "event_keyword": "insider_buying", + "time_window": "past_month" + }, "hyde": { - "hyde_paragraph": "TSLA insiders have recently filed Form 4s indicating buying activity, which may signal confidence in the company's prospects, potentially leading to higher stock prices.", - "rerank_query": "TSLA Form 4 insider buying executives past month"}, "mapped_physical_columns": ["mom_change_pct", "insider_net_flow", "daily_change_pct"] - } + "hyde_paragraph": "TSLA insiders have recently filed Form 4s indicating buying activity...", + "rerank_query": "TSLA Form 4 insider buying executives past month" + }, + "mapped_physical_columns": ["mom_change_pct", "insider_net_flow", "daily_change_pct"] + } } - ``` --- -## 6. Environment Dependencies -Ensure your `.env` file is properly configured at the `PROJECT_ROOT` level, and that local Ollama services are active if running local models. +## 7. Reliability Controls + +- **Ontology-locked output.** Every free-form LLM field is post-checked + against `financial_ontology`. Unknown tickers are dropped, not + silently persisted. +- **Ticker-explosion guardrail.** Queries that extract more than 8 + tickers are truncated to the top 5 to keep Qdrant filters tractable. +- **Audit trail.** Every transformation is appended to + `logs/query_transform//query_audit_trail.jsonl` with the raw + query, mapped columns, chosen route, and latency. +- **Failure semantics.** Either stage may raise — the upstream caller + (`MasterRetriever.retrieve`) converts exceptions into a degraded + route (`silver_only` with empty metadata) rather than bubbling up + and killing the agent graph. + +--- + +## 8. Verification + +```bash +# Exercise the transformer alone (no Qdrant required) +python Scripts/retrieval/query_transform.py + +# Exercise the full MasterRetriever (router + transform + retrieval) +pytest -xvs Scripts/tests/test_master_retriever.py +pytest -xvs Scripts/tests/test_router_e2e.py +``` + +Expected STDOUT shape for `query_transform.py`: + +1. `[STAGE 1]` — reasoning, tickers, metrics, time window. +2. `[STAGE 2]` — HyDE paragraph + rerank query. +3. Final JSON serialisation suitable for pasting into issue reports. -**Required Installations:** -Execute the following one-line command to install the required dependencies for this module: +--- + +## 9. Environment Dependencies ```bash -pip install langchain-core langchain-ollama pydantic python-dotenv asyncio +pip install langchain-core langchain-ollama pydantic python-dotenv ``` + +Required env entries (all present in the standard `.env`): + +| Variable | Default | Purpose | +| --- | --- | --- | +| `OLLAMA_CUSTOM_MODEL_NAME` | `options-expert-v1:latest` | Transformer (both stages) | +| `OLLAMA_ROUTER_MODEL` | `llama3:latest` | Intent router in `MasterRetriever` | +| `OLLAMA_HOST` | `http://localhost:11434` | Ollama endpoint | diff --git a/docs/Query_retrieval_docs/Retrieval_Architecture_and_Strategy.md b/docs/Query_retrieval_docs/Retrieval_Architecture_and_Strategy.md index 5b3773d..6ccc800 100644 --- a/docs/Query_retrieval_docs/Retrieval_Architecture_and_Strategy.md +++ b/docs/Query_retrieval_docs/Retrieval_Architecture_and_Strategy.md @@ -1,18 +1,32 @@ # Retrieval Architecture, Strategy, and Workflow +_This document is the authoritative spec of the retrieval subsystem — +how raw user questions become ranked evidence that the agent graph +consumes. It supersedes all prior retrieval READMEs._ + +--- + ## I. Mission Profile and System Boundary -This document defines the production retrieval architecture implemented across: +The retrieval subsystem is implemented across: - `Scripts/core/financial_ontology.py` +- `Scripts/core/intent_router_prompt_templates.py` - `Scripts/core/prompt_templates.py` -- `Scripts/core/few_shot_config.py` +- `Scripts/core/few_shot_intent.py` / `few_shot_config.py` +- `Scripts/core/trading_calendar.py` - `Scripts/retrieval/schema.py` - `Scripts/retrieval/query_transform.py` +- `Scripts/retrieval/time_adapter.py` +- `Scripts/retrieval/master_retriever.py` - `Scripts/retrieval/qdrant_retriever.py` +- `Scripts/retrieval/sql_tools.py` - `Scripts/vector_store/connection.py` -The retrieval subsystem is designed as a **two-stage query transformation pipeline** followed by an **asymmetric hybrid retrieval and reranking pipeline**. Its objective is to convert ambiguous user language into deterministic filters and high-signal retrieval vectors for Qdrant Cloud. +It is a **two-stage transformation pipeline** followed by a +**dual-track retrieval-and-merge pipeline** (Gold semantic + Silver +structured), all anchored on a single `RunState`-owned business-day +timestamp. --- @@ -20,187 +34,175 @@ The retrieval subsystem is designed as a **two-stage query transformation pipeli ### A. Knowledge Governance Layer (`Scripts/core`) -- **Ontology governance** (`financial_ontology.py`): - - Defines controlled vocabularies: `ALLOWED_SOURCES`, `ALLOWED_CATEGORIES`, `ALLOWED_METRICS`. - - Provides deterministic semantic-to-physical mapping via `METRIC_TO_COLUMN_MAPPING`. - - Prevents free-form extraction drift by anchoring output fields to approved values. -- **Prompt governance** (`prompt_templates.py`): - - Stage 1 prompt: strict extractor with explicit output constraints. - - Stage 2 prompt: HyDE writer plus concise `rerank_query` generation. -- **Few-shot calibration** (`few_shot_config.py`): - - Injects examples for SEC, macro/news, and options-style queries when available. +- **Ontology governance** (`financial_ontology.py`) + - Controlled vocabularies: `ALLOWED_SOURCES`, `ALLOWED_CATEGORIES`, + `ALLOWED_METRICS`. + - Deterministic metric→physical-column map + (`METRIC_TO_COLUMN_MAPPING`). + - Prevents free-form extraction drift. +- **Prompt governance** (`prompt_templates.py`, + `intent_router_prompt_templates.py`) + - Stage 1 extractor prompt, Stage 2 HyDE prompt, and the cheap + intent-router prompt used by `MasterRetriever.router_llm`. +- **Few-shot calibration** (`few_shot_intent.py`) + - Injects examples for SEC, macro/news, options-style queries. +- **Trading calendar** (`trading_calendar.py`) + - Dependency-free business-day arithmetic (`previous_business_day`, + `n_business_days_back`, `clamp_to_business_day`). ### B. Contract and Type-Safety Layer (`Scripts/retrieval/schema.py`) -- Uses Pydantic models as strict contracts for: - - `MetadataExtraction` - - `HyDEGeneration` - - `FullTransformationResult` - - `RetrievedChunk` - - `QueryIntent` -- Uses enums to enforce standardized values (for source, action, form type, time window, sentiment). - -### C. Transformation Intelligence Layer (`Scripts/retrieval/query_transform.py`) - -- Executes asynchronous two-stage LLM transformation: - 1. **Extractor LLM** for structured metadata. - 2. **HyDE writer LLM** for retrieval-oriented synthetic paragraph and rerank phrase. -- Applies post-LLM guardrails: - - ticker whitelist cleanup - - mapped physical column derivation from ontology - - audit logging to `logs/query_transform//query_audit_trail.jsonl` - -### D. Retrieval Execution Layer (`Scripts/retrieval/qdrant_retriever.py`) - -- Performs hybrid retrieval with three components: - - Dense embedding retrieval (semantic channel) - - Sparse SPLADE retrieval (lexical channel) - - Cross-encoder reranking (precision channel) -- Applies metadata/time filters before fusion. -- Uses Qdrant `Fusion.RRF` to combine dense + sparse prefetch channels. -- Produces standardized `List[RetrievedChunk]` and writes retrieval audit logs to `logs/retrieval//retriever_audit_trail.jsonl`. - -### E. Infrastructure and Connectivity Layer (`Scripts/vector_store/connection.py`) - -- Provides cached singletons for: - - Qdrant Cloud client (`get_qdrant_client`) - - Embedding provider (`get_embedding_model`) -- Enforces REST/HTTP path (`prefer_grpc=False`) for firewall resilience. -- Loads all key runtime settings from `.env`. +Pydantic models serve as hard contracts: ---- +- `MetadataExtraction` +- `HyDEGeneration` +- `FullTransformationResult` +- `RetrievedChunk` +- `QueryIntent` +- `SourceCitation` +- Enums for `TimeWindow`, `SourceType`, `ActionDirection`, `FormType`, + `SentimentTarget`. -## III. Retrieval Strategy Blueprint +### C. Intent Routing Layer (`Scripts/retrieval/master_retriever.py::router_llm`) -### A. Why This Is an Asymmetric Hybrid Strategy +- Cheap vanilla `llama3:latest` decides `gold_only` / `silver_only` / + `hybrid_both`. See `docs/LLM_Pool.md` for the two-tier model + rationale. -The system deliberately uses **different texts for different vector channels**: +### D. Transformation Intelligence Layer (`Scripts/retrieval/query_transform.py`) -- **Dense channel input:** `hyde_paragraph` (high-context semantic expansion) -- **Sparse channel input:** `rerank_query` (short factual lexical target) +- Two-stage asynchronous LLM transformation on the fine-tuned 70B: + 1. **Extractor** (`OLLAMA_CUSTOM_MODEL_NAME`, `format=json`) + 2. **HyDE writer** (`OLLAMA_CUSTOM_MODEL_NAME`, higher temp) +- Post-LLM guardrails: ticker whitelist, ontology mapping, audit JSONL. -This asymmetry balances: -- semantic recall for abstract phrasing, and -- exact precision for tickers, forms, and event keywords. +### E. Time Alignment Layer (`Scripts/retrieval/time_adapter.py`) -### B. Deterministic Filtering Strategy +Single source of truth for retrieval time windows. -`_build_smart_filter(...)` applies institutional filtering logic before retrieval: +- `compile_all(time_window, anchor_date)` → + `Dict[SourceTimeKey, TimePredicate]` — one window *per data source* + (`SEC`, `OPTIONS`, `NEWS`, `MACRO`). +- Daily-grain sources are **business-day-aware** via + `trading_calendar`. `"yesterday"` on a Monday resolves to Friday. +- `TimePredicate` is **serialisable** — it is persisted in + `AgentState["time_range"]["source_predicates"]` so that the + `CheckerAgent` rescue step re-queries Silver with the same window + as the initial retrieval. This fixes the `latest_atm_iv` oscillation + diagnosed in `docs/test/2026-04-22/router_e2e_deep_analysis.md`. -- ticker matching (`ticker`) -- source-type matching (`source_type`) -- SEC action/form constraints (`action_direction`, `form_type`) -- News sentiment constraints (`tone_score > 0` or `< 0`) -- time-range bounds via `unified_timestamp` +### F. Retrieval Execution Layer -This design reduces false positives before vector scoring begins. +Two coordinated retrievers, both orchestrated by `MasterRetriever`: -### C. Post-Fusion Precision Strategy +- `qdrant_retriever.py::FinancialHybridRetriever` — Gold semantic + (Dense + Sparse + Rerank). +- `sql_tools.py::SilverSQLTool` — Silver structured (Parquet + metric + dispatcher; consumes the same `TimePredicate` objects). -After RRF fusion: +### G. Infrastructure Layer (`Scripts/vector_store/connection.py`) -- candidate texts are rescored by a cross-encoder reranker, -- low-score noise is dropped (`score > 0.00001`), -- top-k finalized records are normalized to `RetrievedChunk`. +- Cached singletons for Qdrant client and embedding model. +- `prefer_grpc=False` for firewall resilience. +- All credentials loaded from `.env`. + +--- + +## III. Retrieval Strategy Blueprint + +### A. Asymmetric Hybrid — Why Two Texts Feed Two Channels + +| Channel | Input | Model | Rationale | +| --- | --- | --- | --- | +| Dense | `hyde_paragraph` (long, synthetic) | `BAAI/bge-base-en-v1.5` | Captures abstract semantic intent ("flight to safety", "IV crush"). | +| Sparse | `rerank_query` (short, factual) | `prithivida/Splade_PP_en_v1` | Enforces exact lexical match for tickers and form types. | + +### B. Deterministic Pre-Filtering + +`_build_smart_filter` narrows search space *before* vector math: + +- `ticker`, `source_type` (with Silver-only types stripped) +- SEC: `action_direction`, `form_type` +- News: `tone_score > 0` / `< 0` +- Time: OR over `unified_timestamp` **and** `publish_timestamp`, + bounded by the per-source `TimePredicate`. + +### C. Post-Fusion Precision + +After `Fusion.RRF` merges dense and sparse prefetch pools, +`BAAI/bge-reranker-v2-m3` rescores top-K. Chunks with score ≤ 1e-5 are +dropped. + +### D. Macro as a First-Class Silver Anchor + +`latest_macro_context.md` (written by the macro pipeline) is parsed +in `master_retriever.py::_parse_macro_snapshot` and folded into +`silver_context` as `MACRO_*` anchors. This closes the "macro citation +trap" where the Analyst cited unattributable macro values. --- ## IV. End-to-End Workflow (Execution Graph) ```text -[User Query] - | - v -[QueryIntent (upstream router/orchestrator)] - | - v -[Stage 1: Metadata Extraction | ChatOllama + Pydantic] - |- ontology-constrained fields - |- ticker whitelist guardrail - |- enum-normalized metadata - | - v -[Stage 2: HyDE + Rerank Query Generation | ChatOllama + Pydantic] - |- hyde_paragraph (semantic carrier) - |- rerank_query (lexical carrier) - | - v -[Hybrid Vectorization] - |- Dense: embed_query(hyde_paragraph) - |- Sparse: SPLADE(query_embed(rerank_query)) - | - v -[Qdrant Prefetch + Fusion.RRF] - |- dense prefetch (using="dense") - |- sparse prefetch (using="sparse") - |- metadata/time smart filter - | - v -[Cross-Encoder Rerank] - |- pairwise scoring: [rerank_query, candidate_text] - |- sort descending - | - v -[RetrievedChunk[] Output] - |- bronze_ref (accession/url/id fallback) - |- source_type, score, metadata - | - v -[Audit Logs + downstream agent consumption] +[ User Query ] + │ + ▼ +[ MasterRetriever.router_llm (llama3:latest) ] ← route decision + │ + ▼ +[ QueryTransformer (options-expert-v1:latest, 70B) ] ← 2-stage transform + │ ─ EXTRACT (JSON) + │ ─ HyDE + ▼ +[ time_adapter.compile_all(anchor_date from RunState) ] ← per-source windows + │ + ├──────────────┬─────────────────────────────────────┐ + ▼ ▼ ▼ +[ Gold ] [ Silver SQL ] [ Macro snapshot ] +FinancialHybrid sql_tools.SilverSQLTool parse latest_macro_context.md + Retriever ├─ handler dispatcher (metrics) → MACRO_* anchors + ├─ Dense ├─ metadata windowed Parquet │ + ├─ Sparse └─ anchors[] │ + ├─ RRF fuse │ + ├─ Rerank │ + └─ drop score ≤ 1e-5 │ + │ │ + └──────────────┬──────────────────────────────┘ + ▼ + [ MasterRetriever merges → MasterRetrievalResult ] + │ + ▼ + LangGraph Agents (Router → Analyst → Checker → Finalizer) ``` --- -## V. Model Registry and Compute Placement (CPU/GPU) - -### A. Query Transformation Models - -1. **Extractor LLM** - - Class: `ChatOllama(...).with_structured_output(MetadataExtraction)` - - Env key: `OLLAMA_CUSTOM_MODEL_NAME` - - Default: `options-expert-v1:latest` - - Purpose: strict metadata extraction and reasoning chain - - Compute: managed by Ollama runtime (CPU/GPU selection depends on host Ollama configuration) - -2. **HyDE Writer LLM** - - Class: `ChatOllama(...).with_structured_output(HyDEGeneration)` - - Env key: `OLLAMA_CUSTOM_MODEL_NAME` - - Default: `options-expert-v1:latest` - - Purpose: generate `hyde_paragraph` and `rerank_query` - - Compute: managed by Ollama runtime (CPU/GPU depends on Ollama deployment) - -### B. Retrieval Models - -1. **Dense Embedding Model** - - Source factory: `get_embedding_model()` in `connection.py` - - Provider env: `EMBEDDING_PROVIDER` (default `huggingface`) - - Model env: `EMBEDDING_MODEL_NAME` (default `BAAI/bge-large-en-v1.5`) - - Device env: `EMBEDDING_DEVICE` (default `cpu`) - - Compute: - - HuggingFace mode: explicit `EMBEDDING_DEVICE` control (`cpu`, `cuda`, `mps`, etc.) - - Ollama embedding mode: compute managed by Ollama server (`OLLAMA_HOST`) - -2. **Sparse Embedding Model** - - Class: `SparseTextEmbedding` - - Env key: `SPARSE_MODEL_NAME` - - Default: `prithivida/Splade_PP_en_v1` - - Threads env: `FASTEMBED_THREADS` (default `4`) - - Compute: CPU-oriented thread execution - -3. **Reranker Model** - - Class: `CrossEncoder` - - Env key: `RERANKER_MODEL_NAME` - - Default: `BAAI/bge-reranker-v2-m3` - - Device env: `RETRIEVER_DEVICE` (default `cpu`) - - Compute: explicit PyTorch device control via `RETRIEVER_DEVICE` (CPU or GPU-enabled if available) - -### C. Data Plane / Database Runtime - -- **Vector database:** Qdrant Cloud -- **Client:** `QdrantClient` -- **Connection mode:** HTTP/HTTPS (`prefer_grpc=False`) -- **Timeout:** `15.0s` -- **Retry policy:** up to `3` attempts with `2s` delay +## V. Model Registry + +This section mirrors `docs/ARCHITECTURE.md` §5. Treat that document as +canonical; this table is here for reader convenience. + +### A. Ollama LLMs + +| Role | Model | Env | Notes | +| --- | --- | --- | --- | +| Intent router | `llama3:latest` | `OLLAMA_ROUTER_MODEL` | `MasterRetriever.router_llm`. Small JSON output. | +| Metadata extractor | `options-expert-v1:latest` | `OLLAMA_CUSTOM_MODEL_NAME` | `QueryTransformer` Stage 1. Fine-tuned Llama-3.3-70B-Q4. | +| HyDE writer | `options-expert-v1:latest` | `OLLAMA_CUSTOM_MODEL_NAME` | `QueryTransformer` Stage 2. | + +### B. Retrieval models (not Ollama) + +| Purpose | Artefact | Env | Device | +| --- | --- | --- | --- | +| Dense encoder | `BAAI/bge-base-en-v1.5` | `EMBEDDING_MODEL_NAME` | `EMBEDDING_DEVICE` (default `cpu`) | +| Sparse (SPLADE) | `prithivida/Splade_PP_en_v1` | `SPARSE_MODEL_NAME` | CPU, `FASTEMBED_THREADS` | +| Cross-encoder reranker | `BAAI/bge-reranker-v2-m3` | `RERANKER_MODEL_NAME` | `RETRIEVER_DEVICE` | + +### C. Data plane + +- Vector DB: **Qdrant Cloud** (`QDRANT_HOST`, `QDRANT_API_KEY`) +- Connection: HTTP/HTTPS, `timeout=15s`, `retries=3 × 2s`. --- @@ -210,40 +212,59 @@ After RRF fusion: | --- | --- | --- | | `QDRANT_HOST` | required | Qdrant Cloud endpoint | | `QDRANT_API_KEY` | required | Qdrant authentication | -| `EMBEDDING_PROVIDER` | `huggingface` | Dense embedding backend | -| `EMBEDDING_MODEL_NAME` | `BAAI/bge-large-en-v1.5` | Dense model selection | -| `EMBEDDING_DEVICE` | `cpu` | Dense model device placement | -| `OLLAMA_HOST` | `http://localhost:11434` | Ollama embedding server endpoint | -| `OLLAMA_CUSTOM_MODEL_NAME` | `options-expert-v1:latest` | Query-transform LLM for both stages | -| `SPARSE_MODEL_NAME` | `prithivida/Splade_PP_en_v1` | Sparse lexical model | -| `FASTEMBED_THREADS` | `4` | Sparse model thread count | -| `RERANKER_MODEL_NAME` | `BAAI/bge-reranker-v2-m3` | Cross-encoder model | -| `RETRIEVER_DEVICE` | `cpu` | Cross-encoder device placement | +| `EMBEDDING_MODEL_NAME` | `BAAI/bge-base-en-v1.5` | Dense encoder | +| `EMBEDDING_DEVICE` | `cpu` | Dense encoder device | +| `SPARSE_MODEL_NAME` | `prithivida/Splade_PP_en_v1` | Sparse encoder | +| `FASTEMBED_THREADS` | `6` | Sparse encoder threads | +| `RERANKER_MODEL_NAME` | `BAAI/bge-reranker-v2-m3` | Cross-encoder | +| `RETRIEVER_DEVICE` | `cpu` | Cross-encoder device | +| `OLLAMA_HOST` | `http://localhost:11434` | Ollama endpoint | +| `OLLAMA_CUSTOM_MODEL_NAME` | `options-expert-v1:latest` | Query transform + all agents | +| `OLLAMA_ROUTER_MODEL` | `llama3:latest` | `MasterRetriever` router | --- ## VII. Reliability and Auditability Controls -- **Singleton/caching controls:** - - `@lru_cache` for embedding model and Qdrant client - - singleton retriever instance via `__new__` -- **Traceability controls:** - - transformation audit JSONL - - retrieval audit JSONL with scores, latency, filters, fallback flag -- **Failure controls:** - - retrying Qdrant connection policy - - exception-safe retrieval returns empty list with logged diagnostics +- **Singleton caching** — `@lru_cache` for embeddings, `__new__` for + retriever, `llm_pool` for Ollama clients. +- **Transformation audit** — `logs/query_transform//query_audit_trail.jsonl` +- **Retrieval audit** — `logs/retrieval//retriever_audit_trail.jsonl` +- **SilverSQL audit** — `logs/Parquet_Query//*` via the + `SilverSQLAudit` logger. +- **Graceful failure** — any retriever that raises returns `[]` + + logged diagnostics; agents never observe an exception. +- **Time determinism** — `TimePredicate`s serialised into `AgentState` + guarantee that Checker rescue re-queries use an identical window to + the original retrieval. --- ## VIII. Practical Invocation Sequence ```python -# Pseudocode-level flow -intent = QueryIntent(primary_route="hybrid_both") -transform_result = await QueryTransformer().transform_for_dual_rag(query, intent) -chunks = await FinancialHybridRetriever().retrieve_async(query, transform_result, top_k=5) +# Orchestrator-level flow (simplified) +from Scripts.retrieval.master_retriever import MasterRetriever + +retriever = MasterRetriever() +result = await retriever.retrieve_async( + raw_query="What is AAPL's IV skew yesterday and are insiders active?", +) +# result.gold_context — List[RetrievedChunk] +# result.silver_context — List[AnchorRecord] (including MACRO_* anchors) +# result.time_range — {anchor_date, source_predicates: [...]} ``` -This sequence represents the canonical retrieval path used by downstream agents. +`result` is the canonical input for `Scripts.agents.router.router_node`. +--- + +## IX. Change Log + +| Date | Change | Rationale | +| --- | --- | --- | +| 2026-04-22 | `time_adapter.TimePredicate` serialised into `AgentState` | Eliminates `latest_atm_iv` oscillation across Checker rescue. | +| 2026-04-22 | Macro snapshot parsed into first-class Silver anchors | Closes the macro citation trap. | +| 2026-04-22 | Dual time-key OR (`unified_timestamp` OR `publish_timestamp`) | Makes legacy SEC/news filings discoverable. | +| 2026-04-22 | `MasterRetriever.router_llm` env renamed to `OLLAMA_ROUTER_MODEL` | Separates router tier from expert tier per `docs/LLM_Pool.md`. | +| 2026-04-22 | Business-day snapping for daily-grain predicates | `"yesterday"` on a Monday → previous Friday. | diff --git a/docs/Query_retrieval_docs/Time_Schema_Audit.md b/docs/Query_retrieval_docs/Time_Schema_Audit.md new file mode 100644 index 0000000..b92c859 --- /dev/null +++ b/docs/Query_retrieval_docs/Time_Schema_Audit.md @@ -0,0 +1,288 @@ +# Time Schema Audit — All Data Sources + +> **Authoritative reference for every time column / payload key in the lake.** +> Updated: 2026-04-22 · Owner: RAG architecture +> Companion module: `Scripts/retrieval/time_adapter.py` +> Companion audit log: `logs/retrieval//retriever_audit_trail.jsonl` (field `source_predicates`) + +--- + +## 0. Why this document exists + +A RAG system that mixes Qdrant (vector) and Parquet (SQL) cannot apply a single +`(start_ts, end_ts)` window to every query: each source stores time differently +and runs on a different cadence. Before this audit a "yesterday" query against +GPR returned `0` rows (monthly source, no daily data exists), and a "past week" +query against legacy SEC returned `0` hits (no numeric timestamp key in payload). + +The fix is a **per-source Time Alignment Adapter** (`time_adapter.py`) that +compiles one `TimePredicate` per source, applying source-specific widening +rules. This document is the source of truth for what keys exist, their units, +and the widening policy applied in production. + +--- + +## 1. Silver Layer (Parquet / DuckDB) + +### 1.1 Options Market Data + +| Attribute | Value | +|-------------------|-------| +| Path (glob) | `Data/2_Silver_Processed/Options_Market_Data//_options_.parquet` | +| Writer | `Scripts/data_collection/scrapers/yfinance_options_history.py` | +| Cadence | **Daily** (trading days only; weekends/holidays missing) | +| Primary time col | `snapshot_date` | +| Other time cols | `expiration` (contract expiry, not snapshot) | +| Physical type | `VARCHAR` (`YYYY-MM-DD`) | +| Timezone | US market close (approx `America/New_York`); stored naive | +| Cast for BETWEEN | `CAST(snapshot_date AS DATE) BETWEEN CAST(? AS DATE) AND CAST(? AS DATE)` | +| Granularity enum | `TimeGranularity.DAILY` | +| Min lookback | `3 days` (survives weekend gap on Monday-anchored "yesterday") | +| `SourceTimeKey` | `silver.options` | + +### 1.2 Macro History + +| Attribute | Value | +|-------------------|-------| +| Path (glob) | `Data/2_Silver_Processed/Macro_History//macro_snapshot_.parquet` | +| Writer | `Scripts/data_collection/scrapers/macro_data_pipeline.py` | +| Cadence | **Mixed** — Daily (Yahoo Finance) + Monthly (FRED) interleaved | +| Primary time col | `observation_date` (authoritative series date) | +| Other time cols | `retrieval_date` (ingestion day) | +| Physical type | `VARCHAR` (`YYYY-MM-DD`) | +| Timezone | UTC (observation) / local ingest (retrieval) — stored naive | +| Cast for BETWEEN | `CAST(observation_date AS DATE) BETWEEN CAST(? AS DATE) AND CAST(? AS DATE)` | +| Granularity enum | `TimeGranularity.DAILY` (predominant; monthly rows survive via `ORDER BY observation_date DESC LIMIT 1`) | +| Min lookback | `3 days` | +| `SourceTimeKey` | `silver.macro` | + +> **Frequency column:** rows also carry a `frequency ∈ {"Daily", "Monthly"}` +> field. Analyst can use it to disambiguate CPI / UNRATE (Monthly) from ^GSPC +> / VIX (Daily) without requiring separate partitions. + +### 1.3 GPR Index (Silver) + +| Attribute | Value | +|-------------------|-------| +| Path | `Data/2_Silver_Processed/GPR_index/gpr_monthly_enriched.parquet` (single file, overwritten in place) | +| Writer | `Scripts/data_collection/scrapers/GPR_index.py` | +| Cadence | **Monthly** (first-of-month rows) | +| Primary time col | `date` | +| Other time cols | `month` (duplicate of `date`) | +| Physical type | `TIMESTAMP_NS` (pandas/arrow nanosecond timestamp) | +| Timezone | UTC, stored naive | +| Cast for BETWEEN | `date BETWEEN ? AND ?` (DuckDB coerces `DATE` → `TIMESTAMP_NS` automatically) | +| Granularity enum | `TimeGranularity.MONTHLY` | +| Min lookback | `35 days` (always widens to the full anchor month) | +| `SourceTimeKey` | `silver.gpr` | + +> **Widening example:** a `"yesterday"` query (2d base) is widened to +> `[first-of-month(anchor), anchor]` (≥28 d) so the latest GPR row for the +> anchor month is always inside the window. Without this, monthly data is +> effectively invisible to short-horizon queries. + +--- + +## 2. Gold Layer (Qdrant vector store) + +All Gold payloads share a **canonical time key**: `unified_timestamp` +(Unix seconds, integer, UTC). Legacy payloads that predate the +2026-04-22 ingestion fix may still be missing this key — the retriever +supports either via a nested `Filter(should=[...])` on `unified_timestamp` +OR `publish_timestamp` (see §4). + +### 2.1 News — `source_type == "news"` + +| Key | Physical type | Unit | Required? | Notes | +|-------------------------|---------------|-------------|-----------|-------| +| `unified_timestamp` | `int` | epoch_s | Post-fix | Mirror of `publish_timestamp` on ingest | +| `publish_timestamp` | `int` | epoch_s | Yes | Event time, written by `news_scraper.py` | +| `publish_date` | `str` | ISO-8601 Z | Yes | Human-readable companion (e.g. `2026-04-19T16:29:12Z`) | + +| Attribute | Value | +|-----------------|-------| +| Cadence | Event (sub-daily) | +| Granularity enum| `TimeGranularity.EVENT` | +| Min lookback | `1 day` | +| `SourceTimeKey` | `gold.news` | + +### 2.2 SEC Insider Trades — `source_type == "sec"` + +| Key | Physical type | Unit | Required? | Notes | +|-------------------------|---------------|----------------|---------------|-------| +| `unified_timestamp` | `int` | epoch_s | Post-fix only | Derived from `transaction_date` (preferred), else `filed_at`, else `ingested_at`. **Absent on pre-2026-04-22 ingests.** | +| `filed_at` | `str` | ISO-8601 + TZ | Yes | e.g. `2026-04-13T18:30:45-04:00` (America/New_York) | +| `transaction_date` | `str` | ISO date | Yes | Actual trade date, no TZ (e.g. `2026-04-13`) | +| `ingested_at` | `str` | ISO datetime | Yes | Bronze-layer ingestion timestamp (naive, local) | +| `processed_at` | `str` | ISO datetime | Yes | Gold-layer processing timestamp | + +| Attribute | Value | +|-----------------|-------| +| Cadence | Event (sub-daily, but bursty around market close) | +| Granularity enum| `TimeGranularity.EVENT` | +| Min lookback | `3 days` (filings often clump on Monday post-weekend; 3-day floor keeps recall non-zero) | +| `SourceTimeKey` | `gold.sec` | + +> **⚠️ Pre-reingest risk.** Because legacy SEC payloads have **neither +> `unified_timestamp` nor `publish_timestamp`**, a Qdrant numeric Range +> filter on these docs matches nothing. The retriever mitigation is +> documented in §4 ("Source-type logic check"), and the permanent fix is +> running `Scripts/Qdrant_Ingestion.py` to backfill `unified_timestamp`. + +### 2.3 GPR (Gold) — `source_type == "gpr"` + +| Key | Physical type | Unit | Required? | Notes | +|-------------------------|---------------|--------|-----------|-------| +| `unified_timestamp` | `int` | epoch_s| Post-fix | Mirror of `publish_timestamp` | +| `publish_timestamp` | `int` | epoch_s| Yes | First-of-month epoch seconds | +| `publish_date` | `str` | ISO date| Yes | e.g. `2020-01-01` | + +| Attribute | Value | +|-----------------|-------| +| Cadence | **Monthly** (one point per month) | +| Granularity enum| `TimeGranularity.MONTHLY` | +| Min lookback | `35 days` | +| `SourceTimeKey` | `gold.gpr` | + +--- + +## 3. Registry summary (single glance) + +| SourceTimeKey | Layer | Cadence | Time keys (priority order) | Units | Min lookback | +|----------------------|--------|----------|----------------------------------------------------------|----------------------------------------------|--------------| +| `gold.news` | Gold | Event | `unified_timestamp`, `publish_timestamp` | `epoch_s`, `epoch_s` | 1 d | +| `gold.sec` | Gold | Event | `unified_timestamp`, `filed_at`, `transaction_date` | `epoch_s`, `iso_datetime`, `iso_date` | 3 d | +| `gold.gpr` | Gold | Monthly | `unified_timestamp`, `publish_timestamp` | `epoch_s`, `epoch_s` | 35 d | +| `silver.options` | Silver | Daily | `snapshot_date` | `iso_date` | 3 d | +| `silver.macro` | Silver | Daily | `observation_date`, `retrieval_date` | `iso_date`, `iso_date` | 3 d | +| `silver.gpr` | Silver | Monthly | `date`, `month` | `ts_ns`, `ts_ns` | 35 d | + +This table is the machine-readable registry `SOURCE_SPECS` in +`Scripts/retrieval/time_adapter.py`. Keep them in sync. + +--- + +## 4. Source-type logic check: `source_types = ["sec", "news"]` + +**Question:** does simultaneously matching `unified_timestamp` OR +`publish_timestamp` across mixed source types create a logic problem? + +**Answer:** no, provided re-ingestion has run. In detail: + +| Payload family | `unified_timestamp` present? | `publish_timestamp` present? | Behaviour under nested `should` filter | +|----------------------|------------------------------|------------------------------|----------------------------------------| +| News (any vintage) | Yes (post-fix) / No (legacy) | **Yes** | Always matches via `publish_timestamp` | +| GPR (any vintage) | Yes (post-fix) / No (legacy) | **Yes** | Always matches via `publish_timestamp` | +| SEC (post-fix) | **Yes** | No | Matches via `unified_timestamp` | +| SEC (legacy) | No | No | **Does not match — invisible to time filter** | + +The `Filter(should=[...])` clause is satisfied when **at least one** timestamp +key lands in range. So mixing `["sec", "news"]`: +- News docs always pass (they carry `publish_timestamp`). +- Post-reingest SEC docs pass via `unified_timestamp`. +- Legacy SEC docs are silently excluded — operationally indistinguishable + from "no SEC data exists for this window", which is a **correctness + win** (do not emit false SEC anchors) at the cost of **recall** (missing + docs whose timestamp existed only as an ISO string). + +### 4.1 Operational mitigation + +1. **Re-ingest SEC via `Scripts/Qdrant_Ingestion.py`.** The ingestion + enricher (patched 2026-04-22) now parses `transaction_date` → Unix + seconds and writes `unified_timestamp` for every SEC document. This + permanently removes the legacy-blind-spot. +2. **Audit visibility.** Every retriever run writes + `source_predicates` + `filter_applied` to + `logs/retrieval//retriever_audit_trail.jsonl`. Operators can + query for `fallback_tier != "strict" AND source_type_contains("sec")` + to quantify the legacy SEC gap over time. + +### 4.2 Why this design is still the right one + +Alternatives considered and rejected: + +| Alternative | Why rejected | +|--------------------------------------------|------------------------------------------------------------------------------| +| Require only `unified_timestamp` | Hard breaking change; blanks out ALL legacy news/gpr docs too | +| Add `filed_at` as a string Range condition | Qdrant `Range` is numeric-only; string ranges need `DatetimeRange` (1.8+) | +| Duplicate every doc into multiple keys | Index bloat; cannot backfill without re-vectorising | +| Per-source sub-queries joined at app layer | 3× Qdrant round-trips; breaks RRF fusion because each source has its own topk| + +Nested `should` on `{unified_timestamp, publish_timestamp}` gives us one +Qdrant call, backward compat, and a clean migration path. The Gold +retriever (`qdrant_retriever._build_smart_filter`) implements it. + +--- + +## 5. Robust time handling — recommendations + +These are the patterns this codebase now uses; keep them as guardrails. + +### 5.1 Compile once, execute everywhere +`MasterRetriever._compute_time_range` calls `time_adapter.compile_all(...)` +and publishes the `{SourceTimeKey → TimePredicate}` dict on +`self._current_predicate_set`. Both Gold (`qdrant_retriever`) and Silver +(`sql_tools`) read from that compiled set — no retriever ever re-derives +the window from raw `metadata.time_window`. This is the single invariant +that kills off cross-layer drift. + +### 5.2 Anchor = latest successful ingestion, not `date.today()` +Anchor dates come from `config/runtime/collect_data_state.json` +(`SilverSQLTool._get_anchor_date`). Weekends, holidays, and backfills all +land on the last known-good partition. Wall-clock-anchored queries are a +pre-2026-04-04 anti-pattern; see the "Dynamic Time Anchor" note in +`sql_tools.py`. + +### 5.3 Per-source widening is source-spec-driven, not query-spec-driven +Widening rules (monthly → month-wide, daily → 3-day weekend-safe) live +on `SourceTimeSpec.min_lookback_days`. Never embed them in handler +branches — add a spec row instead. + +### 5.4 Always store **both** a numeric epoch **and** a human ISO +Every new ingestion writer must emit `unified_timestamp` (Unix seconds, +integer, UTC) AND a readable ISO date companion (`publish_date` / +`transaction_date` / `observation_date`). The epoch key is what filters +bind to; the ISO string is what humans and audit logs cite. Do not make +operators reverse-engineer epoch offsets during an incident. + +### 5.5 Timezone normalisation at ingest, not at query +The ingestion enricher converts all timestamps to UTC before storing. +Downstream code can treat every Unix epoch as UTC. If a new source +writes local-time ISO strings, fix it at the ingest boundary, not in +the retriever. + +### 5.6 Weekend-safe "end-of-day" bounds +`time_adapter._to_epoch_bounds` pushes `end_date` to `23:59:59 UTC` so +a same-day query (e.g. `today`) still matches events that occurred +during the day. This is the small detail that makes `yesterday` queries +not empty when the anchor is "today". + +### 5.7 Hard filter + soft fallback, never hard filter alone +The Gold retriever has three tiers: strict (per-source aligned window), +soft (180-day + ticker-OR-topic), drop (180-day no ticker). The first +non-empty tier wins, and the tier label is persisted in the audit log +(`fallback_tier`). Monitor "tier != strict" rates as a data-freshness +signal. + +### 5.8 Mandatory audit keys +Every retriever call must emit: +- `source_predicates`: serialised per-source TimePredicates +- `fallback_tier`: `strict | soft_ticker_180d | drop_ticker_180d | error` +- `filter_applied`: the Qdrant Filter object (Pydantic dump) +- `window_days`, `start_date`, `end_date` + +Any retriever that omits these is a regression. + +--- + +## 6. Implementation cross-reference + +| Concern | File | Anchor | +|-----------------------------|-----------------------------------------------|---------------------------------| +| Semantic `TimeWindow` enum | `Scripts/retrieval/schema.py` | `class TimeWindow` + `TIME_WINDOW_DAYS` | +| Per-source compiler | `Scripts/retrieval/time_adapter.py` | `compile_predicate`, `compile_all`, `SOURCE_SPECS` | +| Orchestration / wiring | `Scripts/retrieval/master_retriever.py` | `_compute_time_range`, `_current_predicate_set` | +| Gold retriever binding | `Scripts/retrieval/qdrant_retriever.py` | `_build_smart_filter`, `_select_gold_predicates`, `retrieve_async(time_predicates=...)` | +| Silver retriever binding | `Scripts/retrieval/sql_tools.py` | `query_parquet_by_metadata(time_predicates=...)`, `_predicate_for`, `_handle_put_call_ratio` | +| Ingestion-side guarantees | `Scripts/Qdrant_Ingestion.py` | `_enrich_for_qdrant` (forces `unified_timestamp` for news / SEC / GPR) | +| Anchor (calendar truth) | `config/runtime/collect_data_state.json` | `last_run_keys.{options_daily, macro_trading_daily, gpr_monthly, news_daily}` | From 095b96ac6d7c341d57a8b4e456228f5ccf8cb80c Mon Sep 17 00:00:00 2001 From: "Xinxin(Maxine)" Date: Thu, 23 Apr 2026 08:20:15 -0400 Subject: [PATCH 27/50] Create latest_macro_context.md --- Data/Agent_Context/latest_macro_context.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 Data/Agent_Context/latest_macro_context.md diff --git a/Data/Agent_Context/latest_macro_context.md b/Data/Agent_Context/latest_macro_context.md new file mode 100644 index 0000000..83d35d6 --- /dev/null +++ b/Data/Agent_Context/latest_macro_context.md @@ -0,0 +1,16 @@ +## 📊 Macro & Market Daily Snapshot +> **Generated on:** 2026-04-16 +> **Note to LLM:** Macro indicators lag behind market data. Use YoY/MoM changes to gauge economic momentum. + +### 📈 Market Data (Daily) +- **[Equity Index] S&P 500 (^GSPC)**: 7022.95 Points | Change: **+0.80%** *(Observed: 2026-04-15)* +- **[Equity Index] NASDAQ (^IXIC)**: 24016.02 Points | Change: **+1.59%** *(Observed: 2026-04-15)* +- **[Volatility Index] VIX Volatility (^VIX)**: 18.25 Points | Change: **+0.44%** *(Observed: 2026-04-16)* +- **[Currency] US Dollar Index (DX-Y.NYB)**: 98.22 Points | Change: **+0.16%** *(Observed: 2026-04-16)* +- **[Commodity ETF] Gold ETF (GLD)**: 440.46 USD | Change: **-1.04%** *(Observed: 2026-04-15)* +- **[Commodity ETF] Silver ETF (SLV)**: 71.84 USD | Change: **-0.28%** *(Observed: 2026-04-15)* + +### 🏛️ Macro Economic Indicators (Lagging) +- **[Interest Rate] Effective Federal Funds Rate (FEDFUNDS)**: 3.64 % | MoM: **+0.00%** | YoY: **-15.94%** *(Observed: 2026-03-01)* +- **[Inflation] CPI (Inflation) (CPIAUCSL)**: 330.29 Index | MoM: **+0.87%** | YoY: **+3.32%** *(Observed: 2026-03-01)* +- **[Labor Market] Unemployment Rate (UNRATE)**: 4.30 % | MoM: **-2.27%** | YoY: **+2.38%** *(Observed: 2026-03-01)* \ No newline at end of file From b8230eeaddec8da6bfce30c98e494ac614d0cd9e Mon Sep 17 00:00:00 2001 From: "Xinxin(Maxine)" Date: Thu, 23 Apr 2026 08:20:32 -0400 Subject: [PATCH 28/50] Update requirements.txt --- requirements.txt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index dff82f5..e5508f1 100644 --- a/requirements.txt +++ b/requirements.txt @@ -15,15 +15,21 @@ duckduckgo-search # Data Processing & Storage pandas numpy +duckdb fastparquet xlrd pyarrow +tqdm # AI & LLM Integration langchain-ollama +langchain-core +langchain-community +langchain-huggingface +langgraph +sentence-transformers # Environment & Utilities -python-dotenv beautifulsoup4 markdownify rich From d61f20be10b828bd82b0efd882e581c3742100ad Mon Sep 17 00:00:00 2001 From: "Xinxin(Maxine)" Date: Thu, 23 Apr 2026 08:21:17 -0400 Subject: [PATCH 29/50] upload the core modular of Scripts --- Scripts/core/__init__.py | 103 ++++ Scripts/core/few_shot_intent.py | 23 + Scripts/core/financial_ontology.py | 494 +++++++++++++++--- .../core/intent_router_prompt_templates.py | 16 + Scripts/core/llm_pool.py | 342 ++++++++++++ Scripts/core/trading_calendar.py | 155 ++++++ Scripts/core/universe.py | 272 ++++++++++ 7 files changed, 1322 insertions(+), 83 deletions(-) create mode 100644 Scripts/core/__init__.py create mode 100644 Scripts/core/few_shot_intent.py create mode 100644 Scripts/core/intent_router_prompt_templates.py create mode 100644 Scripts/core/llm_pool.py create mode 100644 Scripts/core/trading_calendar.py create mode 100644 Scripts/core/universe.py diff --git a/Scripts/core/__init__.py b/Scripts/core/__init__.py new file mode 100644 index 0000000..7463bcd --- /dev/null +++ b/Scripts/core/__init__.py @@ -0,0 +1,103 @@ +""" +`Scripts.core` — pure primitives layer. + +Contract (enforced by convention, not code): + * zero network I/O + * zero LLM clients + * zero scraper dependencies + * safe to import from any orchestrator / agent / scraper / test + +Because this package is imported by *everything* in the project, eager +imports of heavy sub-modules (large regex tables, pandas, etc.) would +force every caller to pay that cost. Instead we expose a PEP 562 lazy +facade: `from Scripts.core import trading_calendar` loads the module +the first time it is referenced, and caches the result in this module's +globals so subsequent accesses are free. +""" +from __future__ import annotations + +from importlib import import_module +from typing import TYPE_CHECKING, Any + +__all__ = [ + # Sub-modules (lazy) + "trading_calendar", + "financial_ontology", + "financial_config", + "universe", + "prompt_templates", + "intent_router_prompt_templates", + "few_shot_config", + "few_shot_intent", + "llm_pool", + "yfinance_bootstrap", + # Re-exported primitives — the most common agent-side helpers + "is_business_day", + "previous_business_day", + "next_business_day", + "n_business_days_back", + "clamp_to_business_day", + "business_days_between", +] + +_LAZY_SUBMODULES = frozenset( + { + "trading_calendar", + "financial_ontology", + "financial_config", + "universe", + "prompt_templates", + "intent_router_prompt_templates", + "few_shot_config", + "few_shot_intent", + "llm_pool", + "yfinance_bootstrap", + } +) + +_LAZY_SYMBOLS: dict[str, tuple[str, str]] = { + "is_business_day": ("trading_calendar", "is_business_day"), + "previous_business_day": ("trading_calendar", "previous_business_day"), + "next_business_day": ("trading_calendar", "next_business_day"), + "n_business_days_back": ("trading_calendar", "n_business_days_back"), + "clamp_to_business_day": ("trading_calendar", "clamp_to_business_day"), + "business_days_between": ("trading_calendar", "business_days_between"), +} + + +def __getattr__(name: str) -> Any: # PEP 562 + if name in _LAZY_SUBMODULES: + module = import_module(f"{__name__}.{name}") + globals()[name] = module + return module + if name in _LAZY_SYMBOLS: + mod_name, attr = _LAZY_SYMBOLS[name] + obj = getattr(import_module(f"{__name__}.{mod_name}"), attr) + globals()[name] = obj + return obj + raise AttributeError(f"module {__name__!r} has no attribute {name!r}") + + +def __dir__() -> list[str]: # Help IDEs / REPL completion + return sorted(list(globals().keys()) + list(__all__)) + + +if TYPE_CHECKING: # Static analysers only — never executed at runtime + from . import ( # noqa: F401 + financial_config, + financial_ontology, + few_shot_config, + few_shot_intent, + intent_router_prompt_templates, + prompt_templates, + trading_calendar, + universe, + ) + from .trading_calendar import ( # noqa: F401 + business_days_between, + clamp_to_business_day, + is_business_day, + n_business_days_back, + next_business_day, + previous_business_day, + ) diff --git a/Scripts/core/few_shot_intent.py b/Scripts/core/few_shot_intent.py new file mode 100644 index 0000000..5e98d96 --- /dev/null +++ b/Scripts/core/few_shot_intent.py @@ -0,0 +1,23 @@ +# Scripts/core/few_shot_intent.py + +INTENT_FEW_SHOT_EXAMPLES = """ +User Query: "What is the current IV Skew for AAPL?" +Path: sql_only +Reasoning: Requesting a specific quantitative metric (IV Skew) for a specific ticker. + +User Query: "How does the Fed's recent rate hike affect gold sentiment?" +Path: vector_only +Reasoning: Analytical/Qualitative question about sentiment and macro impact. + +User Query: "Did the recent spike in GPR index cause the unusual put buying in SPY last Friday?" +Path: hybrid_both +Reasoning: Linking a macro event (GPR spike - Vector) with specific market data (Put buying - SQL). + +User Query: "List all Form 4 insider buys for NVDA in the last 7 days." +Path: sql_only +Reasoning: Factual data retrieval from structured records. + +User Query: "Explain the logic behind hedging with protective puts in a high volatility environment." +Path: vector_only +Reasoning: Educational/Conceptual explanation. +""" \ No newline at end of file diff --git a/Scripts/core/financial_ontology.py b/Scripts/core/financial_ontology.py index cc65184..f5142f0 100644 --- a/Scripts/core/financial_ontology.py +++ b/Scripts/core/financial_ontology.py @@ -1,120 +1,448 @@ """ -config/financial_ontology.py +Scripts/core/financial_ontology.py Financial Ontology Mapping Table. -Acts as the bridge between LLM business intents and physical database architectures. + +Single source of truth that bridges LLM business intents and the physical +data architecture. Every mapping below has been **audited against the actual +parquet schemas on disk** (verified 2026-04-22 via DuckDB DESCRIBE): + + - Options : Data/2_Silver_Processed/Options_Market_Data/*/*.parquet + (18 columns, see DATASET_PHYSICAL_SCHEMA['options']) + - Macro : Data/2_Silver_Processed/Macro_History/*/*.parquet + (11 columns, see DATASET_PHYSICAL_SCHEMA['macro']) + - GPR : Data/2_Silver_Processed/GPR_index/*.parquet + (120 columns — raw Caldara–Iacoviello release plus enrichments) + - SEC : Qdrant payload (no Silver parquet); key fields: + ticker, form_type, action_direction, tone_score, transaction_date + +Rules of engagement +------------------- +1. METRIC_TO_COLUMN_MAPPING MUST only reference columns that actually exist + in one of the physical datasets listed in DATASET_PHYSICAL_SCHEMA. This + file is the contract; drift is a bug. +2. DERIVED metrics (Put/Call Ratio, IV Skew) map to the *source* columns + needed to compute them — never to a pre-materialised column that does + not exist on disk. +3. UNAVAILABLE metrics (no physical columns yet ingested, e.g. Greeks, + 13F institutional flows, yield spreads) are kept in ALLOWED_METRICS so + the LLM can still surface user intent, but map to [] so downstream SQL + dispatchers fail LOUD instead of hallucinating. +4. Keys in METRIC_TO_COLUMN_MAPPING MUST stay in sync with the dispatcher + in Scripts/retrieval/sql_tools.py. When you add a new metric here, + register a handler there. """ -from typing import List, Dict +from typing import List, Dict, Set -# Defines the valid sources for the 'source_types' field in Qdrant +# --------------------------------------------------------------------------- +# 0. PHYSICAL SCHEMA CONTRACT (authoritative, auto-verifiable) +# --------------------------------------------------------------------------- +# This dict is what Scripts/retrieval/sql_tools.py::_validate_parquet_contract +# should consume. Every column in METRIC_TO_COLUMN_MAPPING below must appear +# in at least one dataset here. +DATASET_PHYSICAL_SCHEMA: Dict[str, Set[str]] = { + "options": { + "snapshot_date", "symbol", "underlying_price", "contract_symbol", + "option_type", "strike", "expiration", "dte", "moneyness_pct", + "last_price", "bid", "ask", "spread_pct", + "volume", "open_interest", "implied_volatility", + "in_the_money", "is_liquid", + }, + "macro": { + "retrieval_date", "observation_date", "symbol", "name", + "asset_class", "value", "unit", "frequency", + "daily_change_pct", "mom_change_pct", "yoy_change_pct", + }, + "gpr": { + # Enriched fields written by our GPR pipeline. + "month", "date", "gpr_percentile", "gpr_mom_pct", "gpr_yoy_pct", "gpr_3m_ma", + # Headline + family aggregates from the Caldara–Iacoviello release. + "gpr", "gprt", "gpra", "gprh", "gprht", "gprha", + "share_gpr", "share_gprh", "n10", "n3h", + # Variant constructions retained for robustness checks. + "gpr_noew", "gpr_and", "gpr_basic", + "gprh_noew", "gprh_and", "gprh_basic", + # Country-level headline & historical indexes (subset — full list + # via `pragma table_info` on the parquet; we whitelist the majors). + "gprc_usa", "gprc_chn", "gprc_rus", "gprc_ukr", "gprc_isr", + "gprc_sau", "gprc_ira", "gprc_kor", "gprc_jpn", "gprc_deu", + "gprc_gbr", "gprc_fra", "gprc_ind", + "gprhc_usa", "gprhc_chn", "gprhc_rus", "gprhc_ukr", "gprhc_isr", + # Topic-share distribution. + "shareh_cat_1", "shareh_cat_2", "shareh_cat_3", "shareh_cat_4", + "shareh_cat_5", "shareh_cat_6", "shareh_cat_7", "shareh_cat_8", + "var_name", "var_label", + }, + # SEC insider activity lives exclusively in Qdrant (no Silver parquet). + # Exposed here so the LLM can still emit SEC-oriented metrics and the + # Gold retriever can match against the real payload fields. + "sec_qdrant_payload": { + "ticker", "form_type", "filed_at", "accession_no", + "transaction_date", "action_direction", "tone_score", "url", + }, + # News docs in Qdrant do NOT carry a ticker field today (see Ingestion + # backlog); they carry topic/entities/impacted_assets. Listed for + # completeness and to drive future ingestion enrichment. + "news_qdrant_payload": { + "topic", "title", "publish_date", "publish_timestamp", "source", + "url", "entities", "impacted_assets", "volatility_implication", + "llm_tone_score", + }, +} + +# --------------------------------------------------------------------------- +# 1. Gold-layer source-type whitelist (Qdrant payload `source_type`) +# --------------------------------------------------------------------------- ALLOWED_SOURCES: List[str] = ["sec", "news", "gpr"] SOURCE_ALIAS_TO_ALLOWED_SOURCE: Dict[str, str] = { "sec_insider_trades": "sec", - "sec_parsed_json": "sec", - "news_qdrant": "news", - "news_scrapes": "news", - "macro_narratives": "news", - "macro_history": "news", - "gpr_index": "gpr" + "sec_parsed_json": "sec", + "news_qdrant": "news", + "news_scrapes": "news", + "macro_narratives": "news", + "macro_history": "news", + "gpr_index": "gpr", } +# --------------------------------------------------------------------------- +# 2. Business-intent categories surfaced to the LLM +# --------------------------------------------------------------------------- ALLOWED_CATEGORIES: List[str] = [ - "precious_metals_spot", "macro_inflation_employment", + "precious_metals_spot", "macro_inflation_employment", "macro_central_banks", "macro_yields_dollar", "metals_derivatives", "equities_spot", "equities_derivatives", "corporate_actions", "macro_geopolitics_risk", "macro_growth_activity", "macro_liquidity_credit", "commodities_energy", "commodities_agriculture", "fx_dollar_rates", "rates_curve_real_yields", - "risk_sentiment_volatility", "earnings_guidance" + "risk_sentiment_volatility", "earnings_guidance", ] +# --------------------------------------------------------------------------- +# 3. Metric whitelist exposed to the Extractor LLM +# --------------------------------------------------------------------------- +# These are the *only* labels the LLM may emit under `metrics`. New metrics +# added here MUST also appear in METRIC_TO_COLUMN_MAPPING below AND in the +# dispatcher in sql_tools.py. ALLOWED_METRICS: List[str] = [ - # Options-oriented intent metrics. - "Implied Volatility (IV)", - "Put/Call Ratio", - "Greeks (Delta/Gamma)", - "Insider Trading", "Institutional Flows", - "Open Interest", + # ── Options-oriented ────────────────────────────────────────── + "Implied Volatility (IV)", "IV Skew", - "Options Liquidity", # Maps to fields such as is_liquid, volume, and open_interest. - "Moneyness / OTM", # Maps to fields such as moneyness_pct and in_the_money. - "Time Decay / DTE", # Maps to dte-related option horizon fields. - "Options Pricing / Spread",# Maps to quote fields like bid, ask, and spread_pct. - - # Macro and SEC-oriented intent metrics. - "Price", # Canonical latest price signal for macro or equity assets. - "Price Change (%)", # Maps to daily_change_pct and mom_change_pct fields. - "Insider Trading", - "Yield Spread" + "Put/Call Ratio", + "Open Interest", + "Options Volume", + "Options Liquidity", + "Moneyness / OTM", + "Time Decay / DTE", + "Options Pricing / Spread", + "Underlying Price", + "Greeks (Delta/Gamma)", # Reserved — not yet in Silver schema. + + # ── Macro / price action ────────────────────────────────────── + "Price", + "Price Change (%)", + "Daily Change (%)", + "Monthly Change (%)", + "Yearly Change (%)", + "Macro Trend", + "Yield Spread", # Reserved — requires additional ingestion. + + # ── Geopolitics (GPR) ───────────────────────────────────────── + "GPR Index", + "GPR Threats", + "GPR Acts", + "GPR Components", + "GPR Country-level", + + # ── SEC / Insider (Qdrant-only, no Silver parquet) ──────────── + "Insider Trading", + "Institutional Flows", # Reserved — 13F / block-trade data not yet ingested. ] -# Maps the LLM extracted metrics to actual database physical columns +# --------------------------------------------------------------------------- +# 4. Metric → physical column mapping (single source of truth) +# --------------------------------------------------------------------------- +# Conventions: +# - Empty list `[]` => metric is allowed but has NO physical columns yet; +# downstream dispatcher MUST surface this as +# UNAUTHORIZED / UNAVAILABLE rather than silently drop. +# - Composite lists => the metric is DERIVED; SQL handler must aggregate +# these source columns (e.g. PCR from option_type+volume). +# - Every non-empty list is audited against DATASET_PHYSICAL_SCHEMA above. METRIC_TO_COLUMN_MAPPING: Dict[str, List[str]] = { + # ── OPTIONS (dataset=options) ───────────────────────────────── "Implied Volatility (IV)": ["implied_volatility"], - "IV Skew": ["iv_skew"], # Keeps skew retrieval explicitly mapped to the physical column. - - # Map higher-level LLM concepts to concrete storage fields defined in the data schema. - "Options Liquidity": ["is_liquid", "volume", "open_interest"], - "Moneyness / OTM": ["moneyness_pct", "in_the_money", "strike"], - "Time Decay / DTE": ["dte", "expiration"], + + # DERIVED: IV Skew = f(IV across strikes grouped by moneyness & option_type). + # No pre-materialised iv_skew column — handler must compute call-25Δ minus + # put-25Δ (or the chosen convention) from these source fields. + "IV Skew": ["implied_volatility", "moneyness_pct", "option_type", "strike"], + + # DERIVED: PCR = SUM(put.volume) / SUM(call.volume), same for open_interest. + # Handler: Scripts/retrieval/sql_tools.py::_handle_put_call_ratio. + "Put/Call Ratio": ["option_type", "volume", "open_interest"], + + "Open Interest": ["open_interest"], + "Options Volume": ["volume"], + "Options Liquidity": ["is_liquid", "volume", "open_interest", "spread_pct"], + "Moneyness / OTM": ["moneyness_pct", "in_the_money", "strike", "underlying_price"], + "Time Decay / DTE": ["dte", "expiration"], "Options Pricing / Spread": ["last_price", "bid", "ask", "spread_pct"], - - # Ensure generic "Price" requests can resolve to available physical price columns. - "Price": ["value", "underlying_price"], - "Price Change (%)": ["daily_change_pct", "mom_change_pct"], - "Insider Trading": ["insider_net_flow"], - "Institutional Flows": ["institutional_block_volume"], - "Put/Call Ratio": ["put_call_ratio"], - "Greeks (Delta/Gamma)": ["delta_gamma_exposure"], - "Yield Spread": ["yield_spread"], - "Open Interest": ["open_interest"], + "Underlying Price": ["underlying_price"], + + # Reserved: Greeks are NOT ingested into Silver. Listed as empty so the + # ontology is honest and the SQL dispatcher will flag UNAUTHORIZED instead + # of pointing at a phantom "delta_gamma_exposure" column. + "Greeks (Delta/Gamma)": [], + + # ── MACRO (dataset=macro) ───────────────────────────────────── + # Note: macro.value and options.underlying_price are both valid "price" + # sources depending on which dataset the symbol belongs to. The handler + # dispatches by symbol class (macro index vs. options underlying). + "Price": ["value", "underlying_price"], + "Price Change (%)": ["daily_change_pct", "mom_change_pct", "yoy_change_pct"], + "Daily Change (%)": ["daily_change_pct"], + "Monthly Change (%)": ["mom_change_pct"], + "Yearly Change (%)": ["yoy_change_pct"], + "Macro Trend": ["value", "daily_change_pct", "mom_change_pct", "yoy_change_pct"], + + # Reserved: no yield-spread column in current macro parquet; would need + # paired rate series (e.g. DGS10 vs DGS2) to compute at query time. + "Yield Spread": [], + + # ── GPR (dataset=gpr) ───────────────────────────────────────── + "GPR Index": ["gpr", "gpr_percentile", "gpr_mom_pct", "gpr_yoy_pct", "gpr_3m_ma"], + "GPR Threats": ["gprt", "gprht"], + "GPR Acts": ["gpra", "gprha"], + "GPR Components": ["gpr_basic", "gpr_and", "gpr_noew", + "gprh_basic", "gprh_and", "gprh_noew"], + "GPR Country-level": ["gprc_usa", "gprc_chn", "gprc_rus", "gprc_ukr", + "gprc_isr", "gprc_sau", "gprc_ira", "gprc_kor", + "gprc_jpn", "gprc_deu", "gprc_gbr", "gprc_fra", + "gprc_ind"], + + # ── SEC (Qdrant payload fields, no Silver parquet) ──────────── + # Insider Trading maps to Qdrant payload filters, NOT to physical parquet + # columns. The Gold retriever uses these as FieldCondition keys (see + # Scripts/retrieval/qdrant_retriever.py::_build_smart_filter). + "Insider Trading": ["action_direction", "tone_score", "form_type"], + + # Reserved: 13F / block-trade data is NOT yet in the lake. + "Institutional Flows": [], } -# Used to map event-driven triggers to standard categories +# --------------------------------------------------------------------------- +# 4b. ETF → underlying-index alias (Silver-Layer join aid) +# --------------------------------------------------------------------------- +# RATIONALE (read this before touching): our Macro_History parquet stores +# canonical *indices* (^GSPC, ^IXIC, ^RUT, ^VIX) because that is what FRED / +# academic macro pipelines expose. Users and the LLM, however, speak in ETFs +# (SPY, QQQ, IWM) because those are the tradable instruments. Without a +# translation layer, a query "SPY macro trend" would WHERE-filter the macro +# table for symbol='SPY' — which does not exist — and silently return 0 rows. +# This map is consumed by Scripts/retrieval/sql_tools.py::_handle_macro_analysis +# only. Options/SEC handlers keep the ETF symbol (their tables store ETFs). +ETF_TO_MACRO_ALIAS: Dict[str, str] = { + "SPY": "^GSPC", + "IVV": "^GSPC", + "VOO": "^GSPC", + "QQQ": "^IXIC", + "IWM": "^RUT", # Present in FRED; NOT yet in our Silver macro table. + "VIXY": "^VIX", + # GLD / SLV are deliberately NOT aliased: our Macro_History keeps both + # the ETF and the spot price under the ETF ticker itself (see the + # `asset_class='Commodity ETF'` rows from macro_data_pipeline.py). Aliasing + # them would route the query AWAY from the row that actually exists. +} + +# --------------------------------------------------------------------------- +# 4c. News-layer topic taxonomy & enrichment maps +# --------------------------------------------------------------------------- +# The news scraper (Scripts/data_collection/scrapers/news_scraper.py) tags +# every article with one of the keys below. The Gold retriever uses them as +# a Qdrant `topic` FieldCondition so semantic search can be grounded in the +# correct macro/asset silo even when the user never names a ticker. +NEWS_TOPICS: List[str] = [ + "macro_central_banks", + "macro_inflation_employment", + "macro_yields_dollar", + "macro_geopolitics_risk", + "asset_precious_metals_spot", + "asset_metals_derivatives", +] + +# Category ↔ topic alignment. ALLOWED_CATEGORIES (used by the Extractor LLM) +# drops the "asset_" prefix for brevity, whereas news_scraper writes it in +# full. This dict is the canonical two-way bridge; keep both directions in +# sync when a new topic is added. +NEWS_TOPIC_ALIAS: Dict[str, str] = { + "precious_metals_spot": "asset_precious_metals_spot", + "metals_derivatives": "asset_metals_derivatives", + "asset_precious_metals_spot": "asset_precious_metals_spot", + "asset_metals_derivatives": "asset_metals_derivatives", + "macro_central_banks": "macro_central_banks", + "macro_inflation_employment": "macro_inflation_employment", + "macro_yields_dollar": "macro_yields_dollar", + "macro_geopolitics_risk": "macro_geopolitics_risk", +} + +# Given a news `topic`, which tickers does an article of this topic typically +# influence? Used at ingestion time to back-fill the `ticker` payload on news +# docs so Gold ticker filters stop yielding 0 hits. Ticker universe limited to +# what ACTUALLY exists in our Silver parquets — do not add aspirational symbols. +TOPIC_TO_TICKERS: Dict[str, List[str]] = { + "macro_central_banks": ["FEDFUNDS", "DX-Y.NYB", "^VIX", "^GSPC", "^IXIC"], + "macro_inflation_employment": ["CPIAUCSL", "UNRATE", "^GSPC", "^VIX"], + "macro_yields_dollar": ["DX-Y.NYB", "^VIX"], + "macro_geopolitics_risk": ["^VIX", "GLD", "^GSPC"], + "asset_precious_metals_spot": ["GLD", "SLV"], + "asset_metals_derivatives": ["GLD", "SLV"], +} + +# The LLM in news_scraper emits free-text asset-class labels in +# `impacted_assets` (e.g. "Gold", "USD", "Equities"). This dict normalises +# them to the same ticker universe as above. Matching is case-insensitive +# and substring-aware at ingestion time (see Scripts/Qdrant_Ingestion.py). +IMPACTED_ASSET_TO_TICKERS: Dict[str, List[str]] = { + "gold": ["GLD"], + "silver": ["SLV"], + "precious metals": ["GLD", "SLV"], + "usd": ["DX-Y.NYB"], + "us dollar": ["DX-Y.NYB"], + "dollar": ["DX-Y.NYB"], + "dxy": ["DX-Y.NYB"], + "equities": ["^GSPC", "SPY"], + "stocks": ["^GSPC", "SPY"], + "s&p": ["^GSPC", "SPY"], + "s&p 500": ["^GSPC", "SPY"], + "nasdaq": ["^IXIC", "QQQ"], + "tech": ["^IXIC", "QQQ"], + "vix": ["^VIX"], + "volatility": ["^VIX"], + # Explicitly unmapped (no Silver coverage yet): oil, crude, treasuries, + # bonds, real estate, crypto. Do NOT guess — return [] so downstream + # knows the asset class is out-of-scope. +} + + +def normalize_news_topic(raw: str) -> str: + """Return the canonical news-scraper topic string for a given LLM label. + Unknown inputs pass through unchanged so callers can decide to drop or + warn; never raises, never silently remaps to a default (which would + mask ontology drift). + """ + if not raw: + return "" + return NEWS_TOPIC_ALIAS.get(raw.strip().lower(), raw.strip().lower()) + + +def tickers_from_impacted_assets(labels: List[str]) -> List[str]: + """Map news_scraper's free-text `impacted_assets` list to concrete + tickers present in our Silver parquets. Case-insensitive, substring + tolerant, de-duplicated. Returns [] when no label is recognised. + """ + out: List[str] = [] + for label in (labels or []): + k = (label or "").strip().lower() + if not k: + continue + if k in IMPACTED_ASSET_TO_TICKERS: + out.extend(IMPACTED_ASSET_TO_TICKERS[k]) + continue + # Substring fallback: "US Dollar Index" -> matches "us dollar". + for needle, tickers in IMPACTED_ASSET_TO_TICKERS.items(): + if needle in k: + out.extend(tickers) + break + # Preserve insertion order while deduplicating. + seen, uniq = set(), [] + for t in out: + if t not in seen: + seen.add(t) + uniq.append(t) + return uniq + + +# --------------------------------------------------------------------------- +# 5. Event-keyword → category mapping (LLM narrative hinting) +# --------------------------------------------------------------------------- EVENT_KEYWORDS_MAPPING: Dict[str, str] = { - "earnings_beat": "earnings_guidance", - "earnings_miss": "earnings_guidance", - "guidance_raise": "earnings_guidance", - "guidance_cut": "earnings_guidance", - - "insider_buying": "corporate_actions", - "insider_selling": "corporate_actions", - "share_buyback": "corporate_actions", - "dividend_hike": "corporate_actions", - "dividend_cut": "corporate_actions", - "merger_acquisition": "corporate_actions", - - "rate_hike": "macro_central_banks", - "rate_cut": "macro_central_banks", - "fomc_minutes": "macro_central_banks", - "powell_speech": "macro_central_banks", - "qt_tightening": "macro_liquidity_credit", + "earnings_beat": "earnings_guidance", + "earnings_miss": "earnings_guidance", + "guidance_raise": "earnings_guidance", + "guidance_cut": "earnings_guidance", + + "insider_buying": "corporate_actions", + "insider_selling": "corporate_actions", + "share_buyback": "corporate_actions", + "dividend_hike": "corporate_actions", + "dividend_cut": "corporate_actions", + "merger_acquisition": "corporate_actions", + + "rate_hike": "macro_central_banks", + "rate_cut": "macro_central_banks", + "fomc_minutes": "macro_central_banks", + "powell_speech": "macro_central_banks", + "qt_tightening": "macro_liquidity_credit", "liquidity_injection": "macro_liquidity_credit", - "ppi_release": "macro_inflation_employment", - "nfp_release": "macro_inflation_employment", - "jobless_claims": "macro_inflation_employment", - "wage_growth": "macro_inflation_employment", + "ppi_release": "macro_inflation_employment", + "nfp_release": "macro_inflation_employment", + "jobless_claims": "macro_inflation_employment", + "wage_growth": "macro_inflation_employment", - "gdp_release": "macro_growth_activity", - "pmi_release": "macro_growth_activity", - "retail_sales": "macro_growth_activity", + "gdp_release": "macro_growth_activity", + "pmi_release": "macro_growth_activity", + "retail_sales": "macro_growth_activity", - "dxy_breakout": "fx_dollar_rates", - "usd_strength": "fx_dollar_rates", - "usd_weakness": "fx_dollar_rates", + "dxy_breakout": "fx_dollar_rates", + "usd_strength": "fx_dollar_rates", + "usd_weakness": "fx_dollar_rates", "yield_curve_steepen": "rates_curve_real_yields", - "yield_curve_invert": "rates_curve_real_yields", - "real_yield_rise": "rates_curve_real_yields", + "yield_curve_invert": "rates_curve_real_yields", + "real_yield_rise": "rates_curve_real_yields", - "gold_spike": "precious_metals_spot", - "silver_rally": "precious_metals_spot", + "gold_spike": "precious_metals_spot", + "silver_rally": "precious_metals_spot", "metals_term_structure": "metals_derivatives", - "oil_supply_shock": "commodities_energy", - "crop_supply_shock": "commodities_agriculture", + "oil_supply_shock": "commodities_energy", + "crop_supply_shock": "commodities_agriculture", + + "vol_spike": "risk_sentiment_volatility", + "risk_off": "risk_sentiment_volatility", + "risk_on": "risk_sentiment_volatility", + + # Liquidity-centric triggers (matches new "Options Liquidity" metric). + "options_liquidity": "equities_derivatives", + "liquidity_dry_up": "risk_sentiment_volatility", +} + + +# --------------------------------------------------------------------------- +# 6. Self-test guard (runs on import in dev only — cheap, no IO) +# --------------------------------------------------------------------------- +def _assert_mapping_integrity() -> None: + """Fail-loud assertion that every mapped column exists in at least one + physical dataset. Catches copy-paste regressions the moment they land. + Runs on import when PYTHON_ENV == 'dev' so prod boot is unaffected. + """ + all_physical: Set[str] = set() + for cols in DATASET_PHYSICAL_SCHEMA.values(): + all_physical |= cols + + broken: Dict[str, List[str]] = {} + for metric, cols in METRIC_TO_COLUMN_MAPPING.items(): + missing = [c for c in cols if c not in all_physical] + if missing: + broken[metric] = missing + if broken: + raise AssertionError( + "financial_ontology: METRIC_TO_COLUMN_MAPPING references columns " + f"not present in any DATASET_PHYSICAL_SCHEMA entry: {broken}" + ) + - "vol_spike": "risk_sentiment_volatility", - "risk_off": "risk_sentiment_volatility", - "risk_on": "risk_sentiment_volatility" -} \ No newline at end of file +# Opt-in to avoid surprising imports in prod. Flip on in CI / dev shells. +import os as _os +if _os.getenv("PYTHON_ENV", "").lower() == "dev": + _assert_mapping_integrity() diff --git a/Scripts/core/intent_router_prompt_templates.py b/Scripts/core/intent_router_prompt_templates.py new file mode 100644 index 0000000..ba43c91 --- /dev/null +++ b/Scripts/core/intent_router_prompt_templates.py @@ -0,0 +1,16 @@ +ROUTER_SYSTEM_PROMPT = """ +Role: Expert Financial Data Router +Task: Classify the user query into the most efficient retrieval path. + +STRICT RULES: +- 'sql_only': For structured data, numbers, ratios, or insider filing lists. +- 'vector_only': For news analysis, macro sentiment, or general financial concepts. +- 'hybrid_both': For queries linking macro/news events to specific data points. + +EXAMPLES: +{examples} + +CURRENT QUERY: {query} + +Return ONLY the path name (sql_only, vector_only, or hybrid_both). +""" \ No newline at end of file diff --git a/Scripts/core/llm_pool.py b/Scripts/core/llm_pool.py new file mode 100644 index 0000000..a011f08 --- /dev/null +++ b/Scripts/core/llm_pool.py @@ -0,0 +1,342 @@ +""" +``Scripts.core.llm_pool`` — process-wide LLM client pool + warmup. + +Why this module exists +---------------------- +Multiple call-sites across the codebase (``QueryTransformer``, +``MasterRetriever.router_llm``, ``AnalystAgent``, ``CheckerAgent``, +``CriticAgent``, ``FinalizerAgent``, ``sec_processor``, ``news_scraper``, +…) instantiate ``ChatOllama`` independently. For small models this is +cheap, but the production deployment uses a fine-tuned **70B** model +(``options-expert-v1:latest`` built ``FROM Llama-3.3-70B-Instruct-Q4_K_M``) +and that introduces two real problems: + +1. **First-use latency spike.** Ollama loads the model into GPU on the + first request (30–60 s for a Q4-quantised 70B). Without a process- + wide warmup, the *first* user query pays this penalty in full. +2. **Silent eviction.** Ollama's default ``keep_alive`` is 5 minutes. + If an analyst query finishes and the user pauses to read the + report, the 70B model is evicted — the next query pays the cold- + start tax again. Setting ``keep_alive="30m"`` (or ``-1`` for + forever) turns this into a one-time cost per daemon life. + +Deployment reality (as of 2026-04-22) +------------------------------------- +Only **two** Ollama models are used at runtime: + +* ``options-expert-v1:latest`` — the fine-tuned 70B. Used by **every + agent** (Analyst / Checker / Critic / Finalizer) AND by + ``QueryTransformer`` (both metadata-extraction and HyDE stages). + Env override: ``OLLAMA_CUSTOM_MODEL_NAME``. +* ``llama3:latest`` — vanilla Llama-3 8B. Used **only** by the cheap + intent router (``MasterRetriever.router_llm``) and by ingestion-time + utilities (``news_scraper`` sentiment, ``sec_processor`` form-parser). + Env override: ``OLLAMA_ROUTER_MODEL``. + +Retrieval-time models (dense embeddings, SPLADE sparse, cross-encoder +reranker) are **not** Ollama clients — they are HuggingFace / +``fastembed`` artefacts managed by ``Scripts/vector_store/connection.py`` +and are therefore *out of scope* for this pool. + +Design +------ +* A **role-keyed singleton cache**: ``get_ollama("analyst")`` returns the + same underlying ``ChatOllama`` every time, so agents stop re-parsing + the same HTTP URL and headers per call. +* **Explicit warmup**: ``warmup_sync()`` / ``warmup_async()`` fire a + trivial prompt through each configured role, forcing Ollama to pin + the model in GPU memory before the user's first real query arrives. + CLI ``query`` calls this automatically; other code paths can opt in. +* **Two tiers, not four**: the expert tier (`options-expert-v1`) and + the router tier (`llama3`). The table is env-driven so swapping in a + different quant or a larger 405B is a config change. + +Environment variables +--------------------- +* ``OLLAMA_BASE_URL`` / ``OLLAMA_HOST`` (default ``http://localhost:11434``) +* ``OLLAMA_KEEP_ALIVE`` (default ``30m``) +* ``OLLAMA_CUSTOM_MODEL_NAME`` (default ``options-expert-v1:latest``) +* ``OLLAMA_ROUTER_MODEL`` (default ``llama3:latest``) +* ``OLLAMA_INGESTION_MODEL`` (default = router; used by + ``news_scraper`` / ``sec_processor`` when they migrate to the pool) + +This module does not hard-depend on ``langchain_ollama`` at import +time — the client is created lazily inside :func:`get_ollama` so +``Scripts.core`` stays import-safe on environments without the +package (CI, docs builds). +""" +from __future__ import annotations + +import logging +import os +import threading +from dataclasses import dataclass, field +from typing import Any, Dict, Iterable, List, Optional + +log = logging.getLogger(__name__) + +# --------------------------------------------------------------------------- +# Role configuration +# --------------------------------------------------------------------------- + + +@dataclass(frozen=True) +class RoleSpec: + """How a role wants its ``ChatOllama`` instance built.""" + + role: str + model_env: str + default_model: str + temperature: float = 0.0 + format: Optional[str] = None # e.g. "json" for structured extractors + num_ctx: Optional[int] = None # Ollama per-request context window + + +def _default_expert_model() -> str: + """Fine-tuned 70B used by all agents + QueryTransformer.""" + return os.getenv("OLLAMA_CUSTOM_MODEL_NAME", "options-expert-v1:latest") + + +def _default_router_model() -> str: + """Cheap vanilla Llama-3 used by intent routing + ingestion helpers.""" + return os.getenv("OLLAMA_ROUTER_MODEL", "llama3:latest") + + +def _default_ingestion_model() -> str: + """Ingestion-time sentiment / form-parsing. Defaults to router tier.""" + return os.getenv("OLLAMA_INGESTION_MODEL", _default_router_model()) + + +# Roles the agents ask for. Extend this table when adding new agents +# instead of inlining env lookups at call-sites. +# +# Two-tier reality: +# * "expert" → options-expert-v1:latest (fine-tuned Llama-3.3-70B) +# * "router" → llama3:latest (vanilla Llama-3 8B) +# +ROLE_TABLE: Dict[str, RoleSpec] = { + # --- Expert tier (70B) -------------------------------------------------- + # All reasoning-heavy agents share the same underlying model so Ollama + # only needs to hold one 70B in GPU memory at a time. + "analyst": RoleSpec("analyst", "OLLAMA_CUSTOM_MODEL_NAME", _default_expert_model(), temperature=0.2), + "critic": RoleSpec("critic", "OLLAMA_CUSTOM_MODEL_NAME", _default_expert_model(), temperature=0.3), + "checker": RoleSpec("checker", "OLLAMA_CUSTOM_MODEL_NAME", _default_expert_model(), temperature=0.0), + "finalizer": RoleSpec("finalizer", "OLLAMA_CUSTOM_MODEL_NAME", _default_expert_model(), temperature=0.2), + "query_extract": RoleSpec("query_extract", "OLLAMA_CUSTOM_MODEL_NAME", _default_expert_model(), temperature=0.0, format="json"), + "query_hyde": RoleSpec("query_hyde", "OLLAMA_CUSTOM_MODEL_NAME", _default_expert_model(), temperature=0.2), + + # --- Router tier (Llama-3 8B) ------------------------------------------- + # Cheap short-output roles where the fine-tune would be overkill. + "router": RoleSpec("router", "OLLAMA_ROUTER_MODEL", _default_router_model(), temperature=0.0, format="json"), + + # --- Ingestion tier (Llama-3 8B) ---------------------------------------- + # Kept as a distinct role so ingestion can be swapped independently of + # the online router if the pipeline moves to a different quant. + "news_sentiment": RoleSpec("news_sentiment", "OLLAMA_INGESTION_MODEL", _default_ingestion_model(), temperature=0.0), + "sec_parser": RoleSpec("sec_parser", "OLLAMA_INGESTION_MODEL", _default_ingestion_model(), temperature=0.0, format="json"), +} + +# Roles that are typically warmed up before serving queries. Callers can +# still pass an explicit list to `warmup_sync` to override. +# +# The expert tier is shared by 6 roles — warming up ONE of them is +# sufficient because Ollama caches by model name, not by +# ``ChatOllama`` instance. Warm "analyst" as the canonical 70B handle +# and "router" as the canonical cheap handle. +DEFAULT_WARMUP_ROLES: tuple[str, ...] = ( + "analyst", # pins options-expert-v1:latest → covers all agent roles + "router", # pins llama3:latest → covers intent routing +) + + +# --------------------------------------------------------------------------- +# Singleton cache +# --------------------------------------------------------------------------- + + +_CACHE: Dict[str, Any] = {} +_CACHE_LOCK = threading.Lock() + + +def _resolved_model(spec: RoleSpec) -> str: + """Final model string — env override wins over dataclass default.""" + return os.getenv(spec.model_env, spec.default_model) + + +def get_role_spec(role: str) -> RoleSpec: + """Return the ``RoleSpec`` for ``role`` (case-insensitive). Unknown + roles raise ``KeyError`` — this is intentional so typos surface + early rather than silently creating a second cache entry.""" + key = role.lower() + if key not in ROLE_TABLE: + raise KeyError( + f"Unknown LLM role {role!r}. Known: {sorted(ROLE_TABLE)}" + ) + return ROLE_TABLE[key] + + +def get_ollama(role: str, **overrides: Any): + """Return a cached ``ChatOllama`` instance for ``role``. + + Parameters + ---------- + role + Role key from :data:`ROLE_TABLE`. + **overrides + Per-call overrides (``temperature``, ``num_ctx``, …). When any + override is present we **do not cache** — this call site gets a + fresh client so the default singleton stays untouched. + """ + spec = get_role_spec(role) + + if overrides: + return _build_client(spec, **overrides) + + cache_key = spec.role + client = _CACHE.get(cache_key) + if client is not None: + return client + + with _CACHE_LOCK: + client = _CACHE.get(cache_key) + if client is None: + client = _build_client(spec) + _CACHE[cache_key] = client + return client + + +def _build_client(spec: RoleSpec, **overrides: Any): + """Lazy import of ``langchain_ollama`` — keeps ``Scripts.core`` safe + to import on dependency-lean environments.""" + try: + from langchain_ollama import ChatOllama + except ImportError as exc: # pragma: no cover + raise RuntimeError( + "langchain_ollama is not installed; install it before using " + "the LLM pool (`pip install -U langchain-ollama`)." + ) from exc + + model = _resolved_model(spec) + kwargs: Dict[str, Any] = { + "model": model, + "temperature": spec.temperature, + "base_url": os.getenv("OLLAMA_BASE_URL", "http://localhost:11434"), + "keep_alive": os.getenv("OLLAMA_KEEP_ALIVE", "30m"), + } + if spec.format: + kwargs["format"] = spec.format + if spec.num_ctx: + kwargs["num_ctx"] = spec.num_ctx + kwargs.update(overrides) + + log.info( + "llm_pool: build role=%s model=%s keep_alive=%s", + spec.role, + model, + kwargs["keep_alive"], + ) + return ChatOllama(**kwargs) + + +# --------------------------------------------------------------------------- +# Warmup +# --------------------------------------------------------------------------- + + +WARMUP_PROMPT = "Reply with 'ok'." + + +@dataclass +class WarmupResult: + role: str + model: str + status: str # "ok" | "failed" | "skipped" + latency_s: float = 0.0 + error: Optional[str] = None + + +def warmup_sync( + roles: Optional[Iterable[str]] = None, + *, + prompt: str = WARMUP_PROMPT, + timeout_s: float = 120.0, +) -> List[WarmupResult]: + """Pin each configured role's model into Ollama's GPU memory. + + Fires a tiny prompt at each role sequentially (models that would + evict each other on a single-GPU host). Returns a per-role report + callers can log / render in the CLI. + + This function never raises — failures become ``WarmupResult(status= + "failed")`` entries so a flaky 70B does not tank the entire + session. + """ + import time + + selected = list(roles or DEFAULT_WARMUP_ROLES) + results: List[WarmupResult] = [] + for role in selected: + try: + spec = get_role_spec(role) + except KeyError: + results.append(WarmupResult(role=role, model="?", status="skipped", + error="unknown role")) + continue + + started = time.monotonic() + model = _resolved_model(spec) + try: + client = get_ollama(role) + _ = client.invoke(prompt) + results.append(WarmupResult( + role=role, model=model, status="ok", + latency_s=time.monotonic() - started, + )) + except Exception as exc: # noqa: BLE001 — want full trap + results.append(WarmupResult( + role=role, model=model, status="failed", + latency_s=time.monotonic() - started, + error=str(exc), + )) + return results + + +def warmup_async( + roles: Optional[Iterable[str]] = None, + *, + prompt: str = WARMUP_PROMPT, +) -> "threading.Thread": + """Fire-and-forget warmup. Returns the ``Thread`` in case the caller + wants to ``join()`` before serving the first query. + + Use this in daemon mode: warmup happens in the background while the + scheduler loop starts ticking, so the first user query lands on an + already-loaded model. + """ + t = threading.Thread( + target=warmup_sync, + kwargs={"roles": roles, "prompt": prompt}, + name="llm_pool.warmup", + daemon=True, + ) + t.start() + return t + + +def clear_cache() -> None: + """Drop every cached client. Used by tests; rarely needed in prod.""" + with _CACHE_LOCK: + _CACHE.clear() + + +__all__ = [ + "DEFAULT_WARMUP_ROLES", + "ROLE_TABLE", + "RoleSpec", + "WarmupResult", + "clear_cache", + "get_ollama", + "get_role_spec", + "warmup_async", + "warmup_sync", +] diff --git a/Scripts/core/trading_calendar.py b/Scripts/core/trading_calendar.py new file mode 100644 index 0000000..ceb8cff --- /dev/null +++ b/Scripts/core/trading_calendar.py @@ -0,0 +1,155 @@ +""" +Scripts/core/trading_calendar.py + +Minimal dependency-free trading-day calendar. + +WHY THIS MODULE EXISTS +---------------------- +The production router-e2e run on 2026-04-22 exposed a *semantic* mismatch +between the way the RAG pipeline asks "yesterday" and the way the data +layers interpret it (see docs/test/2026-04-22/router_e2e_deep_analysis.md +lines 120–133). Concretely: + + - `collect_data_state.json:options_daily` already records the most recent + successful ingestion day (e.g. 2026-04-21 Tue). This is the anchor. + - Semantic "yesterday" from the LLM was being translated into + `anchor − 2 calendar days = Sun 2026-04-19`, which is a weekend gap — + the Parquet has no row there, so the handler returned either zero + values or (worse) a different row across revisions. + - What a financial user actually means by "yesterday" is "the previous + trading day against the most recent ingestion date". On a Tuesday + anchor that is Monday; on a Monday anchor that is Friday. + +Scope +----- +This module only knows about the US weekend pattern (Sat/Sun off). +US federal / NYSE holidays are NOT encoded here to keep the module +dependency-free and stable across branches. Upgrading to +`pandas_market_calendars` or `exchange_calendars.NYSE` is a drop-in +replacement: provide `is_business_day(d)` returning False for any +observed NYSE holiday and all downstream consumers (time_adapter, +sql_tools) keep working. + +Public API +---------- + is_business_day(d) -> bool + previous_business_day(d) -> date + next_business_day(d) -> date + n_business_days_back(d, n) -> date + business_days_between(a, b) -> int (inclusive of a, exclusive of b) + clamp_to_business_day(d, mode) -> date (mode='prev' | 'next') +""" + +from __future__ import annotations + +from datetime import date, timedelta +from typing import Literal + +__all__ = [ + "is_business_day", + "previous_business_day", + "next_business_day", + "n_business_days_back", + "business_days_between", + "clamp_to_business_day", +] + + +# --------------------------------------------------------------------------- +# Core predicates +# --------------------------------------------------------------------------- + + +def is_business_day(d: date) -> bool: + """Return True iff `d` is Mon–Fri. + + Holidays are intentionally not handled — swap this single function for + an NYSE-aware implementation (e.g. `exchange_calendars.NYSE.is_session`) + if the surrounding data pipeline starts tracking holidays. + """ + # Python weekday(): Mon=0 … Sun=6. Weekdays 0–4 are trading days. + return d.weekday() < 5 + + +# --------------------------------------------------------------------------- +# Navigation +# --------------------------------------------------------------------------- + + +def previous_business_day(d: date) -> date: + """Most recent business day STRICTLY before `d`. + + - previous_business_day(Tue) == Mon + - previous_business_day(Mon) == Fri (weekend skip) + - previous_business_day(Sun) == Fri + - previous_business_day(Sat) == Fri + """ + cur = d - timedelta(days=1) + while not is_business_day(cur): + cur -= timedelta(days=1) + return cur + + +def next_business_day(d: date) -> date: + """Earliest business day STRICTLY after `d`. Mirror of `previous_business_day`.""" + cur = d + timedelta(days=1) + while not is_business_day(cur): + cur += timedelta(days=1) + return cur + + +def n_business_days_back(d: date, n: int) -> date: + """Walk `n` business days backwards from `d`. + + If `n == 0`, returns `d` clamped to the previous business day when `d` + itself is a weekend (so the result is always a trading day). + For `n > 0`, the walk excludes `d` on step 1 (matches "n-th previous + trading day" semantics commonly used in financial APIs). + """ + if n < 0: + raise ValueError("n_business_days_back requires n >= 0") + if n == 0: + return clamp_to_business_day(d, mode="prev") + cur = d + for _ in range(n): + cur = previous_business_day(cur) + return cur + + +def business_days_between(a: date, b: date) -> int: + """Count trading days in the half-open interval [a, b). + + Used by handlers that need to report "N trading days back" in audit logs + even when the calendar span crosses weekends. Guaranteed to be ≤ abs(b-a). + """ + if a == b: + return 0 + step = 1 if b > a else -1 + cur = a + count = 0 + while cur != b: + if is_business_day(cur): + count += 1 + cur += timedelta(days=step) + return count if step == 1 else -count + + +def clamp_to_business_day( + d: date, + mode: Literal["prev", "next"] = "prev", +) -> date: + """Snap a weekend date onto the adjacent business day. + + - mode='prev' (default): Sat/Sun → previous Fri. Mon–Fri → unchanged. + - mode='next': Sat/Sun → next Mon. Mon–Fri → unchanged. + + Use 'prev' when reading historical data (end-of-window snap) and 'next' + when scheduling forward-looking deliveries. + """ + if is_business_day(d): + return d + if mode == "prev": + return previous_business_day(d + timedelta(days=1)) + if mode == "next": + return next_business_day(d - timedelta(days=1)) + raise ValueError(f"Unknown clamp mode: {mode}") diff --git a/Scripts/core/universe.py b/Scripts/core/universe.py new file mode 100644 index 0000000..0064ec4 --- /dev/null +++ b/Scripts/core/universe.py @@ -0,0 +1,272 @@ +"""Asset universe & pipeline-config single-source-of-truth. + +This module is the only place the rest of the codebase should go through when +it needs: + + * ticker lists (``universe.get("equity.single_name")`` …) + * the SEC ticker→CIK map (``universe.cik_map()``) + * pipeline parameters (``universe.pipeline("options_history")``) + * well-formed output paths for parquet snapshots + (``universe.paths.options_parquet_path(symbol, snapshot_date)``) + +Design goals +------------ +* **Zero logic change** for legacy callers. Path-helpers default to the + ``legacy`` storage strategy, which reproduces the exact file layout + ``Scripts/data_collection/scrapers/yfinance_options_history.py`` has been + writing since day one. Read-side globs in ``Scripts/retrieval/sql_tools.py`` + keep working unmodified. +* **Forward-compat**. A ``hive_v1`` and a ``monthly_rollup`` strategy are + declared in ``config/pipeline/options_history.json``; flipping the + ``storage.strategy`` field re-routes all writers without touching code. +* **Single source of truth for paths**. ``cik_map()`` reads + ``config/reference/ticker_to_cik.json``. The retired + ``config/SEC_Ingestion/`` folder is no longer consulted. + +No third-party dependency (no ``pyyaml``, no ``pydantic``). +""" + +from __future__ import annotations + +import json +import logging +from functools import lru_cache +from pathlib import Path +from typing import Dict, List, Mapping, Optional + +logger = logging.getLogger(__name__) + +# Scripts/core/universe.py → repo root is parents[2] +PROJECT_ROOT: Path = Path(__file__).resolve().parents[2] +CONFIG_ROOT: Path = PROJECT_ROOT / "config" +DATA_ROOT: Path = PROJECT_ROOT / "Data" + + +# ============================================================================ +# 1. UniverseLoader — tickers + reference maps +# ============================================================================ + +class UniverseLoader: + """Read ticker roles from ``config/universe/_manifest.json`` and resolve + composite roles by set union. Results are memoised per process. + """ + + _MANIFEST_PATH = CONFIG_ROOT / "universe" / "_manifest.json" + + # Canonical location for the static ticker -> CIK mapping. Written by + # Scripts/tools/SEC_generate_cik_map.py. + _CIK_MAP_PATH = CONFIG_ROOT / "reference" / "ticker_to_cik.json" + + # --------------------------------------------------------------- manifest + @lru_cache(maxsize=1) + def _manifest(self) -> Dict: + if not self._MANIFEST_PATH.exists(): + raise FileNotFoundError( + f"Universe manifest missing: {self._MANIFEST_PATH}. " + "Create config/universe/_manifest.json before using UniverseLoader." + ) + return json.loads(self._MANIFEST_PATH.read_text(encoding="utf-8")) + + # ------------------------------------------------------------- role list + @lru_cache(maxsize=64) + def get(self, role: str) -> List[str]: + """Resolve a role (leaf or composite) to a sorted, de-duplicated ticker list. + + Leaf roles map 1:1 to a JSON file in ``config/universe/`` via the + ``roles`` section of the manifest. Composite roles are declared under + ``composite_roles`` as a union of other roles. + """ + mf = self._manifest() + if role in mf.get("roles", {}): + rel = mf["roles"][role]["file"] + path = self._MANIFEST_PATH.parent / rel + tickers = json.loads(path.read_text(encoding="utf-8")) + if not isinstance(tickers, list): + raise ValueError(f"Ticker file {path} is not a JSON list.") + return sorted({str(t).upper() for t in tickers}) + + if role in mf.get("composite_roles", {}): + members = mf["composite_roles"][role]["union_of"] + out: set = set() + for m in members: + out.update(self.get(m)) + return sorted(out) + + raise KeyError( + f"Unknown universe role '{role}'. " + f"Known leaf roles: {list(mf.get('roles', {}).keys())}; " + f"composite: {list(mf.get('composite_roles', {}).keys())}." + ) + + # ------------------------------------------------------------- metadata + def role_metadata(self, role: str) -> Dict: + """Return the manifest entry for a leaf role (asset_class, has_options, …).""" + mf = self._manifest() + if role in mf.get("roles", {}): + return dict(mf["roles"][role]) + if role in mf.get("composite_roles", {}): + return dict(mf["composite_roles"][role]) + raise KeyError(role) + + def role_of(self, ticker: str) -> Optional[str]: + """Reverse-lookup: which leaf role does ``ticker`` belong to?""" + ticker = str(ticker).upper() + for role in self._manifest().get("roles", {}): + if ticker in self.get(role): + return role + return None + + def asset_class_of(self, ticker: str) -> str: + """Return the ``asset_class`` declared on the leaf role owning ``ticker``. + Falls back to ``"unknown"`` so callers never crash on an un-tagged ticker. + """ + role = self.role_of(ticker) + if role is None: + return "unknown" + meta = self.role_metadata(role) + return str(meta.get("asset_class", "unknown")) + + # ------------------------------------------------------------- cik map + @lru_cache(maxsize=1) + def cik_map(self) -> Dict[str, str]: + """Load the static ticker -> CIK mapping from the canonical + ``config/reference/ticker_to_cik.json``. Returns an empty dict and + logs an error if the file is missing — run + ``Scripts/tools/SEC_generate_cik_map.py`` to (re)generate it. + """ + if self._CIK_MAP_PATH.exists(): + mapping = json.loads(self._CIK_MAP_PATH.read_text(encoding="utf-8")) + logger.info( + f"✅ cik_map loaded from {self._CIK_MAP_PATH} ({len(mapping)} entries)" + ) + return mapping + logger.error( + f"❌ ticker_to_cik.json not found at {self._CIK_MAP_PATH}. " + "Run Scripts/tools/SEC_generate_cik_map.py to generate it." + ) + return {} + + +# ============================================================================ +# 2. PipelineConfig — non-ticker parameters per pipeline +# ============================================================================ + +class PipelineConfig: + """Lazy loader for ``config/pipeline/.json`` files.""" + + _DIR = CONFIG_ROOT / "pipeline" + + @lru_cache(maxsize=16) + def load(self, name: str) -> Dict: + path = self._DIR / f"{name}.json" + if not path.exists(): + logger.warning(f"PipelineConfig: {path} not found, returning empty dict.") + return {} + return json.loads(path.read_text(encoding="utf-8")) + + +# ============================================================================ +# 3. UniversePaths — storage-strategy aware output paths +# ============================================================================ + +class UniversePaths: + """Strategy-aware output-path resolver. + + The active strategy is read from ``config/pipeline/options_history.json`` + (key ``storage.strategy``). An explicit ``strategy=`` kwarg always wins over + the config default — useful for A/B-running Hive writes alongside legacy. + + The default (``legacy``) path reproduces exactly what the existing + ``snapshot_daily_options_chain`` writes today, so migrating callers to + this helper is a no-op on disk. + """ + + def __init__( + self, + loader: Optional[UniverseLoader] = None, + pipeline: Optional[PipelineConfig] = None, + data_root: Optional[Path] = None, + ) -> None: + self.loader = loader or UniverseLoader() + self.pipeline = pipeline or PipelineConfig() + self.data_root = Path(data_root) if data_root else DATA_ROOT + + # -------------------------------------------------- options parquet path + def options_parquet_path( + self, + symbol: str, + snapshot_date: str, + strategy: Optional[str] = None, + ) -> Path: + """Return the parquet path for an options-chain snapshot. + + Parameters + ---------- + symbol + Ticker, e.g. ``"SPY"``. Case-insensitive; written uppercase on disk. + snapshot_date + ISO date string ``YYYY-MM-DD``. + strategy + Override the config-declared ``storage.strategy``. One of + ``"legacy"``, ``"hive_v1"``, ``"monthly_rollup"``. ``None`` uses + the config default. + + Notes + ----- + * ``legacy`` is the default and is byte-identical to the pre-migration + layout (``Options_Market_Data//_options_.parquet``). + * ``hive_v1`` inserts ``snapshot_date=/asset_class=/`` + before the file name. Intended for DuckDB ``hive_partitioning=1``. + * ``monthly_rollup`` writes the per-day file under ``raw/``; roll-up + compaction is a separate job (see options_history.json comments). + """ + sym = symbol.upper() + base = self.data_root / "2_Silver_Processed" / "Options_Market_Data" + + active = strategy or self._active_options_strategy() + + if active == "legacy": + return base / snapshot_date / f"{sym}_options_{snapshot_date}.parquet" + + if active == "hive_v1": + asset_class = self.loader.asset_class_of(sym) + return ( + base + / f"snapshot_date={snapshot_date}" + / f"asset_class={asset_class}" + / f"{sym}.parquet" + ) + + if active == "monthly_rollup": + # Raw-tier only; rollup is produced by a downstream compaction job. + return base / "raw" / f"snapshot_date={snapshot_date}" / f"{sym}.parquet" + + raise ValueError( + f"Unknown storage strategy '{active}'. " + "Allowed: legacy | hive_v1 | monthly_rollup." + ) + + def _active_options_strategy(self) -> str: + cfg = self.pipeline.load("options_history") + return (cfg.get("storage") or {}).get("strategy", "legacy") + + +# ============================================================================ +# 4. Module-level singletons +# ============================================================================ + +universe: UniverseLoader = UniverseLoader() +pipelines: PipelineConfig = PipelineConfig() +paths: UniversePaths = UniversePaths(loader=universe, pipeline=pipelines) + +__all__ = [ + "UniverseLoader", + "PipelineConfig", + "UniversePaths", + "universe", + "pipelines", + "paths", + "PROJECT_ROOT", + "CONFIG_ROOT", + "DATA_ROOT", +] From 97ef796527edd2f865f79fa4800bf1d4da32f70a Mon Sep 17 00:00:00 2001 From: "Xinxin(Maxine)" Date: Thu, 23 Apr 2026 08:22:49 -0400 Subject: [PATCH 30/50] update scraping strategies yfinance would have lock issue when scraping option chain. the temp path scripts for patch --- Scripts/data_collection/collect_data.py | 43 +++++---- .../processors/sec_processor.py | 23 ++++- .../scrapers/macro_data_pipeline.py | 23 +++-- .../data_collection/scrapers/news_scraper.py | 17 +++- .../data_collection/scrapers/sec_ingestion.py | 73 ++++++++++----- .../scrapers/yfinance_options_history.py | 89 ++++++++++++++----- 6 files changed, 196 insertions(+), 72 deletions(-) diff --git a/Scripts/data_collection/collect_data.py b/Scripts/data_collection/collect_data.py index a1496c4..0ed18f5 100644 --- a/Scripts/data_collection/collect_data.py +++ b/Scripts/data_collection/collect_data.py @@ -81,34 +81,41 @@ class JobDefinition: class StateStore: """ Persistent state for idempotent scheduling (avoids duplicate runs). + + Thin adapter over :class:`Scripts.orchestration.run_state.RunState` so + that the legacy ``SchedulerService`` daemon and the new CLI share the + *same* ``config/runtime/collect_data_state.json``. All reads / writes + delegate to the orchestration layer — atomic writes, tolerant reads, + dataset-anchor mapping all come for free. """ def __init__(self, state_file: Path) -> None: + # Importing here (rather than at module top) keeps this file usable + # as a standalone daemon even on environments where the full + # orchestration package is still being rolled out. + from Scripts.orchestration.run_state import RunState + self.state_file = state_file - self.state: Dict[str, str] = {"last_run_keys": {}} - self._load() - - def _load(self) -> None: - if not self.state_file.exists(): - return - try: - self.state = json.loads(self.state_file.read_text(encoding="utf-8")) - if "last_run_keys" not in self.state: - self.state["last_run_keys"] = {} - except Exception: - self.state = {"last_run_keys": {}} + self._run_state = RunState(state_path=state_file) + + # ---- back-compat surface (used by SchedulerService) -------------- + + @property + def state(self) -> Dict[str, Dict[str, str]]: + """Mirror the pre-refactor ``.state`` dict for callers that touch + it directly (``self.state["last_run_keys"][...]``).""" + return {"last_run_keys": self._run_state.all_run_keys()} def save(self) -> None: - self.state_file.write_text( - json.dumps(self.state, ensure_ascii=False, indent=2), encoding="utf-8" - ) + # RunState writes atomically after every mutation, so this is a + # no-op — kept so existing callers do not raise AttributeError. + return None def get_last_run_key(self, job_name: str) -> str | None: - return self.state.get("last_run_keys", {}).get(job_name) + return self._run_state.get_run_key(job_name) def set_last_run_key(self, job_name: str, run_key: str) -> None: - self.state.setdefault("last_run_keys", {})[job_name] = run_key - self.save() + self._run_state.write_run_key(job_name, run_key) class JobRunner: diff --git a/Scripts/data_collection/processors/sec_processor.py b/Scripts/data_collection/processors/sec_processor.py index 1d6949d..4b16f81 100644 --- a/Scripts/data_collection/processors/sec_processor.py +++ b/Scripts/data_collection/processors/sec_processor.py @@ -22,9 +22,12 @@ RAW_FOLDER = os.path.join(BASE_DIR, "Data", "1_Bronze_Raw", "SEC_Parsed_JSON", TARGET_DATE) QDRANT_INPUT_FOLDER = os.path.join(BASE_DIR, "Data", "3_Gold_Semantic", "SEC_Insider_Trades", TARGET_DATE) LOG_DIR = os.path.join(BASE_DIR, "logs", TARGET_DATE, "SEC_Ingestion") -GLOBAL_REGISTRY_PATH = os.path.join(BASE_DIR, "config", "SEC_Processing", "global_processed_registry.json") +# Runtime state (accession de-duplication ledger). Canonical path migrated from +# config/SEC_Processing/ -> config/runtime/ on 2026-04-22. +RUNTIME_DIR = os.path.join(BASE_DIR, "config", "runtime") +GLOBAL_REGISTRY_PATH = os.path.join(RUNTIME_DIR, "sec_processed_registry.json") -for folder in [QDRANT_INPUT_FOLDER, LOG_DIR]: +for folder in [QDRANT_INPUT_FOLDER, LOG_DIR, RUNTIME_DIR]: os.makedirs(folder, exist_ok=True) logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(message)s') @@ -106,8 +109,22 @@ def process_form4_rules(ticker: str, parsed_data: dict) -> dict: # ========================================== # 3. LLM Setup for 8-K # ========================================== +# Ingestion-time SEC form parser. Uses the vanilla Llama-3 tag +# (`llama3:latest`) by default — see docs/LLM_Pool.md §1 for the two-tier +# model contract. Respect env overrides so ops can swap the model +# without code changes. +_INGESTION_MODEL = os.getenv( + "OLLAMA_INGESTION_MODEL", + os.getenv("OLLAMA_ROUTER_MODEL", "llama3:latest"), +) try: - llm = ChatOllama(model="llama3", temperature=0, base_url="http://localhost:11434", format="json") + llm = ChatOllama( + model=_INGESTION_MODEL, + temperature=0, + base_url=os.getenv("OLLAMA_HOST", "http://localhost:11434"), + keep_alive=os.getenv("OLLAMA_KEEP_ALIVE", "30m"), + format="json", + ) except Exception: llm = None diff --git a/Scripts/data_collection/scrapers/macro_data_pipeline.py b/Scripts/data_collection/scrapers/macro_data_pipeline.py index b24758a..9a703da 100644 --- a/Scripts/data_collection/scrapers/macro_data_pipeline.py +++ b/Scripts/data_collection/scrapers/macro_data_pipeline.py @@ -1,24 +1,33 @@ +import logging import os -import yfinance as yf -import pandas as pd -from fredapi import Fred +import sys from datetime import datetime + +import pandas as pd from dotenv import load_dotenv -import logging +from fredapi import Fred load_dotenv() # ========================================== # 0. Dynamic Path & Logging Setup # ========================================== -import os -import logging -from datetime import datetime # 1. Setup Base Directories BASE_DIR = os.path.abspath( os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "..", "..") ) +if BASE_DIR not in sys.path: + sys.path.insert(0, BASE_DIR) + +# ------------------------------------------------------------------ +# yfinance tz-cache redirect — MUST run before `import yfinance` so +# the SQLite lock file lands on a local filesystem (not NFS/GPFS). +# ------------------------------------------------------------------ +from Scripts.core.yfinance_bootstrap import configure_yfinance_cache # noqa: E402 +configure_yfinance_cache() + +import yfinance as yf # noqa: E402 (intentional post-bootstrap import) today_str = datetime.now().strftime("%Y-%m-%d") # 2. Construct the Daily Log Folder: logs/YYYY-MM-DD/ diff --git a/Scripts/data_collection/scrapers/news_scraper.py b/Scripts/data_collection/scrapers/news_scraper.py index fcd0422..040026f 100644 --- a/Scripts/data_collection/scrapers/news_scraper.py +++ b/Scripts/data_collection/scrapers/news_scraper.py @@ -16,8 +16,21 @@ # ========================================== # 0. Dynamic Path & Directory Setup # ========================================== -print("Initializing local Llama 3 model as the data cleaning engine...") -llm = ChatOllama(model="llama3", temperature=0) +# Ingestion-time sentiment / cleaning model. Canonical tag is `llama3:latest` +# (vanilla Meta Llama-3 8B). Respect `.env` overrides so ops can swap the +# model without code changes — see docs/LLM_Pool.md §1 for the two-tier +# model contract. +_INGESTION_MODEL = os.getenv( + "OLLAMA_INGESTION_MODEL", + os.getenv("OLLAMA_ROUTER_MODEL", "llama3:latest"), +) +print(f"Initializing local {_INGESTION_MODEL} as the data cleaning engine...") +llm = ChatOllama( + model=_INGESTION_MODEL, + temperature=0, + base_url=os.getenv("OLLAMA_HOST", "http://localhost:11434"), + keep_alive=os.getenv("OLLAMA_KEEP_ALIVE", "30m"), +) # 1. Get current system date (Format: YYYY-MM-DD) current_date = datetime.now().strftime("%Y-%m-%d") diff --git a/Scripts/data_collection/scrapers/sec_ingestion.py b/Scripts/data_collection/scrapers/sec_ingestion.py index 42d8835..8e9f53b 100644 --- a/Scripts/data_collection/scrapers/sec_ingestion.py +++ b/Scripts/data_collection/scrapers/sec_ingestion.py @@ -1,4 +1,5 @@ import os +import sys import json import time import requests @@ -19,13 +20,21 @@ BASE_DIR = os.path.abspath( os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "..", "..") ) +# Make Scripts.core.universe importable whether this file is executed directly +# (`python sec_ingestion.py`) or as a module (`python -m ...sec_ingestion`). +if BASE_DIR not in sys.path: + sys.path.insert(0, BASE_DIR) + today_str = datetime.now().strftime("%Y-%m-%d") RAW_FOLDER = os.path.join(BASE_DIR, "Data", "1_Bronze_Raw", "SEC_Parsed_JSON", today_str) -CONFIG_FOLDER = os.path.join(BASE_DIR, "config", "SEC_Ingestion") +# LOG_DIR still uses the SEC_Ingestion path prefix INSIDE logs/{date}/ — that is +# a log-channel name, not a config folder. The retired config/SEC_Ingestion/ +# folder is no longer created here; universe + reference maps are now resolved +# entirely through Scripts.core.universe. LOG_DIR = os.path.join(BASE_DIR, "logs", today_str, "SEC_Ingestion") -for folder in [RAW_FOLDER, CONFIG_FOLDER, LOG_DIR]: +for folder in [RAW_FOLDER, LOG_DIR]: os.makedirs(folder, exist_ok=True) load_dotenv(dotenv_path=os.path.join(BASE_DIR, '.env')) @@ -72,26 +81,45 @@ def wrapper(*args, **kwargs): return decorator def load_local_cik_map() -> dict: - """ directly load the static CIK mapping from local JSON file, no API calls needed """ - file_path = os.path.join(CONFIG_FOLDER, "ticker_to_cik.json") + """Thin shim retained for backward compat with external callers. + + Delegates to ``Scripts.core.universe.UniverseLoader.cik_map()``, which reads + ``config/reference/ticker_to_cik.json``. + """ try: - with open(file_path, 'r', encoding='utf-8') as f: - mapping = json.load(f) - logger.info(f"✅ Successfully loaded {len(mapping)} CIK mappings from local file") - return mapping - except FileNotFoundError: - logger.error(f"❌ File not found: {file_path}. Please run generate_cik_map.py first") + from Scripts.core.universe import universe as _universe + mapping = _universe.cik_map() + logger.info(f"✅ Successfully loaded {len(mapping)} CIK mappings via UniverseLoader") + return mapping + except Exception as e: + logger.error(f"❌ UniverseLoader.cik_map() failed: {e}. Run SEC_generate_cik_map.py first.") return {} def load_tickers(file_name: str) -> list: - file_path = os.path.join(CONFIG_FOLDER, file_name) + """Thin shim retained for backward compat. + + Maps the legacy file name ``SEC_tickers.json`` to + ``universe.get('sec.filers')``; anything else returns an empty list with a + warning. + """ try: - with open(file_path, 'r', encoding='utf-8') as f: - tickers = json.load(f) - logger.info(f"Loaded {len(tickers)} tickers from {file_path}") - return tickers + from Scripts.core.universe import universe as _universe + except Exception as e: + logger.error(f"UniverseLoader unavailable: {e}") + return [] + if file_name.lower() in ("sec_tickers.json", "equity_single_name.json"): + tickers = _universe.get("sec.filers") + logger.info(f"Loaded {len(tickers)} tickers via UniverseLoader (sec.filers)") + return tickers + logger.warning( + f"load_tickers({file_name}): no universe-role mapping for this legacy " + "filename; returning empty list. Migrate the caller to universe.get(role)." + ) + try: + with open(file_name, 'r', encoding='utf-8') as f: + return json.load(f) except Exception as e: - logger.error(f"Error loading {file_path}: {e}") + logger.error(f"Error loading {file_name}: {e}") return [] # ========================================== @@ -292,12 +320,15 @@ def generate_daily_summary(): if __name__ == "__main__": if SEC_USER_AGENT == "DataEngineer (bot@example.com)": logger.warning("⚠️ WARNING: You are using the default SEC_USER_AGENT. Please set a custom User-Agent in your .env file to avoid being blocked by SEC.") - - nasdaq_targets = load_tickers("SEC_tickers.json") - + + # Universe + reference maps are resolved through Scripts.core.universe — + # the single source of truth (config/universe/ + config/reference/). + from Scripts.core.universe import universe as _universe + nasdaq_targets = _universe.get("sec.filers") + logger.info(f"✅ Loaded {len(nasdaq_targets)} SEC filers via UniverseLoader (role=sec.filers)") + if nasdaq_targets: - # 1. Load CIK mapping from local file (no API calls needed) - ticker_to_cik = load_local_cik_map() + ticker_to_cik = _universe.cik_map() if not ticker_to_cik: logger.error("❌ CIK mapping is empty. Cannot proceed with SEC data ingestion.") diff --git a/Scripts/data_collection/scrapers/yfinance_options_history.py b/Scripts/data_collection/scrapers/yfinance_options_history.py index 76e9a2f..7153214 100644 --- a/Scripts/data_collection/scrapers/yfinance_options_history.py +++ b/Scripts/data_collection/scrapers/yfinance_options_history.py @@ -1,11 +1,12 @@ -import yfinance as yf import logging -from typing import Dict, Any, List -from datetime import datetime -import pandas as pd -import numpy as np import os +import sys import time +from datetime import datetime +from typing import Dict, Any, List + +import numpy as np +import pandas as pd # ========================================== # 0. Dynamic Path & Logging Configuration @@ -14,6 +15,20 @@ BASE_DIR = os.path.abspath( os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "..", "..") ) +# Make Scripts.core.* importable when executed directly (python Scripts/...). +if BASE_DIR not in sys.path: + sys.path.insert(0, BASE_DIR) + +# ------------------------------------------------------------------ +# yfinance timezone-cache redirect — MUST run before `import yfinance` +# so the SQLite tz DB lands on a lock-safe filesystem (not NFS/GPFS). +# See docs/test/2026-04-22/ingestion_and_query_runtime_failures.md. +# ------------------------------------------------------------------ +from Scripts.core.yfinance_bootstrap import configure_yfinance_cache # noqa: E402 +configure_yfinance_cache() + +import yfinance as yf # noqa: E402 (intentional post-bootstrap import) + DATA_DIR = os.path.join(BASE_DIR, "Data","2_Silver_Processed", "Options_Market_Data") LOG_DIR = os.path.join(BASE_DIR, "logs") @@ -127,11 +142,27 @@ def snapshot_daily_options_chain(self, symbol: str) -> bool: """ today = datetime.now() today_str = today.strftime("%Y-%m-%d") - - # [Architecture Update 1]: Create daily subfolder - daily_folder = os.path.join(DATA_DIR, today_str) + + # [Architecture Update 1]: Resolve the output path through the + # storage-strategy-aware UniversePaths helper. The active strategy + # defaults to ``legacy`` (see config/pipeline/options_history.json), + # which produces the EXACT same path as the pre-migration code + # ({DATA_DIR}/{today_str}/{SYMBOL}_options_{today_str}.parquet). Flip + # `storage.strategy` to `hive_v1` or `monthly_rollup` to migrate — no + # code change needed here. + try: + from Scripts.core.universe import paths as _paths + file_path_obj = _paths.options_parquet_path(symbol, today_str) + file_path = str(file_path_obj) + daily_folder = os.path.dirname(file_path) + except Exception as _paths_err: + logger.warning( + f"UniversePaths unavailable ({_paths_err}); using legacy path layout." + ) + daily_folder = os.path.join(DATA_DIR, today_str) + file_path = os.path.join(daily_folder, f"{symbol}_options_{today_str}.parquet") os.makedirs(daily_folder, exist_ok=True) - + logger.info(f"Starting options snapshot for {symbol} ({today_str})...") # 1. Fetch underlying price @@ -202,9 +233,8 @@ def snapshot_daily_options_chain(self, symbol: str) -> bool: 'last_price', 'bid', 'ask', 'spread_pct', 'volume', 'open_interest', 'implied_volatility', 'in_the_money', 'is_liquid'] df = df[[c for c in cols if c in df.columns]] - - # Save into the daily subfolder - file_path = os.path.join(daily_folder, f"{symbol}_options_{today_str}.parquet") + + # Save into the daily subfolder (path already resolved above via UniversePaths). df.to_parquet(file_path, index=False) # Log how many contracts are actually highly liquid @@ -214,16 +244,33 @@ def snapshot_daily_options_chain(self, symbol: str) -> bool: if __name__ == "__main__": client = YFinanceClient() - - # [Architecture Update 3]: Added broad market baseline symbols - # SPY (S&P 500 Large Cap), QQQ (Nasdaq Tech), IWM (Russell 2000 Small Cap) - # GLD (Gold), SLV (Silver) - target_symbols = ["SPY", "QQQ", "IWM", "GLD", "SLV"] - - logger.info(f"Initiating daily options data pipeline for {len(target_symbols)} symbols...") - + + # [Architecture Update 3]: Universe is now driven by + # config/universe/_manifest.json via Scripts.core.universe. + # * role `options.scrape` = equity.single_name ∪ etf.broad_market ∪ etf.commodity (~53 tickers) + # * role `etf.all` = etf.broad_market ∪ etf.commodity (5 tickers, legacy default) + # The active role is read from config/pipeline/options_history.json + # (`universe_role`), with `etf.all` as a safe fallback if the loader or + # the config is unavailable — this preserves the pre-migration behaviour + # byte-for-byte when run in degraded mode. + try: + from Scripts.core.universe import universe as _universe, pipelines as _pipelines + _role = (_pipelines.load("options_history") or {}).get("universe_role", "etf.all") + target_symbols = _universe.get(_role) + logger.info( + f"Initiating daily options data pipeline for {len(target_symbols)} symbols " + f"(universe_role='{_role}')." + ) + except Exception as _universe_err: + logger.warning( + f"UniverseLoader unavailable ({_universe_err}); " + "falling back to hard-coded ETF baseline [SPY, QQQ, IWM, GLD, SLV]." + ) + target_symbols = ["SPY", "QQQ", "IWM", "GLD", "SLV"] + logger.info(f"Initiating daily options data pipeline for {len(target_symbols)} symbols (fallback mode).") + for symbol in target_symbols: client.snapshot_daily_options_chain(symbol) time.sleep(2) - + logger.info("Pipeline execution completed successfully.") \ No newline at end of file From 8fa11a0cf7fee6785ba4f4af63c612edb6ae8e7d Mon Sep 17 00:00:00 2001 From: "Xinxin(Maxine)" Date: Thu, 23 Apr 2026 08:23:41 -0400 Subject: [PATCH 31/50] Global orchestration scripts --- Scripts/orchestration/__init__.py | 44 +++ Scripts/orchestration/cli.py | 305 +++++++++++++++++++++ Scripts/orchestration/pipeline.py | 307 +++++++++++++++++++++ Scripts/orchestration/run_state.py | 415 +++++++++++++++++++++++++++++ Scripts/orchestration/stages.py | 298 +++++++++++++++++++++ 5 files changed, 1369 insertions(+) create mode 100644 Scripts/orchestration/__init__.py create mode 100644 Scripts/orchestration/cli.py create mode 100644 Scripts/orchestration/pipeline.py create mode 100644 Scripts/orchestration/run_state.py create mode 100644 Scripts/orchestration/stages.py diff --git a/Scripts/orchestration/__init__.py b/Scripts/orchestration/__init__.py new file mode 100644 index 0000000..96059bb --- /dev/null +++ b/Scripts/orchestration/__init__.py @@ -0,0 +1,44 @@ +"""Orchestration layer — pipeline DAG, runtime state, CLI entrypoint. + +Intentionally re-exports only the *light* surface so this module is safe +to import from anywhere (agents, tests, Jupyter) without dragging in the +agent graph / LangChain. Heavy things (CLI entry, LLM-backed query) live +in ``Scripts.orchestration.cli`` and must be imported explicitly. +""" +from Scripts.orchestration.run_state import ( + Cadence, + DATASET_ANCHOR_KEYS, + RunState, + default_state_path, + get_run_state, + reset_run_state_singleton, + run_key, + run_key_to_date, +) +from Scripts.orchestration.stages import ( + CallableStage, + ScriptStage, + Stage, + StageResult, +) +from Scripts.orchestration.pipeline import ( + Pipeline, + build_default_pipeline, +) + +__all__ = [ + "Cadence", + "DATASET_ANCHOR_KEYS", + "RunState", + "default_state_path", + "get_run_state", + "reset_run_state_singleton", + "run_key", + "run_key_to_date", + "Stage", + "StageResult", + "ScriptStage", + "CallableStage", + "Pipeline", + "build_default_pipeline", +] diff --git a/Scripts/orchestration/cli.py b/Scripts/orchestration/cli.py new file mode 100644 index 0000000..d711b5e --- /dev/null +++ b/Scripts/orchestration/cli.py @@ -0,0 +1,305 @@ +""" +CLI entrypoint for the bot — one command, four subcommands. + + python -m Scripts ingest [--only ...] [--force] [--dry-run] + python -m Scripts daemon [--poll-seconds 30] + python -m Scripts status + python -m Scripts query "your question here" + +``ingest`` / ``daemon`` / ``status`` touch only the orchestration layer +and have no LLM dependencies — safe to run on a CI box without Ollama. +``query`` lazily imports the agent graph so the CLI stays fast for +non-query commands. +""" +from __future__ import annotations + +import argparse +import json +import logging +import sys +from datetime import datetime +from typing import List, Optional + +from Scripts.observability.audit import configure_root_logger, start_run +from Scripts.orchestration.pipeline import Pipeline, build_default_pipeline +from Scripts.orchestration.run_state import RunState, get_run_state + +log = logging.getLogger("orchestrator.cli") + + +# --------------------------------------------------------------------------- +# Subcommand handlers +# --------------------------------------------------------------------------- + + +def _cmd_ingest(args: argparse.Namespace) -> int: + pipeline = build_default_pipeline() + results = pipeline.run_once( + only=args.only, + force=args.force, + dry_run=args.dry_run, + ) + + ok = all(r.ok for r in results) + _print_run_summary(results) + return 0 if ok else 1 + + +def _cmd_daemon(args: argparse.Namespace) -> int: + if args.warmup: + _run_warmup(args.warmup_roles, synchronous=False) + pipeline = build_default_pipeline() + pipeline.run_forever(poll_seconds=args.poll_seconds) + return 0 # unreachable under normal operation + + +def _cmd_status(args: argparse.Namespace) -> int: + rs = get_run_state() + snap = rs.snapshot() + if args.json: + print(json.dumps(snap, indent=2, ensure_ascii=False)) + else: + _print_status_summary(snap) + return 0 + + +def _cmd_query(args: argparse.Namespace) -> int: + import asyncio + + question = " ".join(args.question).strip() + if not question: + print("query: empty question", file=sys.stderr) + return 2 + + # Warm the model pool before spinning up the agent graph so the + # first user query does not pay the 70B cold-start penalty. + if args.warmup: + _run_warmup(args.warmup_roles, synchronous=True) + + # Lazy import — heavy LangChain / Ollama clients are only materialised + # when the user actually asks a question. The router module exports + # ``build_financial_rag_graph``; ``build_graph`` is kept as a + # forward-compatible alias for parity with generic LangGraph tutorials. + try: + from Scripts.agents.router import build_financial_rag_graph + except ImportError as exc: + print( + f"query: agent graph is not importable — {exc}\n" + "If you only want to run the data pipeline, use `ingest` / `daemon` " + "/ `status` which do not require the agent layer.", + file=sys.stderr, + ) + return 2 + + graph = build_financial_rag_graph() + log.info("query: %s", question) + + # The graph contains async nodes (master_retrieval_node, analyst_node, + # …) so we must drive it through `ainvoke`. Using the sync `invoke` + # will raise on the first `await`. + result = asyncio.run(graph.ainvoke({"original_query": question})) + + # The finalizer writes its Pydantic dict to ``final_strategy`` (see + # ``finalizer_node`` in Scripts/agents/router.py); ``final_report`` + # was a draft-era key and no longer exists. + final_strategy = result.get("final_strategy") or result.get("draft_report") + if final_strategy is None: + print("", file=sys.stderr) + return 1 + + if isinstance(final_strategy, (dict, list)): + print(json.dumps(final_strategy, indent=2, ensure_ascii=False)) + else: + print(final_strategy) + return 0 + + +def _cmd_warmup(args: argparse.Namespace) -> int: + try: + from Scripts.core import llm_pool + except ImportError as exc: + print(f"warmup: llm_pool unavailable — {exc}", file=sys.stderr) + return 2 + + results = llm_pool.warmup_sync(roles=args.roles or None) + width = max((len(r.role) for r in results), default=8) + print(f"{'role':<{width}} status latency model") + print("-" * (width + 40)) + for r in results: + print(f"{r.role:<{width}} {r.status:<8} {r.latency_s:>6.2f}s {r.model}") + if r.error: + print(f" ! {r.error}") + return 0 if all(r.status == "ok" for r in results) else 1 + + +def _run_warmup(roles, *, synchronous: bool) -> None: + """Shared warmup entry — imports llm_pool lazily so CLI subcommands + that do not need an LLM never pay the import cost.""" + try: + from Scripts.core import llm_pool + except ImportError as exc: + log.warning("warmup skipped — llm_pool import failed: %s", exc) + return + + if synchronous: + results = llm_pool.warmup_sync(roles=roles or None) + for r in results: + log.info( + "warmup role=%s model=%s status=%s latency=%.2fs %s", + r.role, r.model, r.status, r.latency_s, + f"error={r.error}" if r.error else "", + ) + else: + llm_pool.warmup_async(roles=roles or None) + log.info("warmup dispatched asynchronously in background") + + +# --------------------------------------------------------------------------- +# Summary printers +# --------------------------------------------------------------------------- + + +def _print_run_summary(results) -> None: + width = max((len(r.name) for r in results), default=8) + header = f"{'stage':<{width}} status run_key latency" + print(header) + print("-" * len(header)) + for r in results: + rk = r.run_key or "-" + print(f"{r.name:<{width}} {r.status:<8} {rk:<17} {r.latency_s:>6.2f}s") + if r.error: + print(f" ! {r.error}") + + +def _print_status_summary(snap: dict) -> None: + print(f"state_path: {snap['state_path']}") + print(f"updated_at: {snap.get('updated_at') or '(never)'}") + print() + print("last_run_keys:") + for k, v in sorted(snap["last_run_keys"].items()): + print(f" {k:<28} {v}") + print() + print("anchors (agent-side time anchors):") + for ds, d in snap["anchors"].items(): + print(f" {ds:<10} {d}") + + +# --------------------------------------------------------------------------- +# Argument parsing +# --------------------------------------------------------------------------- + + +def build_parser() -> argparse.ArgumentParser: + p = argparse.ArgumentParser( + prog="options-bot", + description=( + "Data ingestion + RAG inference orchestrator for the " + "Automated Options Recommendation Bot." + ), + ) + p.add_argument( + "--log-level", + default="INFO", + choices=["DEBUG", "INFO", "WARNING", "ERROR"], + help="Root logger level (default: INFO).", + ) + sub = p.add_subparsers(dest="cmd", required=True) + + # ingest + p_ing = sub.add_parser( + "ingest", + help="Run data pipeline stages that are due (idempotent).", + ) + p_ing.add_argument( + "--only", + nargs="+", + metavar="STAGE", + help="Run only these stages (upstream deps are auto-included).", + ) + p_ing.add_argument( + "--force", + action="store_true", + help="Ignore is_up_to_date — re-run even if today's key already matches.", + ) + p_ing.add_argument( + "--dry-run", + action="store_true", + help="Print what would run without executing anything.", + ) + p_ing.set_defaults(handler=_cmd_ingest) + + # daemon + p_dae = sub.add_parser( + "daemon", + help="Long-running scheduler loop (same as legacy collect_data.py).", + ) + p_dae.add_argument("--poll-seconds", type=int, default=30) + p_dae.add_argument( + "--warmup", + action="store_true", + help="Warm the LLM pool in a background thread on startup.", + ) + p_dae.add_argument( + "--warmup-roles", + nargs="+", + metavar="ROLE", + help="Override the default warmup role list (e.g. 'analyst finalizer').", + ) + p_dae.set_defaults(handler=_cmd_daemon) + + # status + p_stat = sub.add_parser( + "status", + help="Show last_run_keys and agent time anchors from runtime state.", + ) + p_stat.add_argument("--json", action="store_true", help="Emit JSON.") + p_stat.set_defaults(handler=_cmd_status) + + # query + p_q = sub.add_parser( + "query", + help="Ask the multi-agent graph a question (interactive one-shot).", + ) + p_q.add_argument("question", nargs="+", help="Natural-language question.") + p_q.add_argument( + "--warmup", + action="store_true", + help="Pre-load the heavy LLM into GPU before sending the question.", + ) + p_q.add_argument( + "--warmup-roles", + nargs="+", + metavar="ROLE", + help="Override the default warmup role list.", + ) + p_q.set_defaults(handler=_cmd_query) + + # warmup (standalone — useful for CI / cron prehook) + p_w = sub.add_parser( + "warmup", + help="Pin configured LLM models into Ollama memory and exit.", + ) + p_w.add_argument( + "--roles", + nargs="+", + metavar="ROLE", + help="Specific roles to warm up (default: query_extract + analyst).", + ) + p_w.set_defaults(handler=_cmd_warmup) + + return p + + +def main(argv: Optional[List[str]] = None) -> int: + argv = argv if argv is not None else sys.argv[1:] + args = build_parser().parse_args(argv) + + configure_root_logger(level=args.log_level) + start_run(tag=args.cmd) + + log.info("cli: cmd=%s args=%s", args.cmd, vars(args)) + return int(args.handler(args) or 0) + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/Scripts/orchestration/pipeline.py b/Scripts/orchestration/pipeline.py new file mode 100644 index 0000000..323718f --- /dev/null +++ b/Scripts/orchestration/pipeline.py @@ -0,0 +1,307 @@ +""" +Pipeline — compose Stages into a DAG, run them once or forever. + +Two entry points: + +* :meth:`Pipeline.run_once` — ad-hoc execution ("run today's ingest now", + or "only the ``options_daily`` stage"). Called by the CLI ``ingest`` + subcommand and by tests. +* :meth:`Pipeline.run_forever` — long-lived scheduler loop. Replaces + ``Scripts/data_collection/collect_data.py::SchedulerService.run_forever`` + while keeping the same cadence / state semantics. + +Dependency handling +------------------- +Stages declare ``depends_on``; the runner topologically sorts the graph +and skips downstream stages whose upstreams failed (unless ``force=True``). +Cycles raise ``ValueError`` at *pipeline build time* — not at run time — +so misconfigurations are caught fast. +""" +from __future__ import annotations + +import logging +import time +from datetime import date, datetime +from pathlib import Path +from typing import Any, Callable, Dict, Iterable, List, Optional, Sequence, Tuple + +from Scripts.orchestration.run_state import Cadence, RunState, get_run_state +from Scripts.orchestration.stages import ( + ScriptStage, + Stage, + StageResult, +) + +log = logging.getLogger(__name__) + + +# --------------------------------------------------------------------------- +# Topological sort +# --------------------------------------------------------------------------- + + +def _toposort(stages: Sequence[Stage]) -> List[Stage]: + """Kahn's algorithm — stable w.r.t. insertion order for ties so the + CLI output is reproducible.""" + by_name: Dict[str, Stage] = {s.name: s for s in stages} + if len(by_name) != len(stages): + all_names = [s.name for s in stages] + dup = sorted({n for n in all_names if all_names.count(n) > 1}) + raise ValueError(f"Duplicate stage name(s): {dup}") + + incoming: Dict[str, int] = {n: 0 for n in by_name} + outgoing: Dict[str, List[str]] = {n: [] for n in by_name} + for s in stages: + for dep in s.depends_on: + if dep not in by_name: + raise ValueError( + f"Stage {s.name!r} depends on unknown stage {dep!r}" + ) + incoming[s.name] += 1 + outgoing[dep].append(s.name) + + ready: List[str] = [n for n, c in incoming.items() if c == 0] + ordered: List[Stage] = [] + while ready: + ready.sort() # determinism + current = ready.pop(0) + ordered.append(by_name[current]) + for child in outgoing[current]: + incoming[child] -= 1 + if incoming[child] == 0: + ready.append(child) + + if len(ordered) != len(stages): + remaining = [n for n, c in incoming.items() if c > 0] + raise ValueError(f"Stage dependency cycle involving: {remaining}") + return ordered + + +# --------------------------------------------------------------------------- +# Pipeline +# --------------------------------------------------------------------------- + + +class Pipeline: + """A topologically-ordered collection of :class:`Stage`s.""" + + def __init__( + self, + stages: Sequence[Stage], + *, + run_state: Optional[RunState] = None, + ) -> None: + self._stages: List[Stage] = _toposort(stages) + self._by_name: Dict[str, Stage] = {s.name: s for s in self._stages} + self.run_state: RunState = run_state or get_run_state() + + # ---- introspection ----------------------------------------------------- + + @property + def stage_names(self) -> List[str]: + return [s.name for s in self._stages] + + def stage(self, name: str) -> Stage: + return self._by_name[name] + + # ---- execution --------------------------------------------------------- + + def run_once( + self, + *, + only: Optional[Iterable[str]] = None, + force: bool = False, + dry_run: bool = False, + when: Optional[datetime] = None, + ) -> List[StageResult]: + """Run the pipeline exactly once. + + Parameters + ---------- + only + If provided, execute *only* these stage names (plus any of + their upstreams that are not up-to-date). Unknown names are + a ``ValueError``. + force + Ignore ``is_up_to_date`` — useful for manual backfills. + dry_run + Log what *would* run without executing. + when + Override the wall-clock. Used by tests and backfills. + """ + when = when or datetime.now() + targets = self._resolve_targets(only) + + results: List[StageResult] = [] + failed: set[str] = set() + + for stage in self._stages: + if stage.name not in targets: + continue + + # Short-circuit downstream work when a critical upstream failed. + upstream_failed = {d for d in stage.depends_on if d in failed} + if upstream_failed: + log.warning( + "stage=%s skipped — upstream failed: %s", + stage.name, + sorted(upstream_failed), + ) + results.append( + StageResult( + name=stage.name, + status="skipped", + error=f"upstream_failed={sorted(upstream_failed)}", + ) + ) + failed.add(stage.name) # propagate to deeper dependents + continue + + result = stage.run( + self.run_state, when=when, force=force, dry_run=dry_run + ) + results.append(result) + if not result.ok and stage.critical: + failed.add(stage.name) + + return results + + def run_forever( + self, + *, + poll_seconds: int = 30, + now_provider: Optional[Callable[[], datetime]] = None, + ) -> None: + """Long-lived scheduler loop. Calls :meth:`run_once` on every + tick — ``is_up_to_date`` guarantees each stage runs at most once + per cadence window. + + This replaces ``SchedulerService.run_forever`` in + ``Scripts/data_collection/collect_data.py`` but is fully backward + compatible because they share the same ``RunState`` on disk. + """ + now = now_provider or datetime.now + log.info( + "Pipeline.run_forever starting — %d stages, poll=%ds, state=%s", + len(self._stages), + poll_seconds, + self.run_state.state_path, + ) + while True: + try: + self.run_once(when=now()) + except Exception: + log.exception("unexpected tick failure — continuing") + time.sleep(poll_seconds) + + # ---- internals --------------------------------------------------------- + + def _resolve_targets(self, only: Optional[Iterable[str]]) -> set[str]: + """Expand ``only`` to include all upstream dependencies so partial + runs respect the DAG.""" + if only is None: + return set(self._by_name) + + requested = list(only) + unknown = [n for n in requested if n not in self._by_name] + if unknown: + raise ValueError( + f"Unknown stage name(s): {unknown}. " + f"Known: {sorted(self._by_name)}" + ) + + needed: set[str] = set() + stack = list(requested) + while stack: + current = stack.pop() + if current in needed: + continue + needed.add(current) + stack.extend(self._by_name[current].depends_on) + return needed + + +# --------------------------------------------------------------------------- +# Default factory — the 6 stages your project already runs +# --------------------------------------------------------------------------- + + +def _project_root() -> Path: + return Path(__file__).resolve().parents[2] + + +def build_default_pipeline( + *, + run_state: Optional[RunState] = None, + project_root: Optional[Path] = None, +) -> Pipeline: + """Build the production pipeline from the 5 scrapers + 1 processor + already present in ``Scripts/data_collection``. + + The DAG mirrors the reality of the data layer: + (gpr_monthly, macro_trading_daily, news_daily, options_daily) + │ + ▼ + sec_ingestion_weekly + │ + ▼ + sec_processor_weekly + + None of the daily sources depend on each other — they hit different + external endpoints and can run in parallel if you later switch the + runner to threads/async. ``sec_processor`` depends on ``sec_ingestion`` + because it parses the artefacts ingestion just wrote to Bronze. + """ + root = Path(project_root) if project_root else _project_root() + scrapers = root / "Scripts" / "data_collection" / "scrapers" + processors = root / "Scripts" / "data_collection" / "processors" + + stages: List[Stage] = [ + ScriptStage( + name="gpr_monthly", + script_path=scrapers / "GPR_index.py", + cadence=Cadence.MONTHLY, + project_root=root, + ), + ScriptStage( + name="macro_trading_daily", + script_path=scrapers / "macro_data_pipeline.py", + cadence=Cadence.TRADING_DAILY, + project_root=root, + ), + ScriptStage( + name="news_daily", + script_path=scrapers / "news_scraper.py", + cadence=Cadence.DAILY, + project_root=root, + ), + ScriptStage( + name="options_daily", + script_path=scrapers / "yfinance_options_history.py", + cadence=Cadence.DAILY, + project_root=root, + ), + ScriptStage( + name="sec_ingestion_weekly", + script_path=scrapers / "sec_ingestion.py", + cadence=Cadence.WEEKLY, + timeout_s=60 * 45, + project_root=root, + ), + ScriptStage( + name="sec_processor_weekly", + script_path=processors / "sec_processor.py", + cadence=Cadence.WEEKLY, + depends_on=("sec_ingestion_weekly",), + timeout_s=60 * 45, + project_root=root, + ), + ] + + return Pipeline(stages, run_state=run_state) + + +__all__ = [ + "Pipeline", + "build_default_pipeline", +] diff --git a/Scripts/orchestration/run_state.py b/Scripts/orchestration/run_state.py new file mode 100644 index 0000000..a6deab4 --- /dev/null +++ b/Scripts/orchestration/run_state.py @@ -0,0 +1,415 @@ +""" +RunState — the authoritative read/write handle for +``config/runtime/collect_data_state.json``. + +This module is the *single source of truth* for three things that used to +be duplicated across the codebase: + +1. **Cadence arithmetic** — turning a ``datetime`` into a ``run_key`` + (``"2026-04-21"`` / ``"2026-W16"`` / ``"2026-04"``) and vice versa. +2. **Idempotency check** — was job ``X`` already run this cadence window? +3. **Time-anchor lookup** — what is the latest successfully ingested + partition date for dataset ``Y``? Agents (``Checker``, ``Finalizer``, + ``time_adapter``, ``SilverSQLTool``) ask ``RunState.latest_anchor_date`` + instead of calling ``date.today()`` — surviving weekends, holidays and + manual backfills. + +Design choices +-------------- +* **Atomic writes.** ``write_run_key`` stages to ``*.json.tmp`` then + ``os.replace`` — on Windows this is the POSIX-equivalent atomic rename, + so a Ctrl+C in the middle of a scheduler tick cannot corrupt the file + that agents rely on for time anchoring. +* **No dependencies.** stdlib-only; safely importable from every layer + including the CLI bootstrap before any heavyweight packages are loaded. +* **Lenient reads / strict writes.** If the file is missing or broken the + readers return "unknown" sentinels so the agent layer degrades to + ``date.today()`` rather than crashing. Writes always produce a valid + JSON document. +""" +from __future__ import annotations + +import json +import os +import tempfile +from dataclasses import dataclass +from datetime import date, datetime, timedelta +from enum import Enum +from pathlib import Path +from typing import Any, Dict, Iterable, Optional, Tuple + + +# --------------------------------------------------------------------------- +# Path resolution +# --------------------------------------------------------------------------- + + +def _project_root() -> Path: + """Scripts/orchestration/run_state.py -> repo root (parents[2]).""" + return Path(__file__).resolve().parents[2] + + +def default_state_path() -> Path: + """Return the canonical path to ``collect_data_state.json``.""" + return _project_root() / "config" / "runtime" / "collect_data_state.json" + + +# --------------------------------------------------------------------------- +# Cadence +# --------------------------------------------------------------------------- + + +class Cadence(str, Enum): + """How often a pipeline stage should run. + + ``TRADING_DAILY`` is a specialization of ``DAILY`` that additionally + refuses to run on Saturdays/Sundays — used by ``macro_trading_daily`` + where FRED / yfinance emit no new data on weekends. + """ + + DAILY = "daily" + TRADING_DAILY = "trading_daily" + WEEKLY = "weekly" + MONTHLY = "monthly" + + +# --------------------------------------------------------------------------- +# run_key arithmetic — shared with the legacy `collect_data.py` scheduler +# --------------------------------------------------------------------------- + + +def run_key(cadence: Cadence, when: datetime) -> str: + """Compute the idempotency key for a given moment + cadence. + + Examples + -------- + >>> run_key(Cadence.DAILY, datetime(2026, 4, 21)) + '2026-04-21' + >>> run_key(Cadence.WEEKLY, datetime(2026, 4, 21)) # ISO week + '2026-W16' + >>> run_key(Cadence.MONTHLY, datetime(2026, 4, 21)) + '2026-04' + """ + if cadence in (Cadence.DAILY, Cadence.TRADING_DAILY): + return when.strftime("%Y-%m-%d") + if cadence == Cadence.WEEKLY: + iso = when.isocalendar() + return f"{iso.year}-W{iso.week:02d}" + if cadence == Cadence.MONTHLY: + return when.strftime("%Y-%m") + raise ValueError(f"Unsupported cadence: {cadence!r}") + + +def run_key_to_date(key: str) -> Optional[date]: + """Reverse ``run_key`` back to a representative ``date``. + + * Daily key ``"2026-04-21"`` -> ``date(2026, 4, 21)`` + * Weekly key ``"2026-W16"`` -> Monday of that ISO week + * Monthly key ``"2026-04"`` -> first day of that month + + Returns ``None`` when the string does not match any known pattern so + callers can fall back to ``date.today()``. + """ + if not key: + return None + try: + if len(key) == 10 and key[4] == "-" and key[7] == "-": # YYYY-MM-DD + return datetime.strptime(key, "%Y-%m-%d").date() + if len(key) == 7 and key[4] == "-": # YYYY-MM + return datetime.strptime(key + "-01", "%Y-%m-%d").date() + if "W" in key: # YYYY-Www + year_str, week_str = key.split("-W", 1) + return date.fromisocalendar(int(year_str), int(week_str), 1) + except (ValueError, IndexError): + pass + return None + + +# --------------------------------------------------------------------------- +# Dataset → anchor-key mapping +# --------------------------------------------------------------------------- + + +# The authoritative map between a *logical dataset* used by agents and the +# *run_key field* where scrapers announce freshness. Keep additions to this +# table in sync with ``Scripts.data_collection.collect_data.build_jobs``. +DATASET_ANCHOR_KEYS: Dict[str, str] = { + "options": "options_daily", + "macro": "macro_trading_daily", + "news": "news_daily", + "gpr": "gpr_monthly", + "sec": "sec_processor_weekly", # processor is the downstream-visible anchor + "sec_raw": "sec_ingestion_weekly", +} + + +# --------------------------------------------------------------------------- +# The state handle +# --------------------------------------------------------------------------- + + +@dataclass +class _StateDoc: + """Typed view of the JSON payload — kept internal for clarity.""" + + last_run_keys: Dict[str, str] + updated_at: Optional[str] = None + + def to_dict(self) -> Dict[str, Any]: + doc: Dict[str, Any] = {"last_run_keys": dict(self.last_run_keys)} + if self.updated_at: + doc["updated_at"] = self.updated_at + return doc + + @classmethod + def from_dict(cls, raw: Dict[str, Any]) -> "_StateDoc": + keys = raw.get("last_run_keys") or {} + if not isinstance(keys, dict): + keys = {} + return cls( + last_run_keys={str(k): str(v) for k, v in keys.items()}, + updated_at=raw.get("updated_at"), + ) + + +class RunState: + """Thread-safe-ish (process-level) handle to the runtime state file. + + *Not* multi-process safe — the scheduler daemon and the interactive + CLI should not both try to write the file at the same moment. In + practice the scheduler owns writes; agents/CLIs only read. Readers + tolerate half-written files by catching ``json.JSONDecodeError`` and + returning an empty document. + """ + + def __init__(self, state_path: Optional[Path] = None) -> None: + self.state_path: Path = Path(state_path) if state_path else default_state_path() + self._doc: _StateDoc = _StateDoc(last_run_keys={}) + self._loaded: bool = False + + # ---- low-level I/O ----------------------------------------------------- + + def _load(self) -> None: + if not self.state_path.exists(): + self._doc = _StateDoc(last_run_keys={}) + self._loaded = True + return + try: + raw = json.loads(self.state_path.read_text(encoding="utf-8")) + if not isinstance(raw, dict): + raw = {} + self._doc = _StateDoc.from_dict(raw) + except (OSError, json.JSONDecodeError): + # Tolerate a half-written file — agents must never crash because + # the scheduler was interrupted mid-write. + self._doc = _StateDoc(last_run_keys={}) + self._loaded = True + + def _ensure_loaded(self) -> None: + if not self._loaded: + self._load() + + def reload(self) -> "RunState": + """Force re-read from disk. Useful for long-lived agent processes + that want to pick up a fresh daily run without restarting.""" + self._loaded = False + self._load() + return self + + def _atomic_write(self) -> None: + self._doc.updated_at = datetime.now().isoformat(timespec="seconds") + payload = json.dumps(self._doc.to_dict(), ensure_ascii=False, indent=2) + self.state_path.parent.mkdir(parents=True, exist_ok=True) + + # Use NamedTemporaryFile in the *same directory* so os.replace is a + # rename within one filesystem — atomic on both Windows and POSIX. + fd, tmp_path = tempfile.mkstemp( + prefix=self.state_path.name + ".", + suffix=".tmp", + dir=str(self.state_path.parent), + ) + try: + with os.fdopen(fd, "w", encoding="utf-8") as f: + f.write(payload) + f.flush() + try: + os.fsync(f.fileno()) + except OSError: + # fsync is a best-effort durability hint; on some + # Windows filesystems it raises OSError(EINVAL). Swallow + # and rely on os.replace for atomicity. + pass + os.replace(tmp_path, self.state_path) + except Exception: + # Clean up the tmp file if the rename failed. + try: + os.unlink(tmp_path) + except OSError: + pass + raise + + # ---- public API -------------------------------------------------------- + + # --- job-keyed reads ----------------------------------------------- + + def get_run_key(self, job_name: str) -> Optional[str]: + """Return the stored ``run_key`` for a named job, or ``None`` if + the job has never recorded a successful run.""" + self._ensure_loaded() + return self._doc.last_run_keys.get(job_name) + + def all_run_keys(self) -> Dict[str, str]: + """Return a *copy* of the full ``last_run_keys`` mapping.""" + self._ensure_loaded() + return dict(self._doc.last_run_keys) + + # --- idempotency --------------------------------------------------- + + def is_up_to_date( + self, + job_name: str, + cadence: Cadence, + when: Optional[datetime] = None, + ) -> bool: + """True if the most recently recorded ``run_key`` matches what we + would compute now — i.e. the job does not need to run again this + cadence window.""" + when = when or datetime.now() + return self.get_run_key(job_name) == run_key(cadence, when) + + # --- writes (owned by scheduler / CLI ingest) ---------------------- + + def mark_job_complete( + self, + job_name: str, + cadence: Cadence, + when: Optional[datetime] = None, + ) -> str: + """Record that ``job_name`` just finished successfully. Returns + the ``run_key`` that was written so callers can log it.""" + self._ensure_loaded() + when = when or datetime.now() + key = run_key(cadence, when) + self._doc.last_run_keys[job_name] = key + self._atomic_write() + return key + + def write_run_key(self, job_name: str, key: str) -> None: + """Lower-level write for callers that already computed their own + ``run_key`` (e.g. backfill scripts replaying historical dates).""" + self._ensure_loaded() + self._doc.last_run_keys[job_name] = str(key) + self._atomic_write() + + # --- time anchor lookup (the single source of truth) --------------- + + def latest_anchor_date( + self, + dataset: str, + *, + fallback: Optional[date] = None, + ) -> date: + """Return the most recently ingested *data* date for ``dataset``. + + Parameters + ---------- + dataset + Logical dataset name — one of ``DATASET_ANCHOR_KEYS``'s keys + (``"options"``, ``"macro"``, ``"news"``, ``"gpr"``, ``"sec"``, + ``"sec_raw"``). Case-insensitive. + fallback + What to return when the state file is missing or the dataset + has no recorded anchor yet. Defaults to ``date.today()``. + + Never raises — the agent layer is expected to always get *some* + anchor so that ``yesterday`` can be computed deterministically. + """ + self._ensure_loaded() + key_field = DATASET_ANCHOR_KEYS.get(dataset.lower()) + if key_field: + raw = self._doc.last_run_keys.get(key_field) + anchor = run_key_to_date(raw or "") + if anchor: + return anchor + return fallback or date.today() + + def latest_anchor_for_granularity( + self, + granularity: str, + *, + fallback: Optional[date] = None, + ) -> date: + """Convenience mirror of :meth:`latest_anchor_date` keyed by the + ``TimeGranularity`` enum values used in ``time_adapter``: + ``"daily"``, ``"event"``, ``"monthly"``, ``"weekly"``. Events + anchor on news (the freshest event stream); weekly anchors on + SEC; monthly on GPR. + """ + mapping = { + "daily": "options", + "event": "news", + "weekly": "sec", + "monthly": "gpr", + } + dataset = mapping.get(granularity.lower(), "options") + return self.latest_anchor_date(dataset, fallback=fallback) + + # --- diagnostics --------------------------------------------------- + + def snapshot(self) -> Dict[str, Any]: + """Return a serialisable summary for ``cli.py status``.""" + self._ensure_loaded() + return { + "state_path": str(self.state_path), + "exists": self.state_path.exists(), + "updated_at": self._doc.updated_at, + "last_run_keys": dict(self._doc.last_run_keys), + "anchors": { + ds: self.latest_anchor_date(ds).isoformat() + for ds in DATASET_ANCHOR_KEYS + }, + } + + +# --------------------------------------------------------------------------- +# Module-level singleton +# --------------------------------------------------------------------------- + + +_SINGLETON: Optional[RunState] = None + + +def get_run_state(state_path: Optional[Path] = None) -> RunState: + """Process-wide singleton accessor. + + Agents that re-query the state repeatedly (``SilverSQLTool``, + ``time_adapter.build_anchor``) should call this rather than + instantiating ``RunState`` — avoids O(N) JSON parses per query. + Pass an explicit ``state_path`` only in tests. + """ + global _SINGLETON + if state_path is not None: + # Tests: bypass the cache so each test gets its own instance. + return RunState(state_path) + if _SINGLETON is None: + _SINGLETON = RunState() + return _SINGLETON + + +def reset_run_state_singleton() -> None: + """Drop the process-wide cache — used by long-lived daemons that want + to pick up a freshly rewritten state file without restarting.""" + global _SINGLETON + _SINGLETON = None + + +__all__ = [ + "Cadence", + "DATASET_ANCHOR_KEYS", + "RunState", + "default_state_path", + "get_run_state", + "reset_run_state_singleton", + "run_key", + "run_key_to_date", +] diff --git a/Scripts/orchestration/stages.py b/Scripts/orchestration/stages.py new file mode 100644 index 0000000..146f491 --- /dev/null +++ b/Scripts/orchestration/stages.py @@ -0,0 +1,298 @@ +""" +Stage abstractions for the pipeline DAG. + +Design +------ +A *Stage* is one unit of work in the ingest pipeline — typically +"scrape source X and land it in Bronze/Silver". Stages are: + +* **Idempotent** — asked to run twice in the same cadence window they + skip the second time. Ownership of that decision lives in ``RunState``. +* **Declarative about cadence** — the stage says *"I run weekly"* and + the scheduler / CLI decides whether today's the day. +* **Declarative about dependencies** — ``depends_on`` forms a DAG that + :class:`Scripts.orchestration.pipeline.Pipeline` topologically sorts. +* **Robust about failure** — raising is allowed; the runner converts + exceptions into ``StageResult(status="failed")`` and decides whether + to continue based on ``critical``. + +Two concrete Stage types are provided here: + +* :class:`ScriptStage` — thin wrapper around :class:`subprocess.run`, + fully compatible with your existing ``Scripts/data_collection/scrapers/*.py`` + scripts. No migration required. +* :class:`CallableStage` — for future in-process stages (e.g. the query + pipeline, embedding re-indexers). No subprocess overhead. +""" +from __future__ import annotations + +import logging +import subprocess +import sys +import time +from abc import ABC, abstractmethod +from dataclasses import dataclass, field +from datetime import datetime +from pathlib import Path +from typing import Any, Callable, Dict, List, Optional, Tuple + +from Scripts.orchestration.run_state import Cadence, RunState, run_key + +log = logging.getLogger(__name__) + + +# --------------------------------------------------------------------------- +# Status model +# --------------------------------------------------------------------------- + + +@dataclass +class StageResult: + """Outcome of a single Stage invocation.""" + + name: str + status: str # "ok" | "skipped" | "failed" | "degraded" + run_key: Optional[str] = None + latency_s: float = 0.0 + stdout: str = "" + stderr: str = "" + error: Optional[str] = None + metrics: Dict[str, Any] = field(default_factory=dict) + + @property + def ok(self) -> bool: + return self.status in ("ok", "skipped") + + +# --------------------------------------------------------------------------- +# Base class +# --------------------------------------------------------------------------- + + +class Stage(ABC): + """Abstract base for all pipeline stages. + + Subclasses must set the class-level ``name`` / ``cadence`` and + implement :meth:`_execute`. Everything else (logging, timing, + state bookkeeping) is handled here. + """ + + name: str + cadence: Cadence + depends_on: Tuple[str, ...] = () + critical: bool = True + timeout_s: int = 60 * 30 + max_retries: int = 2 + retry_backoff_s: int = 10 + + # ---- subclass hooks ---------------------------------------------------- + + @abstractmethod + def _execute(self, when: datetime) -> Tuple[str, str]: + """Perform the actual work. + + Returns + ------- + (stdout, stderr) + Captured output (empty strings are fine). Raise on failure. + """ + + # ---- framework methods ------------------------------------------------- + + def is_up_to_date(self, run_state: RunState, when: datetime) -> bool: + """Default freshness check: compare stored ``run_key`` vs current.""" + return run_state.is_up_to_date(self.name, self.cadence, when) + + def run( + self, + run_state: RunState, + when: Optional[datetime] = None, + *, + force: bool = False, + dry_run: bool = False, + ) -> StageResult: + when = when or datetime.now() + current_key = run_key(self.cadence, when) + + if not force and self.is_up_to_date(run_state, when): + log.info( + "stage=%s skipped (up-to-date, run_key=%s)", self.name, current_key + ) + return StageResult(name=self.name, status="skipped", run_key=current_key) + + if dry_run: + log.info("stage=%s dry_run (would execute run_key=%s)", self.name, current_key) + return StageResult( + name=self.name, + status="skipped", + run_key=current_key, + metrics={"dry_run": True}, + ) + + started = time.monotonic() + last_error: Optional[Exception] = None + + for attempt in range(1, self.max_retries + 2): + log.info( + "stage=%s attempt=%d cadence=%s run_key=%s", + self.name, + attempt, + self.cadence.value, + current_key, + ) + try: + stdout, stderr = self._execute(when) + run_state.mark_job_complete(self.name, self.cadence, when) + latency = time.monotonic() - started + log.info( + "stage=%s ok run_key=%s latency=%.2fs", + self.name, + current_key, + latency, + ) + return StageResult( + name=self.name, + status="ok", + run_key=current_key, + latency_s=latency, + stdout=stdout, + stderr=stderr, + ) + except Exception as exc: # noqa: BLE001 — we want the full trap + last_error = exc + log.warning( + "stage=%s attempt=%d failed: %s", + self.name, + attempt, + exc, + ) + if attempt <= self.max_retries: + backoff = min(60, self.retry_backoff_s * attempt) + time.sleep(backoff) + + latency = time.monotonic() - started + return StageResult( + name=self.name, + status="failed", + run_key=current_key, + latency_s=latency, + error=str(last_error) if last_error else "unknown error", + ) + + +# --------------------------------------------------------------------------- +# Concrete: subprocess adapter (today's default) +# --------------------------------------------------------------------------- + + +class ScriptStage(Stage): + """Stage that shells out to a Python script via ``subprocess.run``. + + This is the zero-migration wrapper for your existing scrapers in + ``Scripts/data_collection/scrapers/*.py`` and processors in + ``Scripts/data_collection/processors/*.py``. Those scripts continue + to run standalone ( ``python Scripts/...``) — the ScriptStage simply + adds orchestration concerns (retries, timing, run_key accounting). + """ + + def __init__( + self, + *, + name: str, + script_path: Path, + cadence: Cadence, + depends_on: Tuple[str, ...] = (), + critical: bool = True, + timeout_s: int = 60 * 30, + max_retries: int = 2, + project_root: Optional[Path] = None, + extra_args: Tuple[str, ...] = (), + ) -> None: + self.name = name + self.cadence = cadence + self.depends_on = depends_on + self.critical = critical + self.timeout_s = timeout_s + self.max_retries = max_retries + self.script_path = Path(script_path) + self.project_root = Path(project_root) if project_root else Path.cwd() + self.extra_args = extra_args + + if not self.script_path.exists(): + raise FileNotFoundError( + f"ScriptStage({name!r}): script not found at {self.script_path}" + ) + + def _execute(self, when: datetime) -> Tuple[str, str]: + cmd = [sys.executable, str(self.script_path), *self.extra_args] + completed = subprocess.run( + cmd, + capture_output=True, + text=True, + timeout=self.timeout_s, + cwd=str(self.project_root), + check=False, + ) + stdout = (completed.stdout or "").strip() + stderr = (completed.stderr or "").strip() + + if completed.returncode != 0: + # Include stderr tail in the raised message so the StageResult + # carries an actionable error without dumping the whole trace. + tail = stderr[-500:] if stderr else "(no stderr)" + raise RuntimeError( + f"script={self.script_path.name} rc={completed.returncode}: {tail}" + ) + return stdout, stderr + + +# --------------------------------------------------------------------------- +# Concrete: in-process callable (future-facing) +# --------------------------------------------------------------------------- + + +class CallableStage(Stage): + """Stage that runs an in-process Python callable. + + Prefer this for new stages written from scratch — avoids the cost + of spawning a Python subprocess and lets the callable accept typed + state (``RunState``, ``run_id``). The callable signature is: + + fn(when: datetime) -> Dict[str, Any] + + and the returned dict is stored in ``StageResult.metrics``. + """ + + def __init__( + self, + *, + name: str, + fn: Callable[[datetime], Dict[str, Any]], + cadence: Cadence, + depends_on: Tuple[str, ...] = (), + critical: bool = True, + timeout_s: int = 60 * 30, + max_retries: int = 2, + ) -> None: + self.name = name + self.cadence = cadence + self.depends_on = depends_on + self.critical = critical + self.timeout_s = timeout_s + self.max_retries = max_retries + self._fn = fn + + def _execute(self, when: datetime) -> Tuple[str, str]: + metrics = self._fn(when) or {} + # We return metrics via stdout JSON so StageResult.metrics picks + # it up; the Pipeline runner unpacks this for callers that care. + import json as _json # local to keep global imports minimal + return _json.dumps(metrics, default=str), "" + + +__all__ = [ + "Stage", + "StageResult", + "ScriptStage", + "CallableStage", +] From ee43df05f28d49e75f0ef4131885ff2bd5ff7017 Mon Sep 17 00:00:00 2001 From: "Xinxin(Maxine)" Date: Thu, 23 Apr 2026 08:25:28 -0400 Subject: [PATCH 32/50] update retrieval process Critical: setting the runtime time as the global time window to avoid the time shift --- Scripts/retrieval/qdrant_retriever.py | 408 +++++++++++-- Scripts/retrieval/query_transform.py | 94 ++- Scripts/retrieval/schema.py | 55 +- Scripts/retrieval/sql_tools.py | 830 ++++++++++++++++++++++++++ Scripts/retrieval/time_adapter.py | 490 +++++++++++++++ 5 files changed, 1818 insertions(+), 59 deletions(-) create mode 100644 Scripts/retrieval/sql_tools.py create mode 100644 Scripts/retrieval/time_adapter.py diff --git a/Scripts/retrieval/qdrant_retriever.py b/Scripts/retrieval/qdrant_retriever.py index 27ddcfe..a4e1f4f 100644 --- a/Scripts/retrieval/qdrant_retriever.py +++ b/Scripts/retrieval/qdrant_retriever.py @@ -23,7 +23,7 @@ # Load environment variables (including model cache related settings). load_dotenv(os.path.join(project_root, ".env")) -from qdrant_client.http import models +from qdrant_client import QdrantClient, models from fastembed import SparseTextEmbedding from sentence_transformers import CrossEncoder @@ -31,14 +31,32 @@ # Prefer package-relative imports when used as part of Scripts.retrieval. from ..vector_store.connection import get_qdrant_client, get_embedding_model from .schema import ( - RetrievedChunk, SourceType, FullTransformationResult, TimeWindow, ActionDirection, SentimentTarget + RetrievedChunk, SourceType, FullTransformationResult, TimeWindow, ActionDirection, SentimentTarget, + TIME_WINDOW_DAYS, + ) + from ..core.financial_ontology import ( + EVENT_KEYWORDS_MAPPING, NEWS_TOPICS, normalize_news_topic, + ) + from .time_adapter import ( + SourceTimeKey, + TimePredicate, + union_epoch_range, ) except ImportError as e: try: # Fallback to absolute imports when this file is executed directly. from Scripts.vector_store.connection import get_qdrant_client, get_embedding_model from Scripts.retrieval.schema import ( - RetrievedChunk, SourceType, FullTransformationResult, TimeWindow, ActionDirection, SentimentTarget + RetrievedChunk, SourceType, FullTransformationResult, TimeWindow, ActionDirection, SentimentTarget, + TIME_WINDOW_DAYS, + ) + from Scripts.core.financial_ontology import ( + EVENT_KEYWORDS_MAPPING, NEWS_TOPICS, normalize_news_topic, + ) + from Scripts.retrieval.time_adapter import ( + SourceTimeKey, + TimePredicate, + union_epoch_range, ) except ImportError: print(f"❌ Initialization Error: {e}") @@ -77,20 +95,157 @@ def __init__(self, collection_name: str = "financial_rag_gold"): logger.info(f"✅ Models initialized. Reranker: {reranker_model_name}") self._is_initialized = True - def _build_smart_filter(self, metadata: Any, ignore_time: bool = False) -> Optional[models.Filter]: - must_conditions = [] + # ------------------------------------------------------------------ + # Topic derivation — bridges LLM metadata to news_scraper's `topic` field. + # ------------------------------------------------------------------ + @staticmethod + def _derive_news_topics(metadata: Any) -> List[str]: + """Return the news `topic` values worth filtering on for this query. + + Resolution order (most-specific first): + 1. `event_keyword` → category via EVENT_KEYWORDS_MAPPING. + 2. The category itself, if the LLM wrote one that already matches + a canonical news topic (covers "macro_central_banks" etc.). + 3. Empty list → no topic constraint. + + The result is normalised to the news-scraper topic form via + `normalize_news_topic` so queries carrying the short alias + (e.g. "precious_metals_spot") still match ingested docs written + with the long form ("asset_precious_metals_spot"). + """ + candidates: List[str] = [] + ev = getattr(metadata, "event_keyword", "") or "" + if ev: + mapped = EVENT_KEYWORDS_MAPPING.get(ev.strip().lower(), "") + if mapped: + candidates.append(mapped) + + # Some Extractor outputs put the category verbatim into event_keyword + # (e.g. "macro_central_banks"). Try to land that directly. + if ev: + candidates.append(ev.strip().lower()) + + normalised = [] + for c in candidates: + n = normalize_news_topic(c) + if n and n in NEWS_TOPICS and n not in normalised: + normalised.append(n) + return normalised + + # ------------------------------------------------------------------ + # Time-predicate helpers (Gold uses the union of per-source windows) + # ------------------------------------------------------------------ + # Mapping from Qdrant `source_type` payload value → SourceTimeKey. + # Used to pick exactly the predicates relevant to this query so the + # union range is never wider than needed. + _SOURCE_TYPE_TO_KEY: Dict[str, "SourceTimeKey"] = { + "news": SourceTimeKey.GOLD_NEWS, + "sec": SourceTimeKey.GOLD_SEC, + "gpr": SourceTimeKey.GOLD_GPR, + } + + def _select_gold_predicates( + self, + source_vals: List[str], + time_predicates: Optional[Dict["SourceTimeKey", "TimePredicate"]], + ) -> List["TimePredicate"]: + """Pick the predicates that actually apply to the selected Gold sources. + + If `time_predicates` is None (legacy caller / standalone test), return + `[]` — the caller will fall back to the inline day-count logic. + If `source_vals` is empty (all-source scan), every Gold predicate + applies; callers typically avoid this path in production. + """ + if not time_predicates: + return [] + keys = [self._SOURCE_TYPE_TO_KEY[v] for v in source_vals if v in self._SOURCE_TYPE_TO_KEY] + if not keys: + keys = list(self._SOURCE_TYPE_TO_KEY.values()) + return [time_predicates[k] for k in keys if k in time_predicates] + + # ------------------------------------------------------------------ + # Filter builder — now three-mode (hard / soft-ticker / no-ticker). + # ------------------------------------------------------------------ + def _build_smart_filter( + self, + metadata: Any, + ignore_time: bool = False, + fallback_days: Optional[int] = None, + ticker_mode: str = "hard", # one of: "hard", "soft", "drop" + time_predicates: Optional[Dict["SourceTimeKey", "TimePredicate"]] = None, + ) -> Optional[models.Filter]: + """Compose a Qdrant filter with configurable ticker strictness. + + ticker_mode semantics (critical — this is the fix for "Gold layer + returns 0 even though ticker exists"): + + * "hard" — ticker goes into `must`. Every returned doc MUST have + a matching ticker payload. Historical behaviour; use when the + caller is confident the payload is always present (SEC). + + * "soft" — ticker goes into `should` together with a `topic` + condition (when derivable). `min_should=1` means a doc is + accepted if EITHER it matches a ticker OR it matches a news + topic for this query. Restores recall for news docs whose + `ticker` field is still NULL pre-enrichment. + + * "drop" — ticker is omitted entirely. Retains source_type + + time window + (optional) topic. Used as a last-resort third + fallback so "no ticker anywhere" queries still surface macro + articles — better to return thematic context than silence. + """ + must_conditions: List[models.FieldCondition] = [] + should_conditions: List[models.FieldCondition] = [] def _val(obj): return getattr(obj, "value", obj) - if metadata.tickers: - must_conditions.append(models.FieldCondition(key="ticker", match=models.MatchAny(any=metadata.tickers))) + # Gold Layer is the vector store for {news, sec, gpr} ONLY. The + # LLM extractor occasionally emits labels like "options" or "macro" + # which are semantic domains, not physical source types — those + # datasets live in Silver (Parquet). Keeping them in the filter + # guarantees zero results, so we strip them HERE (single choke + # point) and keep the rest of the pipeline untouched. + _GOLD_SOURCE_TYPES = {"news", "sec", "gpr"} + raw_source_vals = [_val(s) for s in metadata.source_types] if metadata.source_types else [] + source_vals = [s for s in raw_source_vals if str(s).lower() in _GOLD_SOURCE_TYPES] + dropped_src = set(raw_source_vals) - set(source_vals) + if dropped_src: + logger.info( + f"🧹 [GoldFilter] Dropped Silver-only source_types {sorted(dropped_src)}; " + f"Gold kept={source_vals or 'ALL (no filter)'}" + ) + + # --- Ticker placement (hard / soft / drop) ----------------------- + ticker_list = list(metadata.tickers) if metadata.tickers else [] + if ticker_list and ticker_mode == "hard": + must_conditions.append( + models.FieldCondition(key="ticker", match=models.MatchAny(any=ticker_list)) + ) + elif ticker_list and ticker_mode == "soft": + should_conditions.append( + models.FieldCondition(key="ticker", match=models.MatchAny(any=ticker_list)) + ) + # ticker_mode == "drop" → omit entirely. - source_vals = [_val(s) for s in metadata.source_types] if metadata.source_types else [] + # --- Topic enrichment (news only) -------------------------------- + # Emitted only when the query's event/category maps to a known + # news topic. Placed in `should` so it widens recall; combined + # with ticker-soft via min_should=1. + if "news" in source_vals: + topics = self._derive_news_topics(metadata) + if topics: + should_conditions.append( + models.FieldCondition(key="topic", match=models.MatchAny(any=topics)) + ) + + # --- source_type filter (hard) ----------------------------------- if source_vals: - must_conditions.append(models.FieldCondition(key="source_type", match=models.MatchAny(any=source_vals))) + must_conditions.append( + models.FieldCondition(key="source_type", match=models.MatchAny(any=source_vals)) + ) - # SEC filter expansion logic. + # --- SEC-specific refinements (hard) ----------------------------- if "sec" in source_vals: action_val = _val(metadata.action_direction) if str(action_val).upper() == "SELL": @@ -99,12 +254,12 @@ def _val(obj): must_conditions.append(models.FieldCondition(key="action_direction", match=models.MatchAny(any=["BUY", "ACQUIRE/VEST"]))) elif str(action_val).upper() != "NONE": must_conditions.append(models.FieldCondition(key="action_direction", match=models.MatchValue(value=action_val))) - + form_val = _val(metadata.form_type) if str(form_val).upper() != "ALL": must_conditions.append(models.FieldCondition(key="form_type", match=models.MatchValue(value=form_val))) - # News sentiment filter. + # --- News sentiment filter (hard) -------------------------------- if "news" in source_vals: sentiment_val = _val(metadata.sentiment_target) if str(sentiment_val).upper() == "NEGATIVE": @@ -112,31 +267,129 @@ def _val(obj): elif str(sentiment_val).upper() == "POSITIVE": must_conditions.append(models.FieldCondition(key="tone_score", range=models.Range(gt=0))) - # Default time barrier (compatible with enum/object values). + # --- Time barrier (MUST — matches ANY of several timestamp keys) --- + # Two-layer design, landed 2026-04-22: + # + # 1. **Per-source alignment** (primary path, when `time_predicates` + # is supplied by master_retriever): + # Each Gold source has its own physical cadence — news is event- + # level, SEC is event-level but 3-day weekend-safe, GPR is + # MONTHLY and must widen a "yesterday" request to the full + # current month. We take the UNION of epoch windows for the + # sources actually selected (respecting `source_vals`), which + # produces a single numeric Range wide enough to satisfy every + # picked source's cadence without widening further. + # + # 2. **Legacy inline fallback** (when `time_predicates` is None — + # standalone retriever test, e.g. the `__main__` block): + # Reverts to the 2026-04-22-era single-window inline logic so + # existing tests keep working without a MasterRetriever. + # + # Both paths wrap the Range in a nested `Filter(should=[...])` + # inside the outer `must`. Qdrant evaluates the nested filter as + # "at least one timestamp key must land in range" — this preserves + # the hard-time contract while supporting BOTH the new + # `unified_timestamp` key and the legacy `publish_timestamp` key + # without forcing a full re-ingest. if not ignore_time: - time_val = _val(metadata.time_window) - - # Robust mapping with explicit fallback. - days_delta = 30 # Default one-month window in current implementation. - if time_val == getattr(TimeWindow, "TODAY", "today"): days_delta = 1 - elif time_val == getattr(TimeWindow, "PAST_WEEK", "past_week"): days_delta = 7 - elif time_val == getattr(TimeWindow, "PAST_MONTH", "past_month"): days_delta = 30 - elif time_val == getattr(TimeWindow, "ALL", "all"): days_delta = 365 - - now = datetime.now() - start_timestamp = int((now - timedelta(days=days_delta)).timestamp()) - current_timestamp = int(time.time()) - + start_timestamp: int + end_timestamp: int + time_source_tag = "union_per_source" + + if fallback_days is not None: + # Legacy fallback-tier escalation path (Tier 2/3) — force + # a single wide window; ignore per-source widening so the + # retry is deterministic. + now = datetime.now() + start_timestamp = int((now - timedelta(days=fallback_days)).timestamp()) + end_timestamp = int(time.time()) + time_source_tag = f"legacy_fallback_{fallback_days}d" + elif time_predicates: + selected = self._select_gold_predicates(source_vals, time_predicates) + if selected: + start_timestamp, end_timestamp = union_epoch_range(selected) + widened = [p.source.value for p in selected if p.widened] + if widened: + logger.info( + f"🕒 [GoldTime] Per-source widening applied: {widened} | " + f"union window: {datetime.fromtimestamp(start_timestamp).date()}..{datetime.fromtimestamp(end_timestamp).date()}" + ) + else: + # source_vals was empty AND no predicates matched — fall + # back to the inline legacy window. + now = datetime.now() + time_val = _val(metadata.time_window) + time_key = getattr(time_val, "value", time_val) + if not isinstance(time_key, str): + time_key = str(time_key) if time_key is not None else "" + days_delta = TIME_WINDOW_DAYS.get(time_key.lower(), 30) + start_timestamp = int((now - timedelta(days=days_delta)).timestamp()) + end_timestamp = int(time.time()) + time_source_tag = f"inline_{days_delta}d" + else: + # time_predicates not supplied — legacy inline window. + now = datetime.now() + time_val = _val(metadata.time_window) + time_key = getattr(time_val, "value", time_val) + if not isinstance(time_key, str): + time_key = str(time_key) if time_key is not None else "" + days_delta = TIME_WINDOW_DAYS.get(time_key.lower(), 30) + start_timestamp = int((now - timedelta(days=days_delta)).timestamp()) + end_timestamp = int(time.time()) + time_source_tag = f"inline_{days_delta}d" + + time_range = models.Range(gte=start_timestamp, lte=end_timestamp) must_conditions.append( - models.FieldCondition( - key="unified_timestamp", - range=models.Range(gte=start_timestamp, lte=current_timestamp) + models.Filter( + should=[ + models.FieldCondition(key="unified_timestamp", range=time_range), + models.FieldCondition(key="publish_timestamp", range=time_range), + ] ) ) + logger.debug( + f"🕒 [GoldTime] mode={time_source_tag} | " + f"range=[{datetime.fromtimestamp(start_timestamp).date()}..{datetime.fromtimestamp(end_timestamp).date()}] " + f"| gte_epoch_s={start_timestamp} lte_epoch_s={end_timestamp}" + ) - return models.Filter(must=must_conditions) if must_conditions else None - - async def retrieve_async(self, original_query: str, transform_result: FullTransformationResult, top_k: int = 5) -> List[RetrievedChunk]: + # --- Assemble final filter --------------------------------------- + # Qdrant default semantic (stable since v1.x): when `should` is set + # alongside `must`, a point is accepted iff ALL must conditions pass + # AND at least one should condition matches. That's exactly the + # "ticker OR topic" recall we want — no MinShould wrapper needed, + # keeping the call portable across qdrant-client minor versions. + if not must_conditions and not should_conditions: + return None + + kwargs: Dict[str, Any] = {} + if must_conditions: + kwargs["must"] = must_conditions + if should_conditions: + kwargs["should"] = should_conditions + return models.Filter(**kwargs) + + async def retrieve_async( + self, + original_query: str, + transform_result: FullTransformationResult, + top_k: int = 5, + time_predicates: Optional[Dict["SourceTimeKey", "TimePredicate"]] = None, + ) -> List[RetrievedChunk]: + """Run the hybrid Gold retrieval cascade. + + Parameters + ---------- + time_predicates + Per-source `TimePredicate` dict compiled upstream by + `MasterRetriever._compute_time_range`. When provided, the Gold + filter builds a UNION epoch window across the sources named in + `metadata.source_types` — so a mixed `["sec", "news"]` query + gets news's tight event window AND sec's 3-day weekend-safe + window combined into a single Range, while `["gpr"]` widens to + the full month. When None, the legacy inline day-count window + is used (preserves standalone test behaviour). + """ start_time = time.time() clean_search_query = getattr(transform_result.hyde, "rerank_query", original_query) @@ -170,25 +423,73 @@ async def _execute_search(q_filter): limit=top_k * 2 ) - qdrant_filter = self._build_smart_filter(transform_result.metadata, ignore_time=False) + # --------------------------------------------------------------- + # Three-tier retrieval cascade (added 2026-04-22). + # Each tier progressively loosens constraints; the first tier + # that returns >=1 point wins. The tier that fired is logged in + # the audit trail so operators can see WHICH relaxation unlocked + # recall (this is the "fallback visibility" fix). + # --------------------------------------------------------------- + fallback_tier = "strict" # telemetry label + fallback_used = False # legacy boolean, kept for payload compat + + # Tier 1 — strict ticker, user's requested time window (aligned + # per-source via `time_predicates` when provided). + qdrant_filter = self._build_smart_filter( + transform_result.metadata, + ignore_time=False, + ticker_mode="hard", + time_predicates=time_predicates, + ) search_results = await _execute_search(qdrant_filter) - fallback_used = False - points = search_results.points + + # Tier 2 — soft ticker (OR topic) + 180-day widened window. + # Targets the "ticker-not-tagged on news payloads" failure mode: + # old news docs without a `ticker` field still match via topic. + # Tier 2/3 deliberately OVERRIDE per-source predicates via + # `fallback_days` so the escalation stays deterministic. if not points: - logger.warning("⚠️ 0 results found with requested time window. Triggering 180-Days Fallback.") - qdrant_filter = self._build_smart_filter(transform_result.metadata, fallback_days=180) + logger.warning("⚠️ Tier1 (strict) returned 0. Escalating to Tier2: soft-ticker + 180d.") + qdrant_filter = self._build_smart_filter( + transform_result.metadata, + ignore_time=False, + fallback_days=180, + ticker_mode="soft", + time_predicates=time_predicates, + ) search_results = await _execute_search(qdrant_filter) + points = search_results.points fallback_used = True + fallback_tier = "soft_ticker_180d" + + # Tier 3 — drop ticker entirely. Keeps source_type + topic + time. + # Intent: if neither ticker nor topic carried a match, surface + # broadly-relevant macro context rather than stay silent. The + # Analyst downstream can still honestly label these as weak. + if not points: + logger.warning("⚠️ Tier2 (soft) returned 0. Escalating to Tier3: drop-ticker + 180d.") + qdrant_filter = self._build_smart_filter( + transform_result.metadata, + ignore_time=False, + fallback_days=180, + ticker_mode="drop", + time_predicates=time_predicates, + ) + search_results = await _execute_search(qdrant_filter) points = search_results.points + fallback_tier = "drop_ticker_180d" if not points: - self._log_audit(original_query, clean_search_query, qdrant_filter, [], time.time() - start_time, fallback_used) + self._log_audit( + original_query, clean_search_query, qdrant_filter, [], + time.time() - start_time, fallback_used, fallback_tier=fallback_tier, + ) return [] - + # Apply precision reranking scores. pairs = [[clean_search_query, p.payload.get("text", "")] for p in points] - + rerank_scores = await asyncio.to_thread(self.reranker.predict, pairs) for idx, p in enumerate(points): @@ -200,13 +501,19 @@ async def _execute_search(q_filter): top_k_results = valid_points[:top_k] formatted_results = self._format_results(top_k_results, fallback_used) - self._log_audit(original_query, clean_search_query, qdrant_filter, formatted_results, time.time() - start_time, fallback_used) + self._log_audit( + original_query, clean_search_query, qdrant_filter, formatted_results, + time.time() - start_time, fallback_used, fallback_tier=fallback_tier, + ) return formatted_results except Exception as e: # Use logger.exception to preserve stack trace and line numbers. logger.exception(f"❌ Async Retrieval Pipeline failed: {e}") - self._log_audit(original_query, qdrant_filter, [], time.time() - start_time, False, error=str(e)) + self._log_audit( + original_query, clean_search_query, qdrant_filter, [], + time.time() - start_time, False, fallback_tier="error", error=str(e), + ) return [] def _format_results(self, points: List[Any], fallback_used: bool = False) -> List[RetrievedChunk]: @@ -239,13 +546,28 @@ def _format_results(self, points: List[Any], fallback_used: bool = False) -> Lis return retrieved_chunks - def _log_audit(self, query: str, rerank_query: str, qdrant_filter: Optional[models.Filter], results: List[RetrievedChunk], latency: float, fallback_used: bool, error: str = None): + def _log_audit( + self, + query: str, + rerank_query: str, + qdrant_filter: Optional[models.Filter], + results: List[RetrievedChunk], + latency: float, + fallback_used: bool, + fallback_tier: str = "strict", + error: str = None, + ): audit_payload = { "timestamp": datetime.now().isoformat(), "original_query": query, "rerank_query_used": rerank_query, # Preserve exact retrieval text for observability. "filter_applied": qdrant_filter.model_dump() if qdrant_filter else None, "fallback_triggered": fallback_used, + # New: exact tier that fired — "strict" | "soft_ticker_180d" | + # "drop_ticker_180d" | "error". Use this field to diagnose which + # relaxation was necessary, instead of inferring from the legacy + # boolean which overwrites across retries. + "fallback_tier": fallback_tier, "results_count": len(results), "top_k_scores": [round(r.score, 4) for r in results], "latency_sec": round(latency, 3), diff --git a/Scripts/retrieval/query_transform.py b/Scripts/retrieval/query_transform.py index 7eb6047..9d0d83c 100644 --- a/Scripts/retrieval/query_transform.py +++ b/Scripts/retrieval/query_transform.py @@ -87,23 +87,31 @@ def __init__(self): def _load_allowed_tickers(self) -> List[str]: """Build a global ticker pool (equities + ETFs + macro indices).""" - # 1) Load SEC ticker universe. - sec_tickers = [] - ticker_path = PROJECT_ROOT / "config" / "SEC_Ingestion" / "SEC_tickers.json" + # 1) Load SEC filer universe through the central UniverseLoader. This is + # now the single source of truth; there is no file-path fallback. + sec_tickers: List[str] = [] try: - if ticker_path.exists(): - with open(ticker_path, 'r') as f: - sec_tickers = [t.upper() for t in json.load(f)] + from Scripts.core.universe import universe as _universe + sec_tickers = [t.upper() for t in _universe.get("sec.filers")] except Exception as e: - logger.warning(f"Could not load SEC_tickers.json: {e}") - - # 2) Add ETF and macro index symbols used by retrieval prompts. - macro_and_etf_tickers = [ - "GLD", "SLV", "SPY", "QQQ", "IWM", # Options and commodity ETFs. - "^GSPC", "^IXIC", "^VIX", "DX-Y.NYB" # Macro indices. - ] - - return list(set(sec_tickers + macro_and_etf_tickers)) + logger.warning( + f"UniverseLoader unavailable ({e}); allowed-ticker pool will " + "only contain the hard-coded macro/ETF baseline." + ) + + # 2) Add macro-index symbols that are NOT in the universe manifest + # (these are ^-prefixed indices / DX-Y.NYB used by retrieval prompts). + macro_index_tickers = ["^GSPC", "^IXIC", "^VIX", "DX-Y.NYB"] + + # 3) Best-effort: pull ETF tickers from the universe too, so adding a + # new ETF to config/universe/ automatically propagates here. + try: + from Scripts.core.universe import universe as _universe + etf_tickers = [t.upper() for t in _universe.get("etf.all")] + except Exception: + etf_tickers = ["GLD", "SLV", "SPY", "QQQ", "IWM"] + + return list(set(sec_tickers + etf_tickers + macro_index_tickers)) def _build_prompts(self): """Build decoupled prompts aligned with external template variables.""" @@ -183,6 +191,27 @@ async def transform_for_dual_rag(self, query: str, intent: QueryIntent) -> FullT if not metadata.time_window: metadata.time_window = TimeWindow.PAST_SIX_MONTHS + # [GUARDRAIL 3] Ticker-explosion cap. + # Defends against LLM hallucination on vague phrases like + # "recommended tickers" / "all major stocks", which on 2026-04-22 + # produced 57 tickers in a single extraction. Downstream Silver + # SQL executes one query per metric × ticker → latency blows up + # and the Analyst can't reason over 57 separate anchors. + # + # Policy: + # - > _TICKER_HARD_CAP (default 8) => keep first _TICKER_KEEP (default 5), + # drop the rest, log LOUD so the audit trail shows degradation. + # - <= _TICKER_HARD_CAP => pass through. + _TICKER_HARD_CAP = int(os.getenv("TICKER_EXPLOSION_CAP", "8")) + _TICKER_KEEP = int(os.getenv("TICKER_EXPLOSION_KEEP", "5")) + if len(metadata.tickers) > _TICKER_HARD_CAP: + dropped = metadata.tickers[_TICKER_KEEP:] + metadata.tickers = metadata.tickers[:_TICKER_KEEP] + logger.warning( + f"⚠️ Guardrail 3 (ticker explosion): original={len(dropped) + _TICKER_KEEP} " + f"kept={metadata.tickers} dropped={dropped}" + ) + # Map semantic metrics to physical database columns. mapped_cols = set() for m in metadata.metrics: @@ -203,6 +232,41 @@ async def transform_for_dual_rag(self, query: str, intent: QueryIntent) -> FullT ) ) + # [GUARDRAIL 4] HyDE empty-paragraph fallback. + # Production audit on 2026-04-22 caught a live case where the + # structured-output LLM returned hyde_paragraph="" for a + # perfectly well-formed "yesterday PCR + IV Skew for AAPL" query, + # blanking out dense retrieval entirely. Rather than let the Gold + # engine get an empty vector, we synthesise a deterministic + # one-liner from the metadata so the dense embedder always has a + # coherent sentence to embed. The rerank_query is also reproduced + # so sparse retrieval stays aligned. + hyde_para = (hyde_result.hyde_paragraph or "").strip() + hyde_rr = (hyde_result.rerank_query or "").strip() + if not hyde_para: + metric_str = ", ".join(metadata.metrics) if metadata.metrics else "market data" + ticker_str = ", ".join(metadata.tickers) if metadata.tickers else "the broader market" + tw_val = getattr(metadata.time_window, "value", metadata.time_window) or "recent" + hyde_para = ( + f"Analysis of {metric_str} for {ticker_str} over the {tw_val} window " + f"reflects the current implied-volatility regime and " + f"options-flow sentiment relevant to the query." + ) + logger.warning( + f"⚠️ Guardrail 4 (HyDE empty): synthesised fallback paragraph " + f"({len(hyde_para)} chars) from metadata." + ) + if not hyde_rr: + parts = [] + if metadata.tickers: + parts.extend(metadata.tickers) + if metadata.metrics: + parts.extend(metadata.metrics) + if getattr(metadata, "event_keyword", None): + parts.append(metadata.event_keyword) + hyde_rr = " ".join(parts) if parts else query + hyde_result = HyDEGeneration(hyde_paragraph=hyde_para, rerank_query=hyde_rr) + # Aggregate stage outputs into one typed payload. final_result = FullTransformationResult( metadata=metadata, diff --git a/Scripts/retrieval/schema.py b/Scripts/retrieval/schema.py index 72ba3f6..f82f30a 100644 --- a/Scripts/retrieval/schema.py +++ b/Scripts/retrieval/schema.py @@ -33,10 +33,56 @@ class SearchMode(str, Enum): class TimeWindow(str, Enum): TODAY = "today" + YESTERDAY = "yesterday" PAST_WEEK = "past_week" PAST_MONTH = "past_month" + PAST_SIX_MONTHS = "past_six_months" ALL = "all" +# --------------------------------------------------------------------- +# Global TimeWindow -> day-count policy (single source of truth). +# +# Rationale: +# - Kept in schema.py (not master_retriever.py) so the Gold retriever +# (qdrant_retriever.py) and the Silver retriever (sql_tools.py) can +# both consume it without creating a circular import against the +# Master Retriever facade. +# - master_retriever.py re-exports `TIME_WINDOW_DAYS` and +# `time_window_to_days` at module-level, so downstream callers can +# still treat master_retriever as the canonical global access point. +# - `ALL` is set to 365 days: treated as the hard ceiling for "all history" +# requests. Historical-data checks without an explicit time signal fall +# back to PAST_SIX_MONTHS (180 days) via the MetadataExtraction validator +# below — NOT to ALL — so default recall doesn't silently scan a year of +# data. Gold time filtering can still override via `fallback_days`. +# --------------------------------------------------------------------- +TIME_WINDOW_DAYS: Dict[str, int] = { + TimeWindow.TODAY.value: 1, + # "yesterday" = 2 days so that Friday's anchor still covers Monday queries + # (weekend gap). Downstream SQL handlers that pick `ORDER BY DESC LIMIT 1` + # will naturally grab the most recent available trading day. + TimeWindow.YESTERDAY.value: 2, + TimeWindow.PAST_WEEK.value: 7, + TimeWindow.PAST_MONTH.value: 30, + TimeWindow.PAST_SIX_MONTHS.value: 180, + TimeWindow.ALL.value: 365, +} + + +def time_window_to_days(tw: Any, default: int = 30) -> int: + """ + Translate a metadata.time_window value (str or TimeWindow enum) into + a day count using the global `TIME_WINDOW_DAYS` policy. + + Returns `default` when the input is missing or unrecognised. This is + the ONLY function both Gold and Silver layers should use to reason + about lookback windows — do not hard-code day counts elsewhere. + """ + val = getattr(tw, "value", tw) + if not isinstance(val, str): + return default + return TIME_WINDOW_DAYS.get(val.lower(), default) + class FormTypeFilter(str, Enum): FORM_4 = "4" FORM_8K = "8-K" @@ -76,8 +122,15 @@ def normalize_tickers(cls, v: List[str]) -> List[str]: @field_validator('time_window', mode='before') @classmethod def handle_empty_window(cls, v: Any) -> TimeWindow: + # Time-window fallback policy (single source of truth): + # - User says "all history" / explicit "all" -> TimeWindow.ALL (365 days) + # - User omits time / LLM hallucinates an invalid value -> PAST_SIX_MONTHS (180 days) + # - All other canonical windows (today / past_week / past_month / past_six_months) + # are passed through unchanged. + # Matches the extractor prompt ("Default to 6 months if unspecified") and + # the Silver/Gold retrievers that read TIME_WINDOW_DAYS. if v not in [item.value for item in TimeWindow]: - return TimeWindow.ALL + return TimeWindow.PAST_SIX_MONTHS return v class HyDEGeneration(BaseModel): diff --git a/Scripts/retrieval/sql_tools.py b/Scripts/retrieval/sql_tools.py new file mode 100644 index 0000000..7a43005 --- /dev/null +++ b/Scripts/retrieval/sql_tools.py @@ -0,0 +1,830 @@ +""" +Scripts/retrieval/sql_tools.py + +Institutional-grade quantitative retrieval tool for the Silver Layer. + +Design pillars: +1. Ontology decoupling: metric whitelist and mapping come from Scripts.core.financial_ontology. +2. Fuzzy metric resolution: LLM-extracted metric names are canonicalised via difflib-backed + ontology matching. Ticker symbols are NEVER fuzzy-matched — they remain strict. +3. Dynamic Time Anchor: CURRENT_DATE usage is replaced with anchors derived from + config/runtime/collect_data_state.json (last_run_keys), keeping SQL correct during + backfills, weekends and holidays. +4. Aggregation engine: computes derived metrics such as Put/Call Ratio (PCR). +5. Auditability: daily-partitioned structured logs capture SQL, latency and lineage anchors. +6. Path robustness: expands '~' and resolves absolute paths on start-up. +""" + +import os +import glob as _glob_mod +import json +import difflib +import duckdb +import logging +from datetime import datetime, date, timedelta +from pathlib import Path +from typing import Dict, Any, List, Optional, Set +from dotenv import load_dotenv + +# Core ontology (metrics whitelist + metric -> physical column map). +# Categories are for Gold/Qdrant prompts, not Silver SQL routing. +from Scripts.core.financial_ontology import ( + ALLOWED_METRICS, + METRIC_TO_COLUMN_MAPPING, + ETF_TO_MACRO_ALIAS, +) +# Shared retrieval contract: +# - MetadataExtraction: LLM structured output consumed by every handler. +# - time_window_to_days / TIME_WINDOW_DAYS: global TimeWindow policy, same one +# used by qdrant_retriever.py (Gold Layer). Single source of truth. +from Scripts.retrieval.schema import MetadataExtraction, TIME_WINDOW_DAYS, time_window_to_days +# Per-source time predicates (landed 2026-04-22). The Silver handlers can +# optionally consume a pre-compiled `TimePredicate` from master_retriever so +# monthly GPR queries get month-widened windows and daily sources get +# weekend-safe windows — without re-deriving the policy per handler. +from Scripts.retrieval.time_adapter import SourceTimeKey, TimePredicate + +# Load environment variables +load_dotenv() + +class SilverSQLTool: + # ----------------------------------------------------------------- + # Dataset -> last_run_keys mapping (see config/runtime/collect_data_state.json). + # Used by _get_anchor_date() to build a Dynamic Time Anchor instead of + # relying on CURRENT_DATE — keeps SQL correct during backfills, weekends, + # and holidays when wall-clock and actual data-latest diverge. + # ----------------------------------------------------------------- + _ANCHOR_KEY: Dict[str, str] = { + "options": "options_daily", + "macro": "macro_trading_daily", + "gpr": "gpr_monthly", + "news": "news_daily", + } + + # ----------------------------------------------------------------- + # Silver-Layer physical contract. + # Every dataset here is validated at startup via _validate_parquet_contract(): + # 1. The glob resolves to >= 1 parquet file on disk. + # 2. The actual parquet schema contains every column this tool consumes. + # Drift (rename, missing column, moved folder) is surfaced in the daily + # audit log as SCHEMA_CHECK | status=MISSING_COLUMNS / NO_FILES / READ_FAILED + # so wrong-path regressions (e.g. GPR_History vs GPR_index) no longer + # degrade into silent empty results. + # ----------------------------------------------------------------- + _EXPECTED_SCHEMA: Dict[str, Dict[str, Any]] = { + "options": { + "glob_attr": "options_glob", + "required": { + "snapshot_date", "symbol", "option_type", "volume", + "open_interest", "implied_volatility", "moneyness_pct", + "spread_pct", "dte", "is_liquid", "contract_symbol", + }, + }, + "macro": { + "glob_attr": "macro_glob", + "required": { + "observation_date", "symbol", "value", + "daily_change_pct", "mom_change_pct", + }, + }, + "gpr": { + "glob_attr": "gpr_path", + "required": {"date", "gpr", "gpr_percentile", "gpr_mom_pct"}, + }, + } + + def __init__(self): + # 1) Robust path resolution (expands ~, resolves env). + raw_root = os.getenv("DATA_LAKE_ROOT", "./Data") + self.data_root = Path(raw_root).expanduser().resolve() + self._init_paths() + + # 2) Runtime data-freshness state (dynamic time anchors). + self.runtime_state = self._load_runtime_state() + + # 3) Rolling audit logger (daily partitioned). + self.audit_logger = self._setup_audit_logger() + + # 4) High-performance in-memory DuckDB session. + self.conn = duckdb.connect(database=':memory:') + self.conn.execute("SET threads TO 4; SET memory_limit='2GB';") + + # 4b) Deep Silver-Layer contract validation (path + column schema). + # Non-fatal — dev environments with partial data still boot, but + # misalignments are loudly logged so they can't rot silently. + self._validate_parquet_contract() + + # 5) Metric dispatch table. + # Keys MUST exist as-is (or resolve via fuzzy match) in + # Scripts.core.financial_ontology.METRIC_TO_COLUMN_MAPPING. + # Grouped by data domain for readability. + self.metric_dispatcher = { + # --- Options: IV-centric ----------------------------------- + "IV Skew": self._handle_options_analysis, + "Implied Volatility (IV)": self._handle_options_analysis, + "Implied Volatility": self._handle_options_analysis, + + # --- Options: liquidity / flow ----------------------------- + # All three share the same physical columns (volume, OI, + # is_liquid, spread_pct) so they route to the same handler. + # Keeping distinct keys helps the Analyst prompt reason about + # intent even though SQL is identical. + "Options Liquidity": self._handle_liquidity_analysis, + "Open Interest": self._handle_liquidity_analysis, + "Options Volume": self._handle_liquidity_analysis, + "Institutional Flows": self._handle_liquidity_analysis, # legacy alias + "Institutional Flow": self._handle_liquidity_analysis, # legacy alias + + # --- Options: pricing / spread ----------------------------- + # Dedicated handler so quote/spread queries don't hijack the + # IV-centric _handle_options_analysis result shape. + "Options Pricing / Spread": self._handle_pricing_spread, + "Underlying Price": self._handle_pricing_spread, + + # --- Options: aggregates ----------------------------------- + "Put/Call Ratio": self._handle_put_call_ratio, + + # --- Macro series ------------------------------------------ + # "Price" / "Price Change (%)" apply to both macro symbols + # (^GSPC, FEDFUNDS, …) and options underlyings. The handler + # applies the ETF_TO_MACRO_ALIAS translation so SPY/QQQ land + # on ^GSPC/^IXIC — see _handle_macro_analysis below. + "Macro Trend": self._handle_macro_analysis, + "Price": self._handle_macro_analysis, + "Price Change (%)": self._handle_macro_analysis, + "Daily Change (%)": self._handle_macro_analysis, + "Monthly Change (%)":self._handle_macro_analysis, + "Yearly Change (%)": self._handle_macro_analysis, + + # --- GPR ---------------------------------------------------- + "GPR Index": self._handle_geopolitical_analysis, + "GPR Threats": self._handle_geopolitical_analysis, + "GPR Acts": self._handle_geopolitical_analysis, + "GPR Components": self._handle_geopolitical_analysis, + "GPR Country-level": self._handle_geopolitical_analysis, + } + + def _init_paths(self): + """Build robust Parquet globs and warn when DATA_LAKE_ROOT is missing. + + Folder names below MUST match the Silver-Layer writers exactly: + - Options : Scripts/data_collection/scrapers/yfinance_options_history.py + writes /2_Silver_Processed/Options_Market_Data/ + /_options_.parquet + - Macro : Scripts/data_collection/scrapers/macro_data_pipeline.py + writes /2_Silver_Processed/Macro_History/ + /macro_snapshot_.parquet + - GPR : Scripts/data_collection/scrapers/GPR_index.py + writes /2_Silver_Processed/GPR_index/ + gpr_monthly_enriched.parquet (NOTE: lowercase 'index', + single canonical file — writer overwrites in place). + Any drift is surfaced loudly by _validate_parquet_contract(). + """ + self.options_glob = str(self.data_root / "2_Silver_Processed/Options_Market_Data/*/*.parquet") + self.macro_glob = str(self.data_root / "2_Silver_Processed/Macro_History/*/*.parquet") + self.gpr_path = str(self.data_root / "2_Silver_Processed/GPR_index/*.parquet") + + # Startup sanity check (robust against missing data lake). + if not self.data_root.exists(): + print(f"⚠️ Warning: DATA_LAKE_ROOT {self.data_root} does not exist.") + + def _setup_audit_logger(self): + """Daily-partitioned audit log at logs/Parquet_Query/YYYY-MM-DD/sql_retrieval_audit.log.""" + today = datetime.now().strftime("%Y-%m-%d") + log_dir = Path(f"logs/Parquet_Query/{today}") + log_dir.mkdir(parents=True, exist_ok=True) + + log_file = log_dir / "sql_retrieval_audit.log" + + logger = logging.getLogger("SilverSQLAudit") + logger.setLevel(logging.INFO) + + if not logger.handlers: + fh = logging.FileHandler(log_file, encoding='utf-8') + # Structured line format, friendly for ELK / downstream log analytics. + formatter = logging.Formatter('%(asctime)s | %(levelname)s | %(message)s') + fh.setFormatter(formatter) + logger.addHandler(fh) + return logger + + # ========================================================= + # Startup contract validation (Silver-Layer deep alignment check) + # ========================================================= + def _validate_parquet_contract(self) -> None: + """ + Deep path + column alignment check against _EXPECTED_SCHEMA. + + For every Silver dataset this tool consumes, verify: + 1. The resolved glob expands to at least one parquet file on disk + (catches folder renames such as 'GPR_History' vs 'GPR_index'). + 2. The physical parquet schema contains every column the handler + SQL references (catches upstream writer schema drift). + + Emitted audit lines (one per dataset): + SCHEMA_CHECK | dataset= | glob=<...> | files= + | columns= | missing= | status= + + Statuses: + OK — path resolves, all required columns present. + NO_FILES — glob matches zero parquet files. + MISSING_COLUMNS — physical schema is missing expected columns. + READ_FAILED — DuckDB could not probe the parquet (corrupt + / unreadable / bad path). + This method is NON-FATAL by design: dev environments without a full + data lake must still boot. Any failure is loud in the audit log. + """ + for dataset, spec in self._EXPECTED_SCHEMA.items(): + glob_pattern = getattr(self, spec["glob_attr"], None) + required: Set[str] = set(spec["required"]) + + if not glob_pattern: + self.audit_logger.error( + f"SCHEMA_CHECK | dataset={dataset} | status=NO_GLOB_ATTR" + ) + continue + + files = _glob_mod.glob(glob_pattern) + if not files: + self.audit_logger.error( + f"SCHEMA_CHECK | dataset={dataset} | glob={glob_pattern} " + f"| files=0 | status=NO_FILES" + ) + continue + + try: + # DESCRIBE is cheap: it reads only Parquet footer metadata. + desc_df = self.conn.execute( + f"DESCRIBE SELECT * FROM read_parquet('{glob_pattern}') LIMIT 0" + ).df() + actual_cols = set(desc_df["column_name"].tolist()) + missing = required - actual_cols + status = "OK" if not missing else "MISSING_COLUMNS" + self.audit_logger.info( + f"SCHEMA_CHECK | dataset={dataset} | glob={glob_pattern} " + f"| files={len(files)} | columns={len(actual_cols)} " + f"| missing={sorted(missing)} | status={status}" + ) + except Exception as e: + self.audit_logger.error( + f"SCHEMA_CHECK | dataset={dataset} | glob={glob_pattern} " + f"| files={len(files)} | status=READ_FAILED " + f"| error={str(e)[:200]}" + ) + + # ========================================================= + # Structured SQL time-range audit (one line per handler invocation) + # ========================================================= + def _audit_sql_range( + self, + handler: str, + ticker: Optional[str], + meta: MetadataExtraction, + mode: str, + start: Optional[Any] = None, + end: Optional[Any] = None, + window_days: Optional[int] = None, + extra: Optional[str] = None, + ) -> None: + """ + Emit a structured SQL_RANGE line *before* executing a handler query. + + Two modes captured: + - mode=window : explicit WHERE filter on a date column. + start / end / window_days are the filter params. + - mode=latest_only : ORDER BY DESC LIMIT 1 (no WHERE on date). + end = anchor / latest-known data date; window_days + is logged for traceability but NOT in the SQL. + + Format (pipe-separated for log analytics): + SQL_RANGE | handler=<> | ticker=<> | mode=<> | time_window= + | start=<> | end=<> | window_days=<> | extra=<> + """ + tw_val = getattr(meta.time_window, "value", meta.time_window) if meta else None + parts = ["SQL_RANGE", f"handler={handler}"] + if ticker is not None: + parts.append(f"ticker={ticker}") + parts.append(f"mode={mode}") + parts.append(f"time_window={tw_val}") + if start is not None: + parts.append(f"start={start}") + if end is not None: + parts.append(f"end={end}") + if window_days is not None: + parts.append(f"window_days={window_days}") + if extra: + parts.append(f"extra={extra}") + self.audit_logger.info(" | ".join(parts)) + + # ========================================================= + # Dynamic Time-Anchor helpers (replaces CURRENT_DATE semantics) + # ========================================================= + def _load_runtime_state(self) -> Dict[str, Any]: + """ + Load dataset-freshness state from config/runtime/collect_data_state.json. + Returns the raw dict. If the file is missing/broken this is NON-FATAL: + _get_anchor_date() falls back to date.today() so the tool stays usable + in dev environments that don't have the runtime state file yet. + """ + try: + # project root = Scripts/retrieval/sql_tools.py -> parents[2] + project_root = Path(__file__).resolve().parents[2] + state_path = project_root / "config" / "runtime" / "collect_data_state.json" + if state_path.exists(): + with open(state_path, "r", encoding="utf-8") as f: + return json.load(f) + except Exception as e: + # Audit logger may not exist yet at __init__ time — keep this as print. + print(f"⚠️ SilverSQLTool: failed to load runtime state: {e}") + return {} + + def _get_anchor_date(self, dataset: str) -> date: + """ + Return the most recently verified data date for `dataset`, derived from + config/runtime/collect_data_state.json. This is the institutional + replacement for CURRENT_DATE — it survives weekends, holidays and + backfill runs (wall-clock != last successful data ingestion). + Accepts both 'YYYY-MM-DD' daily keys and 'YYYY-MM' monthly keys. + Falls back to today() if no state key is available. + """ + key = self._ANCHOR_KEY.get(dataset) + last_keys = (self.runtime_state or {}).get("last_run_keys", {}) + raw = last_keys.get(key) if key else None + if raw: + try: + if len(raw) == 7: # Monthly: "YYYY-MM" + return datetime.strptime(raw + "-01", "%Y-%m-%d").date() + if len(raw) == 10: # Daily: "YYYY-MM-DD" + return datetime.strptime(raw, "%Y-%m-%d").date() + except Exception: + pass + return date.today() + + def _time_window_to_days(self, tw: Any, default: int = 5) -> int: + """ + Translate metadata.time_window (str | TimeWindow) into a day count via the + global TIME_WINDOW_DAYS policy in Scripts.retrieval.schema. Thin wrapper + so every handler reads through the same API — never hard-code day counts. + """ + return time_window_to_days(tw, default=default) + + # ========================================================= + # Metric fuzzy matching (ontology-aware; ticker is NEVER fuzzy) + # ========================================================= + @staticmethod + def _normalize(s: str) -> str: + """Lowercase + strip non-alphanumerics to collapse punctuation/space variants.""" + return "".join(ch for ch in str(s).lower() if ch.isalnum()) + + def _fuzzy_match_metric(self, metric: str) -> Optional[str]: + """ + Map the LLM-extracted metric label to a canonical dispatcher key. + Resolution order: + 1. Exact match on dispatcher key. + 2. Case/punctuation-insensitive exact match. + 3. difflib close-match against dispatcher keys + ontology + (ALLOWED_METRICS and METRIC_TO_COLUMN_MAPPING keys). + Ticker symbols NEVER pass through this path — they remain strict + .upper().strip() lookups to prevent SQL executing against the wrong symbol. + """ + if not metric: + return None + if metric in self.metric_dispatcher: + return metric + + norm_target = self._normalize(metric) + # Normalized exact match (covers "implied volatility" vs "Implied Volatility (IV)"). + for key in self.metric_dispatcher.keys(): + if self._normalize(key) == norm_target: + return key + + # Ontology-aware fuzzy candidates — union of every known metric surface + # form so LLM-side aliases still route to a valid handler. + candidates = ( + list(self.metric_dispatcher.keys()) + + list(ALLOWED_METRICS) + + list(METRIC_TO_COLUMN_MAPPING.keys()) + ) + norm_map: Dict[str, str] = {} + for k in candidates: + norm_map.setdefault(self._normalize(k), k) + + match = difflib.get_close_matches( + norm_target, list(norm_map.keys()), n=1, cutoff=0.75 + ) + if match: + canonical = norm_map[match[0]] + # Only return if we can actually dispatch it — ontology members + # without a handler must surface as UNAUTHORIZED_METRIC, not silently drop. + return canonical if canonical in self.metric_dispatcher else None + return None + + # Cap on tickers actually dispatched. Even if the Transformer produces + # N tickers, we execute at most this many SQL round-trips per request + # to keep Silver latency bounded (each ticker = 1 DuckDB read per + # metric). Excess tickers are logged and dropped LOUDLY. + _MAX_TICKERS_PER_QUERY = int(os.getenv("SILVER_MAX_TICKERS", "5")) + + # Per-call predicate cache. Set at the top of query_parquet_by_metadata + # so handlers can look up their source's window via + # `self._current_predicates.get(SourceTimeKey.SILVER_*)`. Cleared at the + # end of the call so the tool stays thread-ish-safe for sequential awaits + # (DuckDB connection is already single-threaded). + _current_predicates: Optional[Dict[SourceTimeKey, TimePredicate]] = None + + def _predicate_for(self, key: SourceTimeKey) -> Optional[TimePredicate]: + """Return the compiled predicate for a Silver source, or None when the + caller didn't supply `time_predicates`. Handlers that want per-source + alignment should branch on `None` and fall back to the legacy + `_time_window_to_days` path for backward compatibility. + """ + if not self._current_predicates: + return None + return self._current_predicates.get(key) + + async def query_parquet_by_metadata( + self, + metadata: MetadataExtraction, + time_predicates: Optional[Dict[SourceTimeKey, TimePredicate]] = None, + ) -> Dict[str, Any]: + """Main entry: route extracted metrics to DuckDB handlers and aggregate results. + + Fixes landed here (2026-04-22): + 1. **Iterates ALL tickers** (capped at _MAX_TICKERS_PER_QUERY) instead + of silently using only tickers[0]. Today's Q3 audit shows 57 + tickers in metadata but anchors for only 1 — root cause. + 2. Results carry per-ticker lineage so the Analyst can cite + "data anchor for SPY" vs "data anchor for QQQ" precisely. + 3. **Per-source time alignment** — when `time_predicates` is + provided by MasterRetriever, handlers read a pre-compiled + `TimePredicate` that already handled MONTHLY-widening for GPR + and weekend-safety for DAILY sources. Handlers that don't need + it are a no-op. + """ + start_ts = datetime.now() + results: Dict[str, Any] = {"values": {}, "lineage_anchors": []} + # Publish predicates on the instance so handlers can pull them + # without changing every handler signature. Cleared in the finally. + self._current_predicates = time_predicates + + if not metadata.tickers: + self.audit_logger.warning("EMPTY_TICKERS | Skipping SQL execution.") + return results + + # Ticker MUST stay exact — we only ever .upper() + .strip() it, no fuzzy match. + tickers_all = [t.upper().strip() for t in metadata.tickers if t and t.strip()] + tickers = tickers_all[: self._MAX_TICKERS_PER_QUERY] + if len(tickers_all) > len(tickers): + self.audit_logger.warning( + f"TICKER_CAP | received={len(tickers_all)} executing={len(tickers)} " + f"dropped={tickers_all[len(tickers):]}" + ) + self.audit_logger.info( + f"START_QUERY | Tickers: {tickers} | Requested: {metadata.metrics}" + ) + + for ticker in tickers: + for metric in metadata.metrics: + # Metric strings come from an LLM and may drift from dispatcher + # keys. Canonicalise via ontology-backed fuzzy match. Ticker is + # NOT fuzzy — see above. + canonical_key = self._fuzzy_match_metric(metric) + if canonical_key is None: + self.audit_logger.warning(f"UNAUTHORIZED_METRIC: {metric}") + continue + + if canonical_key != metric: + self.audit_logger.info(f"FUZZY_MATCH | '{metric}' -> '{canonical_key}'") + + handler = self.metric_dispatcher.get(canonical_key) + if not handler: + continue + + try: + res = handler(ticker, metadata) + if res: + results["values"].update(res.get("values", {})) + results["lineage_anchors"].extend(res.get("lineage_anchors", [])) + except Exception as e: + self.audit_logger.error( + f"EXECUTION_ERROR | Ticker: {ticker} | Metric: {metric} | Error: {str(e)}" + ) + + latency = (datetime.now() - start_ts).total_seconds() + self.audit_logger.info( + f"FINISH_QUERY | Latency: {latency:.3f}s | Anchors_Found: {len(results['lineage_anchors'])}" + ) + # Always clear — predicates are per-call and must not leak to the + # next metadata invocation. + self._current_predicates = None + return results + + # ========================================================= + # Business handlers — deep mapping of schema metrics. + # ========================================================= + + def _handle_put_call_ratio(self, ticker: str, meta: MetadataExtraction) -> Dict[str, Any]: + """ + Put/Call Ratio with a Dynamic Time Anchor. + - Anchor date is sourced from config/runtime/collect_data_state.json (options_daily), + replacing CURRENT_DATE so backfills, weekends, and holidays are handled correctly. + - Lookback window honors metadata.time_window via the global TIME_WINDOW_DAYS policy. + Explicit short windows (today / yesterday) are HONOURED verbatim so PCR and IV-skew + anchor on the SAME day — production audit on 2026-04-22 showed a previous + `max(5, …)` floor caused `yesterday` to return a 5-day average while IV Skew + returned a 2-day snapshot, producing inconsistent time semantics in one report. + The 5-day floor is still applied ONLY when the user gave no time signal at all + (raw time_window empty / unknown), preserving the original "short-sample noise" + guard for under-specified queries. + - Per-source time alignment (2026-04-22): when MasterRetriever supplied a + pre-compiled `TimePredicate` for `silver.options`, we honour its + (start_date, end_date) directly — this is weekend-safe (the adapter + widens DAILY sources to a 3-day floor) so Monday-anchored "yesterday" + queries automatically reach back to Friday without per-handler logic. + - Parameters are SQL-bound (no string interpolation) — ticker stays strict. + """ + anchor = self._get_anchor_date("options") + predicate = self._predicate_for(SourceTimeKey.SILVER_OPTIONS) + tw_val = getattr(meta.time_window, "value", meta.time_window) + + if predicate is not None: + # Adapter already resolved weekend-safety + min-lookback; use it. + start_date = predicate.start_date + anchor = predicate.end_date # source-aligned anchor (same day by default) + window_days = predicate.window_days + else: + # Legacy path — honour explicit short-window intents, apply the + # 5-day floor only when the user gave no time signal at all. + explicit_short = isinstance(tw_val, str) and tw_val.lower() in {"today", "yesterday", "past_week"} + if explicit_short: + window_days = self._time_window_to_days(meta.time_window, default=2) + else: + window_days = max(5, self._time_window_to_days(meta.time_window, default=5)) + start_date = anchor - timedelta(days=window_days) + + # Explicit SQL time-range audit: this handler applies a real WHERE filter, + # so start/end/window_days are logged verbatim for traceability. + self._audit_sql_range( + handler="put_call_ratio", ticker=ticker, meta=meta, + mode="window", start=start_date, end=anchor, window_days=window_days, + ) + + query = f""" + SELECT + snapshot_date, + SUM(CASE WHEN option_type = 'put' THEN volume ELSE 0 END) as put_vol, + SUM(CASE WHEN option_type = 'call' THEN volume ELSE 0 END) as call_vol, + SUM(CASE WHEN option_type = 'put' THEN open_interest ELSE 0 END) as put_oi, + SUM(CASE WHEN option_type = 'call' THEN open_interest ELSE 0 END) as call_oi + FROM read_parquet('{self.options_glob}') + WHERE symbol = ? + AND CAST(snapshot_date AS DATE) BETWEEN CAST(? AS DATE) AND CAST(? AS DATE) + GROUP BY snapshot_date + ORDER BY snapshot_date DESC + LIMIT 1 + """ + df = self.conn.execute(query, [ticker, start_date, anchor]).df() + if df.empty: return None + + row = df.iloc[0] + pcr_vol = row['put_vol'] / row['call_vol'] if row['call_vol'] > 0 else 0 + pcr_oi = row['put_oi'] / row['call_oi'] if row['call_oi'] > 0 else 0 + + return { + "values": { + "pcr_volume": round(pcr_vol, 3), + "pcr_open_interest": round(pcr_oi, 3), + "pcr_status": "Bearish Sentiment" if pcr_vol > 1.0 else "Bullish/Neutral" + }, + "lineage_anchors": [f"PCR_AGG_{ticker}_{row['snapshot_date']}"] + } + + def _handle_options_analysis(self, ticker: str, meta: MetadataExtraction) -> Dict[str, Any]: + """Surface latest ATM IV + freshness using schema fields: implied_volatility, moneyness_pct, spread_pct.""" + # This handler applies no WHERE filter on snapshot_date; it picks the + # latest available row. Log the anchor + requested window so the audit + # trail still captures intended temporal context (useful when debugging + # "why did the model see data older than expected"). + anchor = self._get_anchor_date("options") + window_days = self._time_window_to_days(meta.time_window, default=180) + self._audit_sql_range( + handler="options_analysis", ticker=ticker, meta=meta, + mode="latest_only", end=anchor, window_days=window_days, + extra="filter=is_liquid=true;dte_in_[7,45]", + ) + + query = f""" + SELECT + snapshot_date, contract_symbol, implied_volatility, + moneyness_pct, spread_pct, dte + FROM read_parquet('{self.options_glob}') + WHERE symbol = ? AND is_liquid = true AND dte BETWEEN 7 AND 45 + ORDER BY snapshot_date DESC, moneyness_pct ASC + """ + df = self.conn.execute(query, [ticker]).df() + if df.empty: return None + + latest_date = df['snapshot_date'].iloc[0] + # ATM definition: smallest |moneyness_pct| — already guaranteed by ORDER BY moneyness_pct ASC. + atm_iv = df[df['snapshot_date'] == latest_date]['implied_volatility'].iloc[0] + + return { + "values": { + "latest_atm_iv": round(atm_iv, 4), + "data_freshness": latest_date + }, + "lineage_anchors": df['contract_symbol'].head(2).tolist() + } + + def _handle_liquidity_analysis(self, ticker: str, meta: MetadataExtraction) -> Dict[str, Any]: + """Liquidity & execution-risk snapshot. + + Upgrade note (2026-04-22): + - Now surfaces OPEN INTEREST and LIQUID_CONTRACT_COUNT so the + "Options Liquidity" / "Open Interest" dispatches carry the data + the Analyst expects (previously only total_vol + avg_spread). + - Still `latest_only` — picks the most recent snapshot_date with + rows for this symbol so the result survives weekends/holidays. + """ + anchor = self._get_anchor_date("options") + window_days = self._time_window_to_days(meta.time_window, default=180) + self._audit_sql_range( + handler="liquidity_analysis", ticker=ticker, meta=meta, + mode="latest_only", end=anchor, window_days=window_days, + ) + + query = f""" + SELECT + snapshot_date, + SUM(volume) AS total_vol, + SUM(open_interest) AS total_oi, + AVG(spread_pct) AS avg_spread, + SUM(CASE WHEN is_liquid THEN 1 ELSE 0 END) AS liquid_contracts + FROM read_parquet('{self.options_glob}') + WHERE symbol = ? + GROUP BY snapshot_date + ORDER BY snapshot_date DESC + LIMIT 1 + """ + res = self.conn.execute(query, [ticker]).fetchone() + if not res: + return None + + total_vol = int(res[1] or 0) + total_oi = int(res[2] or 0) + avg_spread = float(res[3] or 0.0) + liquid_ct = int(res[4] or 0) + + return { + "values": { + f"{ticker}_daily_option_volume": total_vol, + f"{ticker}_open_interest": total_oi, + f"{ticker}_avg_spread_pct": round(avg_spread * 100, 3), + f"{ticker}_liquid_contracts": liquid_ct, + f"{ticker}_market_impact_risk": "High" if avg_spread > 0.02 else "Low", + }, + "lineage_anchors": [f"LIQ_{ticker}_{res[0]}"], + } + + def _handle_pricing_spread(self, ticker: str, meta: MetadataExtraction) -> Dict[str, Any]: + """Pricing / spread / underlying-price snapshot. + + Returns the latest-snapshot ATM-adjacent bid/ask mid so queries like + "what's the current SPY option spread" land on quote data instead + of the IV-centric options-analysis handler. + """ + anchor = self._get_anchor_date("options") + window_days = self._time_window_to_days(meta.time_window, default=180) + self._audit_sql_range( + handler="pricing_spread", ticker=ticker, meta=meta, + mode="latest_only", end=anchor, window_days=window_days, + extra="filter=is_liquid=true;dte_in_[7,45]", + ) + + query = f""" + SELECT + snapshot_date, + underlying_price, + AVG(bid) AS avg_bid, + AVG(ask) AS avg_ask, + AVG(spread_pct) AS avg_spread_pct, + AVG(last_price) AS avg_last_price + FROM read_parquet('{self.options_glob}') + WHERE symbol = ? + AND is_liquid = true + AND dte BETWEEN 7 AND 45 + GROUP BY snapshot_date, underlying_price + ORDER BY snapshot_date DESC + LIMIT 1 + """ + res = self.conn.execute(query, [ticker]).fetchone() + if not res: + return None + + return { + "values": { + f"{ticker}_underlying_price": float(res[1] or 0), + f"{ticker}_avg_bid": round(float(res[2] or 0), 3), + f"{ticker}_avg_ask": round(float(res[3] or 0), 3), + f"{ticker}_avg_spread_pct": round(float(res[4] or 0) * 100, 3), + f"{ticker}_avg_last_price": round(float(res[5] or 0), 3), + }, + "lineage_anchors": [f"PX_{ticker}_{res[0]}"], + } + + def _handle_macro_analysis(self, ticker: str, meta: MetadataExtraction) -> Dict[str, Any]: + """Macro-series latest-value read. + + Storage vs. query reconciliation (the ETF→index alias fix): + - Our Macro_History parquet stores canonical *indices* (^GSPC, + ^IXIC, FEDFUNDS, …). Users and the LLM write *ETFs* (SPY, QQQ). + - ETF_TO_MACRO_ALIAS (config/financial_ontology.py) translates + the common ETF tickers to the index the table actually holds. + - Translation is LOCAL to this handler; options / SEC handlers + keep the ETF symbol because their tables store ETFs. + + Schema note (Scripts/data_collection/scrapers/macro_data_pipeline.py): + - Yahoo Finance / daily series -> daily_change_pct populated, mom_change_pct = NULL. + - FRED / monthly macro series -> mom_change_pct populated, daily_change_pct = NULL. + - BOTH change columns are stored ALREADY as percentage points + (e.g. 2.35 means +2.35%). Do NOT multiply by 100 again here. + Defensive fallback: + - If mom_change is NULL, prefer daily_change; if both are NULL, emit 'n/a'. + """ + anchor = self._get_anchor_date("macro") + window_days = self._time_window_to_days(meta.time_window, default=180) + + # ETF → underlying-index translation (handler-local, audit-logged). + query_ticker = ETF_TO_MACRO_ALIAS.get(ticker, ticker) + alias_applied = query_ticker != ticker + + self._audit_sql_range( + handler="macro_analysis", ticker=ticker, meta=meta, + mode="latest_only", end=anchor, window_days=window_days, + extra=(f"alias={ticker}->{query_ticker}" if alias_applied else None), + ) + + query = f""" + SELECT observation_date, value, daily_change_pct, mom_change_pct + FROM read_parquet('{self.macro_glob}') + WHERE symbol = ? + ORDER BY observation_date DESC LIMIT 1 + """ + res = self.conn.execute(query, [query_ticker]).fetchone() + if not res: return None + + obs_date, last_value, daily_chg, mom_chg = res[0], res[1], res[2], res[3] + # Lineage always records BOTH the user-facing ticker and the queried + # symbol so the Analyst can explain the alias in the compliance footer. + lineage_prefix = f"MACRO_{ticker}" if not alias_applied else f"MACRO_{ticker}_AS_{query_ticker}" + + if mom_chg is not None: + change_label, change_val = f"{ticker}_mom_change", mom_chg + elif daily_chg is not None: + change_label, change_val = f"{ticker}_daily_change", daily_chg + else: + change_label, change_val = f"{ticker}_change", None + + change_str = f"{round(change_val, 2)}%" if change_val is not None else "n/a" + + return { + "values": { + f"{ticker}_last_value": last_value, + change_label: change_str, + }, + "lineage_anchors": [f"{lineage_prefix}_{obs_date}"] + } + + def _handle_geopolitical_analysis(self, ticker: str, meta: MetadataExtraction) -> Dict[str, Any]: + """GPR regime snapshot using gpr_percentile + gpr_mom_pct per GPR_Index schema. + + GPR is monthly; anchor resolves to the first-of-month of the last + successfully ingested month (collect_data_state.json -> gpr_monthly). + No WHERE filter is applied here — we always return the latest month — + but the anchor is logged so the audit trail is still decisive. + """ + anchor = self._get_anchor_date("gpr") + window_days = self._time_window_to_days(meta.time_window, default=180) + self._audit_sql_range( + handler="geopolitical_analysis", ticker=ticker, meta=meta, + mode="latest_only", end=anchor, window_days=window_days, + extra="cadence=monthly", + ) + + query = f""" + SELECT date, gpr, gpr_percentile, gpr_mom_pct + FROM read_parquet('{self.gpr_path}') + ORDER BY date DESC LIMIT 1 + """ + res = self.conn.execute(query).fetchone() + if not res: return None + + mom = res[3] + trend = "Rising" if (mom is not None and mom > 0) else ("Falling" if mom is not None else "Unknown") + return { + "values": { + "gpr_index_level": res[1], + "gpr_percentile": f"{res[2]}%", + "gpr_trend": trend + }, + "lineage_anchors": [f"GPR_{res[0].strftime('%Y%m')}"] + } \ No newline at end of file diff --git a/Scripts/retrieval/time_adapter.py b/Scripts/retrieval/time_adapter.py new file mode 100644 index 0000000..3ae2e4a --- /dev/null +++ b/Scripts/retrieval/time_adapter.py @@ -0,0 +1,490 @@ +""" +Scripts/retrieval/time_adapter.py + +Per-source Time Alignment Adapter — the single place where a semantic +`TimeWindow` from the LLM (e.g. "yesterday" / "past_week" / "past_month") +is compiled into physical time predicates that each data source can +actually execute against. + +WHY THIS MODULE EXISTS (the Q1/Q2/Q3 fix landed 2026-04-22): + Different data sources use different time types and granularities: + + Gold.News : `unified_timestamp` / `publish_timestamp` (Unix seconds, event-level) + Gold.SEC : `unified_timestamp` / `filed_at` / `transaction_date` + (Unix seconds + ISO-8601 strings, event-level) + Gold.GPR : `unified_timestamp` / `publish_timestamp` (Unix seconds, MONTHLY) + Silver.Options : `snapshot_date` (VARCHAR ISO date, trading-day) + Silver.Macro : `observation_date` / `retrieval_date` (VARCHAR ISO date, daily) + Silver.GPR : `date` / `month` (TIMESTAMP_NS, MONTHLY) + + Applying a single (start_ts, end_ts) window to all of them is wrong: + - "yesterday" against a MONTHLY source = 0 rows (should widen to the + current month so GPR always returns its most recent observation). + - "yesterday" against a DAILY source on a Monday = 0 rows (weekend + gap; we must widen at least to Friday). + - A naive Unix-seconds filter against SEC returns 0 because legacy + SEC payloads only carry ISO-8601 strings, not an epoch key. + + This adapter compiles **one `TimePredicate` per source**, pre-widened + for the source's granularity, so every downstream retriever receives + semantics that match its physical schema without branching logic + sprinkled across the codebase. + +Design: + - Stateless. + - No Qdrant / DuckDB dependency (this is the *contract*, not the + execution). Both layers consume a `TimePredicate` but decide how + to bind it to their physical APIs. + - Fully auditable: every predicate serialises via `.to_dict()` for the + retriever audit trail. +""" + +from __future__ import annotations + +import logging +from dataclasses import dataclass, field +from datetime import date, datetime, timedelta, timezone +from enum import Enum +from typing import Any, Dict, List, Optional, Tuple + +from Scripts.core.trading_calendar import is_business_day, previous_business_day +from Scripts.retrieval.schema import TIME_WINDOW_DAYS, TimeWindow, time_window_to_days + +logger = logging.getLogger(__name__) + +__all__ = [ + "TimeGranularity", + "SourceTimeKey", + "SourceTimeSpec", + "TimePredicate", + "SOURCE_SPECS", + "compile_predicate", + "compile_all", + "predicates_from_serialised", + "union_epoch_range", +] + + +# Semantic labels for which DAILY sources should use business-day semantics +# rather than calendar-day widening. Matches the user-visible TimeWindow +# values so routing is legible in logs. +_DAILY_BUSDAY_LABELS: set = {"today", "yesterday"} + + +# --------------------------------------------------------------------------- +# Registry +# --------------------------------------------------------------------------- + + +class TimeGranularity(str, Enum): + """Physical cadence of a data source. + + Determines how a sub-granularity semantic window (e.g. "yesterday") + must be widened so the source has any chance of returning data. + """ + + EVENT = "event" # News, SEC — sub-daily individual timestamps. + DAILY = "daily" # Options snapshots, macro daily series. + MONTHLY = "monthly" # GPR, FRED monthly macro series. + + +class SourceTimeKey(str, Enum): + """Logical handle used by upstream callers to reference a data source. + + Strings chosen to be stable over refactors so audit logs stay diffable. + """ + + GOLD_NEWS = "gold.news" + GOLD_SEC = "gold.sec" + GOLD_GPR = "gold.gpr" + SILVER_OPTIONS = "silver.options" + SILVER_MACRO = "silver.macro" + SILVER_GPR = "silver.gpr" + + +@dataclass(frozen=True) +class SourceTimeSpec: + """Physical time contract for one data source. + + Attributes + ---------- + granularity + Event / Daily / Monthly — drives widening policy. + time_keys + Ordered tuple of physical payload/column names that carry a parseable + instant. Retrievers should attempt them in order (most specific first). + For Qdrant this is the payload key; for Parquet this is the column. + key_units + Physical type, aligned 1:1 with `time_keys`. One of: + - "epoch_s" : Unix seconds (int/float) + - "epoch_ms" : Unix milliseconds (int/float) + - "iso_date" : 'YYYY-MM-DD' + - "iso_datetime" : ISO-8601 (may carry timezone offset or 'Z') + - "ts_ns" : pandas/arrow TIMESTAMP_NS (nanoseconds since epoch) + min_lookback_days + Floor on the widening when the semantic window is narrower than the + source's cadence. MONTHLY sources take 35 days so GPR's first-of- + month row is always inside the window. DAILY sources take 3 days to + survive weekend gaps. + """ + + granularity: TimeGranularity + time_keys: Tuple[str, ...] + key_units: Tuple[str, ...] + min_lookback_days: int = 1 + + +# Authoritative registry. Keep this in sync with +# docs/Data_source_docs/Time_Schema_Audit.md. +SOURCE_SPECS: Dict[SourceTimeKey, SourceTimeSpec] = { + SourceTimeKey.GOLD_NEWS: SourceTimeSpec( + granularity=TimeGranularity.EVENT, + # `unified_timestamp` is the post-2026-04-22 standard; `publish_timestamp` + # is the legacy key that news_scraper has always written. Both carry + # Unix seconds, so Qdrant `Range` binds against either transparently. + time_keys=("unified_timestamp", "publish_timestamp"), + key_units=("epoch_s", "epoch_s"), + min_lookback_days=1, + ), + SourceTimeKey.GOLD_SEC: SourceTimeSpec( + granularity=TimeGranularity.EVENT, + # Legacy SEC payloads only carry ISO strings. Post-2026-04-22 + # ingestion stamps a numeric `unified_timestamp` derived from + # `transaction_date` → the Qdrant numeric Range now binds. + time_keys=("unified_timestamp", "filed_at", "transaction_date"), + key_units=("epoch_s", "iso_datetime", "iso_date"), + # SEC filings land in bursts; a 3-day floor keeps weekend-edge + # "yesterday" queries non-empty without widening the semantic intent. + min_lookback_days=3, + ), + SourceTimeKey.GOLD_GPR: SourceTimeSpec( + granularity=TimeGranularity.MONTHLY, + time_keys=("unified_timestamp", "publish_timestamp"), + key_units=("epoch_s", "epoch_s"), + # 35 days = "always catches the latest first-of-month anchor", + # regardless of which calendar day the user queried on. + min_lookback_days=35, + ), + SourceTimeKey.SILVER_OPTIONS: SourceTimeSpec( + granularity=TimeGranularity.DAILY, + time_keys=("snapshot_date",), + key_units=("iso_date",), + min_lookback_days=3, + ), + SourceTimeKey.SILVER_MACRO: SourceTimeSpec( + granularity=TimeGranularity.DAILY, + # `observation_date` is the authoritative series date; `retrieval_date` + # is the ingestion day — kept second so callers can fall back. + time_keys=("observation_date", "retrieval_date"), + key_units=("iso_date", "iso_date"), + min_lookback_days=3, + ), + SourceTimeKey.SILVER_GPR: SourceTimeSpec( + granularity=TimeGranularity.MONTHLY, + time_keys=("date", "month"), + key_units=("ts_ns", "ts_ns"), + min_lookback_days=35, + ), +} + + +# --------------------------------------------------------------------------- +# Compiled predicate +# --------------------------------------------------------------------------- + + +@dataclass(frozen=True) +class TimePredicate: + """A physically-executable time window, pre-aligned for one source. + + A predicate is the *compiled* artefact of (semantic TimeWindow + anchor + + source spec). Retrievers must never re-derive these values: they should + consume `start_epoch_s` / `end_epoch_s` for Qdrant numeric Ranges, or + `start_date` / `end_date` for Parquet/DuckDB BETWEEN filters. + """ + + source: SourceTimeKey + label: str + granularity: TimeGranularity + start_date: date + end_date: date + start_epoch_s: int + end_epoch_s: int + window_days: int + widened: bool = False + widen_reason: Optional[str] = None + # The physical keys the retriever should build range filters on. Copied + # off `SourceTimeSpec` at compile time so a consumer can operate on just + # the predicate, without another registry lookup. + time_keys: Tuple[str, ...] = field(default_factory=tuple) + key_units: Tuple[str, ...] = field(default_factory=tuple) + + def to_dict(self) -> Dict[str, Any]: + return { + "source": self.source.value, + "label": self.label, + "granularity": self.granularity.value, + "start_date": self.start_date.isoformat(), + "end_date": self.end_date.isoformat(), + "start_epoch_s": self.start_epoch_s, + "end_epoch_s": self.end_epoch_s, + "window_days": self.window_days, + "widened": self.widened, + "widen_reason": self.widen_reason, + "time_keys": list(self.time_keys), + "key_units": list(self.key_units), + } + + @classmethod + def from_dict(cls, d: Dict[str, Any]) -> "TimePredicate": + """Rebuild a live predicate from the serialised `to_dict()` form. + + This is the round-trip counterpart used by agents that pick the + predicate set off AgentState (e.g. the Checker's rescue path): + the master retriever serialises once into + `state["time_range"]["source_predicates"]`, and every downstream + consumer rehydrates via this classmethod so it never has to + recompute the window. Guaranteed to be predicate-identical to the + one that produced the serialisation — this is what makes the + initial-vs-rescue windows match in lockstep (was the 3d/2d drift + in docs/test/2026-04-22/router_e2e_deep_analysis.md). + """ + return cls( + source=SourceTimeKey(d["source"]), + label=str(d.get("label", "")), + granularity=TimeGranularity(d["granularity"]), + start_date=date.fromisoformat(d["start_date"]), + end_date=date.fromisoformat(d["end_date"]), + start_epoch_s=int(d["start_epoch_s"]), + end_epoch_s=int(d["end_epoch_s"]), + window_days=int(d["window_days"]), + widened=bool(d.get("widened", False)), + widen_reason=d.get("widen_reason"), + time_keys=tuple(d.get("time_keys", ()) or ()), + key_units=tuple(d.get("key_units", ()) or ()), + ) + + +# --------------------------------------------------------------------------- +# Internal helpers +# --------------------------------------------------------------------------- + + +def _first_of_month(d: date) -> date: + return d.replace(day=1) + + +def _to_epoch_bounds(start: date, end: date) -> Tuple[int, int]: + """Convert a (start_date, end_date) pair to Unix-seconds bounds in UTC. + + End-inclusive: we push `end` to 23:59:59 so a same-day predicate + (e.g. "today") still covers every event that occurred during that day. + """ + start_dt = datetime(start.year, start.month, start.day, tzinfo=timezone.utc) + end_dt = datetime(end.year, end.month, end.day, 23, 59, 59, tzinfo=timezone.utc) + return int(start_dt.timestamp()), int(end_dt.timestamp()) + + +# --------------------------------------------------------------------------- +# Public API +# --------------------------------------------------------------------------- + + +def compile_predicate( + time_window: Any, + source: SourceTimeKey, + anchor: date, + *, + label: Optional[str] = None, +) -> TimePredicate: + """Compile a single source-specific `TimePredicate`. + + Parameters + ---------- + time_window + A `TimeWindow` enum, its string value, or anything `time_window_to_days` + accepts. Missing/unknown inputs fall back to PAST_SIX_MONTHS (180d) + via `time_window_to_days(default=180)`. + source + The `SourceTimeKey` that identifies the data source. + anchor + The "end of window" date — usually the most recent successful + ingestion date (Silver's `_get_anchor_date`), NOT `date.today()`. + This is what makes the predicate robust over weekends/holidays. + label + Human-readable label for audit logs. Defaults to the semantic value + of `time_window`. + + Returns + ------- + TimePredicate + Ready-to-execute predicate. For MONTHLY sources with a sub-month + request, the start_date is snapped to the first of the anchor month. + """ + spec = SOURCE_SPECS[source] + + base_days = time_window_to_days(time_window, default=180) + resolved_label = label or ( + getattr(time_window, "value", None) or (str(time_window) if time_window is not None else "past_six_months") + ) + label_norm = str(resolved_label).lower() + + # Anchor is usually the most recent ingestion day (options_daily from + # config/runtime/collect_data_state.json). If — for any reason — that + # value lands on a weekend (e.g. a manual backfill wrote a Saturday key) + # snap the end of the window onto the previous trading day so DAILY + # sources do not anchor on a non-existent partition. EVENT and MONTHLY + # sources leave the anchor alone because their physical data is calendar- + # day based (news can publish on weekends; GPR is first-of-month). + end: date = anchor + if spec.granularity == TimeGranularity.DAILY and not is_business_day(anchor): + end = previous_business_day(anchor) + + start: date = end - timedelta(days=base_days) + widened = False + widen_reason: Optional[str] = None + + # --- Source-specific widening rules -------------------------------------- + # Branch A: DAILY + explicit business-day semantics ("today" / "yesterday"). + # This is the fix for docs/test/2026-04-22/router_e2e_deep_analysis.md + # lines 120-133: a 2-calendar-day window on a Tuesday anchor silently + # sampled Sunday (no partition), which caused `latest_atm_iv` to flip + # between revisions. Business-day semantics pin the window to the actual + # trading day before `end`, so rescue re-queries return the same row. + if ( + spec.granularity == TimeGranularity.DAILY + and label_norm in _DAILY_BUSDAY_LABELS + ): + if label_norm == "today": + start = end + widened = False + widen_reason = "daily_today_busday (start=end=anchor)" + else: # yesterday + start = previous_business_day(end) + widened = True + widen_reason = ( + f"daily_yesterday_busday " + f"(prev_business_day({end.isoformat()})={start.isoformat()})" + ) + elif base_days < spec.min_lookback_days: + if spec.granularity == TimeGranularity.MONTHLY: + # Always include the full anchor month so the source's first-of- + # month row is inside the window. If the user asked for a span + # wider than one month (e.g. PAST_SIX_MONTHS=180d) this branch + # doesn't fire and the natural window is used. + new_start = _first_of_month(end) + start = min(start, new_start) + widened = True + widen_reason = ( + f"monthly_widen_to_{(end - start).days}d " + f"(base={base_days}d < min={spec.min_lookback_days}d)" + ) + elif spec.granularity == TimeGranularity.DAILY: + # Non-YESTERDAY short windows (PAST_WEEK etc.) still get the + # calendar-day floor so the window survives weekends without + # forcing a full business-day walk. + start = end - timedelta(days=spec.min_lookback_days) + widened = True + widen_reason = f"daily_min_{spec.min_lookback_days}d (base={base_days}d)" + elif spec.granularity == TimeGranularity.EVENT: + start = end - timedelta(days=spec.min_lookback_days) + widened = True + widen_reason = f"event_min_{spec.min_lookback_days}d (base={base_days}d)" + + start_epoch, end_epoch = _to_epoch_bounds(start, end) + window_days = (end - start).days + + predicate = TimePredicate( + source=source, + label=resolved_label, + granularity=spec.granularity, + start_date=start, + end_date=end, + start_epoch_s=start_epoch, + end_epoch_s=end_epoch, + window_days=window_days, + widened=widened, + widen_reason=widen_reason, + time_keys=spec.time_keys, + key_units=spec.key_units, + ) + + if widened: + logger.info( + f"🕒 [TimeAdapter] {source.value}: widened → " + f"{start.isoformat()}..{end.isoformat()} ({window_days}d) | " + f"reason={widen_reason}" + ) + return predicate + + +def compile_all( + time_window: Any, + anchor: date, + *, + label: Optional[str] = None, +) -> Dict[SourceTimeKey, TimePredicate]: + """Compile predicates for every registered source in one call. + + Convenience for upstream orchestration (master_retriever) so the + full per-source predicate set is materialised once, attached to the + run payload for audit, and dispatched to Gold/Silver without + re-derivation. + """ + return { + src: compile_predicate(time_window, src, anchor, label=label) + for src in SOURCE_SPECS + } + + +def predicates_from_serialised( + serialised: Dict[str, Any], +) -> Dict[SourceTimeKey, TimePredicate]: + """Inverse of `{key.value: pred.to_dict() for …}` — round-trips predicates. + + Accepts the dict shape attached to + `state["time_range"]["source_predicates"]` by `MasterRetriever. + _compute_time_range` and returns the live `{SourceTimeKey: TimePredicate}` + mapping that `SilverSQLTool.query_parquet_by_metadata` and + `QdrantRetriever.retrieve_async` already consume. + + Silently skips keys that fail to deserialise so a partially-broken + audit payload never crashes a rescue call — the caller can still fall + back to its own anchor math for the missing sources. + """ + out: Dict[SourceTimeKey, TimePredicate] = {} + if not isinstance(serialised, dict): + return out + for k, v in serialised.items(): + if not isinstance(v, dict): + continue + try: + key = SourceTimeKey(k) + except ValueError: + logger.debug(f"predicates_from_serialised: unknown source_key '{k}' — skipped.") + continue + try: + out[key] = TimePredicate.from_dict(v) + except Exception as e: + logger.warning( + f"predicates_from_serialised: failed to rehydrate {k}: " + f"{type(e).__name__}: {e} — skipped." + ) + return out + + +def union_epoch_range(predicates: List[TimePredicate]) -> Tuple[int, int]: + """Return the `(min_start, max_end)` epoch-second bounds over predicates. + + Used by the Gold retriever to build ONE numeric Range on + `unified_timestamp` / `publish_timestamp` that covers every selected + Gold source (news/sec/gpr). Each source's own widening is preserved: + a mixed {news, gpr} query still has a window large enough for GPR. + + Returns `(0, 0)` on empty input so callers can skip the filter. + """ + if not predicates: + return (0, 0) + start = min(p.start_epoch_s for p in predicates) + end = max(p.end_epoch_s for p in predicates) + return start, end From 32bee7aa0c7943057e9f1aa5f9258804821e9051 Mon Sep 17 00:00:00 2001 From: "Xinxin(Maxine)" Date: Thu, 23 Apr 2026 08:26:21 -0400 Subject: [PATCH 33/50] Update ingestion.py Patch more payload for further query --- Scripts/vector_store/ingestion.py | 133 ++++++++++++++++++++++++------ 1 file changed, 108 insertions(+), 25 deletions(-) diff --git a/Scripts/vector_store/ingestion.py b/Scripts/vector_store/ingestion.py index 6efeb5d..f0b1bba 100644 --- a/Scripts/vector_store/ingestion.py +++ b/Scripts/vector_store/ingestion.py @@ -89,7 +89,82 @@ def _to_unix_timestamp(self, date_str: str) -> int: except Exception: return 0 + # ====================================================================== + # Canonical payload-index schema (single source of truth). + # + # Every key the retriever filters on MUST appear here. Qdrant rejects a + # Range filter with `400 Bad Request: Index required but not found for …` + # if the payload key is not indexed as `integer`/`float`, so missing a + # key here is NOT a silent perf regression — it's a hard pipeline break. + # + # Production audit 2026-04-22 caught exactly this: the Gold retriever + # filters on `unified_timestamp` OR `publish_timestamp` (nested should), + # but only `unified_timestamp` was indexed → every query 400'd whenever + # source_type picked up a payload without `unified_timestamp`. + # ====================================================================== + _REQUIRED_INDEXES: list = [ + # -- Keyword filters (exact match / array contains) -- + ("ticker", models.PayloadSchemaType.KEYWORD), + ("form_type", models.PayloadSchemaType.KEYWORD), + ("action_direction", models.PayloadSchemaType.KEYWORD), + ("source_type", models.PayloadSchemaType.KEYWORD), + ("topic", models.PayloadSchemaType.KEYWORD), + ("topics", models.PayloadSchemaType.KEYWORD), + ("impacted_assets", models.PayloadSchemaType.KEYWORD), + ("entities", models.PayloadSchemaType.KEYWORD), + # -- Numeric range filters (Gold time barrier) -- + # BOTH keys must be indexed because the retriever uses nested + # `should=[unified_timestamp, publish_timestamp]` to heal legacy + # payloads that only carry one of the two. + ("unified_timestamp", models.PayloadSchemaType.INTEGER), + ("publish_timestamp", models.PayloadSchemaType.INTEGER), + # -- Optional numeric auxiliary filters (News tone ranges) -- + ("tone_score", models.PayloadSchemaType.INTEGER), + ("llm_tone_score", models.PayloadSchemaType.INTEGER), + ] + + def _ensure_payload_indexes(self) -> None: + """Idempotently create every index in `_REQUIRED_INDEXES`. + + Safe to call on both fresh and existing collections: + - Fresh collection → creates all indexes. + - Existing collection missing one index → creates only the missing + ones (the "already exists" branch raises a benign 400 that we + swallow and log at INFO). + - Existing collection already fully indexed → every call is a + no-op; no drop, no re-vectorise, no downtime. + + This is the auto-heal path that saved the 2026-04-22 outage: the + collection had been created back when only `unified_timestamp` was + in the schema, and the retriever's `publish_timestamp` Range filter + was 400-ing until this method was promoted out of the "if not + exists" branch. + """ + for field, schema in self._REQUIRED_INDEXES: + try: + self.client.create_payload_index( + self.collection_name, field_name=field, field_schema=schema, + ) + logger.info(f"✅ Payload Index ensured: {field} ({schema})") + except Exception as e: + # Qdrant returns 400/409 for "index already exists" — treat + # as success but keep the message so operators can confirm + # the index is there. Any *other* error surfaces loudly. + msg = str(e).lower() + if "already exists" in msg or "conflict" in msg or "409" in msg: + logger.info(f"ℹ️ Payload Index already present: {field}") + else: + logger.error(f"❌ Failed to ensure index for {field}: {e}") + raise + def init_collection_with_indexes(self): + """Create the collection if missing, then always reconcile indexes. + + Index reconciliation runs on EVERY call (not just at collection- + create time) so schema additions in `_REQUIRED_INDEXES` propagate to + existing production collections on the next ingest run — no manual + drop-and-recreate required. + """ if not self.client.collection_exists(self.collection_name): logger.info(f"🚀 Creating new Hybrid Collection: {self.collection_name}") self.client.create_collection( @@ -101,31 +176,12 @@ def init_collection_with_indexes(self): "sparse": SparseVectorParams() } ) - - # ========================================== - # 严格按照架构要求的 Payload 索引策略 - # ========================================== - index_schemas = [ - # 1. 强匹配/精确过滤 (Keyword) - ("ticker", models.PayloadSchemaType.KEYWORD), - ("form_type", models.PayloadSchemaType.KEYWORD), - ("action_direction", models.PayloadSchemaType.KEYWORD), - ("source_type", models.PayloadSchemaType.KEYWORD), - - # 2. 数组包含过滤 (Qdrant 的 KEYWORD 天然支持 Array of Strings 包含查询) - ("topics", models.PayloadSchemaType.KEYWORD), - ("impacted_assets", models.PayloadSchemaType.KEYWORD), - ("entities", models.PayloadSchemaType.KEYWORD), - - # 3. 时间范围过滤 (Integer) - ("unified_timestamp", models.PayloadSchemaType.INTEGER), - ] - - for field, schema in index_schemas: - self.client.create_payload_index(self.collection_name, field_name=field, field_schema=schema) - logger.info(f"✅ Payload Index created for: {field}") else: - logger.info(f"✅ Collection '{self.collection_name}' already exists. Skipping initialization.") + logger.info(f"✅ Collection '{self.collection_name}' already exists. Reconciling payload indexes…") + + # Always ensure indexes — auto-heals collections that predate a + # schema addition (e.g. `publish_timestamp` in 2026-04-22). + self._ensure_payload_indexes() def process_and_upsert_file(self, file_path: Path, source_type: str) -> int: points = [] @@ -302,5 +358,32 @@ def run_pipeline(self, full_refresh: bool = True): logger.info("="*50) if __name__ == "__main__": + import argparse + parser = argparse.ArgumentParser( + description="Qdrant Hybrid Ingestor (init + upsert pipeline)." + ) + parser.add_argument( + "--indexes-only", + action="store_true", + help=( + "Only reconcile payload indexes on the existing collection — " + "no embedding, no upsert. Use this to auto-heal a collection " + "that predates a new index (e.g. publish_timestamp added " + "2026-04-22) without re-vectorising data." + ), + ) + parser.add_argument( + "--no-full-refresh", + action="store_true", + help="Only process files matching the upstream watermark (default is full refresh).", + ) + args = parser.parse_args() + ingestor = QdrantHybridIngestor() - ingestor.run_pipeline() \ No newline at end of file + if args.indexes_only: + # Fast path for the 400 "Index required but not found" auto-heal. + # Completes in ~1s regardless of collection size. + ingestor.init_collection_with_indexes() + logger.info("🔧 Index-only reconciliation complete.") + else: + ingestor.run_pipeline(full_refresh=not args.no_full_refresh) \ No newline at end of file From c38961442f1eda90809624495d7eb505992b0867 Mon Sep 17 00:00:00 2001 From: "Xinxin(Maxine)" Date: Thu, 23 Apr 2026 08:29:35 -0400 Subject: [PATCH 34/50] Upload agents Scripts --- Scripts/agents/__init__.py | 8 + Scripts/agents/analyst.py | 303 +++++++++++++++++++++++ Scripts/agents/checker.py | 482 ++++++++++++++++++++++++++++++++++++ Scripts/agents/critic.py | 269 ++++++++++++++++++++ Scripts/agents/finalizer.py | 424 +++++++++++++++++++++++++++++++ 5 files changed, 1486 insertions(+) create mode 100644 Scripts/agents/__init__.py create mode 100644 Scripts/agents/analyst.py create mode 100644 Scripts/agents/checker.py create mode 100644 Scripts/agents/critic.py create mode 100644 Scripts/agents/finalizer.py diff --git a/Scripts/agents/__init__.py b/Scripts/agents/__init__.py new file mode 100644 index 0000000..a9d716f --- /dev/null +++ b/Scripts/agents/__init__.py @@ -0,0 +1,8 @@ +"""Agents package — LangGraph nodes (Router, Analyst, Checker, Critic, Finalizer). + +Intentionally left import-empty: each agent class brings heavy LLM / LangChain +dependencies and should be imported by its leaf module path, e.g. +`from Scripts.agents.router import build_graph`. This keeps CLI / smoke tests +from paying the cost of instantiating LangChain clients just to import an +unrelated helper. +""" diff --git a/Scripts/agents/analyst.py b/Scripts/agents/analyst.py new file mode 100644 index 0000000..b97f490 --- /dev/null +++ b/Scripts/agents/analyst.py @@ -0,0 +1,303 @@ +""" +Scripts/agents/analyst.py + +Analyst Agent — institutional-grade draft author for the LangGraph pipeline. + +Design pillars (aligned with the architect brief): +1. **Macro-Chain reasoning**: macro_context is injected into the system prompt + using the Macro → Meso → Micro framework so the LLM reasons about + transmission channels (e.g. GPR spike -> safe-haven flow -> GLD call demand) + rather than isolated facts. +2. **IV Regime awareness** (Silver upgrade from "recommendation" to "arbitrage + discovery"): before drafting, a deterministic helper classifies the current + implied-vol regime from silver_context. The LLM is told the regime so its + strategy recommendation is compatible (sell premium in high-IV, buy + protection in low-IV). +3. **Strict data lineage**: every numeric / factual claim must carry either + `[Silver: ]` or `[Gold: ]`. Downstream the + CheckerAgent enforces this. +4. **Revision-aware**: on every re-entry the agent sees the full append-only + feedback log from state["critic_feedback"] (both Checker + Critic senders) + and MUST address every unresolved Fatal error. +5. **Temporal decay hint**: the LLM is explicitly told to weight newer + gold_context entries (fresh record_date) more heavily than stale ones. +6. **Graceful degradation**: LLM failures surface as a stub draft that + explicitly says "INSUFFICIENT DATA" rather than a hallucinated report. +""" + +from __future__ import annotations + +import os +import logging +from pathlib import Path +from typing import Any, Dict, List, Literal, Optional + +from langchain_ollama import ChatOllama + +from Scripts.agents.prompts import get_analyst_prompt, render_revision_block + +logger = logging.getLogger(__name__) + + +class AnalystResult: + """Typed envelope for the analyst node's multi-field return. + + Using a tiny structured return instead of a raw string lets the router + plumb `iv_regime_pinned` into AgentState without awkwardly breaking + backwards-compat with the Markdown-only contract (a plain string is + still accessible via `.draft`). + """ + + __slots__ = ("draft", "iv_regime") + + def __init__(self, draft: str, iv_regime: Dict[str, Any]): + self.draft = draft + self.iv_regime = iv_regime + + +# ========================================== +# IV Regime Classifier (deterministic, no LLM) +# ========================================== +# Threshold defaults are conservative; can be tuned via env overrides without touching code. +_IV_HIGH_DEFAULT = float(os.getenv("IV_REGIME_HIGH_THRESHOLD", "0.35")) +_IV_LOW_DEFAULT = float(os.getenv("IV_REGIME_LOW_THRESHOLD", "0.18")) + + +def _infer_iv_regime( + silver_context: Dict[str, Any], + high: float = _IV_HIGH_DEFAULT, + low: float = _IV_LOW_DEFAULT, +) -> Dict[str, Any]: + """Classify the current IV regime from silver_context.values. + + Inspects the `latest_atm_iv` key written by + `Scripts/retrieval/sql_tools._handle_options_analysis`. Also surfaces + Put/Call Ratio when present because PCR drives the regime narrative. + + Returns a stable dict the LLM prompt can consume verbatim: + { + "iv_regime": "HIGH" | "LOW" | "NORMAL" | "UNKNOWN", + "atm_iv": float | None, + "pcr_volume": float | None, + "pcr_status": str | None, + "thresholds": {"high": ..., "low": ...} + } + + Note on "IV Rank": we use absolute IV thresholds here because the Silver + layer does not yet expose a historical IV distribution per symbol. The + TODO in `sql_tools.py` is to add an `iv_rank` column; once that exists + this function should switch to percentile-based ranking (see README). + """ + values = (silver_context or {}).get("values", {}) if isinstance(silver_context, dict) else {} + atm_iv = values.get("latest_atm_iv") + pcr_vol = values.get("pcr_volume") + pcr_status = values.get("pcr_status") + + if not isinstance(atm_iv, (int, float)): + regime: Literal["HIGH", "LOW", "NORMAL", "UNKNOWN"] = "UNKNOWN" + elif atm_iv >= high: + regime = "HIGH" + elif atm_iv <= low: + regime = "LOW" + else: + regime = "NORMAL" + + return { + "iv_regime": regime, + "atm_iv": atm_iv, + "pcr_volume": pcr_vol, + "pcr_status": pcr_status, + "thresholds": {"high": high, "low": low}, + } + + +# ========================================== +# Context formatters (LLM-friendly, stable layout) +# ========================================== + +def _format_silver(silver_context: Dict[str, Any]) -> str: + """Flatten the Silver Layer payload into a deterministic table. + + The layout intentionally places every quantitative value on its own + pipe-separated line so the Checker's regex-based number extraction is + robust to whitespace. + """ + if not silver_context: + return "(no silver context)" + values = silver_context.get("values") or {} + lineage = silver_context.get("lineage_anchors") or [] + if not values: + return "(silver returned no values — INSUFFICIENT DATA)" + + lines = ["| metric | value |", "|---|---|"] + for k, v in values.items(): + lines.append(f"| {k} | {v} |") + if lineage: + lines.append("") + lines.append("LINEAGE ANCHORS (use these as [Silver: ] citations):") + for lid in lineage: + lines.append(f" - {lid}") + return "\n".join(lines) + + +def _format_gold(gold_context: List[Any]) -> str: + """Serialise RetrievedChunk objects (or plain dicts, as a fallback) into + a numbered, citation-ready list. + + Each line exposes `bronze_ref` as the citation key so the LLM can emit + `[Gold: ]` verbatim. + """ + if not gold_context: + return "(no gold context)" + + lines = [] + for i, chunk in enumerate(gold_context, 1): + # RetrievedChunk is a Pydantic model; fall back to dict for robustness. + content = getattr(chunk, "content", None) or (chunk.get("content", "") if isinstance(chunk, dict) else "") + bronze = getattr(chunk, "bronze_ref", None) or (chunk.get("bronze_ref", "UNKNOWN") if isinstance(chunk, dict) else "UNKNOWN") + src = getattr(chunk, "source_type", None) or (chunk.get("source_type", "") if isinstance(chunk, dict) else "") + meta = getattr(chunk, "metadata", None) or (chunk.get("metadata", {}) if isinstance(chunk, dict) else {}) + record_date = meta.get("record_date", "unknown") if isinstance(meta, dict) else "unknown" + ticker = meta.get("ticker", "") if isinstance(meta, dict) else "" + + # Truncate long content to keep the prompt lean — 600 chars preserves + # roughly one paragraph of SEC or news text, the reranker already + # surfaced the most relevant portion. + snippet = (content or "").replace("\n", " ").strip() + if len(snippet) > 600: + snippet = snippet[:600] + "…" + + lines.append( + f"[{i}] source={src} | ticker={ticker} | record_date={record_date} | " + f"bronze_ref={bronze}\n {snippet}" + ) + return "\n".join(lines) + + +def _load_macro_context(state_value: Optional[str]) -> str: + """Prefer the macro context already in state, else fall back to the + on-disk daily snapshot. A hard-coded fallback keeps the pipeline alive + even when the data pipeline has not yet produced a macro snapshot.""" + if state_value and state_value.strip(): + return state_value + + try: + project_root = Path(__file__).resolve().parents[2] + fp = project_root / "Data" / "Agent_Context" / "latest_macro_context.md" + if fp.exists(): + return fp.read_text(encoding="utf-8") + except Exception as e: + logger.warning(f"AnalystAgent: macro context fallback failed: {e}") + + return "Market conditions are currently stable. (fallback — no snapshot available)" + + +# ========================================== +# AnalystAgent class (router-compatible) +# ========================================== + +class AnalystAgent: + """LangGraph-compatible analyst node implementation. + + Public contract: + agent = AnalystAgent() + result = await agent.generate_report(state) # AnalystResult + draft_markdown = result.draft + iv_regime_dict = result.iv_regime + + The router in Scripts/agents/router.py wraps this and writes + `result.draft` into ``state["draft_report"]`` and (on the first pass + only) ``result.iv_regime`` into ``state["iv_regime_pinned"]``. + """ + + def __init__(self): + self.model_name = os.getenv("OLLAMA_ANALYST_MODEL", "options-expert-v1:latest") + temperature = float(os.getenv("ANALYST_TEMPERATURE", "0.1")) + self.llm = ChatOllama(model=self.model_name, temperature=temperature) + # Prompt is now sourced from the single-source-of-truth prompts module. + self.prompt = get_analyst_prompt() + + async def generate_report(self, state: Dict[str, Any]) -> AnalystResult: + """Run one analyst pass and return the draft Markdown + pinned IV regime. + + Returns + ------- + AnalystResult + ``.draft`` is the Markdown (existing contract), ``.iv_regime`` + is the dict the router writes into ``state["iv_regime_pinned"]`` + so subsequent revisions reuse the same regime instead of + recomputing it from a Silver table that may have mutated under + the Checker's rescue refresh. + + Note: `revision_count` increment is owned by the router's analyst_node, + not by this method — keeps the SoC clean and lets the route functions + rely on a single source of truth for "how many drafts have been tried". + """ + user_query = state.get("original_query", "") + macro_ctx = _load_macro_context(state.get("macro_context")) + silver_ctx = state.get("silver_context", {}) or {} + gold_ctx = state.get("gold_context", []) or [] + feedback_log = state.get("critic_feedback", []) or [] + revision_n = state.get("revision_count", 0) + + # Deterministic pre-compute: IV regime. + # IV Regime Pinning (2026-04-22, docs/test/2026-04-22/ + # router_e2e_deep_analysis.md §6.5): + # The regime MUST be stable across revisions otherwise the + # strategy recommendation flips direction mid-pipeline (Test 4 + # flipped NORMAL → LOW → NORMAL over three revisions because the + # Checker's rescue refreshed `latest_atm_iv` each time). We pin + # the regime on the very first pass and reuse it verbatim — the + # router writes it back onto AgentState.iv_regime_pinned. + pinned = state.get("iv_regime_pinned") + if isinstance(pinned, dict) and pinned.get("iv_regime"): + iv_regime = pinned + logger.info( + f"AnalystAgent: reusing pinned IV regime={iv_regime['iv_regime']} " + f"| atm_iv={iv_regime.get('atm_iv')} (revision={revision_n})" + ) + else: + iv_regime = _infer_iv_regime(silver_ctx) + logger.info( + f"AnalystAgent: pinning IV regime={iv_regime['iv_regime']} " + f"| atm_iv={iv_regime['atm_iv']} (first pass; will be reused on revisions)" + ) + + iv_regime_block = ( + f"iv_regime={iv_regime['iv_regime']} | atm_iv={iv_regime['atm_iv']} " + f"| pcr_volume={iv_regime['pcr_volume']} | pcr_status={iv_regime['pcr_status']} " + f"| thresholds={iv_regime['thresholds']}" + ) + + # Revision-aware prompting — empty on the first pass. + revision_block = render_revision_block(feedback_log) + + try: + chain = self.prompt | self.llm + logger.info( + f"AnalystAgent: invoking LLM | revision={revision_n} | " + f"iv_regime={iv_regime['iv_regime']} | gold_n={len(gold_ctx)} | " + f"silver_values_n={len(silver_ctx.get('values', {}))}" + ) + response = await chain.ainvoke({ + "original_query": user_query, + "macro_context": macro_ctx, + "iv_regime_block": iv_regime_block, + "silver_block": _format_silver(silver_ctx), + "gold_block": _format_gold(gold_ctx), + "revision_block": revision_block, + }) + draft = getattr(response, "content", str(response)).strip() + if not draft: + raise RuntimeError("LLM returned empty draft") + return AnalystResult(draft=draft, iv_regime=iv_regime) + + except Exception as e: + logger.exception(f"AnalystAgent: LLM call failed: {e}") + fallback_draft = ( + "## Analyst Draft — DEGRADED MODE\n" + "INSUFFICIENT DATA — the Analyst LLM call failed. No recommendation " + "will be produced until the model is available again.\n\n" + f"Diagnostic: {type(e).__name__}" + ) + return AnalystResult(draft=fallback_draft, iv_regime=iv_regime) diff --git a/Scripts/agents/checker.py b/Scripts/agents/checker.py new file mode 100644 index 0000000..42e6ca6 --- /dev/null +++ b/Scripts/agents/checker.py @@ -0,0 +1,482 @@ +""" +Scripts/agents/checker.py + +Checker Agent (Blue Team) — deterministic + LLM fact & lineage audit of the +Analyst draft, with an opt-in Silver-tool escape hatch for missing anchors. + +Design philosophy: +- The Checker is NOT a strategist. It is a silent, uncompromising data-integrity + auditor. Its only question is: "does every number match the Silver Layer, and + does every citation point at a known anchor?" +- Three defence layers: + 1. DETERMINISTIC regex pass — extracts every number from the draft and + verifies it is present in silver_context (tolerant to percentage + scale). Citations checked against known lineage anchors / bronze_refs. + 2. TOOL-CALL ESCAPE HATCH (opt-in via CHECKER_TOOL_RECOVERY=1) — + when a citation anchor is unknown, Checker calls `SilverSQLTool. + query_parquet_by_metadata(state["metadata"])` to re-query the Silver + Layer. If the re-query surfaces the anchor / value, the finding is + downgraded to Minor and the refreshed silver_context is returned so + downstream nodes see the latest data. This realises the architect + brief: "Retriever 预取 + Checker 缺失时动态 Tool call 回查库." + 3. LLM SEMANTIC pass — catches paraphrased fabrications (best-effort, + non-fatal on LLM error). + +State I/O: + reads : state["draft_report"], state["silver_context"], state["gold_context"], + state["metadata"], state["revision_count"] + writes: { + "critic_feedback": List[AgentFeedback] (append-only; sender="Checker"), + "checker_verdict": "pass" | "fatal" | "minor", + # optional, only when tool-call rescue refreshed the context: + "silver_context": Dict[str, Any], + } +""" + +from __future__ import annotations + +import os +import re +import logging +from typing import Any, Dict, List, Optional, Set + +from pydantic import BaseModel, Field +from langchain_ollama import ChatOllama + +from Scripts.agents.state import AgentFeedback +from Scripts.agents.prompts import get_checker_prompt + +logger = logging.getLogger(__name__) + +# Tolerance for numeric match — LLMs occasionally reformat "2.35%" as "2.4%". +# 2% relative tolerance is tight enough to catch real fabrications but loose +# enough to survive reasonable rounding. Tunable via env for strict regimes. +_NUMERIC_REL_TOLERANCE = float(os.getenv("CHECKER_NUMERIC_TOLERANCE", "0.02")) + +# Hard cap on revisions — mirror the router constant. +_MAX_REVISIONS = int(os.getenv("AGENT_MAX_REVISIONS", "3")) + +# Whether Checker is allowed to re-query Silver on a citation miss. Default on +# — failing closed (i.e. flag Fatal) is still safe, but allowing rescue lets +# us recover when Retriever happened to miss a metric on the first pass. +_TOOL_RECOVERY_ENABLED = os.getenv("CHECKER_TOOL_RECOVERY", "1") == "1" + + +# ========================================== +# Structured LLM output +# ========================================== + +class CheckerViolation(BaseModel): + severity: str = Field(description="'Fatal' for any number mismatch; 'Minor' for missing citations only") + description: str = Field(description="What was hallucinated vs what the real data says") + cited_silver_value: Optional[str] = Field(default=None, description="Ground-truth value from silver_context") + draft_value: Optional[str] = Field(default=None, description="Value claimed by the draft") + + +class CheckerResult(BaseModel): + is_passed: bool = Field(description="True iff every claim is grounded AND cited") + violations: List[CheckerViolation] = Field(default_factory=list) + + +# ========================================== +# Regex pass (deterministic layer 1) +# ========================================== + +# Capture standalone numbers; skip numbers living inside [Silver: ...] / [Gold: ...] citations. +_NUMBER_RE = re.compile(r"(?Silver|Gold)\s*:\s*(?P[^\]]+)\]", re.IGNORECASE) + +# Prompt-sanctioned sentinel strings the Analyst is explicitly allowed to use +# when a claim cannot be cited (see prompts.py:DATA_LINEAGE_DIRECTIVE §3 and +# Scripts/agents/prompts.py:MACRO_CHAIN_DIRECTIVE). Treating these as "real" +# anchor lookups caused every degraded revision in the 2026-04-22 router-e2e +# run to fail the deterministic audit even though the draft was doing the +# right thing (admitting data gaps). They are therefore normalised to +# lower-case and matched as NON-CLAIMS — skipped by both the anchor check +# and, by extension, any number that sits inside such a citation. +_SENTINEL_ANCHORS: frozenset = frozenset({ + "insufficient data", + "no direct data available", + "no data", + "no data available", + "not applicable", + "n/a", + "na", + "none", + "unknown", + "tbd", + "pending", +}) + + +def _is_sentinel_anchor(anchor: str) -> bool: + """True iff the citation anchor is a whitelisted 'I have nothing to cite' sentinel. + + Normalised: case-insensitive, punctuation collapsed. This check is used + by `_deterministic_audit` to short-circuit both anchor-existence and + numeric-drift audits inside the citation — which matches the Analyst + prompt's explicit instruction to use `INSUFFICIENT DATA` when a claim + cannot be cited. + """ + if not anchor: + return False + normalised = " ".join(anchor.lower().split()) + return normalised in _SENTINEL_ANCHORS + + +def _numeric_equiv(draft_val: float, truth_val: float, rel_tol: float = _NUMERIC_REL_TOLERANCE) -> bool: + """Percent-tolerant equality. Handles 0.45 vs 45% encoding ambiguity.""" + if truth_val == 0: + return abs(draft_val - truth_val) < 1e-9 + if abs(draft_val - truth_val) / abs(truth_val) <= rel_tol: + return True + # scale bridges + if abs(draft_val - truth_val * 100) / abs(truth_val * 100 or 1) <= rel_tol: + return True + if abs(draft_val * 100 - truth_val) / abs(truth_val) <= rel_tol: + return True + return False + + +def _extract_silver_numbers(silver_context: Dict[str, Any]) -> List[float]: + """Flatten silver_context['values'] into a list of floats.""" + out: List[float] = [] + values = (silver_context or {}).get("values") or {} + for v in values.values(): + if isinstance(v, (int, float)): + out.append(float(v)) + elif isinstance(v, str): + s = v.replace(",", "").rstrip("%").strip() + try: + out.append(float(s)) + except ValueError: + continue + return out + + +def _extract_known_anchors(silver_context: Dict[str, Any], gold_context: List[Any]) -> Set[str]: + """Union of Silver lineage_anchors ∪ Gold bronze_refs for citation verification.""" + known: Set[str] = set() + for a in (silver_context or {}).get("lineage_anchors", []) or []: + known.add(str(a)) + for chunk in gold_context or []: + br = getattr(chunk, "bronze_ref", None) or (chunk.get("bronze_ref") if isinstance(chunk, dict) else None) + if br: + known.add(str(br)) + return known + + +def _deterministic_audit( + draft: str, + silver_context: Dict[str, Any], + gold_context: List[Any], +) -> List[AgentFeedback]: + """Regex-only audit. Always runs, zero LLM dependency.""" + feedbacks: List[AgentFeedback] = [] + + silver_truth_numbers = _extract_silver_numbers(silver_context) + known_silver_anchors = set(str(a) for a in (silver_context or {}).get("lineage_anchors", []) or []) + known_gold_refs: Set[str] = set() + for chunk in gold_context or []: + br = getattr(chunk, "bronze_ref", None) or (chunk.get("bronze_ref") if isinstance(chunk, dict) else None) + if br: + known_gold_refs.add(str(br)) + + # (b) Citation anchor existence first (highest severity). + # Prompt-sanctioned sentinels ("INSUFFICIENT DATA", "N/A", …) are + # *deliberately* accepted here — the Analyst prompt instructs the + # model to use them when a claim cannot be cited, so flagging them + # as Fatal creates an unrecoverable revision loop (was root cause D + # of docs/test/2026-04-22/router_e2e_deep_analysis.md). + for m in _CITATION_RE.finditer(draft): + kind = m.group("kind").capitalize() + anchor = m.group("anchor").strip() + if _is_sentinel_anchor(anchor): + continue + if kind == "Silver" and anchor not in known_silver_anchors: + feedbacks.append(AgentFeedback( + sender="Checker", + error_type="Fatal", + comment=f"Citation references unknown Silver lineage anchor '{anchor}'. " + f"Known anchors: {sorted(known_silver_anchors) or '[]'}", + missing_lineage_id=[anchor], + )) + elif kind == "Gold" and anchor not in known_gold_refs: + feedbacks.append(AgentFeedback( + sender="Checker", + error_type="Fatal", + comment=f"Citation references unknown Gold bronze_ref '{anchor}'. " + f"Known refs (first 5): {list(known_gold_refs)[:5] or '[]'}", + missing_lineage_id=[anchor], + )) + + # (a) Number audit — skip claims inside recognised citations. + draft_without_citations = _CITATION_RE.sub("", draft) + for m in _NUMBER_RE.finditer(draft_without_citations): + raw, is_pct = m.group(1), m.group(2) + try: + val = float(raw.replace(",", "")) + except ValueError: + continue + # Tiny integers (1, 2, 3) are almost always section numbers or trade + # idea counts, not claims. Any 2-digit+ number, decimal, or % qualifies. + is_claim = bool(is_pct) or "." in raw or abs(val) >= 10 + if not is_claim: + continue + if any(_numeric_equiv(val, t) for t in silver_truth_numbers): + continue + feedbacks.append(AgentFeedback( + sender="Checker", + error_type="Fatal", + comment=( + f"Draft cites numeric value '{raw}{is_pct}' that does not match any " + f"Silver value within {int(_NUMERIC_REL_TOLERANCE * 100)}% tolerance. " + f"Either cite Silver/Gold or remove the claim." + ), + )) + + return feedbacks + + +# ========================================== +# CheckerAgent class +# ========================================== + +class CheckerAgent: + """Blue-team fact-auditor. Directly wired into the router's dedicated checker_node.""" + + def __init__(self, silver_tool: Optional[Any] = None): + """Args: + silver_tool: Optional injected `SilverSQLTool`. The router shares its + singleton instance so the Checker's rescue tool-call reuses the + same DuckDB connection that already cached Parquet schemas. + When None, tool-call recovery is disabled. + """ + self.silver_tool = silver_tool + self.enable_rescue = _TOOL_RECOVERY_ENABLED and silver_tool is not None + + self.model_name = os.getenv("OLLAMA_CHECKER_MODEL", "options-expert-v1:latest") + self.llm = ChatOllama( + model=self.model_name, + temperature=0.0, + format="json", + ).with_structured_output(CheckerResult) + + self.prompt = get_checker_prompt() + + # ---------------------------------------- + # Public entry point (LangGraph contract) + # ---------------------------------------- + async def audit(self, state: Dict[str, Any]) -> Dict[str, Any]: + """Run all three defence layers and return the Checker node payload. + + Returns a dict matching `AgentState` keys so the LangGraph checkpointer + merges it cleanly: + { + "critic_feedback": List[AgentFeedback], # append-only + "checker_verdict": "pass" | "fatal" | "minor", + "silver_context": Dict[str, Any], # optional refresh + } + """ + revision_n = state.get("revision_count", 0) + if revision_n >= _MAX_REVISIONS: + logger.warning("CheckerAgent: max revisions reached — skipping audit.") + return {"critic_feedback": [], "checker_verdict": "pass"} + + draft = state.get("draft_report", "") or "" + silver_ctx = state.get("silver_context", {}) or {} + gold_ctx = state.get("gold_context", []) or [] + + # ---- Layer 1: deterministic pass ---- + feedbacks: List[AgentFeedback] = _deterministic_audit(draft, silver_ctx, gold_ctx) + logger.info(f"CheckerAgent: deterministic hits={len(feedbacks)}") + + # ---- Layer 2: tool-call escape hatch (opt-in) ---- + refreshed_silver: Optional[Dict[str, Any]] = None + if self.enable_rescue and self._should_trigger_rescue(feedbacks): + refreshed_silver, rescued_feedbacks = await self._rescue_missing_anchors( + feedbacks=feedbacks, + state=state, + ) + feedbacks = rescued_feedbacks + # If rescue succeeded, also refresh the silver-truth numbers + # for the LLM pass below so it sees the latest data. + if refreshed_silver: + silver_ctx = refreshed_silver + + # ---- Layer 3: LLM semantic audit (best-effort) ---- + try: + # Reuse Analyst formatters to keep the Silver/Gold rendering + # identical across prompts (no silent schema drift between agents). + from Scripts.agents.analyst import _format_silver, _format_gold + silver_block = _format_silver(silver_ctx) + gold_block = _format_gold(gold_ctx) + + chain = self.prompt | self.llm + logger.info(f"CheckerAgent: invoking LLM audit | deterministic_hits={len(feedbacks)}") + result: CheckerResult = await chain.ainvoke({ + "silver_block": silver_block, + "gold_block": gold_block, + "draft": draft, + }) + if not result.is_passed: + for v in result.violations: + sev = v.severity if v.severity in ("Fatal", "Minor") else "Fatal" + feedbacks.append(AgentFeedback( + sender="Checker", + error_type=sev, + comment=v.description + ( + f" (draft: {v.draft_value} vs silver: {v.cited_silver_value})" + if v.draft_value or v.cited_silver_value else "" + ), + revision_index=revision_n, + )) + except Exception as e: + logger.warning( + f"CheckerAgent: LLM audit failed ({type(e).__name__}); " + f"falling back to deterministic only. Error: {e}" + ) + + # Stamp revision index on every feedback entry for audit replayability. + for fb in feedbacks: + if fb.revision_index is None: + fb.revision_index = revision_n + + verdict = self._compute_verdict(feedbacks) + logger.info(f"CheckerAgent: verdict={verdict} | total_findings={len(feedbacks)}") + + payload: Dict[str, Any] = { + "critic_feedback": feedbacks, + "checker_verdict": verdict, + } + if refreshed_silver is not None: + payload["silver_context"] = refreshed_silver + return payload + + # ---------------------------------------- + # Rescue helpers + # ---------------------------------------- + + @staticmethod + def _should_trigger_rescue(feedbacks: List[AgentFeedback]) -> bool: + """Rescue only when we have missing-anchor Fatal findings (not pure numeric drift).""" + return any( + fb.error_type.lower() == "fatal" and fb.missing_lineage_id + for fb in feedbacks + ) + + async def _rescue_missing_anchors( + self, + feedbacks: List[AgentFeedback], + state: Dict[str, Any], + ) -> tuple[Optional[Dict[str, Any]], List[AgentFeedback]]: + """Re-query Silver via the precomputed metadata and downgrade feedback on hit. + + Rationale: the architect brief wants Checker to dynamically tool-call + the Silver Layer when Retriever missed an anchor — not to let the LLM + re-plan the query (which would re-open the hallucination surface). + We therefore reuse `state["metadata"]` (already LLM-extracted by + QueryTransformer) and call SilverSQLTool directly. + """ + metadata = state.get("metadata") + if metadata is None: + logger.info("CheckerAgent: rescue skipped — no metadata on state.") + return None, feedbacks + + # Rebuild the same per-source `TimePredicate` set MasterRetriever + # already published to `state["time_range"]["source_predicates"]`. + # Without this, the rescue call would land on the legacy branch of + # `_handle_put_call_ratio` / `_handle_options_analysis` and silently + # compute a *different* window than the initial retrieval (the 3d→2d + # drift documented in docs/test/2026-04-22/router_e2e_deep_analysis.md + # lines 120–133), making `latest_atm_iv` oscillate across revisions + # and the Checker unable to converge against its own refreshed truth. + live_predicates = None + tr = state.get("time_range") or {} + serialised_preds = tr.get("source_predicates") + if isinstance(serialised_preds, dict) and serialised_preds: + try: + # Imported lazily to avoid a cross-module import cycle at + # module load time; checker.py must not pull in the full + # retrieval package when a consumer only needs auditing. + from Scripts.retrieval.time_adapter import predicates_from_serialised + live_predicates = predicates_from_serialised(serialised_preds) + if live_predicates: + logger.info( + "CheckerAgent: rescue will reuse pinned TimePredicate set " + f"({len(live_predicates)} sources) from state.time_range." + ) + except Exception as e: + logger.warning( + f"CheckerAgent: could not rehydrate time predicates ({type(e).__name__}: {e}); " + "rescue will fall back to handler-local window math." + ) + + try: + logger.info("CheckerAgent: triggering Silver rescue query (missing anchor).") + # Pass the pinned predicate set so the Silver handlers hit exactly + # the same (start_date, end_date) window as the initial retrieval. + refreshed = await self.silver_tool.query_parquet_by_metadata( + metadata, time_predicates=live_predicates, + ) + except Exception as e: + logger.warning(f"CheckerAgent: rescue query failed ({type(e).__name__}): {e}") + return None, feedbacks + + refreshed_values = (refreshed or {}).get("values") or {} + refreshed_anchors = set(str(a) for a in (refreshed or {}).get("lineage_anchors", []) or []) + + # Merge with the in-state silver so we don't lose values from the first pass. + old_silver = state.get("silver_context", {}) or {} + old_values = old_silver.get("values", {}) or {} + old_anchors = set(str(a) for a in old_silver.get("lineage_anchors", []) or []) + + merged_values = {**old_values, **refreshed_values} + merged_anchors = sorted(old_anchors | refreshed_anchors) + merged_silver = { + "values": merged_values, + "lineage_anchors": merged_anchors, + # preserve any other side-info like engine_error + **{k: v for k, v in (refreshed or {}).items() if k not in ("values", "lineage_anchors")}, + } + + # Downgrade Fatal missing-anchor findings whose anchor is now known. + updated: List[AgentFeedback] = [] + for fb in feedbacks: + if ( + fb.error_type.lower() == "fatal" + and fb.missing_lineage_id + and any(mid in merged_anchors for mid in fb.missing_lineage_id) + ): + updated.append(AgentFeedback( + sender="Checker", + error_type="Minor", + comment=( + f"(Rescued) Citation anchor {fb.missing_lineage_id} was missing " + "from the initial retrieval pass but is now present after a " + "Silver re-query. Analyst should keep the citation — no rewrite needed." + ), + missing_lineage_id=fb.missing_lineage_id, + revision_index=fb.revision_index, + )) + else: + updated.append(fb) + + logger.info( + f"CheckerAgent: rescue merged {len(refreshed_anchors)} new anchors " + f"({len(refreshed_values)} new values); downgraded Fatal → Minor where applicable." + ) + return merged_silver, updated + + # ---------------------------------------- + # Verdict computation + # ---------------------------------------- + + @staticmethod + def _compute_verdict(feedbacks: List[AgentFeedback]) -> str: + """Short-circuit verdict used by the router's conditional edge.""" + if not feedbacks: + return "pass" + if any(fb.error_type.lower() == "fatal" for fb in feedbacks): + return "fatal" + return "minor" diff --git a/Scripts/agents/critic.py b/Scripts/agents/critic.py new file mode 100644 index 0000000..74915e0 --- /dev/null +++ b/Scripts/agents/critic.py @@ -0,0 +1,269 @@ +""" +Scripts/agents/critic.py + +Critic Agent (Red Team) — adversarial logic / regime / insider-signal review. + +In the new topology, the router calls `checker_node` BEFORE `critic_node`, so +this agent no longer needs to invoke the Checker internally. Critic's job is +now narrowly scoped: challenge the STRATEGY LOGIC of an already fact-checked +draft. + +Review axes (in strict priority order): + 1. IV Regime Fit — long premium in HIGH IV / short in LOW IV = Fatal. + 2. Macro Contradiction — directional bias contradicting [MACRO ENVIRONMENT]. + 3. Insider Weakness — single-exec signal being treated as conviction. + 4. Risk/Reward Balance — expensive protection where a spread would suffice. + +Deterministic backstops (no-LLM): + - If draft recommends bullish calls but the Insider Confidence Index is + BEARISH_SIGNAL (3+ execs selling) → Fatal (always raised). + - If draft recommends bearish puts but the Insider Confidence Index is + BULLISH_SIGNAL → Fatal (always raised). + +State I/O: + reads : state["draft_report"], state["silver_context"], state["gold_context"], + state["macro_context"], state["original_query"], state["revision_count"] + writes: { + "critic_feedback": List[AgentFeedback] (append-only; sender="Critic"), + "critic_verdict": "pass" | "fatal" | "minor", + } +""" + +from __future__ import annotations + +import os +import logging +from typing import Any, Dict, List, Literal + +from pydantic import BaseModel, Field +from langchain_ollama import ChatOllama + +from Scripts.agents.state import AgentFeedback +from Scripts.agents.analyst import _infer_iv_regime, _format_silver, _format_gold +from Scripts.agents.prompts import get_critic_prompt + +logger = logging.getLogger(__name__) + +_MAX_REVISIONS = int(os.getenv("AGENT_MAX_REVISIONS", "3")) +_INSIDER_SIGNAL_MIN_COUNT = int(os.getenv("INSIDER_SIGNAL_MIN_COUNT", "3")) + + +# ========================================== +# Structured LLM output +# ========================================== + +class LogicIssue(BaseModel): + severity: Literal["Fatal", "Minor"] = Field( + description="Fatal = strategy contradicts regime/macro; Minor = could be tighter" + ) + category: Literal[ + "iv_regime_fit", + "macro_contradiction", + "insider_signal_weakness", + "risk_reward_imbalance", + "other", + ] = Field(description="Which logic axis fails") + comment: str = Field(description="Concrete pushback with a suggested correction") + + +class CriticResult(BaseModel): + is_passed: bool = Field(description="True iff every logic axis is acceptable") + issues: List[LogicIssue] = Field(default_factory=list) + + +# ========================================== +# Insider Confidence Index (deterministic, no LLM) +# ========================================== + +def _compute_insider_confidence(gold_context: List[Any]) -> Dict[str, Any]: + """Aggregate SEC-sourced Form-4 activity into a directional verdict. + + Single-exec transactions (tax, vesting) are noise. Signal requires + _INSIDER_SIGNAL_MIN_COUNT aligned executives. + """ + bullish = 0 + bearish = 0 + tone_scores: List[float] = [] + + for chunk in gold_context or []: + meta = getattr(chunk, "metadata", None) or (chunk.get("metadata", {}) if isinstance(chunk, dict) else {}) + src = getattr(chunk, "source_type", None) or (chunk.get("source_type", "") if isinstance(chunk, dict) else "") + if str(src).lower() != "sec": + continue + + action = str(meta.get("action_direction", "")).upper() if isinstance(meta, dict) else "" + if action == "BUY": + bullish += 1 + elif action == "SELL": + bearish += 1 + + tone = meta.get("tone_score") if isinstance(meta, dict) else None + if isinstance(tone, (int, float)): + tone_scores.append(float(tone)) + + avg_tone = sum(tone_scores) / len(tone_scores) if tone_scores else None + + if bullish >= _INSIDER_SIGNAL_MIN_COUNT and bullish > bearish: + verdict = "BULLISH_SIGNAL" + elif bearish >= _INSIDER_SIGNAL_MIN_COUNT and bearish > bullish: + verdict = "BEARISH_SIGNAL" + else: + verdict = "NOISE" + + return { + "bullish_exec_count": bullish, + "bearish_exec_count": bearish, + "avg_tone_score": avg_tone, + "verdict": verdict, + "threshold": _INSIDER_SIGNAL_MIN_COUNT, + } + + +# ========================================== +# CriticAgent class +# ========================================== + +class CriticAgent: + """Red-team logic critic. Scoped strictly to strategy — facts are the Checker's job.""" + + def __init__(self): + self.model_name = os.getenv("OLLAMA_CRITIC_MODEL", "options-expert-v1:latest") + temperature = float(os.getenv("CRITIC_TEMPERATURE", "0.0")) + self.logic_llm = ChatOllama( + model=self.model_name, + temperature=temperature, + format="json", + ).with_structured_output(CriticResult) + + self.prompt = get_critic_prompt() + + async def audit(self, state: Dict[str, Any]) -> Dict[str, Any]: + """Return the Critic node payload for LangGraph. + + Shape: + { + "critic_feedback": List[AgentFeedback], + "critic_verdict": "pass" | "fatal" | "minor", + } + """ + revision_n = state.get("revision_count", 0) + if revision_n >= _MAX_REVISIONS: + logger.warning("CriticAgent: max revisions reached — skipping audit.") + return {"critic_feedback": [], "critic_verdict": "pass"} + + draft = state.get("draft_report", "") or "" + silver_ctx = state.get("silver_context", {}) or {} + gold_ctx = state.get("gold_context", []) or [] + macro_ctx = state.get("macro_context", "") or "" + user_query = state.get("original_query", "") or "" + + # Deterministic pre-computes give the LLM an unambiguous ground truth. + iv_regime_info = _infer_iv_regime(silver_ctx) + insider_info = _compute_insider_confidence(gold_ctx) + + feedbacks: List[AgentFeedback] = [] + + # -------- Deterministic backstop 1: insider/structure contradiction -------- + lowered_draft = draft.lower() + if insider_info["verdict"] == "BEARISH_SIGNAL" and any( + kw in lowered_draft for kw in ("long call", "buy call", "bull call") + ): + feedbacks.append(AgentFeedback( + sender="Critic", + error_type="Fatal", + comment=( + f"[insider_signal_weakness] Recommended bullish call structure contradicts a " + f"BEARISH insider signal ({insider_info['bearish_exec_count']} execs selling, " + f"threshold={insider_info['threshold']}). " + "Either justify why the signal does not apply, or restructure." + ), + revision_index=revision_n, + )) + elif insider_info["verdict"] == "BULLISH_SIGNAL" and any( + kw in lowered_draft for kw in ("long put", "buy put", "bear put") + ): + feedbacks.append(AgentFeedback( + sender="Critic", + error_type="Fatal", + comment=( + f"[insider_signal_weakness] Recommended bearish put structure contradicts a " + f"BULLISH insider signal ({insider_info['bullish_exec_count']} execs buying, " + f"threshold={insider_info['threshold']})." + ), + revision_index=revision_n, + )) + + # -------- Deterministic backstop 2: IV regime contradiction -------- + # If regime is HIGH and the draft is clearly long premium, or regime + # is LOW and the draft is clearly short premium, raise a hard rule. + regime = iv_regime_info.get("iv_regime") + if regime == "HIGH" and any( + kw in lowered_draft for kw in ("long straddle", "long strangle", "buy protective", "buy insurance") + ): + feedbacks.append(AgentFeedback( + sender="Critic", + error_type="Fatal", + comment=( + f"[iv_regime_fit] HIGH IV regime (atm_iv={iv_regime_info['atm_iv']}) — long premium " + "structure is fighting the regime. Prefer credit spreads / iron condors." + ), + revision_index=revision_n, + )) + elif regime == "LOW" and any( + kw in lowered_draft for kw in ("iron condor", "credit spread", "sell premium", "short strangle") + ): + feedbacks.append(AgentFeedback( + sender="Critic", + error_type="Fatal", + comment=( + f"[iv_regime_fit] LOW IV regime (atm_iv={iv_regime_info['atm_iv']}) — selling premium " + "is under-paid for the risk. Prefer long optionality / debit spreads." + ), + revision_index=revision_n, + )) + + # -------- LLM logic critique (best-effort) -------- + try: + chain = self.prompt | self.logic_llm + logger.info( + f"CriticAgent: invoking logic LLM | iv_regime={iv_regime_info['iv_regime']} " + f"| insider_verdict={insider_info['verdict']}" + ) + result: CriticResult = await chain.ainvoke({ + "original_query": user_query, + "macro_context": macro_ctx, + "iv_regime": iv_regime_info, + "insider_confidence": insider_info, + "silver_block": _format_silver(silver_ctx), + "gold_block": _format_gold(gold_ctx), + "draft": draft, + }) + if not result.is_passed: + for issue in result.issues: + feedbacks.append(AgentFeedback( + sender="Critic", + error_type=issue.severity, + comment=f"[{issue.category}] {issue.comment}", + revision_index=revision_n, + )) + except Exception as e: + logger.warning( + f"CriticAgent: logic LLM failed ({type(e).__name__}); " + f"deterministic findings retained. Error: {e}" + ) + + verdict = self._compute_verdict(feedbacks) + logger.info(f"CriticAgent: verdict={verdict} | total_findings={len(feedbacks)}") + + return { + "critic_feedback": feedbacks, + "critic_verdict": verdict, + } + + @staticmethod + def _compute_verdict(feedbacks: List[AgentFeedback]) -> str: + if not feedbacks: + return "pass" + if any(fb.error_type.lower() == "fatal" for fb in feedbacks): + return "fatal" + return "minor" diff --git a/Scripts/agents/finalizer.py b/Scripts/agents/finalizer.py new file mode 100644 index 0000000..9d67dbc --- /dev/null +++ b/Scripts/agents/finalizer.py @@ -0,0 +1,424 @@ +""" +Scripts/agents/finalizer.py + +Finalizer Agent — converts the fact-checked + logic-approved Markdown draft +into the deterministic Pydantic `FinalReport` that the UI / downstream tools +consume. Preserves the original schema contract (FinalReport, TradeIdea, +SourceCitation) so any existing Streamlit/JSON consumer keeps working. + +Design pillars: +1. **Structured output, not prose** — uses ChatOllama.with_structured_output(FinalReport) + so the LLM cannot return a free-form string. If the structured parse fails, + we fall back to a safe skeleton report instead of throwing. +2. **Traceability (Audit Trail)** — populates every TradeIdea.supporting_evidence + with real lineage IDs from state["silver_context"]["lineage_anchors"] and + state["gold_context"][*].bronze_ref. This satisfies the financial-compliance + requirement called out in the original docstring. +3. **Confidence score reflects data, not vibes** — if Gold or Silver layers + returned nothing / errored, the confidence score is capped. If the + revision counter hit the hard limit, we annotate the report as "degraded". +4. **LangGraph-friendly** — `FinalizerAgent.format_and_clean(state)` returns + the dict that the router writes into `state["final_strategy"]`. +""" + +from __future__ import annotations + +import os +import logging +from datetime import datetime +from typing import Any, Dict, List, Literal, Optional + +from pydantic import BaseModel, Field +from langchain_ollama import ChatOllama + +from Scripts.agents.prompts import get_finalizer_prompt + +logger = logging.getLogger(__name__) + +# Hard revision cap — must match checker.py / critic.py / router.py. +_MAX_REVISIONS = int(os.getenv("AGENT_MAX_REVISIONS", "3")) + + +# ========================================== +# Pydantic contracts (PRESERVED — downstream UI depends on these) +# ========================================== + +class SourceCitation(BaseModel): + """RAG Traceability: Forces the LLM to cite its sources to reduce hallucination.""" + source_type: Literal["Macro Data", "SEC Filing", "Global News", "GPR Index", "Options Market Data"] = Field( + description="The category of the data source used." + ) + detail: str = Field( + description="Brief description of the source (e.g., 'SEC Form 4 for GOOG filed on 2026-04-03')" + ) + + +class TradeIdea(BaseModel): + """Structured representation of a single actionable options trade.""" + + ticker: str = Field(description="The underlying asset ticker, e.g., SPY, AAPL, GLD, SLV") + + asset_class: Literal["Equity", "Index ETF", "Commodity ETF", "Currency"] = Field( + description="Broad classification of the underlying asset." + ) + + market_outlook: Literal["Bullish", "Bearish", "Neutral", "Highly Volatile"] = Field( + description="The directional bias for this underlying asset." + ) + + option_strategy: Literal[ + "Long Call", "Long Put", "Straddle/Strangle", + "Call Spread", "Put Spread", "Iron Condor" + ] = Field( + description="The specific options strategy recommended." + ) + + strike_details: str = Field( + description="Recommended strike price(s). Use string to accommodate spreads (e.g., 'Buy 150C / Sell 155C' or '150')." + ) + + expiration_date: str = Field( + description="Recommended expiration date, formatted as YYYY-MM-DD or specific timeframe (e.g., '30-45 DTE')." + ) + + rationale: str = Field( + description="Detailed, logical explanation combining macro trends, news, or insider activity." + ) + + catalysts: List[str] = Field( + description="Upcoming events driving this trade (e.g., 'CPI release next week', 'Earnings call')." + ) + + risk_profile: Literal["Low", "Medium", "High", "Speculative"] = Field( + description="Assessed risk level of this specific trade structure." + ) + + supporting_evidence: List[SourceCitation] = Field( + default_factory=list, + description="Crucial citations from the RAG context that justify this trade idea." + ) + + +class FinalReport(BaseModel): + """The overarching schema for the LLM's final response.""" + + report_date: str = Field( + default_factory=lambda: datetime.now().strftime("%Y-%m-%d"), + description="Date of the report generation." + ) + + macro_summary: str = Field( + description="High-level synthesis of current macro environment (VIX, GPR, Broad Markets)." + ) + + trade_ideas: List[TradeIdea] = Field( + description="List of top actionable options trades based on the retrieved context." + ) + + key_risks_and_hedges: List[str] = Field( + description="Systemic risks that could invalidate these trade ideas and suggested hedges." + ) + + confidence_score: float = Field( + ge=0.0, le=1.0, + description="Overall confidence in the report's conclusions based on data alignment." + ) + + def to_markdown(self) -> str: + """Converts the structured Pydantic object into a clean, readable Markdown report for UI display.""" + md_lines = [ + f"# 📊 Institutional Options Strategy Report", + f"**Generated on:** {self.report_date}", + f"**Overall Confidence Score:** {self.confidence_score * 100:.1f}%", + f"\n## 🌍 Macro Context Summary", + f"{self.macro_summary}", + f"\n## 💡 Top Trade Ideas" + ] + + for idx, trade in enumerate(self.trade_ideas, 1): + md_lines.extend([ + f"\n### Idea {idx}: {trade.option_strategy} on {trade.ticker} ({trade.market_outlook})", + f"- **Asset Class:** {trade.asset_class}", + f"- **Target Strike(s):** {trade.strike_details}", + f"- **Expiration:** {trade.expiration_date}", + f"- **Risk Profile:** {trade.risk_profile}", + f"- **Catalysts:** {', '.join(trade.catalysts)}", + f"\n**Investment Rationale:**", + f"{trade.rationale}", + ]) + + if trade.supporting_evidence: + md_lines.append("\n**Supporting Evidence (RAG Context):**") + for evidence in trade.supporting_evidence: + md_lines.append(f" - *{evidence.source_type}:* {evidence.detail}") + + md_lines.append("\n---") # Separator between trades + + md_lines.append(f"\n## ⚠️ Systemic Risks & Hedging Considerations") + for risk in self.key_risks_and_hedges: + md_lines.append(f"- {risk}") + + return "\n".join(md_lines) + + +# ========================================== +# Helpers +# ========================================== + +def _collect_evidence_pool(state: Dict[str, Any]) -> List[SourceCitation]: + """Build a deterministic evidence pool from the retrieval state. + + The LLM is asked to draw TradeIdea citations from this pool. If the LLM + misses any, the pool is also used as a final fallback so the compliance + audit trail is never empty when data exists. + """ + pool: List[SourceCitation] = [] + + silver_ctx = state.get("silver_context", {}) or {} + for anchor in silver_ctx.get("lineage_anchors", []) or []: + anchor_s = str(anchor) + # Route Silver anchors by prefix into the closest UI category. The + # anchor prefix convention comes from sql_tools.py lineage writes + # (e.g. "PCR_AGG_SPY_2026-04-19", "MACRO_VIX_...", "GPR_202604"). + if anchor_s.startswith("GPR_"): + st: Literal["Macro Data", "SEC Filing", "Global News", "GPR Index", "Options Market Data"] = "GPR Index" + elif anchor_s.startswith("MACRO_"): + st = "Macro Data" + else: + st = "Options Market Data" + pool.append(SourceCitation(source_type=st, detail=f"Silver lineage anchor: {anchor_s}")) + + for chunk in state.get("gold_context", []) or []: + src = getattr(chunk, "source_type", None) or (chunk.get("source_type", "") if isinstance(chunk, dict) else "") + meta = getattr(chunk, "metadata", None) or (chunk.get("metadata", {}) if isinstance(chunk, dict) else {}) + br = getattr(chunk, "bronze_ref", None) or (chunk.get("bronze_ref", "UNKNOWN") if isinstance(chunk, dict) else "UNKNOWN") + record_date = meta.get("record_date", "unknown") if isinstance(meta, dict) else "unknown" + + src_l = str(src).lower() + if src_l == "sec": + ui_src: Literal["Macro Data", "SEC Filing", "Global News", "GPR Index", "Options Market Data"] = "SEC Filing" + elif src_l == "gpr": + ui_src = "GPR Index" + else: + ui_src = "Global News" + + pool.append(SourceCitation( + source_type=ui_src, + detail=f"{ui_src} @ {record_date} | ref={br}", + )) + + return pool + + +def _enforce_deterministic_report_date( + report: "FinalReport", + state: Dict[str, Any], +) -> None: + """Overwrite `report.report_date` with the pipeline-known anchor date. + + The LLM was previously hallucinating this field as a literal string + ("current date"), as the first gold-chunk's record_date, or as + "INSUFFICIENT DATA" — none of which are useful to a compliance reader. + The pipeline's authoritative anchor lives at + ``state["time_range"]["anchor_date"]`` (set by MasterRetriever from + ``config/runtime/collect_data_state.json:options_daily``). When that + is present we simply clobber the LLM's guess. When absent (e.g. the + retriever hard-failed) we leave the LLM value alone so a downstream + auditor can still see something plausible. + """ + tr = state.get("time_range") or {} + anchor = tr.get("anchor_date") + if isinstance(anchor, str) and len(anchor) == 10 and anchor[4] == "-" and anchor[7] == "-": + # basic ISO-8601 shape check — avoids writing a bogus anchor + report.report_date = anchor + + +def _reconcile_citation_source_types( + report: "FinalReport", + evidence_pool: List["SourceCitation"], +) -> None: + """Clobber LLM-invented `source_type` values against the deterministic pool. + + Scenario (§5.2 of the 2026-04-22 deep analysis): the evidence pool is + built correctly from Gold chunks (source_type=sec → "SEC Filing"), but + the LLM re-wrote them all to "Global News" when producing + `trade_ideas[].supporting_evidence`. The pool already contains the + correct mapping; we match by `detail` substring and force the canonical + `source_type` when the LLM matches a real pool item. + """ + if not evidence_pool or not report.trade_ideas: + return + + # Index the pool on two keys: exact detail and a lowercased prefix so + # minor whitespace/punctuation drift from the LLM still matches. + pool_exact: Dict[str, SourceCitation] = {p.detail: p for p in evidence_pool} + pool_prefix: List[tuple] = [ + (p.detail.lower()[:60], p) for p in evidence_pool if p.detail + ] + + for idea in report.trade_ideas: + for citation in idea.supporting_evidence: + if not citation.detail: + continue + exact = pool_exact.get(citation.detail) + if exact is not None: + if exact.source_type != citation.source_type: + citation.source_type = exact.source_type + continue + # Fuzzy prefix match — handles LLM line breaks / truncations. + key = citation.detail.lower()[:60] + for pkey, p in pool_prefix: + if key == pkey: + if p.source_type != citation.source_type: + citation.source_type = p.source_type + break + + +def _degraded_report( + reason: str, + draft: str, + evidence_pool: List[SourceCitation], + cap_confidence: float = 0.20, +) -> FinalReport: + """Safe fallback when the Finalizer LLM fails or the pipeline is degraded. + + We never throw from this node — that would strand the entire graph. + Instead we return a FinalReport that explicitly declares degradation, + carries whatever evidence we have, and sets a low confidence score. + """ + return FinalReport( + macro_summary=( + "DEGRADED MODE — finalizer could not produce a structured report. " + f"Reason: {reason}. Raw analyst draft preserved below (first 400 chars):\n\n" + f"{(draft or '')[:400]}" + ), + trade_ideas=[], + key_risks_and_hedges=[ + "Automated pipeline degradation — do not act on partial outputs.", + "Re-run the pipeline once upstream data + LLM availability is restored.", + ], + confidence_score=cap_confidence, + ) + + +# ========================================== +# FinalizerAgent class +# ========================================== + +class FinalizerAgent: + """LangGraph-compatible finalizer. Produces the terminal `final_strategy` dict.""" + + def __init__(self): + self.model_name = os.getenv("OLLAMA_FINALIZER_MODEL", "options-expert-v1:latest") + temperature = float(os.getenv("FINALIZER_TEMPERATURE", "0.0")) + self.llm = ChatOllama( + model=self.model_name, + temperature=temperature, + format="json", + ).with_structured_output(FinalReport) + + # Prompt comes from the single source of truth; variables expected by the + # template are: original_query, draft, evidence_block. + self.prompt = get_finalizer_prompt() + + async def format_and_clean(self, state: Dict[str, Any]) -> Dict[str, Any]: + """Convert the Analyst draft into a FinalReport dict. + + Returns a dict (not the Pydantic model) so it survives serialisation + at the LangGraph state boundary. Shape:: + + { + "status": "complete" | "degraded", + "final_report": , + "markdown": , + "evidence_links": [ ... SourceCitation.model_dump ... ], + "confidence_score": float, + } + """ + draft = state.get("draft_report", "") or "" + user_query = state.get("original_query", "") or "" + revision_n = state.get("revision_count", 0) + is_fallback = bool(state.get("is_fallback", False)) + evidence_pool = _collect_evidence_pool(state) + + # Render evidence pool as a readable, LLM-consumable block. + evidence_block = "\n".join( + f"- [{e.source_type}] {e.detail}" for e in evidence_pool + ) or "(no evidence available — INSUFFICIENT DATA)" + + degraded = False + degraded_reason: Optional[str] = None + + # If the pipeline already timed out at the revision cap OR the retrieval + # layer degraded, we surface it rather than pretending everything is fine. + if revision_n >= _MAX_REVISIONS: + degraded = True + degraded_reason = f"revision_cap_hit (n={revision_n})" + elif is_fallback: + degraded = True + degraded_reason = "retrieval_fallback_active" + + report: FinalReport + try: + chain = self.prompt | self.llm + logger.info( + f"FinalizerAgent: invoking LLM | revision={revision_n} | " + f"evidence_n={len(evidence_pool)} | degraded={degraded}" + ) + report = await chain.ainvoke({ + "original_query": user_query, + "draft": draft, + "evidence_block": evidence_block, + }) + + # Post-hoc traceability guarantee: if the LLM produced trade ideas + # but attached zero citations, backfill from the evidence pool + # (conservative cap of 3 citations per idea). + if report.trade_ideas and evidence_pool: + for idea in report.trade_ideas: + if not idea.supporting_evidence: + idea.supporting_evidence = evidence_pool[:3] + + # Deterministic overrides — eliminate LLM drift on fields the + # pipeline already knows exactly (docs/test/2026-04-22/ + # router_e2e_deep_analysis.md §5.1, §5.2). + _enforce_deterministic_report_date(report, state) + _reconcile_citation_source_types(report, evidence_pool) + + # Enforce confidence ceilings by regime. + if degraded: + report.confidence_score = min(report.confidence_score, 0.30) + elif revision_n > 0: + report.confidence_score = min(report.confidence_score, 0.60) + + except Exception as e: + logger.exception(f"FinalizerAgent: LLM call failed: {e}") + degraded = True + degraded_reason = f"finalizer_llm_failure:{type(e).__name__}" + report = _degraded_report( + reason=degraded_reason, + draft=draft, + evidence_pool=evidence_pool, + ) + # Keep the report_date deterministic even on the degraded path. + _enforce_deterministic_report_date(report, state) + + return { + "status": "degraded" if degraded else "complete", + "degraded_reason": degraded_reason, + "final_report": report.model_dump(), + "markdown": report.to_markdown(), + "evidence_links": [e.model_dump() for e in evidence_pool], + "confidence_score": report.confidence_score, + } + + +# ========================================== +# LangGraph node wrapper — drop-in for router.py +# ========================================== + +async def finalizer_node(state: Dict[str, Any]) -> Dict[str, Any]: + """LangGraph node: writes the structured final_strategy into state.""" + agent = FinalizerAgent() + final_strategy = await agent.format_and_clean(state) + return {"final_strategy": final_strategy} From 8685ef710242f59095d6082dd71b41a8abba3f79 Mon Sep 17 00:00:00 2001 From: "Xinxin(Maxine)" Date: Thu, 23 Apr 2026 08:31:05 -0400 Subject: [PATCH 35/50] update observability Scripts this folder is aim for the further logs audit and governance --- Scripts/observability/__init__.py | 20 +++ Scripts/observability/audit.py | 264 ++++++++++++++++++++++++++++++ 2 files changed, 284 insertions(+) create mode 100644 Scripts/observability/__init__.py create mode 100644 Scripts/observability/audit.py diff --git a/Scripts/observability/__init__.py b/Scripts/observability/__init__.py new file mode 100644 index 0000000..f09b423 --- /dev/null +++ b/Scripts/observability/__init__.py @@ -0,0 +1,20 @@ +"""Observability primitives — structured logging + unified audit paths. + +Kept dependency-free so that every script / agent can import it at boot +without paying the cost of heavy libraries. +""" +from Scripts.observability.audit import ( + audit_path, + configure_root_logger, + current_run_id, + get_audit_logger, + start_run, +) + +__all__ = [ + "audit_path", + "configure_root_logger", + "current_run_id", + "get_audit_logger", + "start_run", +] diff --git a/Scripts/observability/audit.py b/Scripts/observability/audit.py new file mode 100644 index 0000000..1570e7a --- /dev/null +++ b/Scripts/observability/audit.py @@ -0,0 +1,264 @@ +""" +Unified logging + audit-path helpers. + +Motivation +---------- +Before this module the project wrote logs into a zoo of top-level +folders (``logs/retrieval/``, ``logs/query_transform/``, ``logs/router_e2e/``, +``logs/Parquet_Query/``, ``logs/scheduler/``, …). Investigating a single +production incident meant stitching together four timestamp-matched +files by hand. + +This module converges everything on two well-known layouts: + +1. **Run-scoped logs** (for *one* orchestrator invocation / CLI session) + + :: + + logs/runs/{YYYY-MM-DD}/{run_id}/ + orchestrator.log # root logger, human-readable + retrieval.jsonl # per-module audit trail + query_transform.jsonl + router_e2e.jsonl + sql_range.jsonl + + Every orchestrator invocation gets its own ``run_id`` folder, making + "what happened between 15:09 and 15:12 on 2026-04-22?" trivial to + answer with ``ls -R``. + +2. **Daemon / long-lived logs** (for the scheduler that does not have a + single-shot boundary) + + :: + + logs/scheduler/collect_data.log # existing, back-compat + logs/daemon/{YYYY-MM-DD}.log # rolled daily + +Migration path +-------------- +* ``audit_path(module, anchor)`` returns the new unified path; existing + modules can switch one call-site at a time. +* ``get_audit_logger(name, module)`` wraps ``logging.getLogger`` and + attaches a ``FileHandler`` pointed at the unified path. Call it once + per module and reuse the returned logger. +* Legacy paths still work — nothing under ``logs/`` is deleted. + +Design constraints +------------------ +* **Stdlib only** — imported during CLI / daemon bootstrap before any + heavy dependencies. +* **Windows-safe** — file handles are opened with ``encoding="utf-8"`` + and ``delay=True`` so that transient permission issues do not crash + the scheduler mid-tick. +* **Idempotent** — calling ``configure_root_logger()`` twice replaces + handlers instead of stacking them (important for Jupyter / pytest). +""" +from __future__ import annotations + +import contextvars +import logging +import os +import sys +import uuid +from datetime import date, datetime +from pathlib import Path +from typing import Optional + + +# --------------------------------------------------------------------------- +# Path layout +# --------------------------------------------------------------------------- + + +def _project_root() -> Path: + # Scripts/observability/audit.py -> parents[2] + return Path(__file__).resolve().parents[2] + + +def _logs_root() -> Path: + return _project_root() / "logs" + + +# --------------------------------------------------------------------------- +# run_id — one per orchestrator / CLI invocation +# --------------------------------------------------------------------------- + + +_RUN_ID: contextvars.ContextVar[Optional[str]] = contextvars.ContextVar( + "audit_run_id", default=None +) + + +def start_run(tag: str = "session") -> str: + """Mint and register a ``run_id`` for this process. + + Returns + ------- + str + ``"{YYYYMMDD}_{HHMMSS}_{tag}_{short-uuid}"``. Short enough to be + a filesystem-safe folder name, long enough to be unique under + millisecond-scale re-runs. + """ + rid = f"{datetime.now():%Y%m%d_%H%M%S}_{tag}_{uuid.uuid4().hex[:6]}" + _RUN_ID.set(rid) + return rid + + +def current_run_id() -> str: + """Return the active ``run_id``. Starts a fresh one if nothing has + been registered yet — this keeps ad-hoc scripts (notebooks, tests) + from needing to remember to call ``start_run`` first. + """ + rid = _RUN_ID.get() + if rid: + return rid + return start_run(tag="adhoc") + + +# --------------------------------------------------------------------------- +# Paths +# --------------------------------------------------------------------------- + + +def audit_path( + module: str, + anchor: Optional[date] = None, + *, + filename: Optional[str] = None, + scoped_by_run: bool = True, +) -> Path: + """Return the canonical path for a module's audit file. + + Parameters + ---------- + module + Logical module name — ``"retrieval" / "query_transform" / + "router_e2e" / "sql_range"``. Used as both the leaf filename + (``.jsonl``) and a short tag. + anchor + The *data* date this audit entry pertains to. Defaults to today. + Using an explicit anchor is recommended for agent-side audits so + backfills land in the correct folder. + filename + Override the default ``.jsonl`` leaf filename. Mostly + useful for sub-files like ``retriever_audit_trail.jsonl`` that + existing consumers already expect. + scoped_by_run + When ``True`` (default), place the file under the current + ``run_id`` so that everything produced by one CLI invocation + lives together. When ``False``, use the flat + ``logs/{module}/{date}/`` layout that predates + ``run_id`` and is still read by legacy offline tools. + + The parent folder is created as a side-effect. + """ + anchor = anchor or date.today() + date_str = anchor.isoformat() + leaf = filename or f"{module}.jsonl" + + if scoped_by_run: + folder = _logs_root() / "runs" / date_str / current_run_id() / module + else: + folder = _logs_root() / module / date_str + + folder.mkdir(parents=True, exist_ok=True) + return folder / leaf + + +# --------------------------------------------------------------------------- +# Logger configuration +# --------------------------------------------------------------------------- + + +_ROOT_CONFIGURED = False + + +def configure_root_logger( + *, + level: str = "INFO", + also_to_file: bool = True, +) -> logging.Logger: + """Install a sane stdout + file handler on the root logger. + + Safe to call multiple times — subsequent calls replace existing + handlers so pytest / Jupyter do not double-print. + """ + global _ROOT_CONFIGURED + + root = logging.getLogger() + root.setLevel(getattr(logging, level.upper(), logging.INFO)) + for h in list(root.handlers): + root.removeHandler(h) + + fmt = logging.Formatter( + fmt="%(asctime)s | %(levelname)s | %(name)s | %(message)s", + datefmt="%Y-%m-%d %H:%M:%S", + ) + + stream = logging.StreamHandler(sys.stdout) + stream.setFormatter(fmt) + root.addHandler(stream) + + if also_to_file: + run_folder = _logs_root() / "runs" / date.today().isoformat() / current_run_id() + run_folder.mkdir(parents=True, exist_ok=True) + file_handler = logging.FileHandler( + run_folder / "orchestrator.log", + encoding="utf-8", + delay=True, # open on first emit — survives read-only CI + ) + file_handler.setFormatter(fmt) + root.addHandler(file_handler) + + _ROOT_CONFIGURED = True + return root + + +def get_audit_logger( + name: str, + module: str, + *, + anchor: Optional[date] = None, + level: str = "INFO", +) -> logging.Logger: + """Return a logger whose output goes to the unified audit path. + + The returned logger has a single ``FileHandler`` attached at + ``audit_path(module, anchor, filename=f"{name}.log")``. Console + output continues to flow through the root logger (if configured). + + Typical usage — one call near the top of a module:: + + log = get_audit_logger("QdrantRetriever", module="retrieval") + log.info("search filter=%s", filt) + """ + anchor = anchor or date.today() + logger = logging.getLogger(name) + logger.setLevel(getattr(logging, level.upper(), logging.INFO)) + + target = audit_path(module, anchor, filename=f"{name}.log") + + # Avoid stacking handlers on repeat calls (pytest, Jupyter). + for h in list(logger.handlers): + if getattr(h, "_audit_path", None) == str(target): + return logger + + handler = logging.FileHandler(target, encoding="utf-8", delay=True) + handler._audit_path = str(target) # type: ignore[attr-defined] + handler.setFormatter( + logging.Formatter( + fmt="%(asctime)s | %(levelname)s | %(name)s | %(message)s", + datefmt="%Y-%m-%d %H:%M:%S", + ) + ) + logger.addHandler(handler) + return logger + + +__all__ = [ + "audit_path", + "configure_root_logger", + "current_run_id", + "get_audit_logger", + "start_run", +] From e7d3574ac9f04673da7d4e3f8af32b38bd9716f1 Mon Sep 17 00:00:00 2001 From: "Xinxin(Maxine)" Date: Thu, 23 Apr 2026 08:35:22 -0400 Subject: [PATCH 36/50] Upload retrieval process macro_parser aims for parsering and ingesting the latest macro markdown file as global background into silver to improving the Analyst answering. master_retriever.py serves as the orchestrator --- Scripts/retrieval/__init__.py | 111 +++- Scripts/retrieval/macro_parser.py | 218 ++++++++ Scripts/retrieval/master_retriever.py | 706 ++++++++++++++++++++++++++ 3 files changed, 1014 insertions(+), 21 deletions(-) create mode 100644 Scripts/retrieval/macro_parser.py create mode 100644 Scripts/retrieval/master_retriever.py diff --git a/Scripts/retrieval/__init__.py b/Scripts/retrieval/__init__.py index a1a73ef..4e54686 100644 --- a/Scripts/retrieval/__init__.py +++ b/Scripts/retrieval/__init__.py @@ -1,44 +1,113 @@ """ -Retrieval package public API. +`Scripts.retrieval` — public API of the retrieval / transformation layer. -This module exposes the primary retrieval components so callers can import -from `Scripts.retrieval` without referencing internal file paths directly. +This facade is deliberately **lazy** (PEP 562). Until recently the module +eagerly imported ``query_transform`` / ``qdrant_retriever`` / +``master_retriever`` at package import time, which transitively dragged +``langchain_ollama`` / ``langchain_core`` / ``dotenv`` / heavy ontology +regex tables into every caller — including the CLI's ``status`` and +``ingest --dry-run`` paths which do *not* need the LLM. That made cold +starts slow and broke smoke tests that stub only the pieces they need. + +Rules of the road +----------------- +* **Pure-data types** from :mod:`Scripts.retrieval.schema` load eagerly + because they have no runtime dependencies — importing them is free + and they are referenced almost everywhere. +* **LLM-backed classes** (``QueryTransformer``, ``FinancialHybridRetriever``, + ``MasterRetriever``) load lazily on first attribute access and are + cached into module globals, so subsequent accesses are free. + +Example +------- +>>> from Scripts.retrieval import TimeWindow # eager — fast +>>> from Scripts.retrieval import MasterRetriever # triggers lazy +... # load; cached. +>>> # Equivalent direct-leaf import for agents that want to skip the +>>> # facade entirely (no LLM dep resolution until instance creation): +>>> from Scripts.retrieval.master_retriever import MasterRetriever """ +from __future__ import annotations + +from importlib import import_module +from typing import TYPE_CHECKING, Any +# --------------------------------------------------------------------------- +# Eager re-exports: dependency-free data types +# --------------------------------------------------------------------------- from .schema import ( - SourceType, ActionDirection, - SearchMode, - TimeWindow, + AgentState, FormTypeFilter, - SentimentTarget, - MetadataExtraction, - HyDEGeneration, FullTransformationResult, - SECMetadata, + HyDEGeneration, + MetadataExtraction, QueryIntent, RetrievedChunk, + SearchMode, + SECMetadata, + SentimentTarget, + SourceType, SQLResult, - AgentState, + TIME_WINDOW_DAYS, + TimeWindow, + time_window_to_days, ) -from .query_transform import QueryTransformer -from .qdrant_retriever import FinancialHybridRetriever + +# --------------------------------------------------------------------------- +# Lazy attribute table — resolved on first access via PEP 562 __getattr__ +# --------------------------------------------------------------------------- + +_LAZY_ATTRS: dict[str, tuple[str, str]] = { + # attr_name -> (submodule, export_name) + "QueryTransformer": ("query_transform", "QueryTransformer"), + "FinancialHybridRetriever": ( + "qdrant_retriever", + "FinancialHybridRetriever", + ), + "MasterRetriever": ("master_retriever", "MasterRetriever"), +} + + +def __getattr__(name: str) -> Any: # PEP 562 — runs only on unknown attrs + if name in _LAZY_ATTRS: + submodule, export = _LAZY_ATTRS[name] + module = import_module(f"{__name__}.{submodule}") + obj = getattr(module, export) + globals()[name] = obj # cache so future lookups are free + return obj + raise AttributeError(f"module {__name__!r} has no attribute {name!r}") + + +def __dir__() -> list[str]: # Tooling-friendly completion + return sorted(set(globals().keys()) | set(__all__)) + __all__ = [ - "SourceType", + # Eager data types "ActionDirection", - "SearchMode", - "TimeWindow", + "AgentState", "FormTypeFilter", - "SentimentTarget", - "MetadataExtraction", - "HyDEGeneration", "FullTransformationResult", - "SECMetadata", + "HyDEGeneration", + "MetadataExtraction", "QueryIntent", "RetrievedChunk", + "SearchMode", + "SECMetadata", + "SentimentTarget", + "SourceType", "SQLResult", - "AgentState", + "TIME_WINDOW_DAYS", + "TimeWindow", + "time_window_to_days", + # Lazy LLM-backed classes "QueryTransformer", "FinancialHybridRetriever", + "MasterRetriever", ] + +if TYPE_CHECKING: # Static analysers only — no runtime cost. + from .master_retriever import MasterRetriever # noqa: F401 + from .qdrant_retriever import FinancialHybridRetriever # noqa: F401 + from .query_transform import QueryTransformer # noqa: F401 diff --git a/Scripts/retrieval/macro_parser.py b/Scripts/retrieval/macro_parser.py new file mode 100644 index 0000000..e99e9da --- /dev/null +++ b/Scripts/retrieval/macro_parser.py @@ -0,0 +1,218 @@ +""" +Macro-context parsing utilities. + +Background +---------- +The Analyst prompt mandates a "Macro Regime Snapshot" citing VIX / GSPC / +DXY / rates, but the Checker only recognises Silver ``lineage_anchors`` +and Gold ``bronze_ref``. Every macro number the Analyst cites was +therefore flagged *Fatal*, burning all three revisions and forcing +every run into degraded mode with confidence 0.3. + +The fix is architectural: promote the macro snapshot to a first-class +Silver citation source by parsing ``Data/Agent_Context/latest_macro_context.md`` +into ``(values, lineage_anchors)`` and merging them into +``silver_context`` before the Analyst draws its draft. + +Anchor naming uses a stable ``MACRO__`` convention +that the Finalizer already routes to the "Macro Data" UI category +(see ``finalizer.py:_collect_evidence_pool``). + +Why this lives in its own module +-------------------------------- +* **Separation of concerns.** ``master_retriever.py`` is the *orchestrator*; + regex tables for a specific markdown format belong next to the data, + not next to the orchestration logic. +* **Testability.** ``Scripts/tests`` can target this module directly + without spinning up the Qdrant / SQL / LLM stack that + ``master_retriever.py`` drags in. +* **Schema evolution.** When the macro snapshot markdown changes shape, + the diff is localised to ~200 lines here — ``MasterRetriever`` is + untouched. + +The ticker-extraction helpers (``TICKER_RE`` / ``TICKER_STOPWORDS``) +share the same "markdown → retrieval metadata" concern and are +colocated for symmetry; the HyDE novel-ticker extractor in +``master_retriever.py`` imports them from here. + +Public surface +-------------- +* ``parse_macro_snapshot(markdown) -> (values, snapshot_date)`` +* ``build_macro_silver_patch(macro_md, anchor_date) -> {values, lineage_anchors}`` +* ``TICKER_RE``, ``TICKER_STOPWORDS`` (for HyDE novel-ticker detection) +* ``MACRO_LINE_PATTERNS``, ``MACRO_GENERATED_RE`` (for downstream tests) +""" +from __future__ import annotations + +import re +from datetime import date +from typing import Any, Dict, List, Optional, Tuple + +__all__ = [ + "TICKER_RE", + "TICKER_STOPWORDS", + "MACRO_LINE_PATTERNS", + "MACRO_GENERATED_RE", + "parse_macro_snapshot", + "build_macro_silver_patch", +] + + +# --------------------------------------------------------------------------- +# Ticker extraction (used by the HyDE "novel ticker" back-injection path) +# --------------------------------------------------------------------------- + +# Regex for ticker-shaped tokens. We deliberately accept 1–5 upper-case +# letters with optional leading "$" (Bloomberg style). Multi-word / +# punctuation tickers (e.g. ^GSPC, BRK.B) are NOT captured here — they +# require a richer tokenizer and almost never appear verbatim in HyDE. +TICKER_RE: re.Pattern = re.compile(r"(? Tuple[Dict[str, float], Optional[str]]: + """Parse ``latest_macro_context.md`` into silver values. + + Returns + ------- + values + ``{metric_key: float}`` mapping. Keys follow the + ``{CODE}_value`` / ``{CODE}_change_pct`` convention so the + Analyst's numeric audit can match a draft that says "VIX at + 18.25" against ``VIX_value=18.25``. Keys missing from the + markdown are omitted — this lets the Checker still reject + fabricated metrics. + snapshot_date + The ISO date from the "Generated on" header or ``None``. + Callers use it as the macro anchor when present (more precise + than the SQL-derived ``options_daily`` anchor). + """ + values: Dict[str, float] = {} + if not markdown: + return values, None + + gen_match = MACRO_GENERATED_RE.search(markdown) + snapshot_date = gen_match.group(1) if gen_match else None + + for pattern, key, has_pct in MACRO_LINE_PATTERNS: + m = pattern.search(markdown) + if not m: + continue + try: + val = float(m.group(1).replace(",", "")) + except (ValueError, IndexError): + continue + values[f"{key}_value"] = val + if has_pct: + try: + pct_raw = m.group(2) + if pct_raw is not None: + values[f"{key}_change_pct"] = float(pct_raw) + except (ValueError, IndexError): + pass + + return values, snapshot_date + + +def build_macro_silver_patch( + macro_md: Optional[str], + anchor_date: date, +) -> Dict[str, Any]: + """Produce the Silver patch dict ``{values, lineage_anchors}`` for macro. + + Anchors follow the ``MACRO__`` convention — the + Finalizer already maps a ``MACRO_*`` prefix to the "Macro Data" + evidence category. Returns an empty dict when the markdown is + absent or unparseable so :meth:`MasterRetriever.retrieve` can merge + unconditionally. + """ + values, snapshot_date = parse_macro_snapshot(macro_md or "") + if not values: + return {"values": {}, "lineage_anchors": []} + + effective_date = snapshot_date or anchor_date.isoformat() + # Strip the metric-suffix so `VIX_value` / `VIX_change_pct` both map + # to a single `VIX` code. One anchor per code keeps the lineage list + # short and easy for the LLM to cite. + distinct_codes: set = set() + for k in values.keys(): + if k.endswith("_value"): + distinct_codes.add(k[: -len("_value")]) + elif k.endswith("_change_pct"): + distinct_codes.add(k[: -len("_change_pct")]) + lineage = [f"MACRO_{code}_{effective_date}" for code in sorted(distinct_codes)] + + return {"values": values, "lineage_anchors": lineage} diff --git a/Scripts/retrieval/master_retriever.py b/Scripts/retrieval/master_retriever.py new file mode 100644 index 0000000..0e53fb7 --- /dev/null +++ b/Scripts/retrieval/master_retriever.py @@ -0,0 +1,706 @@ +""" +Scripts/retrieval/master_retriever.py + +Financial RAG orchestration layer (Master Retriever). + +Design patterns: Facade + Wrapper. + +Core capabilities (this version): +1. Prompt decoupling — all prompts live under Scripts/core/. +2. Per-engine timeouts — Gold (vector) and Silver (SQL) get independent + asyncio.wait_for budgets so one slow engine never stalls the other. +3. Graceful degradation — engine failures surface as structured error dicts + so the Analyst can honestly say "INSUFFICIENT DATA" instead of hallucinating. +4. End-to-end telemetry — per-node latency is persisted on the return payload. +5. **Semantic-SQL Parallelism** (new): under `sql_only` we also fire HyDE so + the Analyst has LLM prior knowledge to hedge when Parquet returns empty. +6. **HyDE Entity Back-Injection** (new): under `vector_only` we regex-extract + tickers from the HE paragraph, intersect with the ontology whitelist, and + trigger compensation Silver queries for the *novel* tickers. This turns + "no data" into "Silver penetration via semantic expansion". +7. **HE Guardrail** (new): HE-extracted tickers MUST pass the ontology + whitelist before they can touch Parquet. No whitelist, no SQL. +8. **Source-channel tagging** (new): every slice of silver_context is tagged + with `source_channel ∈ {primary, hyde_expansion}` so the Checker agent + can relax numeric audit for HE-triggered data (avoiding false fatal). +9. **Time-range audit** (new): the final `start_date` / `end_date` used by + Silver is exposed on the return payload so the Analyst can print the + compliance footer ("data interval: YYYY-MM-DD ~ YYYY-MM-DD"). +""" + +import asyncio +import copy +import logging +import os +import re +import time +from datetime import date, timedelta +from pathlib import Path +from typing import Any, Dict, List, Optional + +from dotenv import load_dotenv +from langchain_core.prompts import ChatPromptTemplate +from langchain_ollama import ChatOllama + +from Scripts.core.few_shot_intent import INTENT_FEW_SHOT_EXAMPLES +from Scripts.core.intent_router_prompt_templates import ROUTER_SYSTEM_PROMPT +from Scripts.retrieval.qdrant_retriever import FinancialHybridRetriever +from Scripts.retrieval.query_transform import QueryTransformer +from Scripts.retrieval.schema import ( + FullTransformationResult, + MetadataExtraction, + QueryIntent, + TimeWindow, + # Re-exported global time-window policy. The physical constants live in + # schema.py to keep Gold/Silver free of a circular import against this + # facade; `from Scripts.retrieval.master_retriever import TIME_WINDOW_DAYS` + # still works for downstream callers. + TIME_WINDOW_DAYS, + time_window_to_days, +) +from Scripts.retrieval.sql_tools import SilverSQLTool +from Scripts.retrieval.time_adapter import ( + SourceTimeKey, + TimePredicate, + compile_all as compile_all_time_predicates, +) + +# Public re-export surface — keeps `__all__` explicit for static analysers. +__all__ = ["MasterRetriever", "TIME_WINDOW_DAYS", "time_window_to_days"] + +load_dotenv() +logger = logging.getLogger(__name__) + +# --------------------------------------------------------------------------- +# Module-level constants (tuned to real-world Ollama throughput, not defaults) +# --------------------------------------------------------------------------- + +# Top_k for the Gold probe that runs when the router chose sql_only. Purpose: +# if SQL succeeds the LLM will prefer precise numerics; if SQL fails there is +# always at least one news anchor. This does NOT change business routing. +_SQL_ONLY_FALLBACK_TOPK = 2 + +# Max number of novel tickers the HE back-injection can promote to a real +# Silver compensation query. A hard cap protects the silver_timeout budget: +# three tickers × ~8s each is already on the order of one-third of a browser's +# patience threshold. +_HE_NOVEL_TICKERS_CAP = int(os.getenv("HE_NOVEL_TICKERS_CAP", "3")) + + +# --------------------------------------------------------------------------- +# Ticker / macro parsing — delegated to `Scripts.retrieval.macro_parser`. +# +# Rationale: the regex tables + macro markdown parser are orthogonal to +# the retrieval orchestration logic in this file. Moving them to a +# dedicated module keeps `master_retriever.py` focused on *wiring* +# (router + Qdrant + SQL) while enabling isolated unit tests. +# +# The underscored aliases below are preserved for backwards compatibility +# with any downstream code or test that imported the private names from +# this module; new callers should import directly from +# `Scripts.retrieval.macro_parser`. +# --------------------------------------------------------------------------- +from Scripts.retrieval.macro_parser import ( # noqa: E402 — kept near usage + MACRO_GENERATED_RE as _MACRO_GENERATED_RE, + MACRO_LINE_PATTERNS as _MACRO_LINE_PATTERNS, + TICKER_RE as _TICKER_RE, + TICKER_STOPWORDS as _TICKER_STOPWORDS, + build_macro_silver_patch as _build_macro_silver_patch, + parse_macro_snapshot as _parse_macro_snapshot, +) + + +class MasterRetriever: + """Facade over QueryTransformer + Qdrant + Silver SQL with per-route + retrieval plans and full HyDE semantic-hedge support. + """ + + def __init__(self): + # --- 1. Engine initialisation (heavy) --- + self.qdrant = FinancialHybridRetriever() + self.sql_tool = SilverSQLTool() + self.transformer = QueryTransformer() + + # --- 2. Router LLM configuration (cheap, short responses) --- + self.router_llm = ChatOllama( + model=os.getenv("OLLAMA_ROUTER_MODEL", "llama3:latest"), + temperature=float(os.getenv("ROUTER_TEMPERATURE", 0.0)), + num_predict=20, + ) + + # --- 3. Runtime knobs (env-tunable without code change) --- + self.gold_timeout = float(os.getenv("GOLD_TIMEOUT", 5.0)) + self.silver_timeout = float(os.getenv("SILVER_TIMEOUT", 8.0)) + + logger.info( + f"🏛️ MasterRetriever ready | Gold_TO: {self.gold_timeout}s | " + f"Silver_TO: {self.silver_timeout}s | HE_novel_cap: {_HE_NOVEL_TICKERS_CAP}" + ) + + # ====================================================================== + # A. Intent classification (unchanged — proven in production) + # ====================================================================== + + async def _classify_intent(self, query: str) -> QueryIntent: + """Lightweight intent routing after prompt decoupling.""" + prompt = ChatPromptTemplate.from_template(ROUTER_SYSTEM_PROMPT) + chain = prompt | self.router_llm + + start_t = time.time() + try: + response = await chain.ainvoke({ + "examples": INTENT_FEW_SHOT_EXAMPLES, + "query": query, + }) + intent_str = response.content.strip().lower() + + route = "hybrid_both" + for p in ["sql_only", "vector_only", "hybrid_both"]: + if p in intent_str: + route = p + break + + logger.info(f"⚡ [Telemetry] Router choice: {route} | Cost: {time.time() - start_t:.3f}s") + return QueryIntent(primary_route=route) + except Exception as e: + logger.error(f"❌ [Router Error] {e}. Falling back to hybrid.") + return QueryIntent(primary_route="hybrid_both") + + # ====================================================================== + # B. Engine wrappers (per-engine timeouts + exception isolation) + # ====================================================================== + + async def _fetch_gold_with_telemetry( + self, + query: str, + transform_result: FullTransformationResult, + top_k: int = 5, + ) -> List[Any]: + """Gold wrapper with independent timeout + exception isolation. + + Forwards the live `time_predicates` dict (compiled once upstream in + `_compute_time_range`) so Qdrant can build source-specific time + filters rather than rederiving the window on every call. + """ + t0 = time.time() + predicates = getattr(self, "_current_predicate_set", None) + try: + res = await asyncio.wait_for( + self.qdrant.retrieve_async( + original_query=query, + transform_result=transform_result, + top_k=top_k, + time_predicates=predicates, + ), + timeout=self.gold_timeout, + ) + logger.debug(f"📊 [Telemetry] Gold engine finished in {time.time() - t0:.3f}s (top_k={top_k})") + return res + except asyncio.TimeoutError: + logger.warning(f"⚠️ [Gold Timeout] Exceeded {self.gold_timeout}s. Returning empty context.") + return [] + except Exception as e: + logger.error(f"❌ [Gold Failure] {repr(e)}") + return [] + + async def _fetch_silver_with_telemetry(self, metadata: MetadataExtraction) -> Dict[str, Any]: + """Silver wrapper with structured degradation on failure. + + Threads the live `time_predicates` dict through to `SilverSQLTool` + so handler-side time alignment (DAILY weekend-safe, MONTHLY month- + widened) lands on the same compiled predicate the Gold retriever + consumes — one window, one audit trail. + """ + t0 = time.time() + predicates = getattr(self, "_current_predicate_set", None) + try: + res = await asyncio.wait_for( + self.sql_tool.query_parquet_by_metadata( + metadata, time_predicates=predicates, + ), + timeout=self.silver_timeout, + ) + logger.debug(f"📊 [Telemetry] Silver engine finished in {time.time() - t0:.3f}s") + return res or {"values": {}, "lineage_anchors": []} + except asyncio.TimeoutError: + logger.warning(f"⚠️ [Silver Timeout] Exceeded {self.silver_timeout}s.") + return {"values": {}, "lineage_anchors": [], "error": "Timeout"} + except Exception as e: + logger.error(f"❌ [Silver Failure] {repr(e)}") + return {"values": {}, "lineage_anchors": [], "error": str(type(e).__name__)} + + # ====================================================================== + # C. NEW helpers — Time-range audit / HE back-injection / compensation + # ====================================================================== + + def _compute_time_range( + self, + metadata: MetadataExtraction, + default_applied: bool, + ) -> Dict[str, Any]: + """Derive the authoritative (anchor, start, end) triple for this query. + + Uses SilverSQLTool's Dynamic Time Anchor so the date aligns with the + last successfully ingested Silver partition (survives weekends, holidays, + backfills). Exposed on the return payload so the Analyst can emit a + compliance footer verbatim, e.g. + + "数据统计区间: 2025-10-20 ~ 2026-04-18 (window_days=180, default)" + + Also compiles a **per-source `TimePredicate` set** (news / SEC / GPR / + options / macro / silver_gpr) via `time_adapter.compile_all`. These + predicates are attached to the payload under `source_predicates` so + the Gold retriever and every Silver handler can apply a time window + aligned to its own physical schema (MONTHLY widened, DAILY weekend- + safe, EVENT respects the raw semantic window) without duplicating + the widening logic across layers. See docs/Data_source_docs/ + Time_Schema_Audit.md for the full per-source contract. + """ + tw_value = getattr(metadata.time_window, "value", metadata.time_window) + window_days = time_window_to_days(metadata.time_window, default=180) + + try: + # "options" is the most common Silver dataset; the anchor logic + # falls back to date.today() if the runtime state is missing. + anchor: date = self.sql_tool._get_anchor_date("options") + except Exception as e: + logger.warning(f"time_range: anchor lookup failed, defaulting to today(): {e}") + anchor = date.today() + + start = anchor - timedelta(days=window_days) + + # Compile per-source predicates once; they ride along the payload so + # audit logs capture exactly which window hit each source. + predicate_set = compile_all_time_predicates( + metadata.time_window, anchor, + label=str(tw_value) if tw_value else None, + ) + serialised_predicates = { + key.value: pred.to_dict() for key, pred in predicate_set.items() + } + + payload = { + "time_window_label": str(tw_value) if tw_value else "past_six_months", + "window_days": window_days, + "anchor_date": anchor.isoformat(), + "start_date": start.isoformat(), + "end_date": anchor.isoformat(), + "is_default_window_applied": bool(default_applied), + # Per-source compiled predicates (serialised dict form). Live, + # runtime-usable objects are kept on `self._predicate_set_cache` + # for the retrievers via `_current_predicate_set`. + "source_predicates": serialised_predicates, + } + logger.info( + f"🕒 [TimeRange] {payload['start_date']} → {payload['end_date']} " + f"(label={payload['time_window_label']}, days={window_days}, " + f"default_applied={default_applied}) | sources_compiled=" + f"{list(serialised_predicates.keys())}" + ) + # Stash the live dict so `retrieve()` can pass it to Gold/Silver + # without re-running the compiler. Cleared at the end of each call. + self._current_predicate_set: Dict[SourceTimeKey, TimePredicate] = predicate_set + return payload + + def _extract_hyde_entities( + self, + hyde_paragraph: str, + seed_tickers: List[str], + ) -> Dict[str, Any]: + """Back-inject tickers mentioned in HyDE, filtered by ontology whitelist. + + Pipeline: + 1. Regex `[A-Z]{1,5}` candidates + 2. Subtract `_TICKER_STOPWORDS` (IV, CPI, THE, …) + 3. Intersect with `self.transformer.allowed_tickers` (HE Guardrail) + 4. Subtract the seed tickers already on the metadata + 5. Cap at `_HE_NOVEL_TICKERS_CAP` + + Returns a structured payload so the Analyst can see: + - What HE thought of + - What survived the guardrail + - What is *novel* (i.e. should trigger compensation SQL) + """ + paragraph = hyde_paragraph or "" + raw_candidates = set(m.group(1) for m in _TICKER_RE.finditer(paragraph)) + post_stopword = raw_candidates - _TICKER_STOPWORDS + + allowed = set(getattr(self.transformer, "allowed_tickers", []) or []) + whitelisted = sorted(post_stopword & allowed) + + seed_set = {t.upper() for t in (seed_tickers or [])} + novel = [t for t in whitelisted if t not in seed_set][:_HE_NOVEL_TICKERS_CAP] + + if novel: + logger.info( + f"🧠 [HyDE-BackInjection] Novel tickers (whitelisted): {novel} " + f"| raw={sorted(raw_candidates)} | allowed_hit={whitelisted}" + ) + + return { + "paragraph": paragraph, + "raw_candidates": sorted(raw_candidates), + "whitelisted": whitelisted, + "novel_tickers": novel, + } + + async def _run_silver_compensation( + self, + base_metadata: MetadataExtraction, + novel_tickers: List[str], + ) -> Dict[str, Any]: + """Fire one Silver query per HE-derived novel ticker and aggregate. + + Rationale: + - SilverSQLTool consumes `metadata.tickers[0]` (see sql_tools.py). + So we dispatch N independent calls in parallel rather than one + multi-ticker call. + - Each sub-query reuses the SAME timeout budget as the primary + Silver task (`_fetch_silver_with_telemetry`) — no new knob, + no new surprise. + - Deep-copies the base metadata so audit logs never conflate + "primary intent" with "HE-derived probe". + + Returns a dict with `source_channel = hyde_expansion` so the Checker + agent can relax numeric audit for this slice (these values were NOT + requested by the user). + """ + if not novel_tickers: + return { + "values": {}, + "lineage_anchors": [], + "source_channel": "hyde_expansion", + "trigger_entities": [], + } + + tasks = [] + for tk in novel_tickers: + m_copy = base_metadata.model_copy(deep=True) + m_copy.tickers = [tk.upper()] + tasks.append(self._fetch_silver_with_telemetry(m_copy)) + + results = await asyncio.gather(*tasks, return_exceptions=True) + + aggregated: Dict[str, Any] = { + "values": {}, + "lineage_anchors": [], + "source_channel": "hyde_expansion", + "trigger_entities": list(novel_tickers), + "per_ticker_errors": {}, + } + for tk, r in zip(novel_tickers, results): + if isinstance(r, Exception): + aggregated["per_ticker_errors"][tk] = str(type(r).__name__) + continue + if not isinstance(r, dict): + continue + if r.get("error"): + aggregated["per_ticker_errors"][tk] = r["error"] + aggregated["values"].update(r.get("values", {})) + aggregated["lineage_anchors"].extend(r.get("lineage_anchors", [])) + + logger.info( + f"🔁 [HyDE-Compensation] tickers={novel_tickers} | " + f"values={len(aggregated['values'])} | " + f"anchors={len(aggregated['lineage_anchors'])} | " + f"errors={aggregated['per_ticker_errors'] or '{}'}" + ) + return aggregated + + # ====================================================================== + # D. Main entry — Orchestrator with per-route plan + # ====================================================================== + + async def retrieve(self, user_query: str) -> Dict[str, Any]: + """Main pipeline: intent → transform → per-route concurrent fetch → assemble. + + Per-route plan (in plain English): + + hybrid_both : full Gold(top_k=5) + full Silver(metadata) + + optional Silver compensation on novel HE tickers + + vector_only : full Gold(top_k=5) as primary + + Silver compensation ONLY via HE back-injection + (the whole point of "Entity Back-Injection") + + sql_only : full Silver(metadata) as primary + + tiny Gold probe(top_k=2) as news-anchor safety + + HyDE paragraph surfaced as `hyde_anticipation` for + the Analyst's LLM prior-knowledge hedge + """ + overall_start = time.time() + + # ================================================================== + # 1. Intent classification + # ================================================================== + intent = await self._classify_intent(user_query) + route = intent.primary_route + + # ================================================================== + # 2. Two-stage transform (metadata + HyDE) + # ================================================================== + transform_start = time.time() + transform_res = await self.transformer.transform_for_dual_rag(user_query, intent) + logger.info(f"🧠 [Telemetry] Transform cost: {time.time() - transform_start:.3f}s") + + metadata = transform_res.metadata if transform_res else None + if metadata is None: + # Transformer failure is unrecoverable here — return a structured + # empty payload so the Analyst can surface INSUFFICIENT DATA. + return self._empty_payload( + intent=route, + reason="transform_failed", + start_ts=overall_start, + ) + + # ================================================================== + # 3. Time-window guardrail + canonical TimeRange + # ================================================================== + # schema.handle_empty_window already forces PAST_SIX_MONTHS on + # invalid/missing input (so this branch almost never fires). We + # double-check here so a future schema refactor can't silently regress. + default_applied = False + if not metadata.time_window: + metadata.time_window = TimeWindow.PAST_SIX_MONTHS + default_applied = True + logger.info("🕒 [TimePolicy] Applied default window: past_six_months (180d)") + + time_range = self._compute_time_range(metadata, default_applied=default_applied) + + # ================================================================== + # 4. HyDE Entity Back-Injection (regex + whitelist) + # ================================================================== + hyde_info = self._extract_hyde_entities( + hyde_paragraph=transform_res.hyde.hyde_paragraph if transform_res.hyde else "", + seed_tickers=metadata.tickers, + ) + novel_tickers: List[str] = hyde_info["novel_tickers"] + + # ================================================================== + # 5. Build per-route task plan (all three may be None) + # ================================================================== + gold_task = None + silver_task = None + compensation_task = None + + if route == "hybrid_both": + gold_task = self._fetch_gold_with_telemetry(user_query, transform_res, top_k=5) + if metadata.tickers: + silver_task = self._fetch_silver_with_telemetry(metadata) + # Optional HE compensation — only fires when the HE introduced + # NEW tickers the user didn't mention. + if novel_tickers: + compensation_task = self._run_silver_compensation(metadata, novel_tickers) + + elif route == "vector_only": + gold_task = self._fetch_gold_with_telemetry(user_query, transform_res, top_k=5) + # Primary Silver is OFF by design for vector_only; compensation is + # the ONLY path into Parquet — realises "Entity Back-Injection". + if novel_tickers: + compensation_task = self._run_silver_compensation(metadata, novel_tickers) + elif metadata.tickers: + # If HE produced nothing novel but the user explicitly named + # tickers, still run Silver as a courtesy (labelled primary). + silver_task = self._fetch_silver_with_telemetry(metadata) + + elif route == "sql_only": + # Primary = Silver; Gold is a tiny fallback probe. + if metadata.tickers: + silver_task = self._fetch_silver_with_telemetry(metadata) + gold_task = self._fetch_gold_with_telemetry( + user_query, transform_res, top_k=_SQL_ONLY_FALLBACK_TOPK + ) + # HE compensation is still available when HE produces novel tickers — + # realises "Semantic-SQL Parallelism". The hyde_anticipation payload + # below also exposes the full HyDE paragraph to the Analyst so the + # LLM prior knowledge can fill the gap when Parquet is empty. + if novel_tickers: + compensation_task = self._run_silver_compensation(metadata, novel_tickers) + + else: + # Unknown route — degrade to hybrid. + logger.warning(f"[Route] Unknown primary_route={route} — falling back to hybrid_both.") + gold_task = self._fetch_gold_with_telemetry(user_query, transform_res, top_k=5) + if metadata.tickers: + silver_task = self._fetch_silver_with_telemetry(metadata) + + # ================================================================== + # 6. Execute plan concurrently with per-task isolation + # ================================================================== + awaitables = [] + slots: List[str] = [] + for name, t in (("gold", gold_task), ("silver", silver_task), ("compensation", compensation_task)): + if t is not None: + awaitables.append(t) + slots.append(name) + + results = await asyncio.gather(*awaitables, return_exceptions=True) if awaitables else [] + + # ================================================================== + # 7. Assemble the final context + # ================================================================== + final_context: Dict[str, Any] = { + "intent": route, + "metadata": metadata, + "time_range": time_range, + "gold_context": [], + "silver_context": { + "values": {}, + "lineage_anchors": [], + "source_channel": "primary", + }, + "hyde_anticipation": { + "paragraph": hyde_info["paragraph"], + "rerank_query": (transform_res.hyde.rerank_query if transform_res.hyde else ""), + "raw_candidates": hyde_info["raw_candidates"], + "whitelisted_tickers": hyde_info["whitelisted"], + "novel_tickers": novel_tickers, + # Only sql_only lifts the HE paragraph as a semantic hedge; + # the other routes still expose it for auditability but the + # Analyst will weight it lower. + "source_channel": "semantic_hedge" if route == "sql_only" else "reference", + }, + "status": "success", + "latency_stats": {}, + } + + partial_failure = False + for slot, res in zip(slots, results): + if isinstance(res, Exception): + logger.critical(f"🔥 Slot {slot} raised: {repr(res)}") + partial_failure = True + continue + + if slot == "gold": + final_context["gold_context"] = res or [] + elif slot == "silver": + primary_silver = res or {"values": {}, "lineage_anchors": []} + if primary_silver.get("error"): + partial_failure = True + final_context["silver_context"] = { + "values": primary_silver.get("values", {}), + "lineage_anchors": primary_silver.get("lineage_anchors", []), + "source_channel": "primary", + **( + {"error": primary_silver["error"]} + if primary_silver.get("error") else {} + ), + } + elif slot == "compensation": + comp = res or {} + # Physical separation: HE-triggered data lives under + # `silver_context.compensation`, NOT merged into primary + # values. Downstream the Checker agent reads this key to + # relax numeric drift rules for HE data. + final_context["silver_context"]["compensation"] = { + "values": comp.get("values", {}), + "lineage_anchors": comp.get("lineage_anchors", []), + "source_channel": "silver_layer_via_hyde_expansion", + "trigger_entities": comp.get("trigger_entities", []), + "per_ticker_errors": comp.get("per_ticker_errors", {}), + } + + if partial_failure: + final_context["status"] = "partial_failure" + + # ================================================================== + # 7.5 Macro → Silver anchor injection (Root Cause A fix, 2026-04-22) + # ================================================================== + # Parse the daily macro snapshot into silver values + MACRO_* anchors + # so the Analyst's "Macro Regime Snapshot" section has citable + # anchors. Without this, the Analyst cites VIX=18.25 from the prose + # macro block, the Checker has no matching anchor/value, and every + # revision fails — the 4/4 degraded-mode failure mode in + # docs/test/2026-04-22/router_e2e_deep_analysis.md (Root Cause A). + try: + macro_md = self._read_macro_snapshot() + anchor_for_macro = date.fromisoformat(time_range["anchor_date"]) \ + if time_range and time_range.get("anchor_date") else date.today() + macro_patch = _build_macro_silver_patch(macro_md, anchor_for_macro) + if macro_patch["values"]: + sv = final_context["silver_context"] + sv.setdefault("values", {}).update(macro_patch["values"]) + existing_anchors = sv.setdefault("lineage_anchors", []) or [] + # De-duplicate while preserving ordering of the existing anchors. + seen = set(existing_anchors) + for a in macro_patch["lineage_anchors"]: + if a not in seen: + existing_anchors.append(a) + seen.add(a) + logger.info( + f"🌐 [MacroSilverPatch] injected {len(macro_patch['values'])} values + " + f"{len(macro_patch['lineage_anchors'])} MACRO_* anchors." + ) + except Exception as e: + # Non-fatal: the pipeline still produces a full context without + # macro anchors; the Analyst simply loses macro citability. + logger.warning(f"MacroSilverPatch failed ({type(e).__name__}): {e}") + + final_context["latency_stats"]["total_e2e"] = f"{time.time() - overall_start:.3f}s" + logger.info( + f"✅ [Master Retriever] route={route} | E2E: {final_context['latency_stats']['total_e2e']} " + f"| status={final_context['status']} | HE_compensation=" + f"{'YES' if novel_tickers else 'NO'}" + ) + return final_context + + # ====================================================================== + # D.5 Utility — macro snapshot loader (lookup, cached per process) + # ====================================================================== + + _MACRO_SNAPSHOT_CACHE: Optional[str] = None + _MACRO_SNAPSHOT_MTIME: Optional[float] = None + + def _read_macro_snapshot(self) -> Optional[str]: + """Read `Data/Agent_Context/latest_macro_context.md` with a per-process + mtime cache. Router also reads this file for the Analyst prompt, but + we re-read here so master_retriever's Silver patch stays self- + contained (retriever owns the silver_context contract end-to-end). + + Returns None if the file is absent — `_build_macro_silver_patch` + then no-ops cleanly. Any IO error is swallowed: a missing or + malformed macro snapshot must NEVER take down retrieval. + """ + try: + project_root = Path(__file__).resolve().parents[2] + fp = project_root / "Data" / "Agent_Context" / "latest_macro_context.md" + if not fp.exists(): + return None + mtime = fp.stat().st_mtime + if ( + self._MACRO_SNAPSHOT_CACHE is not None + and self._MACRO_SNAPSHOT_MTIME == mtime + ): + return self._MACRO_SNAPSHOT_CACHE + content = fp.read_text(encoding="utf-8") + # Cache on the instance (class attribute holder) so concurrent + # calls within the same process reuse the parsed result. + MasterRetriever._MACRO_SNAPSHOT_CACHE = content + MasterRetriever._MACRO_SNAPSHOT_MTIME = mtime + return content + except Exception as e: + logger.debug(f"_read_macro_snapshot: non-fatal {type(e).__name__}: {e}") + return None + + # ====================================================================== + # E. Utility — structured empty payload on hard failure + # ====================================================================== + + def _empty_payload(self, intent: str, reason: str, start_ts: float) -> Dict[str, Any]: + """Return a fully-typed, Analyst-safe payload when Transform blows up.""" + logger.error(f"❌ [Master Retriever] Hard failure: {reason}") + return { + "intent": intent, + "metadata": None, + "time_range": None, + "gold_context": [], + "silver_context": { + "values": {}, + "lineage_anchors": [], + "source_channel": "primary", + "error": reason, + }, + "hyde_anticipation": None, + "status": "partial_failure", + "latency_stats": {"total_e2e": f"{time.time() - start_ts:.3f}s"}, + } From 048bb06653b4970ba34327e394e2442018bfba72 Mon Sep 17 00:00:00 2001 From: "Xinxin(Maxine)" Date: Fri, 24 Apr 2026 15:15:50 -0400 Subject: [PATCH 37/50] delete/update config settings --- .dockerignore | 24 -- .env.sample | 84 +++++ Dockerfile | 22 -- docker-compose.prod.yml | 79 ----- docker-compose.yml | 50 --- docs/Data_source_docs/data_architecture.md | 175 ----------- docs/PRODUCTION_OPS_NOTES.md | 69 ----- .../Query_retrieval_docs/Time_Schema_Audit.md | 288 ------------------ fix_ollama_finetuning.sh | 39 --- 9 files changed, 84 insertions(+), 746 deletions(-) delete mode 100644 .dockerignore create mode 100644 .env.sample delete mode 100644 Dockerfile delete mode 100644 docker-compose.prod.yml delete mode 100644 docker-compose.yml delete mode 100644 docs/Data_source_docs/data_architecture.md delete mode 100644 docs/PRODUCTION_OPS_NOTES.md delete mode 100644 docs/Query_retrieval_docs/Time_Schema_Audit.md delete mode 100644 fix_ollama_finetuning.sh diff --git a/.dockerignore b/.dockerignore deleted file mode 100644 index 6176ee5..0000000 --- a/.dockerignore +++ /dev/null @@ -1,24 +0,0 @@ -# .dockerignore - -# 忽略 Python 虚拟环境 -venv/ -.venv/ - -# 忽略 Python 缓存文件 -__pycache__/ -*.pyc -*.pyo -*.pyd - -# 忽略 IDE 和编辑器配置文件 -.vscode/ -.idea/ -*.sublime-project -*.sublime-workspace - -# 忽略 Git 目录 -.git/ -.gitignore - -# 忽略 Docker 本地缓存 -.docker/ \ No newline at end of file diff --git a/.env.sample b/.env.sample new file mode 100644 index 0000000..3d3cfbc --- /dev/null +++ b/.env.sample @@ -0,0 +1,84 @@ +# ============================================================================= +# Automated Options Recommendation Bot +# Institutional Environment Configuration Template +# Copy this file to ".env" and populate secrets before runtime. +# ============================================================================= + +# ----------------------------------------------------------------------------- +# I. External Data Provider Credentials +# ----------------------------------------------------------------------------- +FRED_API_KEY=your_fred_api_key_here +SEC_USER_AGENT=YourName YourOrg your_email@example.com + +# ----------------------------------------------------------------------------- +# II. Vector Infrastructure (Qdrant) +# ----------------------------------------------------------------------------- +QDRANT_HOST=https://your-qdrant-endpoint.example.com +QDRANT_API_KEY=your_qdrant_api_key_here + +# ----------------------------------------------------------------------------- +# III. Core Inference Runtime (Ollama) +# ----------------------------------------------------------------------------- +# Use one of OLLAMA_BASE_URL or OLLAMA_HOST according to your runtime scripts. +OLLAMA_BASE_URL=http://localhost:11434 +OLLAMA_HOST=http://localhost:11434 +OLLAMA_KEEP_ALIVE=30m + +# Expert and router tier model routing. +OLLAMA_CUSTOM_MODEL_NAME=options-expert-v1:latest +OLLAMA_ROUTER_MODEL=llama3:latest +OLLAMA_INGESTION_MODEL=llama3:latest + +# Optional per-role overrides. +OLLAMA_ANALYST_MODEL=options-expert-v1:latest +OLLAMA_CHECKER_MODEL=options-expert-v1:latest +OLLAMA_CRITIC_MODEL=options-expert-v1:latest +OLLAMA_FINALIZER_MODEL=options-expert-v1:latest +OLLAMA_FINALIZER_ENRICHMENT_MODEL=llama3:latest + +# ----------------------------------------------------------------------------- +# IV. Retrieval and Embedding Controls +# ----------------------------------------------------------------------------- +EMBEDDING_PROVIDER=huggingface +EMBEDDING_MODEL_NAME=BAAI/bge-large-en-v1.5 +EMBEDDING_DEVICE=cpu +RETRIEVER_DEVICE=cpu +FASTEMBED_THREADS=4 +SPARSE_MODEL_NAME=prithivida/Splade_PP_en_v1 +RERANKER_MODEL_NAME=BAAI/bge-reranker-v2-m3 +DATA_LAKE_ROOT=./Data + +# ----------------------------------------------------------------------------- +# V. Agent Risk and Governance Controls +# ----------------------------------------------------------------------------- +AGENT_MAX_REVISIONS=3 +CHECKER_NUMERIC_TOLERANCE=0.02 +CHECKER_TOOL_RECOVERY=1 +CHECKER_MACRO_EXEMPT_ENABLED=1 +CHECKER_COVERAGE_CHECK_ENABLED=1 +INSIDER_SIGNAL_MIN_COUNT=3 + +# Optional analyst/finalizer tuning. +ANALYST_TEMPERATURE=0.1 +CRITIC_TEMPERATURE=0.0 +FINALIZER_TEMPERATURE=0.0 +FINALIZER_LLAMA3_ENRICHMENT=0 + +# ----------------------------------------------------------------------------- +# VI. Routing and Performance Controls +# ----------------------------------------------------------------------------- +ROUTER_TEMPERATURE=0.0 +GOLD_TIMEOUT=10.0 +SILVER_TIMEOUT=10.0 +SILVER_MAX_TICKERS=5 +HE_NOVEL_TICKERS_CAP=3 +TICKER_EXPLOSION_CAP=8 +TICKER_EXPLOSION_KEEP=5 + +# ----------------------------------------------------------------------------- +# VII. Optional Runtime and Cache Controls +# ----------------------------------------------------------------------------- +PYTHON_ENV=dev +YFINANCE_CACHE_DIR= +XDG_CACHE_HOME= +TMPDIR= diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index b5182ed..0000000 --- a/Dockerfile +++ /dev/null @@ -1,22 +0,0 @@ -# Use official Python base image -FROM python:3.11-slim - -# Set working directory -WORKDIR /app - -# Install system dependencies for building native extensions -RUN apt-get update && apt-get install -y --no-install-recommends gcc build-essential && rm -rf /var/lib/apt/lists/* - -# Copy dependency file -COPY requirements.txt . - -# Install Python dependencies -# --no-cache-dir reduces image size -RUN pip install --no-cache-dir -r requirements.txt - -# Copy project files -COPY . . - -# Default command -# Run main application -CMD ["python", "src/main.py"] diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml deleted file mode 100644 index fb2be6a..0000000 --- a/docker-compose.prod.yml +++ /dev/null @@ -1,79 +0,0 @@ -version: '3.8' - -services: - app: - build: . - container_name: financial_agent_app_prod - stdin_open: true - tty: true - environment: - - QDRANT_HOST=qdrant_vdb - - OLLAMA_HOST=http://ollama_llm:11434 - - OLLAMA_MODEL=options-expert - - YOUTUBE_API_KEY=AIzaSyD1hA6jbyKxj6x3m96FM87Dci_MBttsHBY - - YOUTUBE_CHANNEL_IDS=UCxiCqC3t-v4sM-i7-B7L_yg,UCK7tptUDHh-RYDsdxO1-5QQ,UCGy7SkBjcIAgTiwkXEtPnYg,UCUvvj5lwue7PspotMDjk5UA,UCn3rGS5AtyYJ1uNl4gS8qDg,UCb-yR6Q_E-qL8zF2NnE0UBA,UCT3EznhW_CNFcfOlyDNTLLw,UCtqYfJvM_5iH5n_e9R4F9_g,UCXq_QyB5g8F5_sBw-5B8-2Q,UCQ7_GMxQe4_S66w-oX9JvAg,UC0n9yiP-AD2DpuuYCDwlNxQ,UCZRlaA_QK7tE6P6B6L7P-8w,UCYXwqqzEyUOGWmFQc4JjQ_w,UCg3Z29Husv_W8oT61j82GqA,UC2X8F50H6R-4yI726J_z68Q,UC26jQ450yWz838N0H7T5Dkg,UCxX8R7nI93o2I93sYJg3JGA,UCU6X4B36jQxL1m9kKxK3x6A,UCX_R0gXv_W-hEw7fG7dJ0qQ,UCx6d_wY9eGzX7tFw8dY1l7g - - YOUTUBE_VIDEOS_PER_CHANNEL=3 - - FRED_API_KEY=${FRED_API_KEY} - - NEWS_API_KEY=${NEWS_API_KEY} - - REDDIT_CLIENT_ID=${REDDIT_CLIENT_ID} - - REDDIT_CLIENT_SECRET=${REDDIT_CLIENT_SECRET} - - REDDIT_USER_AGENT=${REDDIT_USER_AGENT} - - SEC_API_KEY=${SEC_API_KEY} - volumes: - - ./src:/app/src - - ./reports:/app/reports - - ./logs:/app/logs - depends_on: - - qdrant_vdb - - ollama_llm - networks: - - financial_net - restart: unless-stopped - healthcheck: - test: ["CMD", "python", "-c", "import sys; sys.exit(0)"] - interval: 30s - timeout: 10s - retries: 3 - - qdrant_vdb: - image: qdrant/qdrant:v1.9.2 - container_name: qdrant_vdb_prod - ports: - - "6333:6333" - volumes: - - qdrant_data:/qdrant/storage - networks: - - financial_net - restart: unless-stopped - healthcheck: - test: ["CMD-SHELL", "nc -z localhost 6333 || exit 1"] - interval: 30s - timeout: 10s - retries: 3 - - ollama_llm: - image: ollama/ollama:latest - container_name: ollama_llm_prod - ports: - - "11434:11434" - volumes: - - ollama_data:/root/.ollama - networks: - - financial_net - restart: unless-stopped - stdin_open: true - tty: true - healthcheck: - test: ["CMD-SHELL", "nc -z localhost 11434 || exit 1"] - interval: 30s - timeout: 10s - retries: 3 - - -volumes: - qdrant_data: - ollama_data: - -networks: - financial_net: - driver: bridge diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index 4866b25..0000000 --- a/docker-compose.yml +++ /dev/null @@ -1,50 +0,0 @@ -services: - app: - build: . - container_name: financial_agent_app - environment: - - QDRANT_HOST=qdrant_vdb - - OLLAMA_HOST=http://ollama_llm:11434 - - OLLAMA_MODEL=mistral:7b-instruct-q4_0 - - YOUTUBE_API_KEY=AIzaSyD1hA6jbyKxj6x3m96FM87Dci_MBttsHBY - - YOUTUBE_CHANNEL_IDS=UCBJycsmduvYEL83R_U4JriQ,UCq9RcdZ2YFxyC6q_Mz0S8xw,UCwLBOxZQ5e3m0h-9B5N6Qxg,UCtUId5WZ07w6bZg7m8z6m2g,UCnh4zO0A7bQKwQ6C2Jr3Hyw,UC5xDht2blPNWdVZ9M2Z9bBg,UCBJycsmduvYEL83R_U4JriQ,UCq9RcdZ2YFxyC6q_Mz0S8xw,UCwLBOxZQ5e3m0h-9B5N6Qxg,UCtUId5WZ07w6bZg7m8z6m2g - - YOUTUBE_VIDEOS_PER_CHANNEL=5 - volumes: - - ./src:/app/src - depends_on: - - qdrant_vdb - - ollama_llm - networks: - - financial_net - stdin_open: true - tty: true - - qdrant_vdb: - - image: qdrant/qdrant:v1.9.2 - - container_name: qdrant_vdb - ports: - - "6333:6333" - volumes: - - qdrant_data:/qdrant/storage - networks: - - financial_net - - ollama_llm: - image: ollama/ollama:latest - container_name: ollama_llm - ports: - - "11434:11434" - volumes: - - ollama_data:/root/.ollama - networks: - - financial_net - -volumes: - qdrant_data: - ollama_data: - -networks: - financial_net: - diff --git a/docs/Data_source_docs/data_architecture.md b/docs/Data_source_docs/data_architecture.md deleted file mode 100644 index e685824..0000000 --- a/docs/Data_source_docs/data_architecture.md +++ /dev/null @@ -1,175 +0,0 @@ -# Data Architecture - -```text -📦 Data/ -┣ 📂 1_Bronze_Raw/ # 🥉 Bronze: scrape output, raw text, inputs for debug and traceability -┃ -┃ ┣ 📂 SEC_Parsed_JSON/ # SEC EDGAR parsed output (JSONL, not raw HTML/XML) -┃ ┃ ┗ 📂 2026-04-09/ -┃ ┃ ┣ 📜 AAPL.jsonl -┃ ┃ ┣ 📜 MSFT.jsonl -┃ ┃ ┗ 📜 _SUMMARY.json -┃ ┃ 💡 Notes: -┃ ┃ - Produced by `sec_ingestion.py` -┃ ┃ - Fetch and parse are done, but this layer is still Bronze -┃ ┃ - Structured raw parse for Form 4 / 8-K -┃ ┃ - No final vectorization yet; not loaded directly into Qdrant -┃ -┃ ┣ 📂 News_Scrapes/ # News scrape (Bronze) -┃ ┃ ┗ 📂 2026-04-09/ -┃ ┃ ┣ 📂 Raw/ -┃ ┃ ┃ ┣ 📜 raw_gdelt_macro_central_banks.jsonl -┃ ┃ ┃ ┣ 📜 raw_gdelt_macro_inflation_employment.jsonl -┃ ┃ ┃ ┣ 📜 raw_gdelt_macro_yields_dollar.jsonl -┃ ┃ ┃ ┣ 📜 raw_gdelt_macro_geopolitics_risk.jsonl -┃ ┃ ┃ ┣ 📜 raw_gdelt_asset_precious_metals_spot.jsonl -┃ ┃ ┃ ┗ 📜 raw_gdelt_asset_metals_derivatives.jsonl -┃ ┃ ┗ 📂 Full_text/ -┃ ┃ ┣ 📜 full_text_macro_central_banks.jsonl -┃ ┃ ┣ 📜 full_text_macro_inflation_employment.jsonl -┃ ┃ ┣ 📜 full_text_macro_yields_dollar.jsonl -┃ ┃ ┣ 📜 full_text_macro_geopolitics_risk.jsonl -┃ ┃ ┣ 📜 full_text_asset_precious_metals_spot.jsonl -┃ ┃ ┗ 📜 full_text_asset_metals_derivatives.jsonl -┃ ┃ 💡 Notes: -┃ ┃ - `Raw/` holds raw GDELT responses -┃ ┃ - `Full_text/` holds full-article scrape results -┃ ┃ - Bronze already dedupes and fetches full text; not yet final semantic input -┃ ┃ - Optional TTL on raw scrapes for debug / replay -┃ -┃ ┗ 📂 GPR_index/ # GPR raw preview -┃ ┗ 📂 2026-04-09/ -┃ ┗ 📜 gpr_preview.csv -┃ 💡 Notes: -┃ - Short-window preview for quick manual checks -┃ - Not the main analysis base; Silver / Gold hold that -┃ -┣ 📂 2_Silver_Processed/ # 🥈 Silver: structured layer for Pandas / numeric work / strategies -┃ -┃ ┣ 📂 Options_Market_Data/ # Options chains, IV, liquidity, spreads, term structure -┃ ┃ ┗ 📂 2026-04-09/ -┃ ┃ ┣ 📜 SPY_options_2026-04-09.parquet -┃ ┃ ┣ 📜 QQQ_options_2026-04-09.parquet -┃ ┃ ┣ 📜 IWM_options_2026-04-09.parquet -┃ ┃ ┣ 📜 GLD_options_2026-04-09.parquet -┃ ┃ ┗ 📜 SLV_options_2026-04-09.parquet -┃ ┃ 💡 Notes: -┃ ┃ - From `yfinance_options_history.py` -┃ ┃ - Cleaned + derived fields: `dte`, `moneyness_pct`, `spread_pct`, `is_liquid` -┃ ┃ - Core quant track; not ingested into Qdrant -┃ ┃ - Suited for Pandas / DataFrame agents / tool calls -┃ -┃ ┣ 📂 Macro_History/ # Structured macro + market snapshot history -┃ ┃ ┗ 📂 2026-04-09/ -┃ ┃ ┗ 📜 macro_snapshot_2026-04-09.parquet -┃ ┃ 💡 Notes: -┃ ┃ - From `macro_data_pipeline.py` -┃ ┃ - Daily market + monthly macro stitched -┃ ┃ - Includes `daily_change_pct`, `mom_change_pct`, `yoy_change_pct` -┃ ┃ - Numeric analysis and history; not loaded directly into Qdrant -┃ -┃ ┗ 📂 GPR_index/ -┃ ┗ 📜 gpr_monthly_enriched.parquet -┃ 💡 Notes: -┃ - From `GPR_index.py` -┃ - MoM / YoY / 3M MA / historical quantiles, etc. -┃ - Canonical structured history; overwritten on refresh -┃ - Structured analysis; not the main vector-store input -┃ -┣ 📂 3_Gold_Semantic/ # 🥇 Gold: semantic layer for LLM / RAG / Qdrant -┃ -┃ ┣ 📂 SEC_Insider_Trades/ # SEC: high-density semantic summaries after processing -┃ ┃ ┗ 📂 2026-04-09/ -┃ ┃ ┗ 📜 qdrant_ready.jsonl -┃ ┃ 💡 Notes: -┃ ┃ - From `sec_processor.py` -┃ ┃ - Form 4: rule-based summary (tone / action_direction / summary) -┃ ┃ - Form 8-K: local Ollama `llama3` JSON summary + sentiment -┃ ┃ - One of the files ingested directly into Qdrant -┃ -┃ ┣ 📂 News_Qdrant/ # News: semantic refinement for vectors -┃ ┃ ┗ 📂 2026-04-09/ -┃ ┃ ┣ 📜 qdrant_macro_central_banks_processed.jsonl -┃ ┃ ┣ 📜 qdrant_macro_inflation_employment_processed.jsonl -┃ ┃ ┣ 📜 qdrant_macro_yields_dollar_processed.jsonl -┃ ┃ ┣ 📜 qdrant_macro_geopolitics_risk_processed.jsonl -┃ ┃ ┣ 📜 qdrant_asset_precious_metals_spot_processed.jsonl -┃ ┃ ┗ 📜 qdrant_asset_metals_derivatives_processed.jsonl -┃ ┃ 💡 Notes: -┃ ┃ - From `news_scraper.py` -┃ ┃ - Refined with local Ollama `llama3`: English title, dense summary, tone, entities, affected assets, vol impact -┃ ┃ - Filters junk (cookies, 404s, noisy text) -┃ ┃ - One of the files ingested directly into Qdrant -┃ -┃ ┣ 📂 Macro_Narratives/ # Macro: semantic context (Markdown) -┃ ┃ ┗ 📂 2026-04-09/ -┃ ┃ ┗ 📜 macro_context_2026-04-09.md -┃ ┃ 💡 Notes: -┃ ┃ - From `macro_data_pipeline.py` -┃ ┃ - Not Ollama-generated; rule-templated RAG Markdown -┃ ┃ - Primarily LLM context documents today -┃ ┃ - `Qdrant_Ingestion.py` only scans `*.jsonl`, so `.md` is not ingested by default -┃ -┃ ┗ 📂 GPR_index/ # GPR: semantic narrative layer -┃ ┗ 📂 2026-04-09/ -┃ ┣ 📜 gpr_narrative_corpus.md -┃ ┗ 📜 qdrant_gpr_input.jsonl -┃ 💡 Notes: -┃ - From `GPR_index.py` -┃ - Narrative markdown is rule-templated, not Ollama-summarized -┃ - `qdrant_gpr_input.jsonl` is ready-to-ingest semantic input for Qdrant -┃ - Deterministic UUIDs for idempotent upserts across reruns -┃ -┗ 📂 Agent_Context/ # Stable context entry point for agents - ┗ 📜 latest_macro_context.md - 💡 Notes: - - Overwritten daily by `macro_data_pipeline.py` - - Stable path without date partitions for agent / system-prompt injection -``` - -## Architecture overview - -### 1. Bronze layer - -- Holds raw scrape output, raw parses, and full-text intermediates. -- Optimized for traceability and debugging, not LLM ergonomics. -- `News_Scrapes` and `SEC_Parsed_JSON` are still intermediates, not final semantic inputs. - -### 2. Silver layer - -- Parquet suited to structured analysis. -- Primarily powers quant logic, tabular analysis, filtering, and strategy code. -- `Options_Market_Data`, `Macro_History`, and `GPR_index` should not be the main direct inputs to Qdrant. - -### 3. Gold layer - -- High-density semantic artifacts for RAG / LLM. -- What `Qdrant_Ingestion.py` auto-discovers and ingests is `3_Gold_Semantic/*/*/*.jsonl`. -- What actually enters Qdrant today is mainly: -- `SEC_Insider_Trades/{date}/qdrant_ready.jsonl` -- `News_Qdrant/{date}/qdrant_*_processed.jsonl` -- `GPR_index/{date}/qdrant_gpr_input.jsonl` - -### 4. Agent_Context layer - -- Not part of classic Bronze/Silver/Gold, but important for agents. -- Holds a “latest stable snapshot” so agents do not have to infer date folders every time. - -## Processing status summary - - -| Data source | Bronze | Silver | Gold | Ollama / LLM | Qdrant | -| ------------------- | ------------- | ------ | ---- | ------------------------------------------------ | ---------------- | -| SEC Form 4 / 8-K | Yes | No | Yes | Yes. Form 4: rules; 8-K: Ollama `llama3` summary | Yes | -| News / GDELT | Yes | No | Yes | Yes. Ollama `llama3` refinement and labels | Yes | -| Macro / Market | No | Yes | Yes | No. Template-built Markdown today | No by default | -| GPR Index | Yes (preview) | Yes | Yes | No. Rule-generated narrative | Yes (JSONL only) | -| Options market data | No | Yes | No | No | No | - - -## Important notes - -- The stable agent context path in this project is `Data/Agent_Context/`, not `3_Gold_Semantic/Agent_Context/`. -- `Qdrant_Ingestion.py` scans `3_Gold_Semantic / / / *.jsonl`, so only Gold JSONL is auto-ingested into the vector store. -- `Macro_Narratives/*.md` lives under Gold but is not ingested by the current script unless `.md` ingestion is added later. - diff --git a/docs/PRODUCTION_OPS_NOTES.md b/docs/PRODUCTION_OPS_NOTES.md deleted file mode 100644 index ecfe69d..0000000 --- a/docs/PRODUCTION_OPS_NOTES.md +++ /dev/null @@ -1,69 +0,0 @@ -### \#\# Example Run: Daily Report Generation - -This example documents a typical daily production run, demonstrating the flow from data ingestion to final report generation. - - * **Inputs** - - * **Knowledge Base:** Qdrant vector collection `financial_signals`. - * **LLM Endpoint:** `http://ollama_llm_prod:11434` serving the `options-expert` model. - * **Execution Date:** 2025-10-06 - - * **Execution Command** - - ```bash - docker exec financial_agent_app_prod python src/tools/generate_production_report.py - ``` - - * **Log Highlights & Process Flow** - - 1. **Data Ingestion & Vectorization:** The pipeline initiated scrapers for all configured sources (YouTube, News, Reddit, FRED, SEC). It successfully fetched **68 relevant signals** related to market sentiment and specific tickers. - * For YouTube and Yahoo Finance videos where transcripts were unavailable, the system correctly created **fallback documents** (title + description + URL), ensuring no contextual data was lost. - 2. **Multi-Agent Analysis:** The core agent system was triggered. - * The **Analyst agent** queried the Qdrant collection, retrieving contextually relevant signals and synthesizing an initial list of **8 candidate ideas**. - * The **Checker agent** cross-referenced facts, and the **Critic agent** challenged underlying assumptions, filtering out weak or unsupported theses. - 3. **Finalization & Enrichment:** The system deduplicated the validated ideas by ticker and strategy, resulting in **5 final, high-conviction recommendations**. - * Tickers included in the final report were **GS, MS, BAC, BA, and UPS**. - * The `yfinance_client` was used to enrich each idea with real-time strike prices, expiration dates, and liquidity data. - - * **Outputs** - The final reports were successfully saved to the target directory: - - * **JSON:** `reports/2025-10-06/options_ideas.json` - - * **Markdown:** `reports/2025-10-06/options_ideas.md` - - * **Example Markdown Output Snippet:** - - ```markdown - ### Goldman Sachs (GS) - Bullish Call Spread - * **Ticker:** GS - * **View:** Bullish - * **Strategy:** Vertical Call Spread - * **Candidate:** Buy GS OCT 410C / Sell GS OCT 420C - * **Rationale:** Recent positive analyst commentary and sector-wide strength in investment banking suggest short-term upside. A spread strategy is chosen to cap cost basis given recent market volatility. - * **Confidence:** Medium - ``` - ------ - -### \#\# “What Else I Found”: High-Signal Sources & Their Utility - -* **SEC Insider Trading Filings (e.g., Form 4)** - * **Signal:** Provides strong, direct evidence of corporate insider conviction. Large open-market buys or sells are unambiguous directional cues that can precede significant price movements. - * **Utility:** Excellent for identifying high-conviction directional bias (bullish/bearish) on specific stocks and for validating theses generated from other, noisier sources. - -* **FRED Macroeconomic Data** - * **Signal:** Offers a clear view of the macroeconomic regime (e.g., inflationary, recessionary, high/low interest rates). Key series like `VIX`, `FEDFUNDS`, and `CPI` are critical inputs. - * **Utility:** Informs high-level strategy selection. For example, a high VIX reading (high implied volatility) suggests that selling options premium (e.g., credit spreads) may be more advantageous than buying it. - -* **News (NewsAPI) & Social Media (YouTube/Reddit)** - * **Signal:** Captures real-time sentiment, emerging narratives, and timely, event-driven catalysts that quantitative models might miss. - * **Utility:** Acts as the primary source for identifying *why* a stock might be moving. While these signals can be noisy and require validation, they are invaluable for understanding the story behind the numbers. - -* **Corporate Disclosures (Earnings Calendars & Investor Relations Feeds)** - * **Signal:** Provides scheduled, high-impact event catalysts. Earnings announcements are predictable drivers of significant volatility. - * **Utility:** Essential for planning event-driven trades (e.g., straddles, strangles) around earnings releases to capitalize on the expected increase in implied volatility. - -* **Market Data (Options Chains via `yfinance`)** - * **Signal:** Delivers the "ground truth" of the options market, including pricing, liquidity (Open Interest and Volume), and implied volatility across different strikes and expirations. - * **Utility:** Critical for the final step of trade construction. It is used to sanity-check an idea for feasibility, select liquid and reasonably priced strikes, and ensure the trade is practical to execute. \ No newline at end of file diff --git a/docs/Query_retrieval_docs/Time_Schema_Audit.md b/docs/Query_retrieval_docs/Time_Schema_Audit.md deleted file mode 100644 index b92c859..0000000 --- a/docs/Query_retrieval_docs/Time_Schema_Audit.md +++ /dev/null @@ -1,288 +0,0 @@ -# Time Schema Audit — All Data Sources - -> **Authoritative reference for every time column / payload key in the lake.** -> Updated: 2026-04-22 · Owner: RAG architecture -> Companion module: `Scripts/retrieval/time_adapter.py` -> Companion audit log: `logs/retrieval//retriever_audit_trail.jsonl` (field `source_predicates`) - ---- - -## 0. Why this document exists - -A RAG system that mixes Qdrant (vector) and Parquet (SQL) cannot apply a single -`(start_ts, end_ts)` window to every query: each source stores time differently -and runs on a different cadence. Before this audit a "yesterday" query against -GPR returned `0` rows (monthly source, no daily data exists), and a "past week" -query against legacy SEC returned `0` hits (no numeric timestamp key in payload). - -The fix is a **per-source Time Alignment Adapter** (`time_adapter.py`) that -compiles one `TimePredicate` per source, applying source-specific widening -rules. This document is the source of truth for what keys exist, their units, -and the widening policy applied in production. - ---- - -## 1. Silver Layer (Parquet / DuckDB) - -### 1.1 Options Market Data - -| Attribute | Value | -|-------------------|-------| -| Path (glob) | `Data/2_Silver_Processed/Options_Market_Data//_options_.parquet` | -| Writer | `Scripts/data_collection/scrapers/yfinance_options_history.py` | -| Cadence | **Daily** (trading days only; weekends/holidays missing) | -| Primary time col | `snapshot_date` | -| Other time cols | `expiration` (contract expiry, not snapshot) | -| Physical type | `VARCHAR` (`YYYY-MM-DD`) | -| Timezone | US market close (approx `America/New_York`); stored naive | -| Cast for BETWEEN | `CAST(snapshot_date AS DATE) BETWEEN CAST(? AS DATE) AND CAST(? AS DATE)` | -| Granularity enum | `TimeGranularity.DAILY` | -| Min lookback | `3 days` (survives weekend gap on Monday-anchored "yesterday") | -| `SourceTimeKey` | `silver.options` | - -### 1.2 Macro History - -| Attribute | Value | -|-------------------|-------| -| Path (glob) | `Data/2_Silver_Processed/Macro_History//macro_snapshot_.parquet` | -| Writer | `Scripts/data_collection/scrapers/macro_data_pipeline.py` | -| Cadence | **Mixed** — Daily (Yahoo Finance) + Monthly (FRED) interleaved | -| Primary time col | `observation_date` (authoritative series date) | -| Other time cols | `retrieval_date` (ingestion day) | -| Physical type | `VARCHAR` (`YYYY-MM-DD`) | -| Timezone | UTC (observation) / local ingest (retrieval) — stored naive | -| Cast for BETWEEN | `CAST(observation_date AS DATE) BETWEEN CAST(? AS DATE) AND CAST(? AS DATE)` | -| Granularity enum | `TimeGranularity.DAILY` (predominant; monthly rows survive via `ORDER BY observation_date DESC LIMIT 1`) | -| Min lookback | `3 days` | -| `SourceTimeKey` | `silver.macro` | - -> **Frequency column:** rows also carry a `frequency ∈ {"Daily", "Monthly"}` -> field. Analyst can use it to disambiguate CPI / UNRATE (Monthly) from ^GSPC -> / VIX (Daily) without requiring separate partitions. - -### 1.3 GPR Index (Silver) - -| Attribute | Value | -|-------------------|-------| -| Path | `Data/2_Silver_Processed/GPR_index/gpr_monthly_enriched.parquet` (single file, overwritten in place) | -| Writer | `Scripts/data_collection/scrapers/GPR_index.py` | -| Cadence | **Monthly** (first-of-month rows) | -| Primary time col | `date` | -| Other time cols | `month` (duplicate of `date`) | -| Physical type | `TIMESTAMP_NS` (pandas/arrow nanosecond timestamp) | -| Timezone | UTC, stored naive | -| Cast for BETWEEN | `date BETWEEN ? AND ?` (DuckDB coerces `DATE` → `TIMESTAMP_NS` automatically) | -| Granularity enum | `TimeGranularity.MONTHLY` | -| Min lookback | `35 days` (always widens to the full anchor month) | -| `SourceTimeKey` | `silver.gpr` | - -> **Widening example:** a `"yesterday"` query (2d base) is widened to -> `[first-of-month(anchor), anchor]` (≥28 d) so the latest GPR row for the -> anchor month is always inside the window. Without this, monthly data is -> effectively invisible to short-horizon queries. - ---- - -## 2. Gold Layer (Qdrant vector store) - -All Gold payloads share a **canonical time key**: `unified_timestamp` -(Unix seconds, integer, UTC). Legacy payloads that predate the -2026-04-22 ingestion fix may still be missing this key — the retriever -supports either via a nested `Filter(should=[...])` on `unified_timestamp` -OR `publish_timestamp` (see §4). - -### 2.1 News — `source_type == "news"` - -| Key | Physical type | Unit | Required? | Notes | -|-------------------------|---------------|-------------|-----------|-------| -| `unified_timestamp` | `int` | epoch_s | Post-fix | Mirror of `publish_timestamp` on ingest | -| `publish_timestamp` | `int` | epoch_s | Yes | Event time, written by `news_scraper.py` | -| `publish_date` | `str` | ISO-8601 Z | Yes | Human-readable companion (e.g. `2026-04-19T16:29:12Z`) | - -| Attribute | Value | -|-----------------|-------| -| Cadence | Event (sub-daily) | -| Granularity enum| `TimeGranularity.EVENT` | -| Min lookback | `1 day` | -| `SourceTimeKey` | `gold.news` | - -### 2.2 SEC Insider Trades — `source_type == "sec"` - -| Key | Physical type | Unit | Required? | Notes | -|-------------------------|---------------|----------------|---------------|-------| -| `unified_timestamp` | `int` | epoch_s | Post-fix only | Derived from `transaction_date` (preferred), else `filed_at`, else `ingested_at`. **Absent on pre-2026-04-22 ingests.** | -| `filed_at` | `str` | ISO-8601 + TZ | Yes | e.g. `2026-04-13T18:30:45-04:00` (America/New_York) | -| `transaction_date` | `str` | ISO date | Yes | Actual trade date, no TZ (e.g. `2026-04-13`) | -| `ingested_at` | `str` | ISO datetime | Yes | Bronze-layer ingestion timestamp (naive, local) | -| `processed_at` | `str` | ISO datetime | Yes | Gold-layer processing timestamp | - -| Attribute | Value | -|-----------------|-------| -| Cadence | Event (sub-daily, but bursty around market close) | -| Granularity enum| `TimeGranularity.EVENT` | -| Min lookback | `3 days` (filings often clump on Monday post-weekend; 3-day floor keeps recall non-zero) | -| `SourceTimeKey` | `gold.sec` | - -> **⚠️ Pre-reingest risk.** Because legacy SEC payloads have **neither -> `unified_timestamp` nor `publish_timestamp`**, a Qdrant numeric Range -> filter on these docs matches nothing. The retriever mitigation is -> documented in §4 ("Source-type logic check"), and the permanent fix is -> running `Scripts/Qdrant_Ingestion.py` to backfill `unified_timestamp`. - -### 2.3 GPR (Gold) — `source_type == "gpr"` - -| Key | Physical type | Unit | Required? | Notes | -|-------------------------|---------------|--------|-----------|-------| -| `unified_timestamp` | `int` | epoch_s| Post-fix | Mirror of `publish_timestamp` | -| `publish_timestamp` | `int` | epoch_s| Yes | First-of-month epoch seconds | -| `publish_date` | `str` | ISO date| Yes | e.g. `2020-01-01` | - -| Attribute | Value | -|-----------------|-------| -| Cadence | **Monthly** (one point per month) | -| Granularity enum| `TimeGranularity.MONTHLY` | -| Min lookback | `35 days` | -| `SourceTimeKey` | `gold.gpr` | - ---- - -## 3. Registry summary (single glance) - -| SourceTimeKey | Layer | Cadence | Time keys (priority order) | Units | Min lookback | -|----------------------|--------|----------|----------------------------------------------------------|----------------------------------------------|--------------| -| `gold.news` | Gold | Event | `unified_timestamp`, `publish_timestamp` | `epoch_s`, `epoch_s` | 1 d | -| `gold.sec` | Gold | Event | `unified_timestamp`, `filed_at`, `transaction_date` | `epoch_s`, `iso_datetime`, `iso_date` | 3 d | -| `gold.gpr` | Gold | Monthly | `unified_timestamp`, `publish_timestamp` | `epoch_s`, `epoch_s` | 35 d | -| `silver.options` | Silver | Daily | `snapshot_date` | `iso_date` | 3 d | -| `silver.macro` | Silver | Daily | `observation_date`, `retrieval_date` | `iso_date`, `iso_date` | 3 d | -| `silver.gpr` | Silver | Monthly | `date`, `month` | `ts_ns`, `ts_ns` | 35 d | - -This table is the machine-readable registry `SOURCE_SPECS` in -`Scripts/retrieval/time_adapter.py`. Keep them in sync. - ---- - -## 4. Source-type logic check: `source_types = ["sec", "news"]` - -**Question:** does simultaneously matching `unified_timestamp` OR -`publish_timestamp` across mixed source types create a logic problem? - -**Answer:** no, provided re-ingestion has run. In detail: - -| Payload family | `unified_timestamp` present? | `publish_timestamp` present? | Behaviour under nested `should` filter | -|----------------------|------------------------------|------------------------------|----------------------------------------| -| News (any vintage) | Yes (post-fix) / No (legacy) | **Yes** | Always matches via `publish_timestamp` | -| GPR (any vintage) | Yes (post-fix) / No (legacy) | **Yes** | Always matches via `publish_timestamp` | -| SEC (post-fix) | **Yes** | No | Matches via `unified_timestamp` | -| SEC (legacy) | No | No | **Does not match — invisible to time filter** | - -The `Filter(should=[...])` clause is satisfied when **at least one** timestamp -key lands in range. So mixing `["sec", "news"]`: -- News docs always pass (they carry `publish_timestamp`). -- Post-reingest SEC docs pass via `unified_timestamp`. -- Legacy SEC docs are silently excluded — operationally indistinguishable - from "no SEC data exists for this window", which is a **correctness - win** (do not emit false SEC anchors) at the cost of **recall** (missing - docs whose timestamp existed only as an ISO string). - -### 4.1 Operational mitigation - -1. **Re-ingest SEC via `Scripts/Qdrant_Ingestion.py`.** The ingestion - enricher (patched 2026-04-22) now parses `transaction_date` → Unix - seconds and writes `unified_timestamp` for every SEC document. This - permanently removes the legacy-blind-spot. -2. **Audit visibility.** Every retriever run writes - `source_predicates` + `filter_applied` to - `logs/retrieval//retriever_audit_trail.jsonl`. Operators can - query for `fallback_tier != "strict" AND source_type_contains("sec")` - to quantify the legacy SEC gap over time. - -### 4.2 Why this design is still the right one - -Alternatives considered and rejected: - -| Alternative | Why rejected | -|--------------------------------------------|------------------------------------------------------------------------------| -| Require only `unified_timestamp` | Hard breaking change; blanks out ALL legacy news/gpr docs too | -| Add `filed_at` as a string Range condition | Qdrant `Range` is numeric-only; string ranges need `DatetimeRange` (1.8+) | -| Duplicate every doc into multiple keys | Index bloat; cannot backfill without re-vectorising | -| Per-source sub-queries joined at app layer | 3× Qdrant round-trips; breaks RRF fusion because each source has its own topk| - -Nested `should` on `{unified_timestamp, publish_timestamp}` gives us one -Qdrant call, backward compat, and a clean migration path. The Gold -retriever (`qdrant_retriever._build_smart_filter`) implements it. - ---- - -## 5. Robust time handling — recommendations - -These are the patterns this codebase now uses; keep them as guardrails. - -### 5.1 Compile once, execute everywhere -`MasterRetriever._compute_time_range` calls `time_adapter.compile_all(...)` -and publishes the `{SourceTimeKey → TimePredicate}` dict on -`self._current_predicate_set`. Both Gold (`qdrant_retriever`) and Silver -(`sql_tools`) read from that compiled set — no retriever ever re-derives -the window from raw `metadata.time_window`. This is the single invariant -that kills off cross-layer drift. - -### 5.2 Anchor = latest successful ingestion, not `date.today()` -Anchor dates come from `config/runtime/collect_data_state.json` -(`SilverSQLTool._get_anchor_date`). Weekends, holidays, and backfills all -land on the last known-good partition. Wall-clock-anchored queries are a -pre-2026-04-04 anti-pattern; see the "Dynamic Time Anchor" note in -`sql_tools.py`. - -### 5.3 Per-source widening is source-spec-driven, not query-spec-driven -Widening rules (monthly → month-wide, daily → 3-day weekend-safe) live -on `SourceTimeSpec.min_lookback_days`. Never embed them in handler -branches — add a spec row instead. - -### 5.4 Always store **both** a numeric epoch **and** a human ISO -Every new ingestion writer must emit `unified_timestamp` (Unix seconds, -integer, UTC) AND a readable ISO date companion (`publish_date` / -`transaction_date` / `observation_date`). The epoch key is what filters -bind to; the ISO string is what humans and audit logs cite. Do not make -operators reverse-engineer epoch offsets during an incident. - -### 5.5 Timezone normalisation at ingest, not at query -The ingestion enricher converts all timestamps to UTC before storing. -Downstream code can treat every Unix epoch as UTC. If a new source -writes local-time ISO strings, fix it at the ingest boundary, not in -the retriever. - -### 5.6 Weekend-safe "end-of-day" bounds -`time_adapter._to_epoch_bounds` pushes `end_date` to `23:59:59 UTC` so -a same-day query (e.g. `today`) still matches events that occurred -during the day. This is the small detail that makes `yesterday` queries -not empty when the anchor is "today". - -### 5.7 Hard filter + soft fallback, never hard filter alone -The Gold retriever has three tiers: strict (per-source aligned window), -soft (180-day + ticker-OR-topic), drop (180-day no ticker). The first -non-empty tier wins, and the tier label is persisted in the audit log -(`fallback_tier`). Monitor "tier != strict" rates as a data-freshness -signal. - -### 5.8 Mandatory audit keys -Every retriever call must emit: -- `source_predicates`: serialised per-source TimePredicates -- `fallback_tier`: `strict | soft_ticker_180d | drop_ticker_180d | error` -- `filter_applied`: the Qdrant Filter object (Pydantic dump) -- `window_days`, `start_date`, `end_date` - -Any retriever that omits these is a regression. - ---- - -## 6. Implementation cross-reference - -| Concern | File | Anchor | -|-----------------------------|-----------------------------------------------|---------------------------------| -| Semantic `TimeWindow` enum | `Scripts/retrieval/schema.py` | `class TimeWindow` + `TIME_WINDOW_DAYS` | -| Per-source compiler | `Scripts/retrieval/time_adapter.py` | `compile_predicate`, `compile_all`, `SOURCE_SPECS` | -| Orchestration / wiring | `Scripts/retrieval/master_retriever.py` | `_compute_time_range`, `_current_predicate_set` | -| Gold retriever binding | `Scripts/retrieval/qdrant_retriever.py` | `_build_smart_filter`, `_select_gold_predicates`, `retrieve_async(time_predicates=...)` | -| Silver retriever binding | `Scripts/retrieval/sql_tools.py` | `query_parquet_by_metadata(time_predicates=...)`, `_predicate_for`, `_handle_put_call_ratio` | -| Ingestion-side guarantees | `Scripts/Qdrant_Ingestion.py` | `_enrich_for_qdrant` (forces `unified_timestamp` for news / SEC / GPR) | -| Anchor (calendar truth) | `config/runtime/collect_data_state.json` | `last_run_keys.{options_daily, macro_trading_daily, gpr_monthly, news_daily}` | diff --git a/fix_ollama_finetuning.sh b/fix_ollama_finetuning.sh deleted file mode 100644 index e86d881..0000000 --- a/fix_ollama_finetuning.sh +++ /dev/null @@ -1,39 +0,0 @@ -#!/bin/bash -# Fix Ollama fine-tuning setup - -echo "🔧 Fixing Ollama fine-tuning" -echo "========================" - -echo "🔍 Step 1: Check if Modelfile exists..." -if ! docker exec financial_agent_app ls -la /app/src/tools/modelfile > /dev/null 2>&1; then - echo "❌ Modelfile not found, creating..." - docker exec financial_agent_app python src/tools/setup_ollama_finetuning.py -fi - -echo "" -echo "🔍 Step 2: Copy Modelfile into Ollama container..." -docker cp financial_agent_app:/app/src/tools/modelfile ./modelfile -docker cp ./modelfile ollama_llm:/modelfile -echo "✅ Modelfile copied" - -echo "" -echo "🔍 Step 3: Create model inside Ollama container..." -if docker exec ollama_llm ollama create options-expert -f /modelfile; then - echo "✅ Model created successfully" -else - echo "❌ Model creation failed" - exit 1 -fi - -echo "" -echo "🔍 Step 4: Verify model..." -docker exec ollama_llm ollama list - -echo "" -echo "🔍 Step 5: Test model..." -echo "Testing model, please wait..." -docker exec ollama_llm ollama run options-expert "Analyze options trading opportunities for AAPL" - -echo "" -echo "✅ Ollama fine-tuning setup complete!" -echo "You can now update generate_production_report.py to use the new model" From 4ccb3a7dc627865e13739f16e3360fe43e29e3d0 Mon Sep 17 00:00:00 2001 From: "Xinxin(Maxine)" Date: Fri, 24 Apr 2026 15:16:31 -0400 Subject: [PATCH 38/50] update config docs --- config/{README.md => Config_docs.md} | 45 +++++++--------------------- 1 file changed, 11 insertions(+), 34 deletions(-) rename config/{README.md => Config_docs.md} (83%) diff --git a/config/README.md b/config/Config_docs.md similarity index 83% rename from config/README.md rename to config/Config_docs.md index fee9a0b..b00d173 100644 --- a/config/README.md +++ b/config/Config_docs.md @@ -1,10 +1,6 @@ # `config/` — Configuration single source of truth -This tree is intentionally **semantic-layered**, not pipeline-layered: files -live next to *what they describe* (the asset universe, reference maps, -per-pipeline parameters), not next to the script that happens to consume them. -All access goes through **`Scripts/core/universe.py`** — callers should never -`open()` files in this tree directly. +This tree is intentionally **semantic-layered**, not pipeline-layered: files live next to *what they describe* (the asset universe, reference maps, per-pipeline parameters), not next to the script that happens to consume them. All access goes through **`Scripts/core/universe.py`** — callers should never `open()` files in this tree directly. ## Layout @@ -28,9 +24,7 @@ config/ ``` > Retired on **2026-04-22**: ``config/SEC_Ingestion/`` and ``config/SEC_Processing/``. -> All of their content now lives under ``universe/``, ``reference/``, or ``runtime/`` -> and is reached through ``Scripts.core.universe`` — **never** by opening a hard-coded -> path. +> All of their content now lives under ``universe/``, ``reference/``, or ``runtime/`` and is reached through ``Scripts.core.universe`` — **never** by opening a hard-coded path. ## Why semantic layering @@ -40,10 +34,7 @@ config/ | `config/Option_chain/target_symbols.json` (proposed) | `config/universe/etf_broad_market.json` | | Duplicated ticker lists across pipelines | **One list per role**, unioned via manifest | -The universe knows nothing about SEC or yfinance; it just declares *which -tickers are equities, which are broad-market ETFs, which are commodity ETFs*. -Pipelines then **ask for a role** (`sec.filers`, `options.scrape`) and the -manifest resolves the union. +The universe knows nothing about SEC or yfinance; it just declares *which tickers are equities, which are broad-market ETFs, which are commodity ETFs*. Pipelines then **ask for a role** (`sec.filers`, `options.scrape`) and the manifest resolves the union. ## Access pattern @@ -65,18 +56,13 @@ paths.options_parquet_path("SPY", "2026-04-22") ``` The active strategy is `storage.strategy` in `pipeline/options_history.json`. -**Default is `legacy`**, which produces paths byte-identical to the -pre-migration code so `Scripts/retrieval/sql_tools.py` read-side globs keep -working unchanged. +**Default is `legacy`**, which produces paths byte-identical to the pre-migration code so `Scripts/retrieval/sql_tools.py` read-side globs keep working unchanged. --- ## Storage scaling — the 13K-files-per-year problem -With the universe now at **53 tickers** (`options.scrape` role), the scraper -writes **53 parquet / day → ~13,356 parquet / year**. The tree below is the -recommended migration path. None of it requires touching the scraper's -business logic. +With the universe now at **53 tickers** (`options.scrape` role), the scraper writes **53 parquet / day → ~13,356 parquet / year**. The tree below is the recommended migration path. None of it requires touching the scraper's business logic. ### Phase 0 — today (`storage.strategy = legacy`) ✅ default @@ -88,12 +74,9 @@ Data/2_Silver_Processed/Options_Market_Data/ └── … ``` -* Pros: zero-risk drop-in for the existing `*/*.parquet` glob in - `sql_tools.py:183`. +* Pros: zero-risk drop-in for the existing `*/*.parquet` glob in `sql_tools.py:183`. * Cons: No partition pruning metadata on disk; just a flat date folder. -* Verdict: **fine up to ~5K–10K files**. DuckDB will still happily glob that - many parquets; the real cost is only in S3-backed setups with per-object - latency. +* Verdict: **fine up to ~5K–10K files**. DuckDB will still happily glob that many parquets; the real cost is only in S3-backed setups with per-object latency. ### Phase 1 — Hive partitioning (`storage.strategy = hive_v1`) @@ -119,9 +102,7 @@ Data/2_Silver_Processed/Options_Market_Data/ ``` → only touches the 5 ETF files, not all 53. * **Still ~13K files/year** — but with cheap column-free filtering. -* Migration cost: (a) update `options_glob` to `**/*.parquet` and add - `hive_partitioning=1`; (b) optional one-off backfill script to copy legacy - files into the new tree; (c) flip `storage.strategy` to `hive_v1`. +* Migration cost: (a) update `options_glob` to `**/*.parquet` and add `hive_partitioning=1`; (b) optional one-off backfill script to copy legacy files into the new tree; (c) flip `storage.strategy` to `hive_v1`. ### Phase 2 — Monthly roll-up compaction (`storage.strategy = monthly_rollup`) @@ -138,9 +119,7 @@ Data/2_Silver_Processed/Options_Market_Data/ └── options_chain.parquet ``` -* Writer side is unchanged — it keeps dropping per-ticker-per-day files into - `raw/`. A **separate compaction job** (e.g. monthly cron, not included in - this PR) runs: +* Writer side is unchanged — it keeps dropping per-ticker-per-day files into `raw/`. A **separate compaction job** (e.g. monthly cron, not included in this PR) runs: ```python df = duckdb.sql(f""" SELECT *, snapshot_date @@ -151,10 +130,8 @@ Data/2_Silver_Processed/Options_Market_Data/ partition_cols=None, compression='zstd', row_group_size=100_000) # After rollup is verified, the raw/ tier is pruned for that month. ``` -* **File count collapses from ~1100/month to 1/month** → 12 rollup files + - ~30–60 days of raw hot files = well under 100 files/year on disk. -* Silver SQL then reads: `rollup/**/*.parquet UNION ALL raw/**/*.parquet` - with a date-range filter — DuckDB merges the views. +* **File count collapses from ~1100/month to 1/month** → 12 rollup files + ~30–60 days of raw hot files = well under 100 files/year on disk. +* Silver SQL then reads: `rollup/**/*.parquet UNION ALL raw/**/*.parquet` with a date-range filter — DuckDB merges the views. ### When to escalate From 3a335cc905616fcdc7eb7d94c32989551516063a Mon Sep 17 00:00:00 2001 From: "Xinxin(Maxine)" Date: Fri, 24 Apr 2026 15:17:47 -0400 Subject: [PATCH 39/50] update vector_store src --- Scripts/vector_store/__init__.py | 4 +- Scripts/vector_store/ingestion.py | 37 ++- docs/Vector_store_docs/Qdrant_connection.md | 178 ++++++++---- docs/Vector_store_docs/Vector_Ingestion.md | 301 ++++++++++---------- 4 files changed, 291 insertions(+), 229 deletions(-) diff --git a/Scripts/vector_store/__init__.py b/Scripts/vector_store/__init__.py index ff14b00..8d980ca 100644 --- a/Scripts/vector_store/__init__.py +++ b/Scripts/vector_store/__init__.py @@ -1,8 +1,8 @@ from .connection import get_qdrant_client, get_embedding_model -from .ingestion import QdrantIngestor +from .ingestion import QdrantHybridIngestor __all__ = [ "get_qdrant_client", "get_embedding_model", - "QdrantIngestor" + "QdrantHybridIngestor" ] \ No newline at end of file diff --git a/Scripts/vector_store/ingestion.py b/Scripts/vector_store/ingestion.py index f0b1bba..8906e78 100644 --- a/Scripts/vector_store/ingestion.py +++ b/Scripts/vector_store/ingestion.py @@ -16,11 +16,11 @@ from tqdm import tqdm from dotenv import load_dotenv -# 引入 Qdrant 原生对象 +# import Qdrant native objects from qdrant_client.http import models from qdrant_client.models import PointStruct, VectorParams, SparseVectorParams, Distance -# 引入 FastEmbed 用于生成稀疏向量 +# import FastEmbed for sparse vector generation from fastembed import SparseTextEmbedding import sys @@ -74,7 +74,7 @@ def __init__(self, collection_name: str = "financial_rag_gold"): self.dense_model = get_embedding_model() self.sparse_model = SparseTextEmbedding(model_name="prithivida/Splade_PP_en_v1") - # 动态检测维度 + # dynamically detect dimension dummy_vector = self.dense_model.embed_query("dummy_test") self.dense_dimension = len(dummy_vector) logger.info(f"Dense Vector Dimension detected as: {self.dense_dimension}") @@ -212,30 +212,29 @@ def process_and_upsert_file(self, file_path: Path, source_type: str) -> int: point_id = data.get("id", str(uuid.uuid4())) has_bronze_evidence = False - # 2. 统一时间戳 - raw_date = metadata.get("publish_timestamp") # News 优先拿这个 + # 2. unified timestamp + raw_date = metadata.get("publish_timestamp") # News takes precedence over this if not raw_date: raw_date = metadata.get("publish_date") or metadata.get("filed_at") or metadata.get("transaction_date") - # 如果已经是整数时间戳(News/GPR),直接用;否则转为时间戳 + # if the date is already an integer timestamp (News/GPR), use it; otherwise convert to timestamp if isinstance(raw_date, int): unified_ts = raw_date else: unified_ts = self._to_unix_timestamp(str(raw_date)) - # 3. 防御性 Metadata 构建 (防止漏斗丢失) + # 3. defensive metadata construction to prevent data loss payload = { "text": text, "source_type": source_type, "has_bronze_evidence": has_bronze_evidence, "unified_timestamp": unified_ts, - # 提供默认值防止空值无法被过滤 + # provide default values to prevent empty values from being filtered out "ticker": metadata.get("ticker", "NONE"), "form_type": metadata.get("form_type", "NONE"), "action_direction": metadata.get("action_direction", "NONE"), - "topics": metadata.get("topics") or [metadata.get("topic", "NONE")], # 兼容 SEC 和 News 的字段名差异 - "impacted_assets": metadata.get("impacted_assets", []), + "topics": metadata.get("topics") or [metadata.get("topic", "NONE")], "entities": metadata.get("entities", []), **metadata @@ -279,13 +278,12 @@ def process_and_upsert_file(self, file_path: Path, source_type: str) -> int: def _get_run_states(self) -> dict: """ - 读取上游调度器留下的状态快照 (Watermark Tracking)。 - 将调度器的 job keys 映射到我们的 source_types 上。 + read the state file to get the last run keys """ state_file = self.project_root / "config" / "runtime" / "collect_data_state.json" states = {} - # 默认回退机制:如果找不到 state 文件,默认跑当天的 + # default fallback mechanism: if the state file is not found, default to the current date today = datetime.now().strftime("%Y-%m-%d") current_month = datetime.now().strftime("%Y-%m") @@ -295,7 +293,7 @@ def _get_run_states(self) -> dict: data = json.load(f) last_run_keys = data.get("last_run_keys", {}) - # 建立 Job Key 到 Ingestion Source Type 的映射 + # map the job key to the ingestion source type states = { "news": last_run_keys.get("news_daily", today), "gpr": last_run_keys.get("gpr_monthly", current_month), @@ -311,8 +309,7 @@ def _get_run_states(self) -> dict: def run_pipeline(self, full_refresh: bool = True): """ - 执行管线。 - :param full_refresh: 如果为 True,则无视状态文件,强行全量重跑。 + :param full_refresh: if True, full refresh the pipeline """ logger.info("="*50) logger.info(f"🚀 Starting Hybrid Search Data Ingestion Pipeline (Full Refresh: {full_refresh})") @@ -324,7 +321,7 @@ def run_pipeline(self, full_refresh: bool = True): self.init_collection_with_indexes() - # 获取上游抓取的日期水位线 + # get the upstream watermark target_states = self._get_run_states() total_upserted = 0 @@ -341,16 +338,16 @@ def run_pipeline(self, full_refresh: bool = True): for source_type, filename in file_mappings: found_files = list(self.gold_layer_dir.rglob(filename)) - # 获取这个数据源应该跑哪一天的日期标识 + # get the date identifier for this data source target_date_str = target_states.get(source_type, "") for f_path in found_files: - # 核心逻辑:如果开启全量刷新,或者文件路径中包含了目标日期,则处理 + # core logic: if full refresh is enabled, or the file path contains the target date, then process if full_refresh or (target_date_str and target_date_str in str(f_path)): count = self.process_and_upsert_file(f_path, source_type) total_upserted += count else: - # 不是目标日期的历史文件,直接跳过 (静默,不污染日志) + # not the target date history file, skip (silent, no logging) pass logger.info("="*50) diff --git a/docs/Vector_store_docs/Qdrant_connection.md b/docs/Vector_store_docs/Qdrant_connection.md index aaa5e6b..797308a 100644 --- a/docs/Vector_store_docs/Qdrant_connection.md +++ b/docs/Vector_store_docs/Qdrant_connection.md @@ -1,98 +1,152 @@ -# Connection Management & Model Factory Layer +# Qdrant Connection & Embedding Model Factory — `connection.py` -This documentation details the `connection.py` module. This script acts as the foundational infrastructure layer for your vector operations, abstracting away the complexities of cloud database authentication, network resilience, and AI model initialization for embeddings. +## 1. Goal -## 1. Strategic Objective - -The primary goal of this module is to provide a robust, fault-tolerant connection gateway to **Qdrant Cloud** while serving as a dynamic **Factory** for text embedding models. It ensures that downstream applications (like ingestion pipelines or RAG agents) can reliably access the database and embedding models without worrying about network drops, firewall restrictions, or misconfigured hardware: device placement for HuggingFace is **explicit** via `EMBEDDING_DEVICE` (default `cpu`), rather than implied by the runtime. +`Scripts/vector_store/connection.py` is the foundational infrastructure layer for all vector database operations. It provides a fault-tolerant, firewall-resilient connection gateway to Qdrant Cloud and a provider-agnostic factory for text embedding models. Downstream consumers (ingestion pipelines, `QdrantRetriever`) obtain verified client objects and embedding models without concerning themselves with retry logic, hardware placement, or credential management. --- -## 2. System Architecture +## 2. Architecture -The module is designed around three core institutional-grade engineering patterns: +``` +Environment (.env) + │ + ├─► get_qdrant_client() get_embedding_model() + │ │ │ + │ Read QDRANT_HOST Read EMBEDDING_PROVIDER + │ Read QDRANT_API_KEY Read EMBEDDING_MODEL_NAME + │ │ Read EMBEDDING_DEVICE + │ QdrantClient( │ + │ url=QDRANT_HOST, ┌────────▼────────────┐ + │ api_key=QDRANT_API_KEY, │ Provider dispatch │ + │ prefer_grpc=False, ├────────────────────┤ + │ timeout=15 │ huggingface (def.) │ + │ ) │ HuggingFaceEmbed. │ + │ │ │ + normalize=True │ + │ Retry loop (max 3, 2 s gap) ├────────────────────┤ + │ │ │ ollama │ + │ ✅ Return client │ OllamaEmbeddings │ + │ └────────▼────────────┘ + └───────────────────────────────────── @lru_cache → Return model +``` -- **Singleton / Caching Pattern (`@lru_cache`):** Prevents memory leaks and redundant network calls by ensuring that large embedding models and database clients are loaded into memory exactly once per session. -- **Provider Factory Engine:** Dynamically routes model initialization based on environment variables, allowing seamless swapping between local inferences (Ollama) and HuggingFace-backed embeddings (default **`BAAI/bge-large-en-v1.5`**) without altering downstream code. -- **Firewall-Resilient Connectivity:** Explicitly disables gRPC (`prefer_grpc=False`) and forces standard RESTful HTTP/HTTPS connections. This prevents the Qdrant client from being blocked by strict institutional or cluster firewalls. +**Design patterns in use:** +- **Singleton / `@lru_cache`** — models and clients are loaded exactly once per process; prevents memory leaks and redundant network calls. +- **Provider Factory** — `EMBEDDING_PROVIDER` env variable routes between HuggingFace and Ollama without changing downstream code. +- **gRPC disabled** — `prefer_grpc=False` forces HTTPS REST, bypassing strict institutional or cluster firewalls. --- -## 3. Execution & Routing Workflow - -The module isolates the initialization of the database client and the embedding model into two distinct, safe workflows. - -```text -[ INITIALIZATION REQUEST ] - │ - ├─► Database Route (get_qdrant_client) - │ └─ Read Credentials from .env - │ └─ Attempt Qdrant Cloud Connection (HTTPS only, client timeout 15s) - │ └─ Network Check: Success? - │ ├── YES: Return Client Object - │ └── NO: Trigger Retry Protocol (max 3 attempts, 2s between attempts) - │ - └─► Embedding Route (get_embedding_model) - └─ Read EMBEDDING_PROVIDER, EMBEDDING_MODEL_NAME, EMBEDDING_DEVICE from .env - ├─► If "ollama": - │ └─ Use OLLAMA_HOST (default http://localhost:11434) and model_name. - └─► If "huggingface" (Default): - └─ Load HuggingFace model with device from EMBEDDING_DEVICE (default cpu). - └─ encode_kwargs: normalize_embeddings=True (cosine-friendly for Qdrant). - └─ Cache Instance & Return LangChain Embeddings Object -``` +## 3. Code Strategy & Workflow ---- +### 3.1 `get_qdrant_client()` -## 4. Configuration Schema & Output Artifacts +| Step | Detail | +|:---|:---| +| 1 | Read `QDRANT_HOST` and `QDRANT_API_KEY` from `.env` | +| 2 | Instantiate `QdrantClient(prefer_grpc=False, timeout=15)` — REST-only | +| 3 | On `ConnectionError` / network failure: retry up to **3 attempts** with **2-second backoff** | +| 4 | Return verified client on success; raise on final failure | -Because this is a connection manager rather than a data processor, its "schema" revolves around required environmental configurations and the instantiated objects it returns. +### 3.2 `get_embedding_model()` -### Environment Schema (`.env` requirements) +| Branch | Env trigger | Model | +|:---|:---|:---| +| **HuggingFace** (default) | `EMBEDDING_PROVIDER=huggingface` | `HuggingFaceEmbeddings(model_name=EMBEDDING_MODEL_NAME, device=EMBEDDING_DEVICE, encode_kwargs={"normalize_embeddings": True})` | +| **Ollama** | `EMBEDDING_PROVIDER=ollama` | `OllamaEmbeddings(base_url=OLLAMA_HOST, model=EMBEDDING_MODEL_NAME)` | +`encode_kwargs={"normalize_embeddings": True}` ensures cosine-distance compatibility with Qdrant's collection configuration. -| Variable | Default Value | Purpose | -| ---------------------- | -------------------------- | ----------------------------------------------------------------------- | -| `QDRANT_HOST` | *Required* | The REST URL for your Qdrant Cloud cluster. | -| `QDRANT_API_KEY` | *Required* | Authentication token for cloud access. | -| `EMBEDDING_PROVIDER` | `huggingface` | Toggle between `huggingface` or `ollama`. | -| `EMBEDDING_MODEL_NAME` | `BAAI/bge-large-en-v1.5` | HuggingFace model id or Ollama embedding model name, per provider. | -| `EMBEDDING_DEVICE` | `cpu` | Device string passed to HuggingFace (e.g. `cpu`, `cuda`, `mps`). | -| `OLLAMA_HOST` | `http://localhost:11434` | Base URL for Ollama when `EMBEDDING_PROVIDER=ollama`. | +### 3.3 `VectorStoreConnection` (used by `QdrantRetriever`) +The `QdrantRetriever` instantiates `VectorStoreConnection` which wraps `get_qdrant_client()` with additional logging and initialises both embedding models required for hybrid search: +- **Dense model:** `BAAI/bge-base-en-v1.5` (768-dim) via HuggingFace +- **Sparse model:** `Qdrant/Splade_PP_en_v1` via `fastembed` +- **Reranker:** `BAAI/bge-reranker-v2-m3` (CrossEncoder) via `sentence-transformers` -### Output Artifacts +--- -- **`get_qdrant_client()`** returns: A verified `qdrant_client.QdrantClient` object. -- **`get_embedding_model()`** returns: A `langchain_core.embeddings.Embeddings` compliant object, ready for `.embed_query()` or `.embed_documents()`. +## 4. Output Data Schema & Configuration ---- +### Environment Variables + +| Variable | Default | Required | Purpose | +|:---|:---|:---|:---| +| `QDRANT_HOST` | — | ✅ | Full REST URL of Qdrant Cloud cluster (e.g. `https://xxx.us-east-2-0.aws.cloud.qdrant.io:6333`) | +| `QDRANT_API_KEY` | — | ✅ | Authentication token | +| `EMBEDDING_PROVIDER` | `huggingface` | | `"huggingface"` or `"ollama"` | +| `EMBEDDING_MODEL_NAME` | `BAAI/bge-base-en-v1.5` | | Dense embedding model ID | +| `EMBEDDING_DEVICE` | `cpu` | | `"cpu"`, `"cuda"`, or `"mps"` | +| `OLLAMA_HOST` | `http://localhost:11434` | | Ollama base URL (only when `EMBEDDING_PROVIDER=ollama`) | + +### Return Objects + +| Function | Returns | +|:---|:---| +| `get_qdrant_client()` | `qdrant_client.QdrantClient` — verified, cached | +| `get_embedding_model()` | `langchain_core.embeddings.Embeddings` — `.embed_query()` / `.embed_documents()` compatible | + +### Qdrant Collection -## 5. Diagnostic & Verification +| Property | Value | +|:---|:---| +| Collection name | `financial_rag_gold` | +| Distance metric | Cosine (dense), dot product (sparse) | +| Dense vector size | 768 (BAAI/bge-base-en-v1.5) | +| Sparse model | Qdrant/Splade_PP_en_v1 (ONNX, via fastembed) | -The script includes a built-in health check block. You can independently execute this file to verify both your cloud network connection and the embedding stack. +--- + +## 5. How to Test -Run the module directly from your terminal (from the repository root): +### Connection health check ```bash python Scripts/vector_store/connection.py ``` -**Expected Successful Output:** +Expected output: +1. `✅ Connected to Qdrant Cloud successfully.` +2. List of active collections including `financial_rag_gold` +3. Embedding model initialisation log (provider, model, device) +4. Test vector dimension (768 for `BAAI/bge-base-en-v1.5`) -1. A log confirming connection to Qdrant Cloud. -2. A list of active collections currently hosted in your cloud database. -3. An initialization log line from `get_embedding_model()` listing provider, model name, and device (from your `.env` or defaults). -4. A test vector dimension readout (e.g. for the default **`BAAI/bge-large-en-v1.5`**, dimension **1024**), confirming the embedding model runs end-to-end. +### Programmatic connectivity check ---- +```python +from Scripts.vector_store.connection import get_qdrant_client, get_embedding_model -## 6. Environment Dependencies +client = get_qdrant_client() +collections = [c.name for c in client.get_collections().collections] +print("Collections:", collections) -Ensure your environment has the necessary libraries to support Qdrant Cloud, LangChain routing, and optional local tensor processing. Install them via this single command: +model = get_embedding_model() +vec = model.embed_query("AAPL IV skew") +print("Vector dim:", len(vec)) +``` + +### Retry simulation ```bash -pip install qdrant-client langchain-core langchain-huggingface langchain-ollama python-dotenv torch sentence-transformers +# Temporarily set wrong API key, confirm retry + failure message +QDRANT_API_KEY=invalid python -c "from Scripts.vector_store.connection import get_qdrant_client; get_qdrant_client()" ``` -*(Note: `torch` and `sentence-transformers` are required if you are using the default HuggingFace provider strategy.)* +--- + +## 6. Dependencies + +| Library | Purpose | +|:---|:---| +| `qdrant-client` | Qdrant Cloud REST client | +| `langchain-huggingface` | HuggingFace embedding wrapper | +| `langchain-ollama` | Ollama embedding wrapper | +| `langchain-core` | `Embeddings` base class | +| `sentence-transformers` | CrossEncoder reranker | +| `fastembed` | SPLADE sparse model (ONNX runtime) | +| `python-dotenv` | `.env` loading | + +```bash +pip install qdrant-client langchain-core langchain-huggingface langchain-ollama \ + python-dotenv sentence-transformers fastembed +``` diff --git a/docs/Vector_store_docs/Vector_Ingestion.md b/docs/Vector_store_docs/Vector_Ingestion.md index de39297..5d9455d 100644 --- a/docs/Vector_store_docs/Vector_Ingestion.md +++ b/docs/Vector_store_docs/Vector_Ingestion.md @@ -1,191 +1,202 @@ -# Hybrid Vector Store Ingestion Pipeline +# Hybrid Vector Store Ingestion Pipeline — `ingestion.py` -This documentation outlines the `ingestion.py` module, which serves as the critical bridge between your raw, processed data (SEC filings, Macro News, GPR Index) and your vector database (Qdrant). +## 1. Goal ---- -## 1 — Purpose, Scope, and Design Objectives - -The primary goal of this script is to ingest structured financial data into Qdrant for Retrieval-Augmented Generation (RAG). It ensures **idempotent** execution (meaning you can run it multiple times without creating duplicate records) and initializes a **Hybrid Search** environment. By combining semantic meaning with exact keyword matching, it guarantees high-fidelity data retrieval for downstream AI analysis. +`Scripts/vector_store/ingestion.py` (`QdrantHybridIngestor`) is the critical bridge between Gold-layer JSONL artefacts (SEC filings, news, GPR narratives) and the `financial_rag_gold` Qdrant collection. It guarantees **idempotent** upserts via deterministic UUID generation, initialises a **hybrid search** environment (dense + sparse vectors + payload indexes), and advances a high-water-mark state file so only incremental data is processed on subsequent runs. --- -## 2 — System Reference Architecture -The ingestion layer is designed for reliability and high-speed retrieval, built on a dual-track embedding architecture. -* **State Management:** Reads from a `pipeline_state.json` file to determine the high-water mark (the latest processed dates), ensuring only new daily data is ingested unless a `--full-refresh` is explicitly requested. - -* **Hybrid Search Engine:** - - * **Dense Vectors:** Captures the contextual and semantic meaning of the text (via your external embedding model). - * **Sparse Vectors (BM25):** Utilizes `fastembed` to capture exact keyword frequencies, crucial for financial acronyms, tickers, and specific terminology. - -* **Payload Indexing:** Explicitly creates indexes on highly-queried metadata fields (like `ticker`, `topic`, `publish_timestamp`) so Qdrant can filter data efficiently before performing vector distance calculations. - ---- +## 2. Architecture -## 3 — Data Model: Hybrid Vectors, Payload Schema, and Predicate Indexing -Data is stored in Qdrant as `PointStruct` objects, consisting of an ID, dual vectors, and a rich metadata payload. -### Vector Configuration -The system utilizes a hybrid embedding strategy managed via environment-agnostic configurations. -#### Embedding Models -* **Dense Model (Semantic Representation):** Initialized via `get_embedding_model()`. It captures the abstract meaning of financial events. - - * *Config:* Defined in `.env` under `EMBEDDING_MODEL_NAME`. -* **Sparse Model (Lexical Precision):** Specifically utilizes `prithivida/Splade_PP_en_v1` (SPLADE architecture). It excels at identifying rare keywords like ticker symbols and specific SEC item codes. - -#### Environment Management (`.env`) -To ensure portability, the following variables are leveraged: - -* `QDRANT_HOST` / `QDRANT_API_KEY`: Connection parameters. - -* `DENSE_VECTOR_SIZE`: (e.g., 768 or 1536) Automatically verified during class initialization via `dummy_test` embedding. +``` +Gold-layer JSONL files (SEC / News / GPR) + │ + ▼ + QdrantHybridIngestor.__init__() + │ • get_qdrant_client() — REST connection, 3-retry + │ • get_embedding_model() — dense model (BAAI/bge-base-en-v1.5) + │ • fastembed SPLADE — sparse model (Qdrant/Splade_PP_en_v1) + │ • Detect dense vector dimension via dummy embed + │ • Ensure collection exists with correct vector config + │ • Create payload indexes (ticker, source_type, form_type, …) + │ + ▼ + ingest_folder(source_type, folder_path) + │ + ├─ Read pipeline_state.json → high-water-mark (last processed date) + ├─ Enumerate date folders newer than HWM + │ + ▼ for each JSONL line: + ├─ Parse {text, metadata} + ├─ Deterministic UUID from hash(source_type + accession_no / url / id) + │ → idempotent: re-running same data = same UUID → upsert, not duplicate + │ + ├─ Dense embedding: get_embedding_model().embed_documents([text]) + ├─ Sparse embedding: SPLADE.query_embed(text) → sparse vector dict + │ + ▼ PointStruct(id=uuid, vector={dense, sparse}, payload={...metadata...}) + │ + ├─ Batch upsert to Qdrant (batch_size=100) + │ + └─ Update pipeline_state.json high-water-mark +``` --- -#### Core Ingestion Workflow -The pipeline follows a fail-safe initialization and batching logic: -```text +## 3. Code Strategy & Workflow -[ INITIALIZE ] +### 3.1 Initialisation Sequence - └─ Connect to Qdrant & Load Models (Dense + Sparse). +| Step | Detail | +|:---|:---| +| **Connection** | `get_qdrant_client()` — HTTPS REST, cached singleton | +| **Dense model** | `get_embedding_model()` — default `BAAI/bge-base-en-v1.5` (768-dim, cosine) | +| **Sparse model** | `fastembed.SparseTextEmbedding("Qdrant/Splade_PP_en_v1")` — ONNX SPLADE for lexical precision | +| **Dimension detection** | `dummy_test` embed → auto-detect `DENSE_VECTOR_SIZE` (fallback to env var) | +| **Collection setup** | Create `financial_rag_gold` if absent with named vectors `dense` (Cosine) + `sparse` (Dot) | +| **Payload indexes** | Explicitly created for: `ticker`, `source_type`, `form_type`, `topic`, `publish_timestamp`, `unified_timestamp`, `action_direction`, `tone_score` | - └─ Detect Vector Dimensions dynamically. +### 3.2 Idempotency via Deterministic UUID -[ SCHEMA SETUP ] +Each point ID is computed as `uuid5(NAMESPACE_URL, source_type + primary_key)` where `primary_key` is, in priority order: `accession_no` (SEC), `url` (news), or `id` (GPR). This means: - └─ Check if "financial_rag_gold" collection exists. +- Re-running ingestion with the same JSONL → same UUIDs → Qdrant upserts overwrite in place, no duplicates. +- Changing `text` or `metadata` for the same source document → same UUID → controlled update. - └─ Define Vector Parameters (Cosine Distance for Dense). +### 3.3 Hybrid Vector Strategy - └─ Initialize Predicate Indexing (Payload Schemas). +| Vector type | Model | Captures | Qdrant vector name | +|:---|:---|:---|:---| +| **Dense** | `BAAI/bge-base-en-v1.5` (768-dim) | Semantic meaning, context, paraphrase | `dense` | +| **Sparse** | `Qdrant/Splade_PP_en_v1` (SPLADE) | Exact keywords: tickers, SEC codes, acronyms | `sparse` | -[ DATA TRANSFORMATION ] +At query time, `QdrantRetriever` uses **Reciprocal Rank Fusion (RRF)** to merge dense and sparse score lists, followed by `BAAI/bge-reranker-v2-m3` CrossEncoder reranking of the top-K candidates. - └─ Batch load JSONL files from Gold Layer. +### 3.4 High-Water-Mark State - └─ Convert raw dates to Unix Timestamps (for range filtering). +`config/runtime/pipeline_state.json` stores the last successfully ingested date per source type. On each run, `ingest_folder` only processes date folders newer than the stored HWM. `--full-refresh` flag bypasses HWM and re-ingests all available data. - └─ Map deterministic UUIDs (Namespace-v5) for idempotency. - -[ UPSERT ] - - └─ Parallel processing of Dense/Sparse vectors. - - └─ Metadata payload attachment. - -``` --- -#### Data Schema & Predicate Filtering -To optimize retrieval speed, the system enforces strict indexing on specific payload fields. This allows the LLM to perform **Pre-filtering** (e.g., "Find news ONLY for $AAPL between Jan and March"). - -##### Vector Space (Dual-Track) - -* **`dense`**: High-dimensional semantic space (e.g., 768-dim). - -* **`sparse`**: High-dimensional, sparse frequency space for exact matching. - -##### Indexed Metadata (Filtering Predicates) - -| Category | Field Name | Index Type | Purpose | - -| :--- | :--- | :--- | :--- | - -| **Exact Match** | `ticker`, `form_type`, `source_type` | `KEYWORD` | High-precision filtering by asset or document type. | - -| **Relational** | `action_direction` | `KEYWORD` | Filtering Insider Buys vs. Sells. | -| **Multi-Select** | `topics`, `entities`, `impacted_assets` | `KEYWORD` | Supports "Contains" logic for arrays of tags. | - -| **Temporal** | `unified_timestamp` | `INTEGER` | Essential for Time-Series RAG and chronological sorting. | - ---- -### Payload (Metadata) Schema -Every point carries a dictionary of metadata used for filtering. The script actively indexes the following keys: - -| Field | Index Type | Purpose | - -| :--- | :--- | :--- | - -| `topic` | Keyword | Categorize data (e.g., `macro_central_banks`, `sec_form_4`). | - -| `source` | Keyword | Track data origin (e.g., `SEC`, `GDELT`). | - -| `publish_timestamp` | Integer | Fast time-range filtering (Unix epoch). | - -| `ticker` | Keyword | Exact stock symbol matching (e.g., `AAPL`). | - -| `accession_no` | Keyword | SEC document tracking and evidence linking. | - -| `url` | Keyword | Direct routing back to the original bronze source. | +## 4. Output Data Schema & Paths + +### Source JSONL Paths (inputs) + +| Source | Gold path | +|:---|:---| +| SEC filings | `Data/3_Gold_Semantic/SEC_Insider_Trades/{YYYY-MM-DD}/qdrant_ready.jsonl` | +| News / GDELT | `Data/3_Gold_Semantic/News_Qdrant/{YYYY-MM-DD}/qdrant_{topic}_processed.jsonl` | +| GPR narratives | `Data/3_Gold_Semantic/GPR_index/{YYYY-MM-DD}/qdrant_gpr_input.jsonl` | + +### Qdrant Point Payload Schema + +All source types share a unified payload schema. Fields that do not apply to a source type are omitted or set to `null`. + +| Payload key | Type | Applies to | Description | +|:---|:---|:---|:---| +| `text` | `string` | All | Human-readable content; used for embedding | +| `source_type` | `string` | All | `"sec"`, `"news"`, `"gpr"` | +| `ticker` | `string` | SEC, News | Stock symbol | +| `form_type` | `string` | SEC | `"4"` or `"8-K"` | +| `filed_at` | `string` | SEC | Filing date `YYYY-MM-DD` | +| `accession_no` | `string` | SEC | Dedup / UUID seed | +| `transaction_date` | `string` | SEC | Actual event date | +| `tone_score` | `int` | SEC, News | −5 … +5 | +| `action_direction` | `string` | SEC | `"BUY"`, `"SELL"`, `"ACQUIRE/VEST"`, `"NONE"` | +| `topics` | `array[string]` | SEC, News | Thematic tags | +| `unified_timestamp` | `float` | All | Unix seconds (epoch); used by `TimeAdapter` Range filter | +| `publish_timestamp` | `float` | News, GPR | Unix seconds from article/GPR date | +| `topic` | `string` | News | GDELT topic slug (e.g. `macro_central_banks`) | +| `source_domain` | `string` | News | Article origin domain | +| `bronze_ref` | `string` | All | Reference to Bronze artefact; used as `[Gold: ]` citation in agent drafts | +| `record_date` | `string` | All | ISO date for temporal decay weighting in Analyst prompt | + +### Payload Index Configuration + +| Index field | Type | Purpose | +|:---|:---|:---| +| `ticker` | keyword | Per-ticker filter in retrieval | +| `source_type` | keyword | Route Gold queries to correct data domain | +| `form_type` | keyword | Isolate Form 4 vs 8-K SEC queries | +| `topic` | keyword | News topic filter | +| `publish_timestamp` | float | Qdrant `Range` time filter (legacy news) | +| `unified_timestamp` | float | Qdrant `Range` time filter (all sources, post-2026-04-22) | +| `action_direction` | keyword | Insider buy/sell signal filter | +| `tone_score` | integer | Sentiment filtering | + +### State File + +`config/runtime/pipeline_state.json`: +```json +{ + "sec": "2026-04-19", + "news": "2026-04-19", + "gpr": "2026-04-10" +} +``` --- -## 4 — Operational Execution Procedure - -When the script is executed, it follows a strict, batch-processed pipeline: -```text +## 5. How to Test -[ Start Ingestion ] +### Full ingestion run - │ - ▼ -1. Initialize Clients: Connect to Qdrant & load embedding models (Dense + FastEmbed BM25). - │ - ▼ -2. Collection Setup: Check for `hybrid_macro_vectors`. If missing (or full refresh), create it. - │ - ▼ -3. Payload Indexing: Apply strict schema indices to metadata fields (Keyword, Datetime). - │ - ▼ - -4. State Resolution: Read `pipeline_state.json` to identify target folders for the day. - │ - ▼ -5. Batch Processing: - - ├─ Read target `.jsonl` files (SEC, News, GPR). +```bash +python Scripts/Qdrant_Ingestion.py +# Expected: batch upsert logs per source, HWM updated in pipeline_state.json +``` - ├─ Chunk records into batches of 100. +### Force re-ingestion of all data - ├─ Generate Dense Vectors (Semantic) & Sparse Vectors (BM25 Keyword). +```bash +python Scripts/Qdrant_Ingestion.py --full-refresh +``` - └─ Upsert into Qdrant using deterministic UUIDs to prevent duplication. - │ - ▼ -[ Ingestion Complete ] +### Verify collection health +```python +from Scripts.vector_store.connection import get_qdrant_client +client = get_qdrant_client() +info = client.get_collection("financial_rag_gold") +print("Points:", info.points_count) +print("Vectors:", info.vectors_count) ``` ---- -## 5 — Verification, Quality Assurance, and Observability -After running the pipeline, you can verify the health and accuracy of your data in two ways: -**Option A: Programmatic Check (Local CLI)** -If you have a validation script configured, you can run it via your terminal. It will typically query the collection stats and fetch a sample point. +### Retrieval smoke test (post-ingestion) ```bash +python -m Scripts.tests.test_master_retriever +# Expected: Tier1 query returns > 0 chunks for an AAPL insider query +``` -python tools/check_Qdrant.py +### Payload index verification +```python +from Scripts.vector_store.connection import get_qdrant_client +client = get_qdrant_client() +info = client.get_collection("financial_rag_gold") +for field, config in info.payload_schema.items(): + print(field, config) +# Expected: ticker, source_type, form_type, topic, unified_timestamp, … all indexed ``` -**Option B: Visual Inspection (Qdrant Cloud Dashboard)** -1. Log in to your **Qdrant Cloud Console**. -2. Navigate to your specific Cluster and open the **Dashboard** / UI. -3. Select the `hybrid_macro_vectors` collection. -4. Use the UI to verify the **Point Count** has increased. -5. Inspect a random point to ensure both the `text-dense` and `text-sparse` vectors are populated alongside the formatted `payload`. --- -## 6 — Runtime Dependencies and Installation Prerequisites -Ensure your environment is properly set up. You can install all required external libraries for this specific ingestion layer using the following one-line command: -```bash +## 6. Dependencies -pip install qdrant-client fastembed python-dotenv tqdm +| Library | Purpose | +|:---|:---| +| `qdrant-client` | Qdrant Cloud upsert API | +| `fastembed` | SPLADE sparse embedding (ONNX runtime) | +| `langchain-huggingface` | Dense embedding model | +| `sentence-transformers` | CrossEncoder reranker (used by QdrantRetriever at query time) | +| `pydantic` | Data validation | +| `python-dotenv` | `.env` loading | +```bash +pip install qdrant-client fastembed langchain-huggingface sentence-transformers pydantic python-dotenv ``` -*(Note: This assumes your custom internal modules like `Scripts.vector_store.connection` and your dense embedding model dependencies like `langchain` or `openai` are already configured in your broader project environment).* - ---- +**Required env variables:** `QDRANT_HOST`, `QDRANT_API_KEY` (see `docs/Vector_store_docs/Qdrant_connection.md`). +**Runtime prerequisite:** Gold JSONL files must exist in `Data/3_Gold_Semantic/` before ingestion. Run the data collection pipeline (`Scripts/data_collection/collect_data.py`) and SEC processor first. From 343ec3806df0b6ea14652e7fe42afce9372b24aa Mon Sep 17 00:00:00 2001 From: "Xinxin(Maxine)" Date: Fri, 24 Apr 2026 15:19:31 -0400 Subject: [PATCH 40/50] update agent Scripts --- Scripts/agents/analyst.py | 33 ++- Scripts/agents/checker.py | 541 ++++++++++++----------------------- Scripts/agents/critic.py | 74 ++++- Scripts/agents/finalizer.py | 97 ++++++- Scripts/agents/prompts.py | 421 ++++++++++++++++++++++++++++ Scripts/agents/router.py | 545 ++++++++++++++++++++++++++++++++++++ Scripts/agents/state.py | 140 +++++++++ 7 files changed, 1477 insertions(+), 374 deletions(-) create mode 100644 Scripts/agents/prompts.py create mode 100644 Scripts/agents/router.py create mode 100644 Scripts/agents/state.py diff --git a/Scripts/agents/analyst.py b/Scripts/agents/analyst.py index b97f490..f87665d 100644 --- a/Scripts/agents/analyst.py +++ b/Scripts/agents/analyst.py @@ -132,11 +132,40 @@ def _format_silver(silver_context: Dict[str, Any]) -> str: lines = ["| metric | value |", "|---|---|"] for k, v in values.items(): lines.append(f"| {k} | {v} |") + if lineage: lines.append("") - lines.append("LINEAGE ANCHORS (use these as [Silver: ] citations):") + lines.append( + "LINEAGE ANCHORS — copy the EXACT anchor string into [Silver: ] " + "after every numeric claim that uses the corresponding metric value:" + ) + # Build a value→anchor hint so the LLM doesn't have to guess which + # anchor covers which number. We group by anchor prefix so related + # metrics (MACRO_VIX_* covers both VIX_value and VIX_change_pct) are + # shown together rather than as a flat list. + anchor_covered: Dict[str, List[str]] = {} for lid in lineage: - lines.append(f" - {lid}") + # Derive the metric-key prefix: MACRO_VIX_2026-04-23 → VIX + parts = lid.split("_") + if lid.startswith("MACRO_") and len(parts) >= 3: + code = parts[1] + prefix_keys = [k2 for k2 in values if k2.startswith(code)] + elif lid.startswith("GPR_"): + prefix_keys = [k2 for k2 in values if k2.startswith("gpr")] + else: + # For options / px / iv anchors, show all keys whose prefix + # appears in the anchor name (best-effort heuristic). + anchor_stem = lid.split("_")[0] if "_" in lid else lid + prefix_keys = [k2 for k2 in values if anchor_stem.lower() in k2.lower()] + anchor_covered[lid] = prefix_keys or ["(see table above)"] + + for lid, covered_keys in anchor_covered.items(): + val_hints = ", ".join( + f"{k2}={values[k2]}" for k2 in covered_keys[:3] if k2 in values + ) + if len(covered_keys) > 3: + val_hints += f", +{len(covered_keys) - 3} more" + lines.append(f" [Silver: {lid}] covers → {val_hints}") return "\n".join(lines) diff --git a/Scripts/agents/checker.py b/Scripts/agents/checker.py index 42e6ca6..c4056fb 100644 --- a/Scripts/agents/checker.py +++ b/Scripts/agents/checker.py @@ -5,32 +5,11 @@ Analyst draft, with an opt-in Silver-tool escape hatch for missing anchors. Design philosophy: -- The Checker is NOT a strategist. It is a silent, uncompromising data-integrity - auditor. Its only question is: "does every number match the Silver Layer, and - does every citation point at a known anchor?" -- Three defence layers: - 1. DETERMINISTIC regex pass — extracts every number from the draft and - verifies it is present in silver_context (tolerant to percentage - scale). Citations checked against known lineage anchors / bronze_refs. - 2. TOOL-CALL ESCAPE HATCH (opt-in via CHECKER_TOOL_RECOVERY=1) — - when a citation anchor is unknown, Checker calls `SilverSQLTool. - query_parquet_by_metadata(state["metadata"])` to re-query the Silver - Layer. If the re-query surfaces the anchor / value, the finding is - downgraded to Minor and the refreshed silver_context is returned so - downstream nodes see the latest data. This realises the architect - brief: "Retriever 预取 + Checker 缺失时动态 Tool call 回查库." - 3. LLM SEMANTIC pass — catches paraphrased fabrications (best-effort, - non-fatal on LLM error). - -State I/O: - reads : state["draft_report"], state["silver_context"], state["gold_context"], - state["metadata"], state["revision_count"] - writes: { - "critic_feedback": List[AgentFeedback] (append-only; sender="Checker"), - "checker_verdict": "pass" | "fatal" | "minor", - # optional, only when tool-call rescue refreshed the context: - "silver_context": Dict[str, Any], - } +- The Checker is NOT a strategist. It is a silent, uncompromising data-integrity auditor. +- Robustness Upgrades: + * Tolerates LLM anchor truncation (substring matching). + * Ignores calendar years and structural constants. + * Aggressively truncates 'Strategy/Recommendation' sections before numeric audit. """ from __future__ import annotations @@ -48,191 +27,193 @@ logger = logging.getLogger(__name__) -# Tolerance for numeric match — LLMs occasionally reformat "2.35%" as "2.4%". -# 2% relative tolerance is tight enough to catch real fabrications but loose -# enough to survive reasonable rounding. Tunable via env for strict regimes. -_NUMERIC_REL_TOLERANCE = float(os.getenv("CHECKER_NUMERIC_TOLERANCE", "0.02")) - -# Hard cap on revisions — mirror the router constant. +# 放宽至 3% 的容差,给 LLM 四舍五入留足空间 +_NUMERIC_REL_TOLERANCE = float(os.getenv("CHECKER_NUMERIC_TOLERANCE", "0.03")) _MAX_REVISIONS = int(os.getenv("AGENT_MAX_REVISIONS", "3")) - -# Whether Checker is allowed to re-query Silver on a citation miss. Default on -# — failing closed (i.e. flag Fatal) is still safe, but allowing rescue lets -# us recover when Retriever happened to miss a metric on the first pass. _TOOL_RECOVERY_ENABLED = os.getenv("CHECKER_TOOL_RECOVERY", "1") == "1" +_COVERAGE_CHECK_ENABLED = os.getenv("CHECKER_COVERAGE_CHECK_ENABLED", "1") == "1" +_COVERAGE_KEYS: Dict[str, str] = { + "latest_atm_iv": "ATM implied volatility", + "pcr_volume": "put/call ratio (volume)", + "gpr_index_level": "GPR geopolitical risk index", +} # ========================================== # Structured LLM output # ========================================== - class CheckerViolation(BaseModel): severity: str = Field(description="'Fatal' for any number mismatch; 'Minor' for missing citations only") description: str = Field(description="What was hallucinated vs what the real data says") cited_silver_value: Optional[str] = Field(default=None, description="Ground-truth value from silver_context") draft_value: Optional[str] = Field(default=None, description="Value claimed by the draft") - class CheckerResult(BaseModel): is_passed: bool = Field(description="True iff every claim is grounded AND cited") violations: List[CheckerViolation] = Field(default_factory=list) - # ========================================== # Regex pass (deterministic layer 1) # ========================================== - -# Capture standalone numbers; skip numbers living inside [Silver: ...] / [Gold: ...] citations. _NUMBER_RE = re.compile(r"(?Silver|Gold)\s*:\s*(?P[^\]]+)\]", re.IGNORECASE) -# Prompt-sanctioned sentinel strings the Analyst is explicitly allowed to use -# when a claim cannot be cited (see prompts.py:DATA_LINEAGE_DIRECTIVE §3 and -# Scripts/agents/prompts.py:MACRO_CHAIN_DIRECTIVE). Treating these as "real" -# anchor lookups caused every degraded revision in the 2026-04-22 router-e2e -# run to fail the deterministic audit even though the draft was doing the -# right thing (admitting data gaps). They are therefore normalised to -# lower-case and matched as NON-CLAIMS — skipped by both the anchor check -# and, by extension, any number that sits inside such a citation. +_STRATEGY_VOCAB_RE = re.compile( + r"\b(dte|delta|strike|strikes?|days?\s+to\s+expir\w*|expir\w+|" + r"spread|otm|atm|itm|leg|wing|condor|straddle|strangle|collar|" + r"debit|credit|wide|breakeven|break-?even|payout|" + r"max\s+loss|max\s+gain|risk[- ]reward|theta|vega|gamma|rho)\b", + re.IGNORECASE, +) +_STRATEGY_WINDOW = 60 + +_COMMON_NUMERIC_WHITELIST: Set[float] = {0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 10.0, 25.0, 30.0, 45.0, 50.0, 100.0, 500.0} + _SENTINEL_ANCHORS: frozenset = frozenset({ - "insufficient data", - "no direct data available", - "no data", - "no data available", - "not applicable", - "n/a", - "na", - "none", - "unknown", - "tbd", - "pending", + "insufficient data", "no direct data available", "no data", "no data available", + "not applicable", "n/a", "na", "none", "unknown", "tbd", "pending", }) - def _is_sentinel_anchor(anchor: str) -> bool: - """True iff the citation anchor is a whitelisted 'I have nothing to cite' sentinel. - - Normalised: case-insensitive, punctuation collapsed. This check is used - by `_deterministic_audit` to short-circuit both anchor-existence and - numeric-drift audits inside the citation — which matches the Analyst - prompt's explicit instruction to use `INSUFFICIENT DATA` when a claim - cannot be cited. - """ - if not anchor: - return False - normalised = " ".join(anchor.lower().split()) - return normalised in _SENTINEL_ANCHORS + if not anchor: return False + return " ".join(anchor.lower().split()) in _SENTINEL_ANCHORS +def _is_strategy_parameter(m: "re.Match[str]", text: str) -> bool: + start = max(0, m.start() - _STRATEGY_WINDOW) + end = min(len(text), m.end() + _STRATEGY_WINDOW) + return bool(_STRATEGY_VOCAB_RE.search(text[start:end])) def _numeric_equiv(draft_val: float, truth_val: float, rel_tol: float = _NUMERIC_REL_TOLERANCE) -> bool: - """Percent-tolerant equality. Handles 0.45 vs 45% encoding ambiguity.""" - if truth_val == 0: - return abs(draft_val - truth_val) < 1e-9 - if abs(draft_val - truth_val) / abs(truth_val) <= rel_tol: - return True - # scale bridges - if abs(draft_val - truth_val * 100) / abs(truth_val * 100 or 1) <= rel_tol: - return True - if abs(draft_val * 100 - truth_val) / abs(truth_val) <= rel_tol: - return True + if truth_val == 0: return abs(draft_val - truth_val) < 1e-9 + if abs(draft_val - truth_val) / abs(truth_val) <= rel_tol: return True + if abs(draft_val - truth_val * 100) / abs(truth_val * 100 or 1) <= rel_tol: return True + if abs(draft_val * 100 - truth_val) / abs(truth_val) <= rel_tol: return True return False +def _numeric_equiv_abs(draft_val: float, truth_val: float, rel_tol: float = _NUMERIC_REL_TOLERANCE) -> bool: + return _numeric_equiv(draft_val, truth_val, rel_tol) or _numeric_equiv(abs(draft_val), abs(truth_val), rel_tol) def _extract_silver_numbers(silver_context: Dict[str, Any]) -> List[float]: - """Flatten silver_context['values'] into a list of floats.""" out: List[float] = [] values = (silver_context or {}).get("values") or {} for v in values.values(): if isinstance(v, (int, float)): out.append(float(v)) elif isinstance(v, str): - s = v.replace(",", "").rstrip("%").strip() - try: - out.append(float(s)) - except ValueError: - continue + try: out.append(float(v.replace(",", "").rstrip("%").strip())) + except ValueError: continue return out +def _build_source_pools(frozen: Dict[str, Any]) -> Dict[str, List[float]]: + _MACRO_PREFIXES = ("MACRO_", "VIX", "GSPC", "IXIC", "DXY", "GLD_SPOT", "SLV_SPOT", "FEDFUNDS", "CPIAUCSL", "UNRATE", "TNX", "BAML") + values = (frozen or {}).get("values") or {} + macro_nums, gpr_nums, other_nums = [], [], [] -def _extract_known_anchors(silver_context: Dict[str, Any], gold_context: List[Any]) -> Set[str]: - """Union of Silver lineage_anchors ∪ Gold bronze_refs for citation verification.""" - known: Set[str] = set() - for a in (silver_context or {}).get("lineage_anchors", []) or []: - known.add(str(a)) - for chunk in gold_context or []: - br = getattr(chunk, "bronze_ref", None) or (chunk.get("bronze_ref") if isinstance(chunk, dict) else None) - if br: - known.add(str(br)) - return known + for k, v in values.items(): + if isinstance(v, (int, float)): fv = float(v) + elif isinstance(v, str): + try: fv = float(v.replace(",", "").rstrip("%").strip()) + except ValueError: continue + else: continue + + if any(k.startswith(p) for p in _MACRO_PREFIXES): macro_nums.append(fv) + elif k.startswith("gpr"): gpr_nums.append(fv) + else: other_nums.append(fv) + return {"macro": macro_nums, "gpr": gpr_nums, "options": other_nums} + +def _extract_fact_section(draft: str) -> str: + """🌟 架构师增强:极度强化的策略区截断,防止误杀参数""" + if not draft: return "" + stop_re = re.compile( + r"(?im)^(?:#+)?\s*(?:\d+\.?\s*)?(?:Trade Idea|Options Strategy|Recommendation|Positioning|Execution|Trade Execution)\b" + ) + m = stop_re.search(draft) + return draft[: m.start()] if m else draft + +def _check_key_metric_coverage(draft: str, silver_context: Dict[str, Any]) -> List[AgentFeedback]: + if not _COVERAGE_CHECK_ENABLED: return [] + feedbacks: List[AgentFeedback] = [] + values = (silver_context or {}).get("values") or {} + for key, label in _COVERAGE_KEYS.items(): + sv = values.get(key) + if sv is None: continue + try: sv_float = float(sv) + except (ValueError, TypeError): continue + + draft_nums = [ + float(m.group(1).replace(",", "")) + for m in _NUMBER_RE.finditer(draft) + if m.group(1).replace(",", "").replace(".", "").lstrip("-").isdigit() or "." in m.group(1) + ] + if not any(_numeric_equiv(dn, sv_float) for dn in draft_nums): + feedbacks.append(AgentFeedback( + sender="Checker", error_type="Minor", + comment=f"[rule:COVERAGE_MISS | metric={key}] Metric '{label}' ({sv_float}) missing from draft." + )) + return feedbacks -def _deterministic_audit( - draft: str, - silver_context: Dict[str, Any], - gold_context: List[Any], -) -> List[AgentFeedback]: - """Regex-only audit. Always runs, zero LLM dependency.""" +def _deterministic_audit(draft: str, silver_context: Dict[str, Any], gold_context: List[Any], frozen_context: Optional[Dict[str, Any]] = None) -> List[AgentFeedback]: feedbacks: List[AgentFeedback] = [] + truth_ctx = frozen_context if frozen_context is not None else silver_context + silver_truth_numbers = _extract_silver_numbers(truth_ctx) + source_pools = _build_source_pools(truth_ctx) - silver_truth_numbers = _extract_silver_numbers(silver_context) - known_silver_anchors = set(str(a) for a in (silver_context or {}).get("lineage_anchors", []) or []) + _silver_values_keys: Set[str] = set((truth_ctx or {}).get("values", {}).keys()) + known_silver_anchors = set(str(a) for a in (truth_ctx or {}).get("lineage_anchors", []) or []) | _silver_values_keys + known_gold_refs: Set[str] = set() for chunk in gold_context or []: br = getattr(chunk, "bronze_ref", None) or (chunk.get("bronze_ref") if isinstance(chunk, dict) else None) - if br: - known_gold_refs.add(str(br)) - - # (b) Citation anchor existence first (highest severity). - # Prompt-sanctioned sentinels ("INSUFFICIENT DATA", "N/A", …) are - # *deliberately* accepted here — the Analyst prompt instructs the - # model to use them when a claim cannot be cited, so flagging them - # as Fatal creates an unrecoverable revision loop (was root cause D - # of docs/test/2026-04-22/router_e2e_deep_analysis.md). + if br: known_gold_refs.add(str(br)) + + # 🌟 架构师增强:容忍 LLM 对 Citation Anchor 的截断和缩写 for m in _CITATION_RE.finditer(draft): - kind = m.group("kind").capitalize() - anchor = m.group("anchor").strip() - if _is_sentinel_anchor(anchor): - continue - if kind == "Silver" and anchor not in known_silver_anchors: - feedbacks.append(AgentFeedback( - sender="Checker", - error_type="Fatal", - comment=f"Citation references unknown Silver lineage anchor '{anchor}'. " - f"Known anchors: {sorted(known_silver_anchors) or '[]'}", - missing_lineage_id=[anchor], - )) - elif kind == "Gold" and anchor not in known_gold_refs: - feedbacks.append(AgentFeedback( - sender="Checker", - error_type="Fatal", - comment=f"Citation references unknown Gold bronze_ref '{anchor}'. " - f"Known refs (first 5): {list(known_gold_refs)[:5] or '[]'}", - missing_lineage_id=[anchor], - )) + kind, anchor = m.group("kind").capitalize(), m.group("anchor").strip() + if _is_sentinel_anchor(anchor): continue + + if kind == "Silver": + # Fuzzy match: "MACRO_VIX" is acceptable for "MACRO_VIX_2026-04-23" + matched = any(anchor.lower() in k.lower() or k.lower() in anchor.lower() for k in known_silver_anchors) + if not matched: + feedbacks.append(AgentFeedback( + sender="Checker", error_type="Fatal", + comment=f"[rule:UNKNOWN_SILVER_ANCHOR | anchor={anchor}] Anchor '{anchor}' not found.", + missing_lineage_id=[anchor], + )) + elif kind == "Gold": + matched = any(anchor.lower() in k.lower() or k.lower() in anchor.lower() for k in known_gold_refs) + if not matched: + feedbacks.append(AgentFeedback( + sender="Checker", error_type="Fatal", + comment=f"[rule:UNKNOWN_GOLD_REF | anchor={anchor}] Ref '{anchor}' not found.", + missing_lineage_id=[anchor], + )) - # (a) Number audit — skip claims inside recognised citations. - draft_without_citations = _CITATION_RE.sub("", draft) + # Number audit + fact_section = _extract_fact_section(draft) + draft_without_citations = _CITATION_RE.sub("", fact_section) for m in _NUMBER_RE.finditer(draft_without_citations): raw, is_pct = m.group(1), m.group(2) - try: - val = float(raw.replace(",", "")) - except ValueError: - continue - # Tiny integers (1, 2, 3) are almost always section numbers or trade - # idea counts, not claims. Any 2-digit+ number, decimal, or % qualifies. + try: val = float(raw.replace(",", "")) + except ValueError: continue + + # 🌟 架构师增强:免疫年份 (2020-2030) 和 常见自然数 + if abs(val) in _COMMON_NUMERIC_WHITELIST: continue + if val >= 2020 and val <= 2030 and "." not in raw: continue + is_claim = bool(is_pct) or "." in raw or abs(val) >= 10 - if not is_claim: - continue - if any(_numeric_equiv(val, t) for t in silver_truth_numbers): - continue + if not is_claim: continue + if _is_strategy_parameter(m, draft_without_citations): continue + + if any(_numeric_equiv_abs(val, t) for t in silver_truth_numbers): continue + + all_sub = source_pools["macro"] + source_pools["gpr"] + source_pools["options"] + if any(_numeric_equiv_abs(val, t) for t in all_sub): continue + feedbacks.append(AgentFeedback( - sender="Checker", - error_type="Fatal", - comment=( - f"Draft cites numeric value '{raw}{is_pct}' that does not match any " - f"Silver value within {int(_NUMERIC_REL_TOLERANCE * 100)}% tolerance. " - f"Either cite Silver/Gold or remove the claim." - ), + sender="Checker", error_type="Fatal", + comment=f"[rule:NUMERIC_MISMATCH | draft={raw}{is_pct}] Number not in Silver data." )) return feedbacks @@ -241,242 +222,86 @@ def _deterministic_audit( # ========================================== # CheckerAgent class # ========================================== - class CheckerAgent: - """Blue-team fact-auditor. Directly wired into the router's dedicated checker_node.""" - def __init__(self, silver_tool: Optional[Any] = None): - """Args: - silver_tool: Optional injected `SilverSQLTool`. The router shares its - singleton instance so the Checker's rescue tool-call reuses the - same DuckDB connection that already cached Parquet schemas. - When None, tool-call recovery is disabled. - """ self.silver_tool = silver_tool self.enable_rescue = _TOOL_RECOVERY_ENABLED and silver_tool is not None - self.model_name = os.getenv("OLLAMA_CHECKER_MODEL", "options-expert-v1:latest") - self.llm = ChatOllama( - model=self.model_name, - temperature=0.0, - format="json", - ).with_structured_output(CheckerResult) - + self.llm = ChatOllama(model=self.model_name, temperature=0.0, format="json").with_structured_output(CheckerResult) self.prompt = get_checker_prompt() - # ---------------------------------------- - # Public entry point (LangGraph contract) - # ---------------------------------------- async def audit(self, state: Dict[str, Any]) -> Dict[str, Any]: - """Run all three defence layers and return the Checker node payload. - - Returns a dict matching `AgentState` keys so the LangGraph checkpointer - merges it cleanly: - { - "critic_feedback": List[AgentFeedback], # append-only - "checker_verdict": "pass" | "fatal" | "minor", - "silver_context": Dict[str, Any], # optional refresh - } - """ revision_n = state.get("revision_count", 0) if revision_n >= _MAX_REVISIONS: logger.warning("CheckerAgent: max revisions reached — skipping audit.") return {"critic_feedback": [], "checker_verdict": "pass"} - draft = state.get("draft_report", "") or "" - silver_ctx = state.get("silver_context", {}) or {} - gold_ctx = state.get("gold_context", []) or [] - - # ---- Layer 1: deterministic pass ---- - feedbacks: List[AgentFeedback] = _deterministic_audit(draft, silver_ctx, gold_ctx) - logger.info(f"CheckerAgent: deterministic hits={len(feedbacks)}") - - # ---- Layer 2: tool-call escape hatch (opt-in) ---- - refreshed_silver: Optional[Dict[str, Any]] = None - if self.enable_rescue and self._should_trigger_rescue(feedbacks): - refreshed_silver, rescued_feedbacks = await self._rescue_missing_anchors( - feedbacks=feedbacks, - state=state, - ) - feedbacks = rescued_feedbacks - # If rescue succeeded, also refresh the silver-truth numbers - # for the LLM pass below so it sees the latest data. - if refreshed_silver: - silver_ctx = refreshed_silver - - # ---- Layer 3: LLM semantic audit (best-effort) ---- + draft, silver_ctx, gold_ctx = state.get("draft_report", ""), state.get("silver_context", {}), state.get("gold_context", []) + frozen_ctx = state.get("silver_context_frozen") + macro_text = state.get("macro_context", "") + + feedbacks = _deterministic_audit(draft, silver_ctx, gold_ctx, frozen_ctx) + + truth_ctx_for_coverage = frozen_ctx if frozen_ctx is not None else silver_ctx + feedbacks.extend(_check_key_metric_coverage(draft, truth_ctx_for_coverage)) + + refreshed_silver = None + if self.enable_rescue and any(fb.error_type.lower() == "fatal" and fb.missing_lineage_id for fb in feedbacks): + refreshed_silver, feedbacks = await self._rescue_missing_anchors(feedbacks, state) + if refreshed_silver: silver_ctx = refreshed_silver + try: - # Reuse Analyst formatters to keep the Silver/Gold rendering - # identical across prompts (no silent schema drift between agents). from Scripts.agents.analyst import _format_silver, _format_gold - silver_block = _format_silver(silver_ctx) - gold_block = _format_gold(gold_ctx) - - chain = self.prompt | self.llm - logger.info(f"CheckerAgent: invoking LLM audit | deterministic_hits={len(feedbacks)}") - result: CheckerResult = await chain.ainvoke({ - "silver_block": silver_block, - "gold_block": gold_block, + result: CheckerResult = await (self.prompt | self.llm).ainvoke({ + "silver_block": _format_silver(silver_ctx), + "gold_block": _format_gold(gold_ctx), "draft": draft, + "macro_context": macro_text[:2000] if macro_text else "(not available)", }) if not result.is_passed: for v in result.violations: sev = v.severity if v.severity in ("Fatal", "Minor") else "Fatal" - feedbacks.append(AgentFeedback( - sender="Checker", - error_type=sev, - comment=v.description + ( - f" (draft: {v.draft_value} vs silver: {v.cited_silver_value})" - if v.draft_value or v.cited_silver_value else "" - ), - revision_index=revision_n, - )) + feedbacks.append(AgentFeedback(sender="Checker", error_type=sev, comment=f"[rule:LLM_CONSISTENCY] {v.description}", revision_index=revision_n)) except Exception as e: - logger.warning( - f"CheckerAgent: LLM audit failed ({type(e).__name__}); " - f"falling back to deterministic only. Error: {e}" - ) - - # Stamp revision index on every feedback entry for audit replayability. - for fb in feedbacks: - if fb.revision_index is None: - fb.revision_index = revision_n - - verdict = self._compute_verdict(feedbacks) - logger.info(f"CheckerAgent: verdict={verdict} | total_findings={len(feedbacks)}") - - payload: Dict[str, Any] = { - "critic_feedback": feedbacks, - "checker_verdict": verdict, - } - if refreshed_silver is not None: - payload["silver_context"] = refreshed_silver - return payload + logger.warning(f"CheckerAgent: LLM audit failed: {e}") - # ---------------------------------------- - # Rescue helpers - # ---------------------------------------- - - @staticmethod - def _should_trigger_rescue(feedbacks: List[AgentFeedback]) -> bool: - """Rescue only when we have missing-anchor Fatal findings (not pure numeric drift).""" - return any( - fb.error_type.lower() == "fatal" and fb.missing_lineage_id - for fb in feedbacks - ) + for fb in feedbacks: fb.revision_index = fb.revision_index or revision_n + verdict = "pass" if not feedbacks else ("fatal" if any(f.error_type.lower() == "fatal" for f in feedbacks) else "minor") + + payload = {"critic_feedback": feedbacks, "checker_verdict": verdict} + if refreshed_silver: payload["silver_context"] = refreshed_silver + return payload - async def _rescue_missing_anchors( - self, - feedbacks: List[AgentFeedback], - state: Dict[str, Any], - ) -> tuple[Optional[Dict[str, Any]], List[AgentFeedback]]: - """Re-query Silver via the precomputed metadata and downgrade feedback on hit. - - Rationale: the architect brief wants Checker to dynamically tool-call - the Silver Layer when Retriever missed an anchor — not to let the LLM - re-plan the query (which would re-open the hallucination surface). - We therefore reuse `state["metadata"]` (already LLM-extracted by - QueryTransformer) and call SilverSQLTool directly. - """ + async def _rescue_missing_anchors(self, feedbacks: List[AgentFeedback], state: Dict[str, Any]) -> tuple[Optional[Dict[str, Any]], List[AgentFeedback]]: metadata = state.get("metadata") - if metadata is None: - logger.info("CheckerAgent: rescue skipped — no metadata on state.") - return None, feedbacks - - # Rebuild the same per-source `TimePredicate` set MasterRetriever - # already published to `state["time_range"]["source_predicates"]`. - # Without this, the rescue call would land on the legacy branch of - # `_handle_put_call_ratio` / `_handle_options_analysis` and silently - # compute a *different* window than the initial retrieval (the 3d→2d - # drift documented in docs/test/2026-04-22/router_e2e_deep_analysis.md - # lines 120–133), making `latest_atm_iv` oscillate across revisions - # and the Checker unable to converge against its own refreshed truth. + if not metadata: return None, feedbacks + live_predicates = None - tr = state.get("time_range") or {} - serialised_preds = tr.get("source_predicates") - if isinstance(serialised_preds, dict) and serialised_preds: + if serialised_preds := (state.get("time_range") or {}).get("source_predicates"): try: - # Imported lazily to avoid a cross-module import cycle at - # module load time; checker.py must not pull in the full - # retrieval package when a consumer only needs auditing. from Scripts.retrieval.time_adapter import predicates_from_serialised live_predicates = predicates_from_serialised(serialised_preds) - if live_predicates: - logger.info( - "CheckerAgent: rescue will reuse pinned TimePredicate set " - f"({len(live_predicates)} sources) from state.time_range." - ) - except Exception as e: - logger.warning( - f"CheckerAgent: could not rehydrate time predicates ({type(e).__name__}: {e}); " - "rescue will fall back to handler-local window math." - ) - - try: - logger.info("CheckerAgent: triggering Silver rescue query (missing anchor).") - # Pass the pinned predicate set so the Silver handlers hit exactly - # the same (start_date, end_date) window as the initial retrieval. - refreshed = await self.silver_tool.query_parquet_by_metadata( - metadata, time_predicates=live_predicates, - ) - except Exception as e: - logger.warning(f"CheckerAgent: rescue query failed ({type(e).__name__}): {e}") - return None, feedbacks + except: pass - refreshed_values = (refreshed or {}).get("values") or {} - refreshed_anchors = set(str(a) for a in (refreshed or {}).get("lineage_anchors", []) or []) + try: refreshed = await self.silver_tool.query_parquet_by_metadata(metadata, time_predicates=live_predicates) + except Exception: return None, feedbacks - # Merge with the in-state silver so we don't lose values from the first pass. old_silver = state.get("silver_context", {}) or {} - old_values = old_silver.get("values", {}) or {} - old_anchors = set(str(a) for a in old_silver.get("lineage_anchors", []) or []) - - merged_values = {**old_values, **refreshed_values} - merged_anchors = sorted(old_anchors | refreshed_anchors) + merged_values = {**(old_silver.get("values", {})), **(refreshed.get("values", {}))} + merged_anchors = sorted( + set(str(a) for a in old_silver.get("lineage_anchors", [])) + | set(str(a) for a in refreshed.get("lineage_anchors", [])) + ) merged_silver = { + **{k: v for k, v in old_silver.items() if k not in ("values", "lineage_anchors")}, + **{k: v for k, v in refreshed.items() if k not in ("values", "lineage_anchors")}, "values": merged_values, "lineage_anchors": merged_anchors, - # preserve any other side-info like engine_error - **{k: v for k, v in (refreshed or {}).items() if k not in ("values", "lineage_anchors")}, } - # Downgrade Fatal missing-anchor findings whose anchor is now known. - updated: List[AgentFeedback] = [] - for fb in feedbacks: - if ( - fb.error_type.lower() == "fatal" - and fb.missing_lineage_id - and any(mid in merged_anchors for mid in fb.missing_lineage_id) - ): - updated.append(AgentFeedback( - sender="Checker", - error_type="Minor", - comment=( - f"(Rescued) Citation anchor {fb.missing_lineage_id} was missing " - "from the initial retrieval pass but is now present after a " - "Silver re-query. Analyst should keep the citation — no rewrite needed." - ), - missing_lineage_id=fb.missing_lineage_id, - revision_index=fb.revision_index, - )) - else: - updated.append(fb) - - logger.info( - f"CheckerAgent: rescue merged {len(refreshed_anchors)} new anchors " - f"({len(refreshed_values)} new values); downgraded Fatal → Minor where applicable." - ) - return merged_silver, updated - - # ---------------------------------------- - # Verdict computation - # ---------------------------------------- - - @staticmethod - def _compute_verdict(feedbacks: List[AgentFeedback]) -> str: - """Short-circuit verdict used by the router's conditional edge.""" - if not feedbacks: - return "pass" - if any(fb.error_type.lower() == "fatal" for fb in feedbacks): - return "fatal" - return "minor" + updated = [ + AgentFeedback(sender="Checker", error_type="Minor", comment=f"(Rescued) {fb.missing_lineage_id}", missing_lineage_id=fb.missing_lineage_id, revision_index=fb.revision_index) + if fb.error_type.lower() == "fatal" and fb.missing_lineage_id and any(m in merged_anchors for m in fb.missing_lineage_id) + else fb for fb in feedbacks + ] + return merged_silver, updated \ No newline at end of file diff --git a/Scripts/agents/critic.py b/Scripts/agents/critic.py index 74915e0..6829c3e 100644 --- a/Scripts/agents/critic.py +++ b/Scripts/agents/critic.py @@ -54,7 +54,10 @@ class LogicIssue(BaseModel): severity: Literal["Fatal", "Minor"] = Field( - description="Fatal = strategy contradicts regime/macro; Minor = could be tighter" + description=( + "Fatal: strategy MUST be rewritten (direction contradicts regime/macro/insider signal). " + "Minor: strategy is acceptable but could be polished — do NOT set is_passed=False for Minor only." + ) ) category: Literal[ "iv_regime_fit", @@ -63,12 +66,32 @@ class LogicIssue(BaseModel): "risk_reward_imbalance", "other", ] = Field(description="Which logic axis fails") - comment: str = Field(description="Concrete pushback with a suggested correction") + comment: str = Field(description="Concrete pushback with a suggested correction (≤ 40 words)") class CriticResult(BaseModel): - is_passed: bool = Field(description="True iff every logic axis is acceptable") - issues: List[LogicIssue] = Field(default_factory=list) + is_passed: bool = Field( + description=( + "True iff there are NO Fatal issues. " + "Minor-only findings MUST still set is_passed=True — they go to minor_suggestions. " + "Only set is_passed=False when at least one Fatal issue exists." + ) + ) + issues: List[LogicIssue] = Field( + default_factory=list, + description=( + "Fatal-severity issues only. " + "If is_passed=True this list MUST be empty. " + "Minor-severity findings go into minor_suggestions instead." + ) + ) + minor_suggestions: List[str] = Field( + default_factory=list, + description=( + "Polish notes for the Finalizer — improvements that do NOT block approval. " + "Each entry ≤ 30 words. Examples: tighten spread width, add hedge note, adjust DTE." + ) + ) # ========================================== @@ -223,6 +246,11 @@ async def audit(self, state: Dict[str, Any]) -> Dict[str, Any]: )) # -------- LLM logic critique (best-effort) -------- + # Minor suggestions are collected separately and forwarded to the Finalizer + # as polish notes — they do NOT block the draft or trigger a revision. + # Only Fatal issues set is_passed=False and go into critic_feedback. + minor_suggestions: List[str] = [] + try: chain = self.prompt | self.logic_llm logger.info( @@ -238,14 +266,33 @@ async def audit(self, state: Dict[str, Any]) -> Dict[str, Any]: "gold_block": _format_gold(gold_ctx), "draft": draft, }) + + # Minor suggestions: forward to Finalizer, do NOT block. + if result.minor_suggestions: + minor_suggestions.extend(result.minor_suggestions) + logger.info( + f"CriticAgent: {len(result.minor_suggestions)} minor suggestions " + "forwarded to Finalizer (non-blocking)." + ) + + # Fatal issues only: add to critic_feedback → may trigger revision. if not result.is_passed: for issue in result.issues: - feedbacks.append(AgentFeedback( - sender="Critic", - error_type=issue.severity, - comment=f"[{issue.category}] {issue.comment}", - revision_index=revision_n, - )) + if issue.severity == "Fatal": + feedbacks.append(AgentFeedback( + sender="Critic", + error_type="Fatal", + comment=f"[{issue.category}] {issue.comment}", + revision_index=revision_n, + )) + else: + # LLM incorrectly placed a Minor in issues — demote to suggestion. + minor_suggestions.append(f"[{issue.category}] {issue.comment}") + logger.debug( + f"CriticAgent: Minor issue demoted from issues→suggestions: " + f"{issue.comment[:60]}" + ) + except Exception as e: logger.warning( f"CriticAgent: logic LLM failed ({type(e).__name__}); " @@ -253,11 +300,16 @@ async def audit(self, state: Dict[str, Any]) -> Dict[str, Any]: ) verdict = self._compute_verdict(feedbacks) - logger.info(f"CriticAgent: verdict={verdict} | total_findings={len(feedbacks)}") + logger.info( + f"CriticAgent: verdict={verdict} | fatal={len(feedbacks)} | " + f"minor_suggestions={len(minor_suggestions)}" + ) return { "critic_feedback": feedbacks, "critic_verdict": verdict, + # Non-blocking polish notes forwarded to Finalizer via state. + "critic_minor_suggestions": minor_suggestions, } @staticmethod diff --git a/Scripts/agents/finalizer.py b/Scripts/agents/finalizer.py index 9d67dbc..adbb8ae 100644 --- a/Scripts/agents/finalizer.py +++ b/Scripts/agents/finalizer.py @@ -124,12 +124,34 @@ class FinalReport(BaseModel): description="Overall confidence in the report's conclusions based on data alignment." ) + conversation_reply: str = Field( + default="", + description=( + "A 50-100 word plain-English trading recommendation in direct dialogue style. " + "No markdown, no section headers, no bullet points. " + "Write as if speaking to the trader: start with the key macro/news context in " + "one sentence, state the recommended structure and ticker in one sentence, " + "then add the main risk or caveat in one sentence. " + "Example tone: 'Given elevated geopolitical risk and NORMAL IV on NVDA, " + "a call spread with 30-45 DTE captures momentum while limiting premium outlay. " + "Watch the insider selling overhang — size conservatively.' " + "Incorporate any polish notes from the Critic if provided." + ) + ) + def to_markdown(self) -> str: """Converts the structured Pydantic object into a clean, readable Markdown report for UI display.""" md_lines = [ f"# 📊 Institutional Options Strategy Report", f"**Generated on:** {self.report_date}", f"**Overall Confidence Score:** {self.confidence_score * 100:.1f}%", + ] + # Quick Take — the 50-100 word conversation reply shown first for chat interfaces. + if self.conversation_reply and self.conversation_reply.strip(): + md_lines += [ + f"\n> **💬 Quick Take:** {self.conversation_reply.strip()}", + ] + md_lines += [ f"\n## 🌍 Macro Context Summary", f"{self.macro_summary}", f"\n## 💡 Top Trade Ideas" @@ -306,7 +328,18 @@ def _degraded_report( # ========================================== class FinalizerAgent: - """LangGraph-compatible finalizer. Produces the terminal `final_strategy` dict.""" + """LangGraph-compatible finalizer. Produces the terminal `final_strategy` dict. + + Optional llama3:latest enrichment pass (FINALIZER_LLAMA3_ENRICHMENT=1): + After the structured FinalReport is produced, a second lightweight LLM + call uses llama3:latest to generate an enriched_macro_narrative — a + plain-English synthesis of macro_context for the executive summary + section. This pass is best-effort and never blocks the primary output. + Enabled via env var to avoid extra GPU load in CI / cold-start scenarios. + """ + + _LLAMA3_ENRICHMENT_ENABLED = os.getenv("FINALIZER_LLAMA3_ENRICHMENT", "0") == "1" + _LLAMA3_MODEL = os.getenv("OLLAMA_FINALIZER_ENRICHMENT_MODEL", "llama3:latest") def __init__(self): self.model_name = os.getenv("OLLAMA_FINALIZER_MODEL", "options-expert-v1:latest") @@ -318,9 +351,22 @@ def __init__(self): ).with_structured_output(FinalReport) # Prompt comes from the single source of truth; variables expected by the - # template are: original_query, draft, evidence_block. + # template are: original_query, draft, evidence_block, macro_context. self.prompt = get_finalizer_prompt() + # Optional llama3 enrichment LLM (lazy init — only loaded when enabled). + self._llama3_llm: Optional[Any] = None + if self._LLAMA3_ENRICHMENT_ENABLED: + try: + from langchain_ollama import ChatOllama as _OllamaChat + self._llama3_llm = _OllamaChat( + model=self._LLAMA3_MODEL, + temperature=0.3, + ) + logger.info(f"FinalizerAgent: llama3 enrichment enabled (model={self._LLAMA3_MODEL})") + except Exception as e: + logger.warning(f"FinalizerAgent: llama3 enrichment init failed ({e}) — enrichment disabled.") + async def format_and_clean(self, state: Dict[str, Any]) -> Dict[str, Any]: """Convert the Analyst draft into a FinalReport dict. @@ -341,11 +387,23 @@ async def format_and_clean(self, state: Dict[str, Any]) -> Dict[str, Any]: is_fallback = bool(state.get("is_fallback", False)) evidence_pool = _collect_evidence_pool(state) + # Critic Minor Suggestions — non-blocking polish notes forwarded from CriticAgent. + # Rendered as a concise block so the Finalizer can incorporate them into + # conversation_reply and rationale without triggering a rewrite. + minor_suggestions: List[str] = state.get("critic_minor_suggestions") or [] + minor_block = ( + "\n".join(f"- {s}" for s in minor_suggestions) + if minor_suggestions + else "(none)" + ) + # Render evidence pool as a readable, LLM-consumable block. evidence_block = "\n".join( f"- [{e.source_type}] {e.detail}" for e in evidence_pool ) or "(no evidence available — INSUFFICIENT DATA)" + macro_ctx = state.get("macro_context") or "" + degraded = False degraded_reason: Optional[str] = None @@ -369,6 +427,12 @@ async def format_and_clean(self, state: Dict[str, Any]) -> Dict[str, Any]: "original_query": user_query, "draft": draft, "evidence_block": evidence_block, + # Macro context is passed as trusted background — it was + # pre-validated by the data pipeline and is exempt from + # Checker re-verification (see checker_strictness_v2_architecture.md §2.1). + "macro_context": macro_ctx[:3000] if macro_ctx else "(not available)", + # Critic Minor Suggestions — polish notes to incorporate (non-blocking). + "minor_suggestions_block": minor_block, }) # Post-hoc traceability guarantee: if the LLM produced trade ideas @@ -403,7 +467,31 @@ async def format_and_clean(self, state: Dict[str, Any]) -> Dict[str, Any]: # Keep the report_date deterministic even on the degraded path. _enforce_deterministic_report_date(report, state) - return { + # Optional llama3:latest enrichment pass — macro narrative synthesis. + # Produces a plain-English executive background narrative that sits + # alongside the structured FinalReport without modifying its schema. + enriched_macro_narrative: Optional[str] = None + if self._llama3_llm is not None and macro_ctx: + try: + enrichment_prompt = ( + "You are a concise financial analyst. " + "Write a 2-3 sentence plain English executive summary of the current " + "macro environment based ONLY on the provided Macro Context. " + "Do not add new information or hedging language beyond what is in the context.\n\n" + f"[MACRO CONTEXT]\n{macro_ctx[:2000]}\n\n" + f"[ANALYST MACRO SUMMARY FOR REFERENCE]\n{report.macro_summary}\n\n" + "Executive Macro Narrative:" + ) + enrichment_response = await self._llama3_llm.ainvoke(enrichment_prompt) + enriched_macro_narrative = getattr(enrichment_response, "content", str(enrichment_response)).strip() + logger.info( + f"FinalizerAgent: llama3 enrichment completed " + f"(len={len(enriched_macro_narrative)})" + ) + except Exception as e: + logger.warning(f"FinalizerAgent: llama3 enrichment failed ({type(e).__name__}: {e}) — skipped.") + + output: Dict[str, Any] = { "status": "degraded" if degraded else "complete", "degraded_reason": degraded_reason, "final_report": report.model_dump(), @@ -411,6 +499,9 @@ async def format_and_clean(self, state: Dict[str, Any]) -> Dict[str, Any]: "evidence_links": [e.model_dump() for e in evidence_pool], "confidence_score": report.confidence_score, } + if enriched_macro_narrative: + output["enriched_macro_narrative"] = enriched_macro_narrative + return output # ========================================== diff --git a/Scripts/agents/prompts.py b/Scripts/agents/prompts.py new file mode 100644 index 0000000..3cbe0fe --- /dev/null +++ b/Scripts/agents/prompts.py @@ -0,0 +1,421 @@ +""" +Public API: + get_analyst_prompt() -> ChatPromptTemplate + get_checker_prompt() -> ChatPromptTemplate + get_critic_prompt() -> ChatPromptTemplate get_finalizer_prompt() -> ChatPromptTemplate + format_feedback_block(feedback_list: List[AgentFeedback]) -> str + render_revision_block(feedback_list: List[AgentFeedback]) -> str +""" + +from __future__ import annotations + +from typing import TYPE_CHECKING, Dict, List + +from langchain_core.prompts import ChatPromptTemplate + +if TYPE_CHECKING: # avoid runtime cycle + from Scripts.agents.state import AgentFeedback + + +# ========================================== +# 0. Role cards (foundations for each agent's system prompt) +# ========================================== + +ROLE_PROMPTS: Dict[str, str] = { + "options_strategist": ( + "You are a Senior Options Strategist at a quantitative hedge fund. " + "Your mandate is to produce a causally grounded options strategy report — " + "not a generic market commentary — by linking macro regime, asset-level " + "transmission channels, and a concrete options structure." + ), + "data_auditor": ( + "You are a ruthless Data Integrity Auditor (Blue Team) at a quantitative " + "hedge fund. You do not evaluate strategy; you verify that every number " + "and every citation in the Analyst's draft matches the provided Silver/Gold " + "context within tight numeric tolerance." + ), + "risk_officer": ( + "You are the Chief Risk Officer (Red Team). Numeric accuracy has already " + "been verified by the Blue Team. Your job is to challenge the STRATEGY " + "LOGIC: IV-regime fit, macro contradiction, insider-signal strength, " + "risk/reward balance." + ), + "finalizer": ( + "You are the Report Finalizer for a quantitative options desk. Your only " + "job is to convert an already fact-checked, logic-approved Markdown draft " + "into the deterministic FinalReport Pydantic schema. You do not change " + "the thesis or re-evaluate strategy." + ), +} + + +# ========================================== +# 1. Global guardrails (reused across agents) +# ========================================== + +DATA_LINEAGE_DIRECTIVE = """=== DATA LINEAGE & ANTI-HALLUCINATION (CRITICAL) === +1. NEVER invent a number. Every numeric / factual statement must be backed by a + context item shown in SILVER CONTEXT or GOLD CONTEXT. +2. Citation format after EVERY quantitative claim: + - Silver numeric → [Silver: ] + - Gold qualitative → [Gold: ] +3. If a claim cannot be cited, write "INSUFFICIENT DATA" for that bullet — never + fabricate. +4. Numbers in your draft MUST match the Silver values exactly to the decimal + shown. The Checker Agent will reject drift beyond 2% relative tolerance. +""" + +MACRO_CHAIN_DIRECTIVE = """=== MACRO → MESO → MICRO FRAMEWORK (mandatory) === +Structure your reasoning in three layers: + 1. MACRO — the current regime (VIX, GPR index, yield direction, dollar strength) + pulled from [MACRO ENVIRONMENT] below. + 2. MESO — the transmission channel from macro to the asset class in the query + (e.g. "GPR spike → safe-haven flow → GLD call-side IV bid"). + 3. MICRO — the concrete options expression (strike, DTE, structure) that + exploits the MESO channel AND is compatible with the IV REGIME. +If the IV regime contradicts the user's directional intuition, say so explicitly. +""" + +TEMPORAL_DECAY_DIRECTIVE = """=== TEMPORAL DECAY === +[GOLD CONTEXT] items carry a record_date. Weight items ≤ 7 days higher than +items 8–30 days old; treat anything > 30 days as background only. NEVER let a +stale headline drive a current strategy. +""" + +INSIDER_DISCIPLINE_DIRECTIVE = """=== INSIDER SIGNAL DISCIPLINE === +A single insider transaction is NOISE (tax/vesting). Only treat insider data as +a SIGNAL when 3+ aligned executives appear in the Gold context, OR tone_score +and action_direction align across multiple recent SEC items. Otherwise treat +insider data as context, not signal. +""" + +IV_REGIME_DIRECTIVE = """=== IV REGIME DISCIPLINE (non-negotiable) === +The current IV regime is computed deterministically and injected as `iv_regime_block`. +Your strategy MUST be regime-compatible: + - HIGH IV → harvest premium (credit spreads, iron condors, covered calls). + - LOW IV → buy cheap optionality (long calls, protective puts, debit spreads). + - NORMAL → direction-first; structure second. +""" + +REVISION_INJECTION_TEMPLATE = """=== REVISION NOTICE — prior draft was REJECTED === +Below is the append-only audit trail from the Checker (Blue Team) and Critic (Red Team). +You MUST address every Fatal item in this new draft. Minor items should be +addressed when it does not compromise factual accuracy. + +{feedback_block} +""" + + +# ========================================== +# 2. Analyst prompt +# ========================================== + +def get_analyst_prompt() -> ChatPromptTemplate: + """Analyst: write a draft with mandatory citations based on Macro / Gold / Silver. + + Variables the chain must supply: + original_query, macro_context, iv_regime_block, + silver_block, gold_block, revision_block (may be "") + """ + system_template = ( + f"{ROLE_PROMPTS['options_strategist']}\n\n" + f"{MACRO_CHAIN_DIRECTIVE}\n" + f"{IV_REGIME_DIRECTIVE}\n" + f"{INSIDER_DISCIPLINE_DIRECTIVE}\n" + f"{TEMPORAL_DECAY_DIRECTIVE}\n" + f"{DATA_LINEAGE_DIRECTIVE}\n" + "=== OUTPUT FORMAT ===\n" + "Produce a Markdown report with sections in this exact order:\n" + " ## 1. Macro Regime Snapshot\n" + " ## 2. Transmission Channel (Meso)\n" + " ## 3. IV Regime & Structural Choice\n" + " ## 4. Trade Idea(s) (ticker, direction, structure, strike, DTE, rationale, risk)\n" + " ## 5. Key Catalysts & Invalidation Levels\n" + ) + + human_template = ( + "=== USER QUERY ===\n{original_query}\n\n" + "=== MACRO ENVIRONMENT (latest_macro_context.md) ===\n{macro_context}\n\n" + "=== IV REGIME (deterministic pre-compute) ===\n{iv_regime_block}\n\n" + "=== SILVER CONTEXT (quantitative, source of truth for numbers) ===\n{silver_block}\n\n" + "=== GOLD CONTEXT (qualitative — SEC / news / GPR) ===\n{gold_block}\n\n" + "{revision_block}\n" + "Produce the Markdown strategy report now, obeying Macro → Meso → Micro " + "and the lineage citation rules." + ) + + return ChatPromptTemplate.from_messages([ + ("system", system_template), + ("human", human_template), + ]) + + +# ========================================== +# 3. Checker prompt (Blue Team) +# ========================================== + +def get_checker_prompt() -> ChatPromptTemplate: + """Checker: audit the factual consistency (without evaluating strategy logic). + + Consistency focus (v2, 2026-04-23): + - Rule 1-5 unchanged: Silver numeric cross-reference, citation existence, + Gold hallucination, INSUFFICIENT DATA sentinel, no strategy evaluation. + - Rule 6 (NEW): Numbers that appear in [MACRO CONTEXT] are PRE-APPROVED. + The macro_context is produced by the pipeline's own data ingestion and + is trusted without re-verification. Do NOT flag a number as Fatal merely + because it is in the Macro Context but not in Silver Context. + - Rule 7 (NEW): Check for GOLD CONTRADICTIONS — if the draft claims + something that is directly contradicted by a Gold text snippet + (e.g. draft says 'CEO bought' but Gold says 'CEO sold'), flag as Fatal. + - Rule 8 (NEW): If a key metric (atm_iv, pcr_volume, gpr_index_level) + is present in Silver but completely absent from the draft (no number AND + no INSUFFICIENT DATA), flag as Minor. + + Variables: silver_block, gold_block, draft + Pairs with Pydantic `CheckerResult` via with_structured_output. + """ + system_template = ( + f"{ROLE_PROMPTS['data_auditor']}\n\n" + "=== AUDIT RULES (v3) ===\n" + "\n" + "CRITICAL — NUMBER EXTRACTION RULE (read before applying any other rule):\n" + " When scanning the draft for numeric claims to verify, you MUST distinguish:\n" + " A. FACTUAL / STATISTICAL CLAIMS — numbers from real observed data.\n" + " Examples: 'IV is 34.02%', 'VIX at 19.20', 'open interest 633,946'.\n" + " These MUST be verified against [SILVER CONTEXT] or [MACRO CONTEXT].\n" + " B. HYPOTHETICAL STRATEGY PARAMETERS — numbers the Analyst is proposing\n" + " as trade structure inputs. They are NOT from any data source.\n" + " Examples: '260 strike', '30 DTE', '25-delta', '30-wide condor',\n" + " 'buy the 150/160 call spread', 'sell the 0.25-delta put'.\n" + " These MUST be IGNORED — do NOT flag them as mismatches.\n" + " Rule of thumb: if the number is adjacent to words like strike, DTE, delta,\n" + " expiry, call, put, spread, leg, premium, debit, credit, wide, contract,\n" + " condor, straddle, theta, gamma — it is category B. Skip it.\n" + "\n" + "1. Cross-reference FACTUAL numeric values (category A only) against [SILVER CONTEXT].\n" + " - If the draft says 'IV is 50%' but Silver shows 0.45 or 45%, Fatal.\n" + " - Percentage formats are loose (0.45 == 45%) but values must match.\n" + "2. Every factual quantitative claim (category A) MUST carry [Silver: ]\n" + " or [Gold: ]. Missing citation = Minor (unless fabricated = Fatal).\n" + " [Silver: latest_atm_iv] is a valid citation — metric key names are anchors.\n" + "3. If the draft invokes a SEC filing or news event that does NOT appear in\n" + " [GOLD CONTEXT], that is a Fatal violation (hallucinated source).\n" + "4. 'INSUFFICIENT DATA' statements are NEVER violations — they are correct.\n" + "5. You do NOT evaluate strategy or logic. ONLY factual / quantitative accuracy.\n" + "6. MACRO CONTEXT EXEMPTION: Numbers in [MACRO CONTEXT] are pre-validated.\n" + " Do NOT flag them even if absent from [SILVER CONTEXT].\n" + "7. GOLD CONTRADICTION CHECK: If the draft directly contradicts a Gold text\n" + " snippet (e.g. draft says 'CEO bought' but Gold says 'CEO sold'), Fatal.\n" + " Prefix violation with [rule:GOLD_CONTRADICTION].\n" + "8. KEY METRIC OMISSION: If Silver has atm_iv, pcr_volume, or gpr_index_level\n" + " but the draft omits both the value and any INSUFFICIENT DATA note, Minor.\n" + "\n" + "Return a CheckerResult. If is_passed=True, violations MUST be empty." + ) + + human_template = ( + "[MACRO CONTEXT (trusted background — numbers here are pre-approved, Rule 6)]\n{macro_context}\n\n" + "[SILVER CONTEXT (quantitative ground truth)]\n{silver_block}\n\n" + "[GOLD CONTEXT (qualitative — check for contradictions per Rule 7)]\n{gold_block}\n\n" + "[ANALYST DRAFT TO AUDIT]\n{draft}\n\n" + "Return a CheckerResult." + ) + + return ChatPromptTemplate.from_messages([ + ("system", system_template), + ("human", human_template), + ]) + + +# ========================================== +# 4. Critic prompt (Red Team) +# ========================================== + +def get_critic_prompt() -> ChatPromptTemplate: + """Critic: challenge the strategy logic and risk control on the basis of factual accuracy. + + Variables: original_query, macro_context, iv_regime, insider_confidence, + silver_block, gold_block, draft + Pairs with Pydantic `CriticResult` via with_structured_output. + """ + system_template = ( + f"{ROLE_PROMPTS['risk_officer']}\n\n" + "=== FATAL vs MINOR — READ BEFORE REVIEWING ===\n" + "FATAL (set is_passed=False, put in issues[]):\n" + " - Strategy direction DIRECTLY contradicts the IV regime\n" + " (e.g. recommending long premium in HIGH-IV environment).\n" + " - Strategy direction DIRECTLY contradicts confirmed macro direction\n" + " (e.g. long GLD calls while real yields are aggressively rising).\n" + " - ≥3 aligned insider executives directly contradict the recommended position.\n" + " - The draft recommends a bullish structure on a stock with a confirmed\n" + " BEARISH insider signal (or vice versa).\n" + "\n" + "MINOR (set is_passed=True, put suggestions in minor_suggestions[] ONLY):\n" + " - Risk/reward could be improved (e.g., a spread is cheaper than a naked option).\n" + " - DTE, strike, or sizing could be tighter given the catalyst timeline.\n" + " - Rhetorical overstatement ('guaranteed upside' → 'favourable risk/reward').\n" + " - A hedge or stop-loss level is missing but the overall direction is sound.\n" + " - Rounding, phrasing polish, or adding a missing catalyst mention.\n" + "\n" + "CRITICAL RULE: If you find ONLY Minor issues, you MUST set is_passed=True.\n" + " Minor issues go into minor_suggestions[], NOT into issues[].\n" + " Do NOT force a revision for Minor issues — the Finalizer handles polish.\n" + "\n" + "=== REVIEW AXES (in strict priority order) ===\n" + "1. IV Regime Fit — current iv_regime is provided deterministically:\n" + " - HIGH IV → long premium is penalised; prefer credit spreads / condors.\n" + " - LOW IV → short premium is penalised; prefer long optionality.\n" + " - NORMAL → direction-first; structure must be justified.\n" + " Direct contradiction → Fatal. Suboptimal but not contradictory → Minor.\n" + "2. Macro Contradiction — compare directional bias to [MACRO ENVIRONMENT].\n" + " Direct contradiction → Fatal. Macro headwind acknowledged → Minor note.\n" + "3. Insider Signal — `insider_confidence` gives you the deterministic verdict.\n" + " Single-exec RSU vest = NOISE, never Fatal. ≥3 aligned execs = signal.\n" + "4. Risk/Reward Balance — naked option where spread suffices → Minor only.\n" + "\n" + "=== HARD CONSTRAINTS ===\n" + "- Never challenge a numeric value — that is the Checker's job.\n" + "- Never request more data — work only with what is provided.\n" + "- Return a CriticResult with is_passed, issues (Fatal only), minor_suggestions." + ) + + human_template = ( + "[USER QUERY]\n{original_query}\n\n" + "[MACRO ENVIRONMENT]\n{macro_context}\n\n" + "[DETERMINISTIC REGIME SIGNALS]\n" + "iv_regime={iv_regime}\n" + "insider_confidence={insider_confidence}\n\n" + "[SILVER CONTEXT (already fact-checked)]\n{silver_block}\n\n" + "[GOLD CONTEXT (already fact-checked)]\n{gold_block}\n\n" + "[ANALYST DRAFT TO REVIEW]\n{draft}\n\n" + "Return a CriticResult challenging strategy/logic, not numbers." + ) + + return ChatPromptTemplate.from_messages([ + ("system", system_template), + ("human", human_template), + ]) + + +# ========================================== +# 5. Finalizer prompt +# ========================================== + +def get_finalizer_prompt() -> ChatPromptTemplate: + """Finalizer: convert the Markdown draft that has passed fact-check and logic-approval into FinalReport. + + Variables: original_query, draft, evidence_block, macro_context, + minor_suggestions_block + Pairs with Pydantic `FinalReport` via with_structured_output. + + macro_context (v2): Pre-validated pipeline output — use for macro_summary enrichment. + minor_suggestions_block (v3): Non-blocking polish notes from the Critic. + conversation_reply (v3): 50-100 word dialogue-style field for chat UI. + """ + system_template = ( + f"{ROLE_PROMPTS['finalizer']}\n\n" + "=== HARD RULES ===\n" + "1. Every TradeIdea.supporting_evidence entry MUST reference a citation that\n" + " actually appears in the draft (looks like [Silver: ] or [Gold: ])\n" + " or in the provided evidence pool. Do NOT fabricate citations.\n" + "2. If the draft says 'INSUFFICIENT DATA' for a section, reflect that literally\n" + " in the FinalReport (empty trade_ideas, low confidence_score).\n" + "3. confidence_score should reflect data completeness:\n" + " - Full Gold + Silver + no revision timeouts → up to 0.90\n" + " - Partial data / revision loop triggered → ≤ 0.60\n" + " - Degraded / insufficient → ≤ 0.30\n" + "4. Preserve all numeric values EXACTLY as shown in the draft — they have\n" + " already been fact-checked. Do not re-round.\n" + "5. catalysts must be concrete near-term events (CPI, FOMC, earnings). If\n" + " none present in context, return an empty list — never invent.\n" + "6. MACRO BACKGROUND: Use [MACRO CONTEXT] to enrich macro_summary.\n" + " Numbers from macro_context are pre-validated; quote them without Silver citation.\n" + "7. CRITIC POLISH NOTES: [CRITIC MINOR SUGGESTIONS] are non-blocking improvements\n" + " approved by the Critic. Incorporate them into conversation_reply and rationale\n" + " where they fit naturally — do not alter trade direction.\n" + "8. CONVERSATION REPLY — STRICT FORMAT:\n" + " Write conversation_reply as 50-100 words of plain English in direct dialogue\n" + " style. NO markdown, NO headers, NO bullet points.\n" + " Structure: (a) one sentence on the key macro/news backdrop,\n" + " (b) one sentence on the recommended structure and ticker,\n" + " (c) one sentence on the main risk or caveat.\n" + " Incorporate Critic polish notes naturally if provided.\n" + " Example: 'With VIX at 19 and GPR risk elevated near all-time highs, NVDA\n" + " momentum remains intact despite insider noise. A call spread expiring in\n" + " 30-45 days captures upside while limiting premium outlay. Size conservatively\n" + " — the single-exec RSU vest in Gold context is noise, not a directional signal.'\n\n" + "Return a FinalReport object." + ) + + human_template = ( + "=== USER QUERY ===\n{original_query}\n\n" + "=== MACRO CONTEXT (pre-validated background — use for macro_summary enrichment) ===\n" + "{macro_context}\n\n" + "=== ANALYST DRAFT (already fact-checked + logic-approved) ===\n{draft}\n\n" + "=== EVIDENCE POOL (use these exact IDs for supporting_evidence) ===\n{evidence_block}\n\n" + "=== CRITIC MINOR SUGGESTIONS (non-blocking polish — incorporate where natural) ===\n" + "{minor_suggestions_block}\n\n" + "Emit a FinalReport now. Copy numbers from the draft verbatim. " + "Write conversation_reply in 50-100 plain-English words." + ) + + return ChatPromptTemplate.from_messages([ + ("system", system_template), + ("human", human_template), + ]) + + +# ========================================== +# 6. Feedback rendering helpers (shared by Analyst revision + audit logs) +# ========================================== + +def format_feedback_block(feedback_list: "List[AgentFeedback]") -> str: + """Group append-only feedback by sender, keep only the most severe first. + + Empty input returns an empty string — caller should treat that as "no + pending feedback, render no revision block". + """ + if not feedback_list: + return "" + + buckets: Dict[str, List[AgentFeedback]] = {} + for fb in feedback_list: + buckets.setdefault(fb.sender, []).append(fb) + + blocks: List[str] = [] + for sender in ("Checker", "Critic"): + items = buckets.get(sender) + if not items: + continue + # Fatal first, then Minor, then the rest. + items_sorted = sorted( + items, + key=lambda f: 0 if f.error_type.lower() == "fatal" else (1 if f.error_type.lower() == "minor" else 2), + ) + blocks.append(f"--- {sender} feedback ({len(items_sorted)}) ---") + for f in items_sorted: + rev = f"rev={f.revision_index}" if f.revision_index is not None else "rev=?" + missing = f.missing_lineage_id or [] + missing_s = f" | missing_ids={missing}" if missing else "" + blocks.append(f"[{f.error_type}][{rev}] {f.comment}{missing_s}") + # Surface any other senders we didn't expect (belt-and-suspenders). + for sender, items in buckets.items(): + if sender in ("Checker", "Critic"): + continue + blocks.append(f"--- {sender} feedback ({len(items)}) ---") + for f in items: + blocks.append(f"[{f.error_type}] {f.comment}") + + return "\n".join(blocks) + + +def render_revision_block(feedback_list: "List[AgentFeedback]") -> str: + """Wrap `format_feedback_block` in the revision-injection template. + + Returns an empty string when there is no feedback (so the Analyst prompt + does not ship a "you were rejected" block on the very first pass). + """ + block = format_feedback_block(feedback_list) + if not block: + return "" + return REVISION_INJECTION_TEMPLATE.format(feedback_block=block) diff --git a/Scripts/agents/router.py b/Scripts/agents/router.py new file mode 100644 index 0000000..ab4d3b8 --- /dev/null +++ b/Scripts/agents/router.py @@ -0,0 +1,545 @@ +""" +Topology: + retrieval_master → analyst → checker → [fatal? analyst : critic] + │ + critic → [fatal? analyst : finalizer] + │ + revision_count ≥ N → finalizer (hard circuit-breaker) + + 职责: + 1. Graph orchestration: clearly define the six-step pipeline of Transform → Dual Retrieval → Analyst → Checker → Critic → Finalizer. + Transform + Dual Retrieval are merged into `master_retrieval_node` internally, + because the MasterRetriever facade has already atomically handled the intent classification + metadata extraction + Gold/Silver concurrency. + 2. Resource reuse: global singleton MasterRetriever + global singleton SilverSQLTool, avoid reloading LLM / DuckDB / Qdrant client each time the graph is entered. + 3. Macro preamble (Macro Preamble): read latest_macro_context.md into `state["macro_context"]` at the entry node, all downstream nodes share the same macro snapshot. + 4. Conditional routing: Checker and Critic have independent conditional edges, short-circuit fields `checker_verdict` / `critic_verdict` make the routing decision O(1) and do not depend on the time window inference of the append-only list. + 5. Circuit breaker: `revision_count >= AGENT_MAX_REVISIONS` hard-force entering Finalizer, + Finalizer will mark the product as `status="degraded"`. +""" + +from __future__ import annotations + +import logging +import os +import time +from datetime import date, datetime, timedelta +from pathlib import Path +from typing import Any, Dict, List + +from langgraph.graph import StateGraph, END + +from Scripts.agents.state import AgentState +from Scripts.retrieval import MasterRetriever +from Scripts.retrieval.sql_tools import SilverSQLTool +from Scripts.agents.analyst import AnalystAgent +from Scripts.agents.checker import CheckerAgent +from Scripts.agents.critic import CriticAgent +from Scripts.agents.finalizer import FinalizerAgent + +logger = logging.getLogger(__name__) + +# --- Hard circuit-breaker (shared constant across agents) --- +_MAX_REVISIONS = int(os.getenv("AGENT_MAX_REVISIONS", "3")) + + +# ========================================== +# 0a. Per-node audit log helper +# ========================================== + +def _emit_node_audit( + node: str, + revision_n: int, + t0: float, + verdict: str | None = None, + findings_n: int = 0, + key_in: Dict[str, Any] | None = None, + key_out: Dict[str, Any] | None = None, +) -> List[Dict[str, Any]]: + """Build a single node audit event and return it as a 1-element list. + + Returned as a list so it can be directly used as the `node_audit_log` + value in the router node's return dict — LangGraph merges it via the + ``operator.add`` reducer declared in AgentState. + + Schema (docs/test/2026-04-23/checker_strictness_v2_architecture.md §2.3): + node, revision_n, t_start (ISO-8601), latency_ms, verdict, + findings_n, key_state_in, key_state_out + """ + latency_ms = round((time.monotonic() - t0) * 1000, 1) + event: Dict[str, Any] = { + "node": node, + "revision_n": revision_n, + "t_start": datetime.utcnow().isoformat(timespec="milliseconds"), + "latency_ms": latency_ms, + "verdict": verdict, + "findings_n": findings_n, + "key_state_in": key_in or {}, + "key_state_out": key_out or {}, + } + logger.info( + f"📋 [AuditLog:{node}] revision={revision_n} | latency={latency_ms}ms | " + f"verdict={verdict} | findings={findings_n}" + ) + return [event] + +# --- Global singletons: loaded once per process, not per invocation --- +_MASTER_RETRIEVER = MasterRetriever() +# Share the same SilverSQLTool instance across Retriever + Checker so the +# Checker's tool-call escape hatch hits the same DuckDB connection that +# already cached the Parquet schema at startup. +_SILVER_SQL_TOOL: SilverSQLTool = _MASTER_RETRIEVER.sql_tool + +# --- Agent singletons (ChatOllama clients are expensive to construct) --- +_ANALYST_AGENT = AnalystAgent() +_CHECKER_AGENT = CheckerAgent(silver_tool=_SILVER_SQL_TOOL) +_CRITIC_AGENT = CriticAgent() +_FINALIZER_AGENT = FinalizerAgent() + + +# ========================================== +# 0. Macro preamble helper (injected into state on first pass) +# ========================================== + +def _load_macro_snapshot() -> str: + """Read Data/Agent_Context/latest_macro_context.md once at graph entry. + + Returns a safe fallback string when the snapshot file is absent so the + pipeline never crashes on first-run or in CI. The Analyst / Critic both + consume `state["macro_context"]` downstream. + """ + try: + project_root = Path(__file__).resolve().parents[2] + fp = project_root / "Data" / "Agent_Context" / "latest_macro_context.md" + if fp.exists(): + return fp.read_text(encoding="utf-8") + except Exception as e: + logger.warning(f"router: macro snapshot load failed: {e}") + return ( + "Market conditions are currently stable. (fallback — " + "latest_macro_context.md not yet produced by the macro pipeline.)" + ) + + +# ========================================== +# 1. Node: retrieval_master (Transform + Dual Retrieval + Macro preamble) +# ========================================== + +# ------------------------------------------------------------------ +# Canonical default shapes for the two audit channels. +# ----------------------------------------------------------------------------- +# These keys match the contract declared in Scripts/agents/state.py (AgentState) +# AND the per-node assertion list in Scripts/tests/test_router_e2e.py +# (_REQUIRED_TIMERANGE_KEYS / _REQUIRED_HYDE_KEYS). Hard-coding the shape here +# guarantees the Analyst can always read state["time_range"]["start_date"] +# even when MasterRetriever degraded to the _empty_payload branch. +# ----------------------------------------------------------------------------- + +def _default_time_range() -> Dict[str, Any]: + """Fallback time-range used when the retriever couldn't compute one.""" + today = date.today() + # 180-day look-back mirrors the schema default so downstream Silver queries + # still have a sensible window even in emergency mode. + return { + "time_window_label": "past_six_months", + "window_days": 180, + "anchor_date": today.isoformat(), + "start_date": (today - timedelta(days=180)).isoformat(), + "end_date": today.isoformat(), + "is_default_window_applied": True, + } + + +def _default_hyde_anticipation() -> Dict[str, Any]: + """Fallback HyDE payload — zero-capacity but schema-compliant.""" + return { + "paragraph": "", + "rerank_query": "", + "raw_candidates": [], + "whitelisted_tickers": [], + "novel_tickers": [], + "source_channel": "reference", + } + + +def _coerce_time_range(tr: Any) -> Dict[str, Any]: + """Fill in any missing required keys with defaults so downstream nodes + can safely `state["time_range"]["start_date"]` without guards. + Accepts None, a partial dict, or a full dict; always returns a full dict. + """ + base = _default_time_range() + if isinstance(tr, dict): + for k, v in tr.items(): + if v is not None: + base[k] = v + return base + + +def _coerce_hyde_anticipation(he: Any) -> Dict[str, Any]: + base = _default_hyde_anticipation() + if isinstance(he, dict): + for k, v in he.items(): + if v is not None: + base[k] = v + return base + + +async def master_retrieval_node(state: AgentState) -> Dict[str, Any]: + """Transform → Dual Retrieval → Macro Preamble, atomically. + + Writes into state: + intent, metadata, gold_context, silver_context, macro_context, + time_range, hyde_anticipation, + revision_count=0, is_fallback, checker_verdict=None, critic_verdict=None + + Contract guarantee (NEW): time_range and hyde_anticipation are ALWAYS + non-None and always carry the full set of required keys. This closes the + 2026-04-22 production bug where retrieve() returned an _empty_payload and + the Analyst then crashed on `state["time_range"]["start_date"]`. Defaults + are coerced via `_coerce_time_range` / `_coerce_hyde_anticipation` so a + partial retriever response still produces a schema-valid state delta. + """ + t0 = time.monotonic() + logger.info("🔄 [Node:retrieval_master] Entering Master Retrieval + Macro preamble...") + + retrieval_results = await _MASTER_RETRIEVER.retrieve(state["original_query"]) + is_fallback = retrieval_results.get("status") != "success" + if is_fallback: + logger.warning("⚠️ [Node:retrieval_master] Retrieval partial_failure. Activating fallback state.") + + macro_ctx = _load_macro_snapshot() + + time_range = _coerce_time_range(retrieval_results.get("time_range")) + hyde_anticipation = _coerce_hyde_anticipation(retrieval_results.get("hyde_anticipation")) + + gold_n = len(retrieval_results.get("gold_context") or []) + silver_n = len((retrieval_results.get("silver_context") or {}).get("values") or {}) + + return { + "metadata": retrieval_results.get("metadata"), + "gold_context": retrieval_results.get("gold_context", []), + "silver_context": retrieval_results.get("silver_context", {}), + # 🌟 Audit channels produced by MasterRetriever.retrieve() — now + # guaranteed non-None and fully-shaped even in degraded modes: + # - time_range : (anchor, start, end, window_days, label, + # is_default_window_applied). Analyst emits + # this in the compliance footer of every + # final report. + # - hyde_anticipation : HyDE paragraph + novel tickers. Checker + # relaxes numeric audit when silver_context + # carries `source_channel=silver_layer_via_hyde_expansion`. + "time_range": time_range, + "hyde_anticipation": hyde_anticipation, + "macro_context": macro_ctx, + "revision_count": 0, + "is_fallback": is_fallback, + # Reset verdicts on every new graph entry (safe for re-runs via checkpointer). + "checker_verdict": None, + "critic_verdict": None, + # Reset the pinned IV regime: the first Analyst pass of this new + # graph entry must recompute from the freshly-retrieved Silver, + # not inherit a regime from the previous run under a checkpointer. + "iv_regime_pinned": None, + # Per-node audit log (v2 — append-only via operator.add). + "node_audit_log": _emit_node_audit( + node="retrieval_master", + revision_n=0, + t0=t0, + verdict="fallback" if is_fallback else "success", + findings_n=0, + key_in={"query": (state.get("original_query") or "")[:80]}, + key_out={"gold_n": gold_n, "silver_n": silver_n, "is_fallback": is_fallback}, + ), + } + + +# ========================================== +# 2. Node: analyst (single place that increments revision_count) +# ========================================== + +async def analyst_node(state: AgentState) -> Dict[str, Any]: + """Produce (or re-produce) the Markdown draft. + + IMPORTANT: Analyst is the SOLE owner of `revision_count` — each time the + Analyst runs, it has produced one more draft, so we increment here. Checker + and Critic no longer touch the counter. This makes the route functions' + `revision_count >= N` circuit-breaker a clean "how many drafts have we + tried so far" semantic. + + Also pins `iv_regime_pinned` on the first pass so subsequent revisions + never see a flipped regime (was §6.5 of the 2026-04-22 deep analysis). + """ + t0 = time.monotonic() + revision_n = state.get("revision_count", 0) + logger.info(f"✍️ [Node:analyst] Drafting (revision={revision_n + 1})...") + + result = await _ANALYST_AGENT.generate_report(state) + + # Pin the IV regime on the very first draft. On re-entry the analyst has + # already read it back from state, so the pinned value round-trips + # unchanged across revisions — guaranteed strategy-direction stability. + delta: Dict[str, Any] = { + "draft_report": result.draft, + "revision_count": revision_n + 1, + "checker_verdict": None, + "critic_verdict": None, + "node_audit_log": _emit_node_audit( + node="analyst", + revision_n=revision_n + 1, + t0=t0, + verdict=None, + findings_n=0, + key_in={ + "revision_n": revision_n, + "feedback_n": len(state.get("critic_feedback") or []), + }, + key_out={ + "draft_len": len(result.draft), + "iv_regime": (result.iv_regime or {}).get("iv_regime"), + }, + ), + } + if state.get("iv_regime_pinned") is None and isinstance(result.iv_regime, dict): + delta["iv_regime_pinned"] = result.iv_regime + return delta + + +# ========================================== +# 3. Node: checker (Blue team, fact + lineage) +# ========================================== + +async def checker_node(state: AgentState) -> Dict[str, Any]: + """Deterministic regex audit + coverage check + LLM consistency audit + Silver rescue.""" + t0 = time.monotonic() + revision_n = state.get("revision_count", 0) + logger.info(f"🧐 [Node:checker] Auditing draft (revision={revision_n}) for factual + lineage accuracy...") + result = await _CHECKER_AGENT.audit(state) + # audit() returns {"critic_feedback": [...], "checker_verdict": ..., optional silver_context} + verdict = result.get("checker_verdict", "pass") + findings_n = len(result.get("critic_feedback") or []) + + # Log structured rejection reasons for Fatal findings (aids Analyst revision). + if verdict == "fatal": + fatal_comments = [ + fb.comment for fb in (result.get("critic_feedback") or []) + if fb.error_type.lower() == "fatal" + ] + for fc in fatal_comments: + logger.warning(f"🚫 [Checker:Fatal] {fc}") + + result["node_audit_log"] = _emit_node_audit( + node="checker", + revision_n=revision_n, + t0=t0, + verdict=verdict, + findings_n=findings_n, + key_in={"revision_n": revision_n, "draft_len": len(state.get("draft_report") or "")}, + key_out={"verdict": verdict, "findings_n": findings_n}, + ) + return result + + +# ========================================== +# 4. Node: critic (Red team, logic + regime + insider) +# ========================================== + +async def critic_node(state: AgentState) -> Dict[str, Any]: + """Red-team logic critique; runs only if Checker produced no Fatal findings.""" + t0 = time.monotonic() + revision_n = state.get("revision_count", 0) + logger.info(f"🛡️ [Node:critic] Challenging strategy logic / regime fit / insider signal (revision={revision_n})...") + result = await _CRITIC_AGENT.audit(state) + verdict = result.get("critic_verdict", "pass") + findings_n = len(result.get("critic_feedback") or []) + + # Log structured rejection reasons for Fatal findings. + if verdict == "fatal": + fatal_comments = [ + fb.comment for fb in (result.get("critic_feedback") or []) + if fb.error_type.lower() == "fatal" + ] + for fc in fatal_comments: + logger.warning(f"🚫 [Critic:Fatal] {fc}") + + result["node_audit_log"] = _emit_node_audit( + node="critic", + revision_n=revision_n, + t0=t0, + verdict=verdict, + findings_n=findings_n, + key_in={"revision_n": revision_n}, + key_out={"verdict": verdict, "findings_n": findings_n}, + ) + return result + + +# ========================================== +# 5. Node: finalizer (structured output) +# ========================================== + +async def finalizer_node(state: AgentState) -> Dict[str, Any]: + """Convert Markdown draft → FinalReport Pydantic dict.""" + t0 = time.monotonic() + revision_n = state.get("revision_count", 0) + logger.info("✨ [Node:finalizer] Structuring FinalReport...") + final_strategy = await _FINALIZER_AGENT.format_and_clean(state) + status = final_strategy.get("status", "unknown") + return { + "final_strategy": final_strategy, + "node_audit_log": _emit_node_audit( + node="finalizer", + revision_n=revision_n, + t0=t0, + verdict=status, + findings_n=0, + key_in={"revision_n": revision_n}, + key_out={ + "status": status, + "confidence": final_strategy.get("confidence_score"), + }, + ), + } + + +# ========================================== +# 6. Conditional edges — the routing brain +# ========================================== + +def route_after_checker(state: AgentState) -> str: + """After Checker: fatal → analyst, else → critic. Hard cap → finalizer.""" + revision_n = state.get("revision_count", 0) + if revision_n >= _MAX_REVISIONS: + # Structured: [rule:CIRCUIT_BREAK | node=checker | revision_n=N | limit=N] + logger.warning( + f"🛑 [Route:after_checker] [rule:CIRCUIT_BREAK | node=checker | " + f"revision_n={revision_n} | limit={_MAX_REVISIONS}] " + "Forcing finalizer (degraded output)." + ) + return "finalizer" + + verdict = state.get("checker_verdict") + if verdict == "fatal": + # Emit which specific findings caused the reroute so the Analyst log + # has machine-parseable rejection context adjacent to the route decision. + fatal_items = [ + fb.comment for fb in (state.get("critic_feedback") or []) + if fb.error_type.lower() == "fatal" and fb.sender == "Checker" + ] + logger.info( + f"🔄 [Route:after_checker] [rule:CHECKER_FATAL_REROUTE | revision_n={revision_n} | " + f"fatal_count={len(fatal_items)}] Routing back to Analyst. " + f"First fatal: {fatal_items[0][:120] if fatal_items else 'n/a'}" + ) + return "analyst" + + # "pass" or "minor" or None → move forward to Critic. + # Minor findings are delivered to Analyst via the append-only feedback log + # only if the Critic also pushes back; alone they do not trigger a rewrite. + logger.info( + f"✅ [Route:after_checker] verdict={verdict or 'pass'} — forwarding to Critic." + ) + return "critic" + + +def route_after_critic(state: AgentState) -> str: + """After Critic: fatal → analyst, else → finalizer. Hard cap → finalizer.""" + revision_n = state.get("revision_count", 0) + if revision_n >= _MAX_REVISIONS: + logger.warning( + f"🛑 [Route:after_critic] [rule:CIRCUIT_BREAK | node=critic | " + f"revision_n={revision_n} | limit={_MAX_REVISIONS}] " + "Forcing finalizer (degraded output)." + ) + return "finalizer" + + verdict = state.get("critic_verdict") + if verdict == "fatal": + fatal_items = [ + fb.comment for fb in (state.get("critic_feedback") or []) + if fb.error_type.lower() == "fatal" and fb.sender == "Critic" + ] + logger.info( + f"🔄 [Route:after_critic] [rule:CRITIC_FATAL_REROUTE | revision_n={revision_n} | " + f"fatal_count={len(fatal_items)}] Routing back to Analyst. " + f"First fatal: {fatal_items[0][:120] if fatal_items else 'n/a'}" + ) + return "analyst" + + logger.info( + f"✅ [Route:after_critic] verdict={verdict or 'pass'} — forwarding to Finalizer." + ) + return "finalizer" + + +# ========================================== +# 7. Graph assembly +# ========================================== + +def build_financial_rag_graph(): + """Compile the industrial-grade workflow. + + Contract consumed by `main.py` / `Scripts.Generation_Phase`: + graph = build_financial_rag_graph() + final_state = await graph.ainvoke({"original_query": user_input}) + """ + workflow = StateGraph(AgentState) + + # 1. Nodes + workflow.add_node("retrieval_master", master_retrieval_node) + workflow.add_node("analyst", analyst_node) + workflow.add_node("checker", checker_node) + workflow.add_node("critic", critic_node) + workflow.add_node("finalizer", finalizer_node) + + # 2. Linear edges + workflow.set_entry_point("retrieval_master") + workflow.add_edge("retrieval_master", "analyst") + workflow.add_edge("analyst", "checker") + + # 3. Conditional edges: Checker -> {analyst | critic | finalizer(circuit-break)} + workflow.add_conditional_edges( + "checker", + route_after_checker, + { + "analyst": "analyst", + "critic": "critic", + "finalizer": "finalizer", + }, + ) + + # 4. Conditional edges: Critic -> {analyst | finalizer} + workflow.add_conditional_edges( + "critic", + route_after_critic, + { + "analyst": "analyst", + "finalizer": "finalizer", + }, + ) + + # 5. Terminal edge + workflow.add_edge("finalizer", END) + + logger.info( + "🛠️ Financial RAG Graph compiled. Topology: retrieval_master → analyst → " + "checker → {analyst|critic|finalizer} ; critic → {analyst|finalizer}." + ) + return workflow.compile() + + +# Public alias. Generic LangGraph tutorials and the orchestration CLI +# refer to the entry point as ``build_graph``; exposing it here removes +# an entire class of cross-module naming-drift bugs (see +# docs/test/2026-04-22/ingestion_and_query_runtime_failures.md §2.5). +build_graph = build_financial_rag_graph + +__all__ = [ + "build_financial_rag_graph", + "build_graph", + "master_retrieval_node", + "analyst_node", + "checker_node", + "critic_node", + "finalizer_node", + "route_after_checker", + "route_after_critic", +] diff --git a/Scripts/agents/state.py b/Scripts/agents/state.py new file mode 100644 index 0000000..db38229 --- /dev/null +++ b/Scripts/agents/state.py @@ -0,0 +1,140 @@ +""" +Scripts/agents/state.py +Role: "Global State Protocol" for the financial multi-agent system. +Design philosophy: +1. Traceability (Traceability): force data ID to be passed through. +2. Resilience (Resilience): prevent memory loss through accumulator. +3. Determinism (Determinism): use Pydantic to constrain all intermediate products. +""" + +import operator +from typing import TypedDict, Annotated, List, Dict, Any, Optional, Literal +from pydantic import BaseModel, Field + +# ========================================== +# 1. Data lineage and source structure (Lineage) +# ========================================== + +class EvidenceLink(BaseModel): + """Evidence link anchor""" + source_id: str = Field(..., description="original data ID from Gold or Silver layer (e.g. UUID or Row_Index)") + content_summary: str = Field(..., description="the key numerical or factual summary supported by this evidence") + reliability_score: float = Field(default=1.0, description="reliability score of the data source") + +# ========================================== +# 2. Feedback object structure (solve deadlock and forgetfulness) +# ========================================== + +class AgentFeedback(BaseModel): + """Agent interaction feedback object""" + sender: str = Field(..., description="the name of the agent that sent the feedback (Checker/Critic)") + error_type: str = Field(..., description="Fatal (must be corrected) or Minor (suggestions for optimization)") + comment: str = Field(..., description="specific rejection reason or modification suggestion") + missing_lineage_id: Optional[List[str]] = Field(None, description="the missing or incorrect evidence ID") + revision_index: Optional[int] = Field( + default=None, + description="the revision index of the feedback (used for audit replay; locate the新增 in the append-only list)") + + +# ========================================== +# 3. Structured parameter extraction (solve SQL hallucination) +# ========================================== + +class QueryMetadata(BaseModel): + """ + Structured intent extracted by Transform. + For backend Python code to directly perform parameterized SQL拼接。 + """ + tickers: List[str] = Field(default_factory=list) + metrics: List[str] = Field(default_factory=list, description="IV, Skew, Vol, Insider_Flow etc.") + date_range: Dict[str, str] = Field( + default_factory=dict, + description="YYYY-MM-DD format containing start_date and end_date" + ) + logical_constraints: List[str] = Field( + default_factory=list, + description="e.g. 'only look at options above 5% OTM'" + ) + +# ========================================== +# 4. Global AgentState (core contract) +# ========================================== + +class AgentState(TypedDict): + """ + LangGraph global state: the "living dictionary" of the system. + """ + # --- 原始输入 --- + original_query: str + macro_context: str # latest macro snapshot content injected from external source + + # --- Retrieval layer data (with lineage) --- + metadata: QueryMetadata + gold_context: List[Dict[str, Any]] # Qdrant returns, must contain {'id': ..., 'text': ...} + # silver_context example: {'values': {...}, 'lineage_anchors': [...], 'source_channel': 'primary'} + silver_context: Dict[str, Any] + + # 🔒 Immutable Silver snapshot — written ONCE by retrieval_master at exit, + # never modified by rescue or revision passes. + # Checker uses this as the deterministic numeric ground truth so that + # Rescue-driven updates to `silver_context` (which are additive and used + # by the NEXT analyst revision) cannot shift the audit baseline mid-round + # and cause the IV-regime / numeric-match oscillation documented in + # docs/test/2026-04-22/router_e2e_deep_analysis.md §6.5 (Test 4). + # Structure mirrors silver_context: {values: Dict, lineage_anchors: List[str]} + silver_context_frozen: Optional[Dict[str, Any]] + + # 🌟 Time audit: Retriever uniformly computes the retrieval interval, Analyst must declare at the end + # structure: {time_window_label, window_days, anchor_date, start_date, end_date, + # is_default_window_applied} + time_range: Optional[Dict[str, Any]] + + # 🌟 HyDE semantic hedge (HE = Hypothetical Expansion) + # structure: {paragraph, rerank_query, novel_tickers, whitelisted, source_channel} + # sql_only route as LLM prior knowledge supplement; vector_only route drives Silver reverse compensation query. + hyde_anticipation: Optional[Dict[str, Any]] + + # 🌟 Pinned IV regime — computed ONCE by the Analyst on the first draft, + # reused verbatim on every revision so the strategy recommendation does + # not flip direction mid-pipeline (see docs/test/2026-04-22/ + # router_e2e_deep_analysis.md §6.5 — Test 4 flipped NORMAL→LOW→NORMAL + # across three revisions because Silver rescues refreshed atm_iv). + # Structure: {"iv_regime": str, "atm_iv": float|None, + # "pcr_volume": float|None, "pcr_status": str|None, + # "thresholds": {"high": float, "low": float}} + iv_regime_pinned: Optional[Dict[str, Any]] + + # --- Inference interaction process --- + draft_report: str + + # 🌟 Core: Append-only feedback list (solve Risk 2) + # use operator.add to implement state accumulation, Analyst always sees the "error set" + critic_feedback: Annotated[List[AgentFeedback], operator.add] + + # 📝 Critic Minor Suggestions — non-blocking polish notes for Finalizer. + # Unlike critic_feedback (Fatal → analyst revision), these are style/structure + # improvements that do NOT warrant a full rewrite. Finalizer reads them + # and incorporates where possible into conversation_reply and rationale. + # Written by critic_node each pass (NOT append-only — replaced each time). + critic_minor_suggestions: Optional[List[str]] + + # 🌟 Short-circuit decision fields: only read these two fields to decide the next jump, + # avoid time window inference of "who reported the error in the last round" in the append-only list. + # value domain: "pass" | "fatal" | "minor" | None(not yet audited) + checker_verdict: Optional[Literal["pass", "fatal", "minor"]] + critic_verdict: Optional[Literal["pass", "fatal", "minor"]] + + # --- Flow control (solve Risk 3) --- + revision_count: int # number of drafts produced by Analyst; only Analyst node is responsible for increment + is_fallback: bool # whether the fallback logic is triggered + + # --- Final product --- + # force final_strategy to contain evidence_links to implement data lineage + final_strategy: Dict[str, Any] + + # 🔍 Per-node audit trail — append-only, never reset between revisions. + # Each node wrapper in router.py appends one Dict per call: + # {"node", "revision_n", "t_start", "latency_ms", "verdict", "findings_n", + # "key_state_in", "key_state_out"} + # Enables full replay of the pipeline history from a single state dump. + node_audit_log: Annotated[List[Dict[str, Any]], operator.add] \ No newline at end of file From fd95ac85018e5f25193295e9decce8a798eb7d4c Mon Sep 17 00:00:00 2001 From: "Xinxin(Maxine)" Date: Fri, 24 Apr 2026 15:20:58 -0400 Subject: [PATCH 41/50] update the patch tool Scripts --- Scripts/tools/SEC_Accession_No_depulicated.py | 8 ++- Scripts/tools/SEC_generate_cik_map.py | 50 +++++++++++++++---- Scripts/tools/check_Qdrant.py | 10 ++-- 3 files changed, 51 insertions(+), 17 deletions(-) diff --git a/Scripts/tools/SEC_Accession_No_depulicated.py b/Scripts/tools/SEC_Accession_No_depulicated.py index 528bda9..b90d7e4 100644 --- a/Scripts/tools/SEC_Accession_No_depulicated.py +++ b/Scripts/tools/SEC_Accession_No_depulicated.py @@ -8,8 +8,12 @@ BRONZE_SEC_JSONL_ROOT = ( PROJECT_ROOT / "Data" / "1_Bronze_Raw" / "SEC_Parsed_JSON" ) -SEC_PROCESSING_CONFIG_DIR = PROJECT_ROOT / "config" / "SEC_Processing" -GLOBAL_PROCESSED_REGISTRY = SEC_PROCESSING_CONFIG_DIR / "global_processed_registry.json" +# Canonical location migrated 2026-04-22: +# config/SEC_Processing/global_processed_registry.json (retired) +# -> config/runtime/sec_processed_registry.json (current) +GLOBAL_PROCESSED_REGISTRY = ( + PROJECT_ROOT / "config" / "runtime" / "sec_processed_registry.json" +) TARGET_DATE = "2026-04-08" diff --git a/Scripts/tools/SEC_generate_cik_map.py b/Scripts/tools/SEC_generate_cik_map.py index 82b626e..0ff0365 100644 --- a/Scripts/tools/SEC_generate_cik_map.py +++ b/Scripts/tools/SEC_generate_cik_map.py @@ -1,17 +1,33 @@ +"""Generate the static ticker -> CIK map from SEC EDGAR. + +Output: ``config/reference/ticker_to_cik.json`` — this is the canonical +location read by ``Scripts.core.universe.UniverseLoader.cik_map()`` and by +``Scripts/data_collection/scrapers/sec_ingestion.py``. + +The curated filer universe (``config/universe/equity_single_name.json``) is +read here only to emit a sanity warning if it is missing. +""" + import json import logging +import sys from pathlib import Path import requests # --- Path resolution: repo root is two levels above Scripts/tools/ --- PROJECT_ROOT = Path(__file__).resolve().parents[2] -# Same directory as SEC_tickers.json (see sec_ingestion.CONFIG_FOLDER) -SEC_INGESTION_CONFIG_DIR = PROJECT_ROOT / "config" / "SEC_Ingestion" -SEC_TICKERS_FILE = SEC_INGESTION_CONFIG_DIR / "SEC_tickers.json" -OUTPUT_CIK_MAP = SEC_INGESTION_CONFIG_DIR / "ticker_to_cik.json" -SEC_INGESTION_CONFIG_DIR.mkdir(parents=True, exist_ok=True) +# Make Scripts.core.universe importable whether this file is run directly or +# via `python -m Scripts.tools.SEC_generate_cik_map`. +if str(PROJECT_ROOT) not in sys.path: + sys.path.insert(0, str(PROJECT_ROOT)) + +# Canonical output location (was config/SEC_Ingestion/ — now retired). +REFERENCE_DIR = PROJECT_ROOT / "config" / "reference" +OUTPUT_CIK_MAP = REFERENCE_DIR / "ticker_to_cik.json" + +REFERENCE_DIR.mkdir(parents=True, exist_ok=True) logging.basicConfig( level=logging.INFO, format="%(asctime)s [%(levelname)s] %(message)s" @@ -46,12 +62,26 @@ def generate_local_cik_map() -> None: logger.info(f"✅ Extracted {len(mapping)} tickers.") logger.info(f"💾 Wrote CIK map to: {OUTPUT_CIK_MAP}") - if SEC_TICKERS_FILE.is_file(): - logger.info(f" (Ticker universe file present: {SEC_TICKERS_FILE})") - else: + + # Sanity check: the curated filer universe should exist and every + # ticker in it should resolve to a CIK (else sec_ingestion will skip). + try: + from Scripts.core.universe import universe as _universe + filers = _universe.get("sec.filers") + missing = [t for t in filers if t.upper() not in mapping] + if missing: + logger.warning( + f"⚠️ {len(missing)} filer tickers have no CIK in the freshly " + f"downloaded map (sample: {missing[:8]}). sec_ingestion will " + "skip these until they appear in SEC EDGAR." + ) + else: + logger.info( + f" (Filer universe OK: all {len(filers)} tickers mapped.)" + ) + except Exception as e: logger.warning( - f" SEC_tickers.json not found at {SEC_TICKERS_FILE} — " - "ingestion may fall back to defaults until it exists." + f"Could not cross-check filer universe via UniverseLoader: {e}" ) except Exception as e: diff --git a/Scripts/tools/check_Qdrant.py b/Scripts/tools/check_Qdrant.py index 232889e..f4c6f8c 100644 --- a/Scripts/tools/check_Qdrant.py +++ b/Scripts/tools/check_Qdrant.py @@ -1,7 +1,7 @@ import sys from pathlib import Path -# 动态解决路径问题 +# dynamically resolve path issues project_root = str(Path(__file__).resolve().parents[2]) if project_root not in sys.path: sys.path.insert(0, project_root) @@ -16,7 +16,7 @@ def run_health_check(): print("🏥 Qdrant Database Health Check") print("="*50) - # 1. 检查 Collection 是否存在及其数量 + # 1. check if the collection exists and its count try: count_result = client.count(collection_name=collection_name) print(f"✅ Collection found: '{collection_name}'") @@ -25,20 +25,20 @@ def run_health_check(): print(f"❌ Collection missing or error: {e}") return - # 2. 抽查一条最新的 SEC 数据 (验证 Payload 是否健康) + # 2. sample one latest SEC document to verify Payload and Hybrid Vectors print("\n🔍 Sampling 1 SEC document to verify Payload and Hybrid Vectors...") scroll_results, _ = client.scroll( collection_name=collection_name, scroll_filter={"must": [{"key": "source_type", "match": {"value": "sec"}}]}, limit=1, with_payload=True, - with_vectors=True # 强行把向量拉下来看看 + with_vectors=True # force pull the vectors to see what's inside ) if scroll_results: doc = scroll_results[0] print(f"\n[Document ID]: {doc.id}") - print(f"[Vector Types Found]: {list(doc.vector.keys())}") # 应该打印出 ['dense', 'sparse'] + print(f"[Vector Types Found]: {list(doc.vector.keys())}") # should print out ['dense', 'sparse'] print(f"[Text Preview]: {doc.payload.get('text')[:100]}...") print(f"[Ticker]: {doc.payload.get('ticker')}") print(f"[Unified Timestamp]: {doc.payload.get('unified_timestamp')}") From d57878777e3917b02dc340c887f1e47ae4bf7b0b Mon Sep 17 00:00:00 2001 From: "Xinxin(Maxine)" Date: Fri, 24 Apr 2026 15:22:01 -0400 Subject: [PATCH 42/50] update data --- .../macro_snapshot_2026-04-19.parquet | Bin 0 -> 7386 bytes .../2026-04-18/GLD_options_2026-04-18.parquet | Bin 0 -> 105256 bytes .../2026-04-18/IWM_options_2026-04-18.parquet | Bin 0 -> 57721 bytes .../2026-04-18/QQQ_options_2026-04-18.parquet | Bin 0 -> 103305 bytes .../2026-04-18/SLV_options_2026-04-18.parquet | Bin 0 -> 70819 bytes .../2026-04-18/SPY_options_2026-04-18.parquet | Bin 0 -> 109515 bytes .../2026-04-19/GLD_options_2026-04-19.parquet | Bin 0 -> 105078 bytes .../2026-04-19/IWM_options_2026-04-19.parquet | Bin 0 -> 57567 bytes .../2026-04-19/QQQ_options_2026-04-19.parquet | Bin 0 -> 103256 bytes .../2026-04-19/SLV_options_2026-04-19.parquet | Bin 0 -> 70822 bytes .../2026-04-19/SPY_options_2026-04-19.parquet | Bin 0 -> 109345 bytes .../2026-04-10/gpr_narrative_corpus.md | 1275 +++++++++++++++++ .../2026-04-10/qdrant_gpr_input.jsonl | 75 + .../2026-04-04/macro_context_2026-04-04.md | 16 + .../2026-04-06/macro_context_2026-04-06.md | 16 + .../2026-04-08/macro_context_2026-04-08.md | 16 + .../2026-04-09/macro_context_2026-04-09.md | 16 + .../2026-04-10/macro_context_2026-04-10.md | 16 + .../2026-04-14/macro_context_2026-04-14.md | 16 + .../2026-04-16/macro_context_2026-04-16.md | 16 + .../2026-04-19/macro_context_2026-04-19.md | 16 + ...asset_precious_metals_spot_processed.jsonl | 3 + ...qdrant_macro_central_banks_processed.jsonl | 9 + ...macro_inflation_employment_processed.jsonl | 6 + ...qdrant_macro_yields_dollar_processed.jsonl | 9 + ...t_asset_metals_derivatives_processed.jsonl | 3 + ...qdrant_macro_central_banks_processed.jsonl | 8 + ...ant_macro_geopolitics_risk_processed.jsonl | 7 + ...qdrant_macro_yields_dollar_processed.jsonl | 5 + ...t_asset_metals_derivatives_processed.jsonl | 4 + ...asset_precious_metals_spot_processed.jsonl | 6 + ...qdrant_macro_central_banks_processed.jsonl | 7 + ...ant_macro_geopolitics_risk_processed.jsonl | 5 + ...macro_inflation_employment_processed.jsonl | 7 + ...asset_precious_metals_spot_processed.jsonl | 6 + ...qdrant_macro_central_banks_processed.jsonl | 6 + ...ant_macro_geopolitics_risk_processed.jsonl | 6 + ...macro_inflation_employment_processed.jsonl | 7 + ...t_asset_metals_derivatives_processed.jsonl | 5 + ...qdrant_macro_central_banks_processed.jsonl | 9 + ...ant_macro_geopolitics_risk_processed.jsonl | 4 + ...qdrant_macro_yields_dollar_processed.jsonl | 8 + ...asset_precious_metals_spot_processed.jsonl | 6 + ...qdrant_macro_central_banks_processed.jsonl | 8 + ...ant_macro_geopolitics_risk_processed.jsonl | 5 + ...t_asset_metals_derivatives_processed.jsonl | 8 + ...qdrant_macro_central_banks_processed.jsonl | 8 + ...ant_macro_geopolitics_risk_processed.jsonl | 9 + ...macro_inflation_employment_processed.jsonl | 9 + ...qdrant_macro_yields_dollar_processed.jsonl | 7 + .../2026-04-08/qdrant_ready.jsonl | 59 + .../2026-04-09/qdrant_ready.jsonl | 4 + .../2026-04-10/qdrant_ready.jsonl | 6 + 53 files changed, 1737 insertions(+) create mode 100644 Data/2_Silver_Processed/Macro_History/2026-04-19/macro_snapshot_2026-04-19.parquet create mode 100644 Data/2_Silver_Processed/Options_Market_Data/2026-04-18/GLD_options_2026-04-18.parquet create mode 100644 Data/2_Silver_Processed/Options_Market_Data/2026-04-18/IWM_options_2026-04-18.parquet create mode 100644 Data/2_Silver_Processed/Options_Market_Data/2026-04-18/QQQ_options_2026-04-18.parquet create mode 100644 Data/2_Silver_Processed/Options_Market_Data/2026-04-18/SLV_options_2026-04-18.parquet create mode 100644 Data/2_Silver_Processed/Options_Market_Data/2026-04-18/SPY_options_2026-04-18.parquet create mode 100644 Data/2_Silver_Processed/Options_Market_Data/2026-04-19/GLD_options_2026-04-19.parquet create mode 100644 Data/2_Silver_Processed/Options_Market_Data/2026-04-19/IWM_options_2026-04-19.parquet create mode 100644 Data/2_Silver_Processed/Options_Market_Data/2026-04-19/QQQ_options_2026-04-19.parquet create mode 100644 Data/2_Silver_Processed/Options_Market_Data/2026-04-19/SLV_options_2026-04-19.parquet create mode 100644 Data/2_Silver_Processed/Options_Market_Data/2026-04-19/SPY_options_2026-04-19.parquet create mode 100644 Data/3_Gold_Semantic/GPR_index/2026-04-10/gpr_narrative_corpus.md create mode 100644 Data/3_Gold_Semantic/GPR_index/2026-04-10/qdrant_gpr_input.jsonl create mode 100644 Data/3_Gold_Semantic/Macro_Narratives/2026-04-04/macro_context_2026-04-04.md create mode 100644 Data/3_Gold_Semantic/Macro_Narratives/2026-04-06/macro_context_2026-04-06.md create mode 100644 Data/3_Gold_Semantic/Macro_Narratives/2026-04-08/macro_context_2026-04-08.md create mode 100644 Data/3_Gold_Semantic/Macro_Narratives/2026-04-09/macro_context_2026-04-09.md create mode 100644 Data/3_Gold_Semantic/Macro_Narratives/2026-04-10/macro_context_2026-04-10.md create mode 100644 Data/3_Gold_Semantic/Macro_Narratives/2026-04-14/macro_context_2026-04-14.md create mode 100644 Data/3_Gold_Semantic/Macro_Narratives/2026-04-16/macro_context_2026-04-16.md create mode 100644 Data/3_Gold_Semantic/Macro_Narratives/2026-04-19/macro_context_2026-04-19.md create mode 100644 Data/3_Gold_Semantic/News_Qdrant/2026-04-08/qdrant_asset_precious_metals_spot_processed.jsonl create mode 100644 Data/3_Gold_Semantic/News_Qdrant/2026-04-08/qdrant_macro_central_banks_processed.jsonl create mode 100644 Data/3_Gold_Semantic/News_Qdrant/2026-04-08/qdrant_macro_inflation_employment_processed.jsonl create mode 100644 Data/3_Gold_Semantic/News_Qdrant/2026-04-08/qdrant_macro_yields_dollar_processed.jsonl create mode 100644 Data/3_Gold_Semantic/News_Qdrant/2026-04-10/qdrant_asset_metals_derivatives_processed.jsonl create mode 100644 Data/3_Gold_Semantic/News_Qdrant/2026-04-10/qdrant_macro_central_banks_processed.jsonl create mode 100644 Data/3_Gold_Semantic/News_Qdrant/2026-04-10/qdrant_macro_geopolitics_risk_processed.jsonl create mode 100644 Data/3_Gold_Semantic/News_Qdrant/2026-04-10/qdrant_macro_yields_dollar_processed.jsonl create mode 100644 Data/3_Gold_Semantic/News_Qdrant/2026-04-12/qdrant_asset_metals_derivatives_processed.jsonl create mode 100644 Data/3_Gold_Semantic/News_Qdrant/2026-04-12/qdrant_asset_precious_metals_spot_processed.jsonl create mode 100644 Data/3_Gold_Semantic/News_Qdrant/2026-04-12/qdrant_macro_central_banks_processed.jsonl create mode 100644 Data/3_Gold_Semantic/News_Qdrant/2026-04-12/qdrant_macro_geopolitics_risk_processed.jsonl create mode 100644 Data/3_Gold_Semantic/News_Qdrant/2026-04-12/qdrant_macro_inflation_employment_processed.jsonl create mode 100644 Data/3_Gold_Semantic/News_Qdrant/2026-04-14/qdrant_asset_precious_metals_spot_processed.jsonl create mode 100644 Data/3_Gold_Semantic/News_Qdrant/2026-04-14/qdrant_macro_central_banks_processed.jsonl create mode 100644 Data/3_Gold_Semantic/News_Qdrant/2026-04-14/qdrant_macro_geopolitics_risk_processed.jsonl create mode 100644 Data/3_Gold_Semantic/News_Qdrant/2026-04-14/qdrant_macro_inflation_employment_processed.jsonl create mode 100644 Data/3_Gold_Semantic/News_Qdrant/2026-04-16/qdrant_asset_metals_derivatives_processed.jsonl create mode 100644 Data/3_Gold_Semantic/News_Qdrant/2026-04-16/qdrant_macro_central_banks_processed.jsonl create mode 100644 Data/3_Gold_Semantic/News_Qdrant/2026-04-16/qdrant_macro_geopolitics_risk_processed.jsonl create mode 100644 Data/3_Gold_Semantic/News_Qdrant/2026-04-16/qdrant_macro_yields_dollar_processed.jsonl create mode 100644 Data/3_Gold_Semantic/News_Qdrant/2026-04-18/qdrant_asset_precious_metals_spot_processed.jsonl create mode 100644 Data/3_Gold_Semantic/News_Qdrant/2026-04-18/qdrant_macro_central_banks_processed.jsonl create mode 100644 Data/3_Gold_Semantic/News_Qdrant/2026-04-18/qdrant_macro_geopolitics_risk_processed.jsonl create mode 100644 Data/3_Gold_Semantic/News_Qdrant/2026-04-19/qdrant_asset_metals_derivatives_processed.jsonl create mode 100644 Data/3_Gold_Semantic/News_Qdrant/2026-04-19/qdrant_macro_central_banks_processed.jsonl create mode 100644 Data/3_Gold_Semantic/News_Qdrant/2026-04-19/qdrant_macro_geopolitics_risk_processed.jsonl create mode 100644 Data/3_Gold_Semantic/News_Qdrant/2026-04-19/qdrant_macro_inflation_employment_processed.jsonl create mode 100644 Data/3_Gold_Semantic/News_Qdrant/2026-04-19/qdrant_macro_yields_dollar_processed.jsonl create mode 100644 Data/3_Gold_Semantic/SEC_Insider_Trades/2026-04-08/qdrant_ready.jsonl create mode 100644 Data/3_Gold_Semantic/SEC_Insider_Trades/2026-04-09/qdrant_ready.jsonl create mode 100644 Data/3_Gold_Semantic/SEC_Insider_Trades/2026-04-10/qdrant_ready.jsonl diff --git a/Data/2_Silver_Processed/Macro_History/2026-04-19/macro_snapshot_2026-04-19.parquet b/Data/2_Silver_Processed/Macro_History/2026-04-19/macro_snapshot_2026-04-19.parquet new file mode 100644 index 0000000000000000000000000000000000000000..39df4b7914d4563de1b0aa1959c690a2a95a5913 GIT binary patch literal 7386 zcmc&(eP|o!8NZW1syK?Hc)6=wyhfPhaG4Y9!%Cu(E zN+;QJD2#nEw!+H(Y`cHDQpPA-Hp&QHSj{#v7^P!>tPA_2q-=#k8MIpmquU>Qp7$hM z(#av&OllI{z3=n9&+qwqpXaf>#3$X%ATz-@h<&OrGaRm+6@b{V`;1Q68+JO55fKlx8(G>T!@h1S3>;q zD7=9{XR53SdPyni&7-ihy5bC#6-B5zqnaddp~Og8k(~2a!sxw~lG2c?xSD{~e4!xc z^-@E2hGj{v3W_sa*QA;=Dd;i^167?&|i@$MRe?_13lAmL9z20@8(I{=sVQrsbsi{7@`={3z znLwPe5*MG?!hBjPmo&YG>AkuVqTz80Zv)96z;`ecUEUc0CI@|r$hS=!POuD7?_1CX zQ_OVx@*a<)l#ozTnwYWG!$cVeMIE6pWTYog1b*`2#poL!y!@Rr zmK^|OnMd}V=CHOo9M(1uYn$q`O8^f~5x^bVGH?=o>SAVh@xE;Ts&w|R@6PPJ{D&7l z{_S^1=B~SJzjoOM(8wOlHiyI7K7*L%-F}$kZ}}+4a4lbyRe@nC#&*i$7_G{BwInwL zWle(maEgj!2_YnVS**#`2B{Jz;&830ie;sfe^3+DE&+#yT20p1@(MiLj3amVwW)E*78L`TbI`=d7WZ#dsHo}=FMigi<2E2pBTT% zQ4@@9+(!-D$9s)tEbJKjLz=x#b0N-p_r5kh4Y8vbxE2(&K?`+(eVra39_O&%P@Nbi z?-7(+H2XHqJ#XP|(A_w_o$a1+T7e+a->|Shw{X83lb&D&;;l@&EBB7+ef)iN70^uhQ&~ zY3@@y_cJ@nGZ$F1+(MV!wlhqZiHQH6g?+)o-5KNV90R}HM=>?QqF;uw%j11$gZ5li z0(pmK@6g<@j&q-W4j}KNoc4vZVb|+|>@Eat$PZ}lM=bYe1|ZFKbKh#ZKP3D7!|WJm zW#4$18lQFyR|HKGYL4F@zBXCHVQnp6R_dx&n|$2)r6;GIlg4t5(Bz(7vb;8lg%sE) zyKD0#94?e(MOxdRZh)`p%?c3!#Wi1+WIU#*kryc3wpT5D`91n_#8|^8kwWMobCZX2@I)b@d;n;$=K00*AUkj_ zsw(wdBsH7yBpTvEN*A@o(&bV>%&cs#N7dGz;;)EmQjsI6?dV2%J?(bYqQTgP=-G0M zX`iv@t(8PItmjsuXMxttWs*%Ho$_SUTZLRC?1FtfqrzS-7xve)X}5y1qFPLm7GjlL zCRY^0{;SzcQi+xTTMHBcvzT}LU2-PS;!V|sbfS@qtd`lqL78}f6iqKJ`X zp~J35R!b;(EeAYGLsUKkeYJ#7Ovf5xa6f-`(KoYcANVxU=_9wODiFJtpH-h*%mjQH zZ_<|syDyi(ub$X5xpcxs;-I<}DH6uG6fs`l^P0E-@n7hQx8YBWo0_ZS(py(E9$!&R zx8xalf$@J(`V{ltgd&Cg8)789op0{rD-~#-lnZjd20q$;pm_&51ozFz^*%m>e5^^} zKg{!dBn)>nyxke2oVwM>W|ln(BM%_A-J5c%S zLCdB5o9#N;C)T>?aet<|%4xsv9(DDJ-UsVfqc?_K*tfD;%9YEIo_P*?3-rupE**A> z-YE7Q@c$O@#ENUtEVaAI#${kjF7$p0xc%T+bpC;S9L&bqPO= zp`kX@n3;h^fZrmUWbz>M0$K8x@zEzXa6*J3<~&fNe0J&F%nXhn%Zp?Z!NF#4bb%=Z zrAFKhvFGl9kV`lU0X4|Su6)6eHy;A+VTXt!uedaZm_XkkKcr^sqg-e`j~}3g1}!j{|g+< B4+8)I literal 0 HcmV?d00001 diff --git a/Data/2_Silver_Processed/Options_Market_Data/2026-04-18/GLD_options_2026-04-18.parquet b/Data/2_Silver_Processed/Options_Market_Data/2026-04-18/GLD_options_2026-04-18.parquet new file mode 100644 index 0000000000000000000000000000000000000000..f02a19dfea17ea6cc303997a5f15a6da60f79f1b GIT binary patch literal 105256 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

O&%I~Yj!=~4YaJK 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

h;!3x7+Hg1Yals2c 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 O4|@;sQ(j!Y`TqgQZdW=0 literal 0 HcmV?d00001 diff --git a/Data/2_Silver_Processed/Options_Market_Data/2026-04-18/IWM_options_2026-04-18.parquet b/Data/2_Silver_Processed/Options_Market_Data/2026-04-18/IWM_options_2026-04-18.parquet new file mode 100644 index 0000000000000000000000000000000000000000..7726e27b71222da89bc2d27b78d04e9dfe89fe13 GIT binary patch literal 57721 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 D^J$>P literal 0 HcmV?d00001 diff --git a/Data/2_Silver_Processed/Options_Market_Data/2026-04-18/QQQ_options_2026-04-18.parquet b/Data/2_Silver_Processed/Options_Market_Data/2026-04-18/QQQ_options_2026-04-18.parquet new file mode 100644 index 0000000000000000000000000000000000000000..78e23992575b99b3e1bfdfd2d93c42e2b6415f43 GIT binary patch literal 103305 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 zУn7hJO?nuBMQr=fF$n-Y}m8kA_mqMU1wzl+lsa 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 literal 0 HcmV?d00001 diff --git a/Data/2_Silver_Processed/Options_Market_Data/2026-04-18/SLV_options_2026-04-18.parquet b/Data/2_Silver_Processed/Options_Market_Data/2026-04-18/SLV_options_2026-04-18.parquet new file mode 100644 index 0000000000000000000000000000000000000000..92251bfc520f77aa93b2c4e4cc9ee59b198b0e8b GIT binary patch literal 70819 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 z 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 literal 0 HcmV?d00001 diff --git a/Data/2_Silver_Processed/Options_Market_Data/2026-04-18/SPY_options_2026-04-18.parquet b/Data/2_Silver_Processed/Options_Market_Data/2026-04-18/SPY_options_2026-04-18.parquet new file mode 100644 index 0000000000000000000000000000000000000000..8cea6151b85ad4dce32abd6f4b69fb162a761407 GIT binary patch literal 109515 zcmeFZd0bRS_BVWQa~ryW#-@R$X%T4^q_x3jUxen;Knn=iGzg6n1r!CN1Q7v^3n(BO z7equbj=?Pi_HvL?ZQXYR$`-hV>Ts3z%)k4RUwGvXC+iMnuj9}~& zp!V}oN2=BSYMRzcDZV2fRFFZ12kogv7EH>)iFgFiW3^gj{B0T|#RPa8@Zv*90!ZNF zt&T&TkDozG8H^O=%RN$66#Z0NLDBQ#P`#C+{OC`0T8ggJ;k5#KEfk%G z7s?-{Up^E<3=o}1K+aN(e_&!O9laTY7;X)82tX-1S!<-CZ3)mV%55UXG0kxc*cw`C zJOCY`17d+F;eon=2YHPctvx%~M8A#RCLr_~i$P`?OZbXUi=#z=sEE*fe?QHaQLR1yywhP;=yFk+wS&^j2Au~p=PV^D-rHWme zd~kzWu?~=m67tBxBN1x~;8y`wF`U#1@c=X6afXb|tpFh2giz#RXybvUB5ZZ}9QA*y zr~izV>6$GS7r<+t;04MD(7G#@d@b2U^75Mp76KOXC9S@s)fWrF=8y`|j0rGRaxG+} zvsQ{YdZlhFDe+aN8or87M<0+n?v@oM0$49;Y^5XIbQRQ|e`~i=dv0JwsM)h0Yoy;8 zczGQ!q%s`jqSFZ5*YR@xWa3vaC>n23{7Ms$#B+!WXO3STaHtWL%qJ zD^w{0uxSw=13^tOjj`teUu_v*sM0(_H%+^lP|B$RuFl{`oAO%(282!nL4Q$$VTlNX z`XCdx2%2=SZ&;k|7Z%?YoU znMrt;@l3*dfsR;$PP#%{%G>7Q5St`ffDy!{Wj>HGscx<5fj!d_v4sQ>vCSg7$t0|V z##sl6BzbC~|2`n3f|Ombger*}C zmxF{fUib+{r?TSb{{q$!&tM|{Z^lG-@aHW&KoD>|UR2<+Vw%*bB0kpcr1xwAx(a`? z5F(1@CkggM4nYRwoNcL`0Re+BaxK3WM#$UyoG@~B0>Ws)3F8w10Y)PygFh8a!dS{)}rk*1F8BTUxs{&ABnAm zK?N>bDYpj%u?Qlm*LeJ`+Cu~el82nz8j@obE!++t!YC$jA=Mfp@MKE{VY7$)+{a+x zamzp>W(EWYISBE~9Kv#+=1iL|d&r=$Xt7-;VX3u5X&4r?gJWG+#$@Ymo9W_*@GD>p zkb@v~B5evJ5@Nxbr7sDk!PkBe2J(>N0hWMx#KCG2sgy!Xv=A=_JTr#~X)=+B^$c2} zo1}Cl$QJQ83e4DCzt&PJ~T%(vp!J6YQjQxgvhPHdlll5W+<38eAaTFG;mf z6+xU0(x!?SO}b^$}hftREMXu`+@V7>MFz6ta zE68ZAbj~y6KeKX{+{A-mTr`6}iJO!&m9TO&X@NiVE4u=2{WGx`1eDm72O@x;d0`sl z%pFq;mz&ra@^nl%Xj6^}u}%p4KyK*d$DydD-zM~I64ENgaSWg+CB zSH)jTqz8JLe}>RnG8AaOk_)Afb^2|MAFV58AaNg}M)3f=r64PU53Rj2R%nFlg&N{| z!NeQ(@^ri9;NIPUCESLbllj3s)Wm&I%K{pW7!@^AsO31ClsMSm)N&%h@fKD26`HYXlUhz7yv(U(ShC;p^4MSU zvShp^U?pyrreT0Ybgls|4M7InoDZLsv}oW3iTFm7PBV}t?d4HHJM0EzP@6?0%y6I9 zx;R2Z3*a;3p{;`uL&l-suvR}ujB&|=2?!=l*GQ9qPPG?k;|98L^_h5~pK4&OQ$b8B zPM+EM3Y1y#JKb};5SH@9m@$CJpv94M%G-2Ly5UiH^oM%-4PDv z8?51~E7w84M{GiW#STyyR-NKG4|N4Du@bqHmSUXVL%$d&@CJwj+Qz}C?^2$GU7C1&NU%TL?+S;Hs{!V&41wefJ#qpWkwhFG01-&ooJg%ZkCar2rcntD_l{gK9bEA<>@QlNw_RvX zZzsl+Dd>E-JkaFtKyRK|jpYLN%xhSK>Fg2DoEd6b5KbqkBxjHE8K}wnL&<{kq8LKp z>v){Xl$2N#$vS9d8dy?Ewhc2#(n*1S8>3PFiD1bKw8Ya2peC;eZ#cwgsU3EtpMb_n zvb+qVED1?ergymbUt*0W$-9l?0i=Kc|8w-qnveY*d?EGbLd7&t9F3B%$0pu} zFrkVAg=FQtfdfL^hj1(mD+F=thkz>{XyWLcPYKg)r4(-w>~}Lc2SJJ)64Ia>e6Rvv zn<@G;|MXH(B5BB0qT9RR>u_p9bCwdS+`bQU5t03Zj3$}bm;WW!s)1_Hhc5%YZaqw> zD&IvMfZjkj0OUjsKS!wI1jA5FKiGg8w-Wda5B6XLx(^7zvCuve30uI_Bp)~6mkqQc56Jsw@ z!5+Z-<02^>QvoeN=X225Mv@b@(dR`LH=9c{11%4(*bTYvFZ-aH;)}SCTH6A(Y7o013@YYsfk|0-}T!gWb=QK$7OZwTQ$GG$RJ+aDlV}2cq;f7tl%5>;QTL zqLs9OVuSfkyhFpl4<+#$?M`bL!!Bo$6v_lIA{EK;u7Zkhp(66g8gEfMh&jWM!hA!6 zK$ye~M9?rW&H(t&)s+u`!|$uLTUEkazpvi& z!5>36xcm|HnfU~o6=+`#5pG3P;mn`FTCgTnW?7L$C`y@fqJa%KFB5B`?Q!9sJ;Pa4 zSLOk?Q3C4+3IbuYdJstRW=l8X|ADFxh(;p$z?q&C7yjE2Ax>Np@6&Gg0w4m;!#_TZ zxrm-o?f4dbI0v8Gev_;JwIxxkK8T)4?^qG6R5%0!oU|In%syTLvv$wN(=}3ALCZYl=7n=ry-5_;YPGDa!2RG3`u7Zss zv-_cv)^cZX(hL&BK``{~ zgOONR)^ihQ51u3xv6v4=36|;iMhO;*GfMHyZ;TS`YxH$=M7)oalb=FjBP9fV2qf|2 zB^QTaT#3~X0@O-NmWxOujM6S^6yWfgsCOpB2|_Xal0A>abxWGTOsXmtDPYYcm+%9>W5;dz%Xbe8^Ptj z68DIu1VOGlSPNt7UEOvPFzp~Xutz zcU*@E8ctfo1rdgd0WMf)Nnz+1f3;2M6#kQ8 zS{xki0wAP<5~)HetVGf~8!$*nC=ahV5lIVSO&p{v$jboiFIom626K2vI9LQ~i|I;*iK)1Q zG-q!r2QgDpShqa19B&4ErMHU}hweIi3bU2w!4 z%zwp%hIcIpaq~man|P=sC#1xcfW~~dh{R{{5@eC{l&qrKyi!Q=PCl3txd*?JXm{xQ zowVXO*>gWyah|luOs5C95Xwv(Mo`mAgV&HZ2`f(wyq6%?^-?w|Lqj}UcH} z<(OaNHBNa!a+H|%xJM$BvPMo!x(3FWsCSa9_+R1(9mlib6h5gTYMpCAK3I?3=71e( zP&*4NaE5q}fP!MU#)Z~A9%`$_-4%BGAe=+PZ8HsToXDsIXLXiC_|jBBWYPvNGg4*bs!X~VjVd^hqy}n;$TyTY zV6@Q2P_Ev@?dM!99H{?IsEz!SfqVTb8Ca){VR8#pEQy-Jp zMLhYORsVwsnAr?~a=Q2+ft5rK9uOP{l`40MVba9~W{9Ffyg6OGgCMtK01qrA>$c&5 z0E^}XUYfOAp`>#Wf;MxO%_r=^s~=3+2d`cJIZnF zha8ZR^COapsGTM8AgHFYp`xv(lfZWKoOH65$NU@;L`8r=XAn_AHc}(~#79dG0wj*8 zut1v@@gfz(4Mxog3qE5;6kwFsT7<4>2U6xjIh}lXe{g`L(VGE;Ko2J;I;j=k2zfzZ z5wR_v6RkZ%TwtvpX14qRDcuz!P*DY4sN+gR0=dAu7V@DDDRra#p?wcx5nLccbK6X4 zMD&0IM%ahr35+oiU*tvu#Z057;~K=kGb6A>%jEo%fVa||eI|YKb3P--7BVlI4TsFA zfSkjoA;AG0KSg|l{1>6cIv%GM6%)ZAgBPklg~B;u-hY#GnryHoF3wuv2cjc4xv&E{+JVlWiBE_S zl}fQrBcL^leZgI(=*hs1582jF3G0UPbj6OiR|7CXKcs1l=&ZJwM7p5Y@S;`t>dul9 z%#kNF8dt)}j^i3#o5-fnR=bn*#e{7l9Lf>sXv4*r>7C1QTp(3iLoN>>s6xziCE`qH zUW3I(90P}6a!*XBEh{&PNwsakF5w_)Qf-sbVp463O*NH248W!#hbQpA zh$^1oIAI_{E^*{k8$GDnt`6J;nXZIPstxy2ZKA9y?no(_Z3#(|Bn?C%$#S?mtbOhz z3JD(J0(2j90`ZD5#0cYZMF=tBUO<`(-gp}kWknMlJXG710Zq% z2X-QO(d5Si8-!U~= zGTi{-nuxnRgep?$EE!tLKM2!I!iwa28CrcAX~3nW$rZ)2v}$K%9C89f?sSo3@PP_d z^gaagxbA~B$kD}3AaN66SMU)H?v}VvHHk?M0Fk)hZ#$83i|hw_`)S%H*-8~9M2L0H zB5k4{O=?t7n8v}70~s!tr_FE{Zq;1!6-l!=^N-+QAv%yCA#xHdgomIlbOtx#T?)B2 z)q@MU_MdaaK{9EL&zJ#7xTrtF>bh*RWDi6{I+pRy+`+bT$Ha)uAQ`+APJ+%XAUlTh z{{)glpL1~l$OED4o*P7ue`12f&HbPr=PvExw1%7dnq1WXj@<_J_zW&w@XW?E zu;jA=|5frQQZVUpxTsTY23=H`DT$MfNh?Uc<-`K&;N!u7+rh#EE-1m>L6FlL&h9qV&YDA`_H=6P{X{=IsyNf<RYVUp$FAKBvGl_&(9&A^9XYiZNP&`X@#2yQ&nd95-F7%Ps0 zLEzFr5~1)ze6XI7Ms2DKU;1E%m(g^~i2#8GD0Ai+#EA9`%j9bx3`Ew*M+aJs-clr0 zWJ4QkLM%B4PFv=V*nuSjMnW_i>J1m-U~o>~hMXfR4@%H zVN#Tc`R2i7aWGKh;HWYaok@)mdpQ zkumiwu1kQGB9`zgIZ44MfbM~g!)JRht!?t98eG<%)sZi>Pz#NQ%|ne556<<0vl=Qw zL;&_3HAdo@!bc;~CoTXA25KQUY$ko?O|}Z^?*G6qHB2$%&fmx@zaosrIU-ZcaNOb? zkzdE05V|bkyizC}?!bMOyX*ejfR{;5%)kKpX*MaCv>DC@%YNgPqLo7!4W{c$ zY(0)2#K*(~N(Me?3>YNtg0)SPz2S&?+)is(y;>ak!nhM08bK0)3wtgp#t;Dc%F<&>D>sVPQJnHNxk8p^VTvhJX4dML4&mZ)ia zJuNMuWi_i#LH%iZQFW`C9@W!<8R2@989-dlk=A$~;%vdp_RWng~MpwYZ)G%=^One8E*u&_>e1n>wqUWa;@QpS6DJ}er4*s+r zex}$wTWvm5Z$7KQJh#StPK){64)gpT^8&F&q1vKIZ&6%eQCefMxW!^ghsClUi!!lb zg<4Rd7gQAps%r#mS_Er51nYYQHDY0{T3DwS))xpHYJ^)`gxflV+k1pfV#}Rs%iVg* zcMB|=Yb^J+SnlhvJkVp=BDOlDwmPD>I#yuST4VKLi`B^vtB-oD+QinU)Yhl<)@KW> z+iR>pZ?QhtVSS;;x?)jI%`BXTST`yM7MiHU1FQNYMc9dn}-E9-8D8} zx7a-DuzB2L(<2_zs~*y)AM(6lNPo?cmn}nHbqx8jX9#60=6Q>mB(eE?v0$Uv@}SuI zqS)q%SZr%6@wT;3vX#!am2I?@AGCG8XzTLC*40)r!do&bN#Z_V;;~UO=AcA%QR4MP zqPDg3@wW3zvJ04R7qrnXun#EWUrfVAG6Uu?x21AMf=1j_Ig_f ze1@Nrs0IQRF~vb zKi{cgqtn)dPTMXzZGYm_WGmn4E#I9ae|NsTd82&qLHWLm@&ixgEw)1sc@I63H1yc~ zp{*N-et2-`$%{ijdNQ=l*7=mT^XVk#v-6$XH#&cQ(D~d&=L=7qJ8Xwt@*Z|2Y1p;- z!#Xz(yLoWft&78MKN;3#>vGrI<$jXO!}%`V8(qFW=Qb+tU?YJJJorq@-BZ#H}s_6CKtP$8>T z$PX!;FDYDl6|RyIBYZ}TGK_F99N|$rV$7its!JohdPk@wBYk{E`WZ$B6pjq49T{?H zWay=ln%0?Ft?pV38z(Zz+MOKV3jJ~VpCrP0fJ zN0&)FR`_^S7(A*9J*sOx)*SL!d&y&cuSbnUS?i;$Gbrl|l?}DZt%sD`E-AP7Dw`x@ zcKVFjZ5Z=z;h5&yF?$b<*>`Eof!;AKlCg(;#vU<@JytljwRY@>hsK_~H1?z3v27C7 zDIe8ogX(Ods=ZeA`61Q0OR5XKst$?gB_Gc#2G47So}IOxHxGHgEEC_6RJSIs1= z%@?Qzo79$v)z+8QHc!=JJ8y}vw|%m=bb+^Qlehe^xASFhm#5yYc0MC~eMTkwxG(VW z*yJcIpiRCZhkZjY`)Z#0vUYx2U%#kiKivYqm`#3h zhyCI&`z1d0)7$wQeEn0B{ZkkC8#nn+IqaWt*?-zo|4h4pY~O&H$pNz#1mtcCm~%K_ z?&W~|rvU|afrY+-MahB13j#|w1ui}uxa4x+vZsM%c0ntAgDR4Psul!QZwgv-IB4zV zp!H9KYV3k*eS_2j4gPZI^cKU|wP7Zl@K}hqakiCaP_FWD+ z@HC{wZu}wN@kf%!A6qcKb<_9{505{2dHhFD$G6#qp7ISnog8|0L1_D?(9aKtp1T}+ z;b~}xUDzexuq(-7*A|3zZVJ13IPBKtu-i|=y6iM}eKq%!H4hhPx;JUQKCF3kS@Za* zW_gcYc&~4GUvl{K1>yah!e1T^e|0(h$EV?xJv`BU;rJtyiB`Z6E357wMN0 z8Bi1%R2La?Br^0$q^2*DwU5&JMMb4V>58Ia>Z0O~M8#i;O6-f$+eaJxqEk|$Q;VXF zb6@D=lDKS+=G1YZ3YmUUMy%Mv&FQ&#mw$?AUE+w|UD7K+4cI%PY zZC7Hq_r*5Z$L;is+no~kZc$uwUEJOyar>^s9q5Z|v7dOzZ{m@ZiN}g2w$@Gj@W{lI zS0;YcH?hq={*+(*>6G}hMe*%*@t+@wKX)bmLSKA`eZnQbgexft*NPH4>k@7rNw{?- z;dWm_mwn=0zr_0~i4ThsyXz9aK9cz8O5)?b#2))ey?&GWQYJkwn$%x6>E)40udYn` zv2POPpy&DPnaO(dg?hnez2#B8^;NyiGria$N#dVmKRHRdFiEyKNq#iR`D&8Ovm{ps z!w7%FsL2NRg$9q!hA~GCs;dUCX9l%HvX6hV-{jsilS7Ushh9zAJWFOBQndal zQIk`23sYh?r^FpiiNBhX_$)>5FxlWgIc4(X)P<9cnIyvL&*lE+9-Vsf>eP>(O>J|?IOU&ldUD3u zg&FOeGd@3>aqeoyg=ZNZ4zFGEf9=ZT*RCymt#k8hH;=w{>*{N_pS{-QFzv4YwEL5% zJzO|#dH3dNUmu$6oswqq0y3G@ zO!MMQL4Bs>u}tf0nKsWe#nLQEK$d-Kmb5raR-Yw5mgRgc%jJ2Nt2BE=K=!EAZ1>`9 zkNWH}$Ffz|vb~;XtEDr10%rK7&Il-;5mY}TQeLSi}M=l^R^z#+jcE)`}4de>71Pbb9SfBdAE2@bN!sX$L8$2 zHs`?eIW5xH4+Xq_B=z-U#jm&4zy9H|*H2!1{iElvw@K%o3YdF3b?({Xx$X6HKR-72 z+_kwEp3m)&&bt&a?@H>tYsK?A>*w7(Ht*K8dAFa>>yqZ*4amQrn*Xpkzq>yF>tp$k zuH`>|p5G&Vqc`AZ@jwp#*fe6pd1T$fdx!jfq6-RU`v7J@dE4X z1vW1V#E$bNf%EOt=1WWF%eKsyAD{1heZI?!`L2$IBLWLYr4_oD6nbna9CN%-b-mE* zMWNbpfluH9zqADbB@2SKEC@NiAoThI&5H%BW05wnC@QT;S5g$Sr6}%rQT+9y#1}<+ z$AyN#g(+zZQ%e>aw=A4;d|}4*h0|Uv%ycZy4lJITRy?buICo3&oa4oFuNUXPC@yd; zDGV$rN-HTYDJk7jviNw(lItbQUX+wMmaYgatw<}aDk-hrQo81N>Due1>tB@CI4-IU zTvV5~sJ>)T!31;`rvF zz&DSiy?LzU&DJe%et7)Nlh@z;=*63Dj!RAjE;*gH~%km-nSDe_pb@f6MZh$CtmlzWm1*%PCnIFQ|+$mYJ892^z{QTg$9F%WV3~#IkZp zP`SOaTv}Q#YbckumOFQryY!d4%2tdBS~1GF!o75bN5hIStt(WWE4=zwsAVgCf>!z& zR|b@>3~E>z(z-IVbET$#B`d4Y2315ED|Dq5F%1=QtrhW|6^Z>7dRe6*s4~S^nOa(D zY^a>lTA9&VIjz4kQ&yE7R5jCBHLJ8Lx1nlIYt`J&s{H<{0@gtB-HLcZaJFD0CSJ%i^*9NVwGp?>LUER>IdTZ?z>)LajYcKS#?U1dz6twP&aox4jb)60CZnmzw z)w%9=|GF;O`ny5v?;F=YEM4E-u>R}T^^ZE&Kki@OBiqm$w4u+q;d$wX{)P=NTQ|Jw z-0)-n2Fj_17hJ=n*O)J=5j56Vo~W_DQDgI6jo4|UBzU8J`bO!Zjk3m#@)H}KZ)|k= zZlkMH?TFyoQR%hri)uX@YsZ|ZRo$rd`mR>(w8WPzY;4>-<;3QU8=I$nw>i_P zK0CO6W_tasMfJIj^>a?t&%IHf|6P57)0V>EEk)^DiWhAuZQQc>#FiyDwk-Q@OPN!{ zir|Kd^oFWM4b_beYfdz*z0t7#yM`L4#@gV#4K zx9(2g`tG8w&5c|4p4htY#?}MhZEbOS8~^%h`oq8Rx;Tu8M@IfFc1RF|>KR#c=aPeK z!NMXOgICZF)%35A!DeWYF$9b|=|=RhgZ~)(Ax%A}=_Z;&EWecckfujb9`sEfb&5yt zHlzA^^fn%KfJgVyR6URG=21O7`ZP_g!N1fn4sEUu55@5g)h1M$#1uu-0(Ln|TL>t1 zxlq8kt`G{S7?FS~Kx#m0L+Ta@n4pzHHI<2%T%vQj^fljVUV=dT_|*l1ijj zBuqvL=DBi+|7ISl9reFJYLFfjHBbDjeQ?DX9!P2=7AXcvk3?`UK;n=<-hkAE)Qm*t zZbNEEB6D;hbtCm4xh8ZG!ZL!ll$n&+vw@>%3mQ7f;+F_Ln9QYMBGfR{GAvY&CNeJR zTjm)=sS*mP6qJ`B?M6C>G&puY%2Yz>?=}kKXwBGPbF#+)NWw2~YCY0V?OwfUw0>tyqjt}l&0~#+ za&MgCvyS7Yw^i8sR>e0`vo18n?$WhUJihh5tjlN5mj@QyZEuWxZ~dRf3wrKfJUqIb zr&%gh_dK=GH<_<6w;gl8twRwt#5Jl$t+1`MT%*cptBLr;+-6wl63SM48uxDT+t`iT zGnP`%jFV-yk!P*t{&R1&ZH)ZX#wBdYD@qb2*f?SWLF~S;F4~+4Rx=9T|J69{;t|nn zog-?aK9jg7YztjIA_ogx+v4~6-R_N2FY3c3w4Lsp%qNGp4gbTlu8d|ZWtsoKEU>+1 zWL$$^HT&_3D$y{uLhOB)Sz|vYwI%n?UH)2`&#aE-tb69`okNOyy6@bxsBzU+iIv&+ z1qdS5tMl&O7uqW)@5}i3l8059*R+qygd=BJH~P@$wheBRbHhqk+AMrI#h>GvE8d}9 zZeu-6+ec{`p`9eDxvBjW-`dG$lqAHj(#Rw}$^~{cz@<@vz!wIEUL<#Li>v!u9u86jB z9G7{z#@ozpojf4FtG$k6AiwYW=~2}+36a(I-h~x*AX&(wm&}}4kEC5O-pZV>?f1IB zpRzyu0eH*9@UH&-><5-3RqGA~E#93oaje&YX&n%xtK=aKBZ||FTOSwL2hAvNj2r@h}f-B@7KCfubuo!RvUs> zy04SdW`fQSi>%VhGd?VS;?q)<0H(U#wtD1jn?HpVKXz@~G~tWwjAegcdRyBU!`X7V zKpxdxV-~qe99AZdI8_m4KgQ!w0Uc>B8X8p8(?drIY)8h_sps>eEgi-hj}$!N>8zc6 zbFZ|_H=AHHYcK)ue5X2l z(i+9eL#jAm<>hycy9{SO->jQ5rPA*DSP3<#QYqir9lMi8WPv40K0U#hxVTgbhdL z=AAinb*%B=N0lSfF5C((`q%#k<(HcY?A0yro~MK6-#_<0#CS#MVu?rB|0j0;pB0{o z$v8rViz070j>o$D!Fw_ez~;Xkfwpj)N;F4B^Dbry|C7 z(irVN?8RsxIO_udpZ_MB8Q!_IDx+40(HV|QrFCE1#vTEJiX2jSf z6J7P=Q2vggPDf-gu@M#a-qCMoPHga7#LKaCSolrn(FHHoX9O?!s$&&LW z4b#Hje9`mZ^6?GR!%{ke|HZn(`@7v%HX29cPTFj^lGx`vZ7jL$W&ula2f6kb%VJtfNf(vFspxi_|)$F{eedG?XHvlAy=}2FZ>T~(0Z`0 z8MRA_Uyf!!NXcB-ztNoyOz_HItaM{+1?O&i7zsrvH|As3w4u1UFd0*y0!$VoBw+Ww(z#l0IJ?;19gP1#>- zoWD-ax|dA+x8?^Ywx4CHtmiqgpIQFZ`Q|Md`}UQEhu@2rv2(Y3#VtJP$cE*9)umNA zvNk?VCE{&Tw(EPN&21|wd+3bqo)6x1U{`MVeEgzs?Aes`m6vo=?OFGcp?UUyw_{&C z>if@~5IeU0*#7!I@0GAy%Vv2ll}p&Ual=o?t+8dp>^rB(UW!?p+ci%f>9An0J{rD+Z82v{%Qn9Mj}3fwsJ+?s;x`!fqxXs!$s{v2Yy3m+{a!ql`66w4 zj1A4kpQ&~F^dJ8T-}Go<(GOdH2=BB@|H605_u($%L&wZ<`YwD%_VCK4&gbFF6I`}r zD!&SUboRsLjJhsdyko?q%!d!cRcjSlu7S_PyYCqjs{cx{AJU3BWz)^swZs2aRZ3g4 zf8O4i)Ou0OHtY}0JhIb{EkD_m-?Bi;&iOmDbYGMcYq**FRwS zP}a8Wjdgn#k7v`CTw6WsYzVupG^}d0B!sW}zaPZr&ntX$&a*)F zNZyT-u@Ql6c=me*`#b&F%4s(9@<;izf1k22Z(M;NYnyf}r{^!eY-)03_CX6@cGAP{ z*Ds&+VuL0|2Yy)O#VT5M@OG%YSb@Wj=U3hLWN+R+Hgj@{C;LgHojTOolik<+#`hym ztJpfxxwFD0Dt2k1M{SRvmfcwP z$rpyy^p#`Sn|^;*u;a(DpEO#1>;6>9?)!0etLOtIOStFMB@cE|?TrV`Ydl!N$B!qx zc4##F#BHKo)SS`m%{A}c9y4Mzd+Oh2du?yJvvnsAXP3A*S)Zld*;y+WUf*}Z zjZN&nxO3BdH`evgn&7NEqga9CS4>RfDE7&lksV%1qu87q^Xj%VjbMihRz9EDu3&Ff z%+B9@!Jm~Zk)?F}!bKmLukA{7@{_@*9CTdvm{wpK?u~W?+ z9BP?epDkfGI>o=|H*yI3(f2FYgq920Z@>HtRF)a*U-s3GhQ+VK-(St^y0)b+{Bg^J z5K&rhxL;@c=16Hz_|qTL?mXT5O}OQ@`|;=ByBj|C>STUV{H<_p;oX9S*vsJuU2eA~ ztUVq6=*DgDM(S_jGo8NaivOe|JaNgig$vH!2;cVaZsz>VJK>dvjK-(4zYc$CR)4SR zUys9&-~39t?&y>7`G=X4sn4H=A3xr_u5GxAZ8~ec?PQM^YdQO!q(7uW9qC-BjbOJecK_>FXVq-Q zKUY*=Sf*ybv-N)b@f0Gt|n zi6=wYHKB)9N3`3IT=%8ec0ZGW|@sY_^`8=`py=IrhN?9sCE z^EPD;ry^O8e^0-wnG(sG&sWWyb|jL$*W3SKsZA8yR&-|epK_zv-WLa6nI*)q4#jsD z-|wC9$I-LFMal$&>YcbJzpwpo^z6UUv;RiV{u@0*y!*e=v;RiV{$B&#|Basg6n+11 z^z6UUv;XtxS=mn7;nMVYhbB|}tSqVQ&SLum6Q1ObSYMisS&+mUT3sr?d6K{aD9o}Xo~1`yXH1{M^4U=bli5f3_4UfXOcuJT94E57 z0dRdr0vkgs1dd589WG81q_7m9W}{h5b!Ty10(<@({;UncTxLd+u$uWnFN|TfXmL@! zN{=h+sd`~4B1oc4K_WYgrYUz^+`gM2WSK7$gbfUxfNn?PgqhZxCbDnRi`8<|M3PS{Y%J z;8|C=TbW?-k??3S)4E+Grs_bXitvaxtbKhiqlxi2De|B`61g(F!}rTiD4= zPQiNZCt$tRdSwu^GfG*;oQM+27^7AwX1+^Qb~Ax`&{Y+OjXV>p%w^6_P|BELiP+M= zCMY}b!G{O4Djvu?#w*p#=6I~zFDh2RJc$E@ZJe^5`Fkwr8XT*vVYbF7n;0qvAl5OW z7-|Cce1Z<2nS6&8I_W^2=sb!VlhDT8i4>}tPszh6QfQ>uq*6*tJ_leNB0vzbSt|mC zJ zWjnL0Eg^_G7@pI{9Qe0L%zPZa$AdX_CPB}99$tx!JueCpbcAQ@QBwcJpkE>WYawi6 zyV;##mW zy7cj@^~~X5Wf!%>vy*u}NSMhS2!!Z;8UO_SMV*u%7P!S1yWoSJzwV9w>Q?6!Fs*8k ztkF}{K&eCp)EEGJpxt*g*qU+yg3rXL{=u__y1PzBonBYKoC`nG#azFPNv?*U>1UG2 zryE`2JO0BIgxLl$_ru-(DcH~(9^J(}CMuyNQCLc`^NdW~1jtB!l(3rd4*{Ees1eGj z1D+nt9lwM!N}bSvY1PcL;bb{>U;>_}ntHTfKwVhZLtO{Nw@Cf51Ut&jU+@=0Z=j&O&2uCI}Xo8CyfWl(PaV#MVen zg?u{AB+`)yTpwhE5&W|A1Wa-!N^P&9G&~)`a&KBJ#R#Uw>Y0sGV@sLB$+4}BTL!jS zhaK`x2E>CY=#Z&}h*+nA5xzF!)0g;!E~ae4Y7ge)$yn809U!)ZVF{(7Kt`a)I##BF zaS}oQ%JJybo&X%?uuyQ7lkvF1#x_tEq5`HTg-DdIQcS7kG9lBEr0i#oB@6YGhfA3d z43^8BF<``_29X|b)y&f*&^Oco!t6>y{kJ-^Se4Lm)QlAvdLZVFA-VNhx3s zPKs@!Zk}(ZUK4dwd*ntTQyveQjF$^6nJ*@SdpA#11__SGu@C^SxY!Qn%hwIMT3o6qm<25HdcC9t`|~ooNr}D zN8$^qYB_63IYP%qD6vKsd-F95wx(G0vkn(lQ(v5KW|G2`0_vrUQAmXdU8zYJWQaUd z$gBtg`+gcIY-VNz3j3+0>$;d0fArh#Cv2da@n+$h07h4qQWr5@h#GvH<^}%p@Pxfk zK}n9y(=&}q=fhkFp8YcF$$k&&DHQB8$jJ*J(=S(BLdiBT--p{ww-(Hr^&>14rR-$F zc%A~v3>M%3-;<&&z{I;GSb!{+Wfse!`t23?aBCEZ>V_@I^2&2%?h$r>Ntk(JTAqX9nrejuY1M^Nc_PK2)c#wU_S+ahdCUM$7ucg1q^=z+L}@!R6A2J`gJ*F&GbhJ zyO~GHp51bRHS>aqQk_W|9pc+rvr10_w>Ae&$>PR^yt8Ez@K6qJ-52)O_gqAW{by6R(2N(h}w%+CO=v!W7N^W=ynt+6aqnHHbn|!s4MbjYvzO&!tw_Ap>2N;QxE||eRzL2 zvzGPjq}bRl#u*M0!_z=x%m{<&@CpSI)5b%?C50$uR5O;t3l_?li-96F6$sT6AoO5z ziT$ng12fe5g8y25MD3JMUKh1c-fGQI)C7LLguPo#w&J z!zaWd{5U)IhkCW2rJn6?qI%_-R@5UoYejYMkD>0Lr>HyoTd3RnbE#|ChjzSQ+TTTW zo)5xjk1TZy`r$UX>JG{e<*ioKgYz-eH|I;Ke*x$bWUhxxWmGRFeF~swB9Dvh_|&$A z`c7`NqF%v%{zy>pM2d}JPSNj+nL9jBSBmj$rTBT7%sF#U{6{e4&N8o``NqmKhO$w1 zFup@P%kcebGn9*~i@+MU$zsaEvxSmk?T(&JloQ64125+UF*OW?84j(RrpU`>dK9ri z%)=3o%QYkS>s^eH<-BfYf)e|n9V^O|mx&m=C{YcB&y`Yxerw5|wfTZ}wtm1W8gE^& z5)>=1v16N~++nREg$2d?TmmVuB1!`ww3g-V9E1;6(xen9>xmv_HB!Nqe$;u#R9b6M?(fJN$ zf&l}4oFuGazDZJ6Q+v)gz{s{)Q)jV%`co`-vs zpvu5*ORfIL0Ql$tgSLTuf{eGcqQ&gBl~xwPwcY zpmBn9c@4~xXk|ZR4NFPo$P4VKgL1t!vx@k|vM3nswDY;t7i2L12<&8#EhUp@T2r3` z2v#u2j%f^ofm6smY?&M56FjI8;2fgtV%T8N(K0BulerS`Sts*_KT41Nlugu9xxkLe z@P%rdK|JH9-cV?2@Ut2d{?#islljyWM7uQ>+nzB7Tc`wAIeEmEF{j*su$P;%l({$( zy6}Jkk0e(pMSjp~z^T2WVF&2Gr6ZK<34ja1iuJ#}B+0&#-e zJ=|YIOdHjG-UH^WfqDWN?1iF*JgKR^^DO#fna}rkQ!mbELSY!KsqfFnP(MK0{sS(i zV#Q1)4O`aAgF3rzwi>3H4^A@oY^MaM*q-hG?}b&#DblI@3s zlrCzerh&B`GC=zIMA+z5WdYSLFLQ)$uCZjA4G<7PG!Pvf54eeOnBz(cW;>IN$;}CK zADsjrQ@5^@dCdS*Hx|@oisAsV#gHcepS9aDVnb{PBQk(FgOjkJ_x>N|-UO=2tNZ^w z;6al>Aj}vM0|@3}l1U7R66S?tVr=pz#iUJx%MGF=c6cw#l)Y_u2Z4pIL z!J>7*R(-({XS8b3*7kl6_I-cv|M&Z^yY5}av=R9ZFd!KXm{ydv-sB0cJ z&}6%qX9^K2x29Dv`&6ys`pJ25uO;0v5u239=#+ipW>dN>63WpM!>=dK4c&B748C2% z1Vk0lm?u|Yn(!5iY-qj`qWY8>zn8i`dR76k&{rsJXi6j}qLz^usHG9ga_m|=X+1MH zZ^KIK>G3dSFP#vEwivT50WXxZp*Pr;R1u<7kZ!Tmihdo8>4N9ZBUR!&Q>v9?!oL@! zlaL9x{LpxG&!Rv+#(x}|jGa;e^F0$6#i$_TzVv9b&l^ zP4VWsXqguplk23+Bu!$%r&q1!G!bKAB^iX$;`?^8#qq+40@>G{ep5sfOI8T5NZRDje5Ay*JOEDRF3w?MCgZ-CS#byNwW`#Vg$uv}| zkEZ$zQs&Wis*)b^PRx~PI8O?Q)3+M^58Ow6&ti(FyutM2P z8x?49F5DW#M_f6Asv;oUciHM{T{u^R`M+OGG`cQgZ`V9r+-1ui{-MnwxLtoRx^|Vg z)0W-ywnSl=Lxe=Z`Wr_JUAXTa7RJoT~Y5C7e3qq z9BiT#f;5WrBo_`~*MnbnIAT=dhoh$~g(XCYrJu#y0kOuOq=#+U9_bp%vj)+CjK2`4 zT9RMIO?>i7*9;?_N`7mwfyCRa>nFcAGmnGh5J$<>(7$8RN|@2qaSC%E+tJSF0^f=q3XoB$75kHbzag8J07tXbjQDTV+@e{X=B+r(Xq~$!}1RcMUQ&DGb93Lpu_elvt8nv8MwpnuHXHZA?gtxMUa^ zFYXnP8ElDjS}d1fi-8|Z#9brFA+ZhYvY0oVT1R3UBVw5eNp0wZJHbXkpUOEKGE`h? zNq-IHn(4!k*m@EIK?n~~){t3tA^{0j%E>yhWH?y~jTt59YDkY=xh0%}<1wJ)U^5%X zsj))w$1HV8+&hvM%ODn8$GW!>KTbuRvGE{@2l9v)#^jOPo_;DDB@`h`oRnG&!+m@# zlx?KlPGm`bhh2Y;*YDzTK6$O{gA!(1kUw<&AumE+WLDWtrHVp9a&wVYQ@4RvZj`oE8s=nu8`)wkGAie2RPf@E!r`F1@wX)Vstx7bRGr5SoiA&es~C_>c~ zV!2g>KUv7PGLnYX3i#6utVAlDxLwbX=o#QIHQ1^}fNflflLdYC?xU z)(i=}6KwKPcj$;e`i979h-jH4%-$%U7dA4)bX8`UqwRB^A}qvgLrs{ITRuN#dWiWK z-C?5wpYv7ALo9Zbw^-_3V9gfAlMhu|e0xN~47v>rsa((CY~a?u<)Z=%EmE{0T#cxB zRG^-{sK~O06zjS1RM@U}6MKWpyqZ4BAB*FARRTRj-#9HA-?!XFUMq+zDAF_RD;$Mp zB{#NMZbb_NYXwR5XrZdub^39^PHC}ub$KzTDzw-wZ?#IOElW}qS~h4}T{BG$)7rC* zzpgKKpIf*pqc_{SuseM8$IlHjX{gN!Nrczxe52_jLx-NrjPR*`Zj=`mD*mY^V$8mL z;q2+5!+z#ms9|5Q5`^q-K4K`tssYC?KV=#eA!#I6+lwv9qbjys>*Z8>ZBz7K`d~gM^A~ zL0Vgg)z|W}N!me{lNI5zWcxMwq9K}sfrU)kMmQS_0j&dA6JHs_`N$a=#S?nS{f!9WUmM|nlD;DGR)pEOA%`O zLR1nK=3ri{2zQ%rx_Ww;C; zm9ewun^)fn8#S&+8TauE^BNj14YiMo_sgu->TRxcXCOn5+v=--uPvv zlWY1lLCVov8^5ZjZds=1QZ@2T2P^NoO>IQR9dGNSms&kOJRUvu zt6-SY5h3G2!dWh)HVt}Bw&c^cy} zJMZ;bMy{JZhn`J5<^B2bm|WjOL(eZf<+DvMHZROae6iw`@9yB(nTdzQSH3f;V}H<_s9Ek~d&}aq>~!!N`T8BzcRhFepI>6UaJ%D{ z2ddoxSB@AjKDcAc6V2{%H{Tc+v^Z{kUcNimw$gzSyztUEl7YKi`-n5DST(utaX)-B~EAkQlg^1PkYPE^8Z9%Tp>`%(ttG-4@y# zv+xw`cp?YC$1le91pl6@8usEOSm*&o{g;s|^>kV9GJ%XK@ zqKZb?t<2+mU6sBS25FHV)HU_wmCG+y12Wa{f%!XUknKjWSv!4ReZ$UzMG>!}gVQh;EY2kHX}y>&CdxC1*AB1ZuD5xuxiSa`B(qZZ8>^LN3{FPy`O*gwD_x!AI$pT zkB6WC@TWnemOnd_x>l|+TI{*pDJIKsTGwXrV&jz)Wp0M*Xo?jm7y|2XRq{QmL zs407F@0NF+l!gv1jo+7Tb*R$%XvNTujMY9i=PFP6ojQQ4V@3>0YYX%9Uca$@`l!$< z*MwaMHy+rRIUGVcyHCAKx#Oh`y9s2olxHl3L>cj1>`+<3a;+hY&r%=`G!7ytZoa8omXu4cJwb&v7Nrjy*<{MECn zZ`%zy(x#j{zhYI`UAGVY+jAx^(EV(CKVY}?$4`tG)|%hwtxR0wp->AZH5IXLma-`v zb2_v{D(~UP*T8HMOp&l@%(!P3yQX5s(CBlG<;89>S%S%(`m*N2GIs@MxmVNfQrD;B z7S$RiJ#5+dB6!WHcz$->s@47y=b>j(&qR$+ZZUJ+pSW|rZ;x_=x@D~Mq@!n5yS&r9 zw``g?BjD1QGuc(oLmqxpcl7ds{fj=BKV`<$A>)2LY3#f0dFA7XvH$SCuz&G4|CsVb zGef-o?!*tBe;NL4>HUBF({gaZar2vfB`JZohnp-pGwG&o)9GXP{GTo9T($M(uE_5m zrafEQb#CkHZ%%*rbjh=ix(&DWpNjncMb)#9d!x6#y>j~d*GHax(zj~cANL}Eczf;H zr~T)){rURz4}ZRS_8Bp%Awv|+`rQy#p-BZvFGYqqZx`5;-C9g$l7a- zKWsZ;_qK1P+-SRKrQ)Q6_`>wauVe1EI}FuV;@_jU=gLoU|=PNarxI84(l4T zcrxcdS9e$h{5?!@7$&ypO2ncI6G^p7FiNHejex3Sba7nbMe|zTX6c%_ixa9HEH@;EyIy%())Z}S zb-AK-z50UUAHO(Q|D(5cbWwaxmc?zGGpP|iTTON9#M|O)T@hoyH(iroaohGm>S?=c z&({>R@30eo6FK2t{n}6eaFh(<+Jeo@R=B#=*_)KMg}KaMw|aJ+;|Ts4Mb!ND75nO( zMwgz6nK^$$_2arxLHx6-viTKtZacZS(zA(s=WpCMd#CFM{Bx;i=WqIYUygY8lIV3!l+M+=e0M85W`2Ke^VO5N zeut05&RzV|7yqO)WUc-a=Wp5&dvCVG!>wU!JnFV%O^Edvlq1vLFjb>(1?Aw%iv;zU zf5aQg+UzK-d*|<`PI^r9>hdyOR6p*%`7IA2rog`Cxgqf%d!K;zdpb{4K2%wS|9M;f%7LD4{dQgv3=a- z<&_`q=Wl&paX&CF;>V>wA6oVO@3+Q3uZsKR>4t6ZUfvJV6RQf1D{4+SZp{?T>|A#K zaU?IczQy9GYK7mWS`!2EuYY*tt`pDPtq12+_MUU9SJ@75PWCh92Eab1@p(q}nG9{B zgFfK%MxL1R9(O9rz?YE8?-8a!>DUSvrC|RTn#@Q16PwD=B%uiZotT7QmL+B)qBW^s^0ItO5y-Q?V&3f2{U9O-^NHfz%jxt`Pka>mnM&LjRbB68>hx=d@ z`&1u>y&rppq6ldyj_hV!)u<4@&B*%T_oS942VeY}jUik29$kX-c!QFwBwq@7BVCp6$+mq8_WS!ma>ain z0#yo!2g@QHMTMa#bAV>lEet<}!b{~5ih3Y4ERuxC8Ge`XRWJl=H16~jW6V6|?x`dQ zK8oB4=+9~6QAVJ$jpmKRy=MjRwR8anNFw_iI~%K1P^}-{J{bdVQJF7#-v_R-&%H4O zwO(-fed&n`%o>d;L zfMc;*awN8i9FI*UCsFg$c%6wY2aVK*-uGlo!hLFS6QAw}?S#jF2m(FrEGS_V4>r$O zCC{;;nzR&T%qozM^<((mQ?VFCo3rwx)9rT~hVpoYebhvRK^Ae=F4 z$Hl4ufYi_`f29rlqNvJPh{Aq9uAUxd9?@1`z9+fn-p{-0EiaYB6I4UrdZOEgc!GrR z;7jPN0k{c+^+?Jup(gL?CY;qS;48wVH-pt8#L|KA z_#>QM509*z2uwSP1Qm%iM~(F16p}uU%_FVCM)CwWKg=b%MyIXGeUbi6%=wIne( zYhO0L8D+!SG$%_bq8*vIhkGVuQ2c?il3t&JuNhPL<@AdTw0bgA|8!iLfnK)7V5g}) z>5WuWy*d?*Pla1G1s7~d;p)j$oIf1BbTb(exHTDmxG6Ydhg;rEf{X!s!YOdUvIB|A z5?Yf8$K9SpoM(rtI7UxAp2YQ$y*OzmUQ9(FCcvq-F9ANoe;3id0E@t5z)(MYP zsQi8)Ok_5`xv7-pv@4EZL(=g3HC-i1$I+h|O_k2z)9cIxWW;cYFh%3j6h@uiWHw-G z6ojZ-Sz1oAa6ykkSx&OW1$=rxQmLZTBGFZMBT7AKZiKQQVW2!d$rEe&^kJB=7p4F) z)lhXmofmqhp7w>Dk<$-DlqK}#0Kf<}c*8KJqs$0=%pzCs05nm@AWnnGWDT_#k7|7$ z$oHhSjH>V$$H}QI0CF7QkJI90__ckkI+ZRM3+0&RSIVR7#_%O%wGKR}56X4*fkAB- zSMup;FI-Bzgar_?Ji62a1D)ZHi*_)=qK9#gSscHFtUbUZ&hB7+U>~kKU})^&iIkud zeTKum8YxC=nyeuU0xQVzesivd7MrT;5ru+C+8J`Gv}y>P@ESzv;WLF3y#I-cz6?4e zC%^3Rq&;U54uBCc>lE;={xrZV<>p>t9@VafM)EV<^gow^&bW@-c0Z{Ee$hm33l;Qs zkeQ56+wU}V0d^`uL|8!|q6|LOJb^F&X+t+y3&uM2(_e$k8hP~9OZZn`!;{+Iph3W) zll(5MhvOE+18HDk1{q?(O3YdY?s8)0?um#157*6eq2y)ivF8J~`c8;$9&={RKp1G9X9L(rFLXwbqm zVI@i9@(5c1{MjJ^HO!-*rpER%4JC*1Wl;(m_**hG_}gT40XYt>8;d|Q?N7qxO-V3S zNl<~JBz_xt+rgtp5@Al3;<|uDSoqLHREV-S1f6-bcoM&ygyTnpNlG3)g#b14*MqF+ zG(rTj+laOSqhJZWs3M+UN%@#Nz$#PX1?+6{gOrI82-3IMktT*EN(n1IV}*Q_zA1Q=K;bt#^#+C_Y3H~v3wN*?Zl9J_z4wcjJlB)_(D=@ zeQ=Mb-WZ^FUV9YO(+j#c)l=C;eMTz@edP{4_i%#^JLCdG70Ic!pblZ2nw+_2I@Ad@ zJ?+SO(qaePImVtVp=A=Tk+#@DUu?O0nkzWVEDriKh(Lnh7cU<>ZM~&2!&;b!m>&2N_eNr?tf!BL`090@t6%FJXD{XcJ~$YBK}9za$sZ zbS(!16u{ozPUH8I$q@N}bTrao*_;YNL5%M8Ojw~zObme^Kob67)9v>eko`|5Ls#VK zI884NGI1hhj+P{&nkxV)l6AOId=h#r5!EeWI=L>f6o#fFm7bY|Z)KDCHKYQAnuPmV zc3>d!WCq#PAp<%j8!&)Z#Uk^8oO`Jq03+iO#QeF#lWtZiN7GV^N(H zzgP(w!|@Q8L=DgS@Bw4`K&8I)hM}nPf(5vWZaU;4?8UOMm%eqy+g2A`7{g(n8UK!V zTNHGyKBRV#uo6jT`oJ~u5HFWOYuXTS?57q+9IS&7ozjFoEir}Jd}Iz)vqYP$xB`&9 zOjTflcDx4#f%|#8mm{)FeFEKOv8j0G0{Rq=D>ArBFuZMs)L}Mk*RomYqB}ETgu-TW zee~1}bd55HUjUk^#*hl8^P9*lT`xI@KPf@ove8SrEROJ=X3EW)gfuRbuRwfUA*PN~ zA>X?vLlE-Pm4vv7^9RIBKRiChi+EK#WfPRq&3 zQC&A#YNrvSX`%RNpzCIMdkxiNA$MLvX%jsg&)Lwhc&?io#Fy4kAzK-q7x!D!Ocg{U z9;@^?PC{MdAY)%mM2GlHFKmZ#oIc z^GXwXE66HSMDFSG$OE=+d!&X>*o(pUOA1sMbry@NtViVc)Dbm?F zl$yDh0ALbNg-0ApdX0OqiDK4faqd?Cjhd6uf;@EZ zwHa8G1k6Cm-{<1w5xF>JN)GDy{d5#M0vJ2diZe&ho@|_)%ic~i=ueu(&m^VdJ}Y_| z7N1m#yRf$sO9j*}1LE70j_Nw4bG>vIfI%uv!#!rEqEP=7H0A{}{!QXcE4q48X%~H$ zpv!|0Sj0n)%f;Fe^imwAobWib{p>^-sfiO|950KB70rl+h3^s9@M&HQ?CdkmBuDHdL-DYdiUb2zqUV6G(wPzbM*1=wDqt86Whe+!YJih~ zTk;L%G9egfr8ETnav>PgY_GW61P`g;4j;-n1syC`N~uqfFqLt;O9Np94vj-CZwGLx zG-Molugo7+O_RX{H$ACgc%F#L#=7%ZDNVjmLVaJQoJRVfBeHzBO8T7_`elrlFw+jA zIvPgO9RqjTRoG>x5`s*HOGb(&^*G}fCkT`yiW@&17TC@b7i)wt7ABw+_P2fi74&(j5didh_0>SP@o1m9*6peWmq9_k_zZja9Q< z=PtR@lb)Q44%N$4SJL)GEPIULD`ga&Cwqv%mLAH7`5V;GNN+I7ugQhXI!))~^x0%+ z*VpN2_|i0ph&&a)b|ztJT$cnRZJFerM-n+H#J!hK|2YZ5Q9FriCezs0y$O){ISCjw zPf*w7u(;Bg7R2M^0CC<3?BtsHv{?m}TE?DDid6Ayh=8$h)p2SOanSXHH|nydUK5pA zvgrCCwFM)wEWsgF4Akvfv|3BEqTz9Ph)HUpxX~I*66~N%m5{nE3fLiM1x)rKai;}1 zCO}SYC^1poZ9#j&VR%0e=Q`;hVVs7n6?cyS2Gwg%4}~f_$r#XBq!q_#Ivyl}ICa`% z^@Fcl?t#vpX={s|EFj0xzbqVXI&e}Ryh+l)=!6#xs@?9VjIVeOvd4~^wLga{=N85?81QOgu1%s3tS`4BIxU{<`XeK-# zG*~FJLlt;xDQ)5jn}`5%CV=!BLdoNebj@~hV`4m~7x0pn!Ao{s=EMxMg}JhT_L$?G zr52bDTC5?uHaI-gT~5R>suhkf{jPkGG|}t5SM;yxjAQz9wB^>({|m=7;32=oI41J` zpO$e<|MTbo$Mlyq0EK^nOxA?=|0>AzH@$?&mv=ld{BMyjhB$#*)<&U7%}+(kzP^pwVF9W1ujzmM#pQJ(R{K!r9M z{2)R*v>~R?WH#}{Lq+W3i1k1P_3HbUWC<7#!h(A;phq?a+1{Zdo<86?-f`zG`a!E$e393eOe6tFvux+q5ZGcyBtsI#+gkXlKa^ z-(A7FnW?wMU2QA;zB#U&TX1_=H*bj5F2)bp3nT-zVm-;tf2q(L2t*D9h(#)58%N9% z$hb)WA$G|PTvUYspo+|^GYwo<7g?k<70IH!j1g_L+#`wfZ_hVgSQk3{QD)@0>(7k~ zPKMh3S`#_`alXmNcS1+pVR#Z75XOsPBs>jVWLXxsx`z0lUuXR3%M&C1A__V678O~X zlne=0gjgIDt?)f*Z&IiT8|iIYmUz;^`nV#(_n_&Tg(n?H=qVLp-e&77PL3QEtc*%L zXtwF=lTM=xl`+%3%{N~<={)wha^k{+=38H$92KM&rCRQ7vE8Co8W|jwP;t;=mv1W< zR~VI8=WV$+vDGEzcvSM&2QBw6Y<2xWFFN(4x7ERlR<{|!(dm~CT7C0%tNXmd=>KcX zkY_D01Ec8<3k*0GUiZHz8W`~K%fuk~juP+o)3|p==+8)}X*Qk=91|oa5u`@vPXyF} z_+LW#EkTNCh*hJiEWa{)#O^kImysI;^Xs#{w@ZiQw8sxUmoeCx|zu*HeYGFH>NQ^{9gc2WRr02{2gE1=-V~+`!_;Okz;j_Xt(T? zzw!M4TL6%`!K-~M$3Myc@uP0@5pUX8PIz_T$4~k;jCl8WWzf6lKYsSV2Y@6N_WanA z5X*y|#hw-R!Z{_O!(Vi+lv_BMF3AZSDTw~>08pzU!e@KDZuUY)+q;U$akt{ve*Dr= zVxUxnIwY)Hy>R46C#5nvJ7Gih%aKwq`>2G?W*hfT-|3pgMW;ud-sG{s_-tNbbbZ%p zS);@_VRefjS)*^cOJcwwx~^hE{oXoA<4OF#j0GE|zr~$};K4E0;e6l@i8Y9>chga_ z&&0jk$^tF$9Ao{7YEpgY6l@DU_ zqBi7RTDWt}fjzP1d)5yyK>iUE7i^z2;o6gzYf7_C@f8k-*sjtqa{GgxQxO|LT zw&l6h(;>+RD-OHmjyae1W6^sWDCu1K)t2OMzCP?echR}Y|I|-uIyuH;{>F0|_d`;S zUOMct`0%+Y&x%rx-5E1_>E&}%e``tk{^jA(pT0Wx!C(3|Q}vx23r+WB4jyOIVz#TX z*lS;w@kcf%9h?u8#;=a4@M@Lr^+b2GVfnZHbOwUQ?B{?X!PsHIw)WA1F=3>ZoZ%4s zWSds0BEQ(RB-A#wS>GxuzARz&G~2(2#%;QuWqtYTe-DkS7(-K*G%z$RR_zydo~=IN z{lVU@9ES}ux2CDpYk&TlkFHOaSo@!eT{Hi3ef3?Bl}Fmua~D)Us=j}*u4?{tJ;NPPl{yBZ z{H+i@GkN%QeB{XYa0;86bl<*I>oMcclmT|?R&xkf{Xcf!6CwD=> z6RQ>!04jNt(CV^yXggreZNJ-ArXFxwRl9?4ZTM5}MZEy8{9Qf|`&MuAv^ttx$wkjF z8@@SWw~21u{)M~74S$$$+Szr_n(W)b9Tn}zt)caI^=ihIGMst9{9rD| z^a(;WNmImC(;|!G3R^Z0KfY~|R=E15KtI?xDJH_A!YeZ8SmJ>;?U`(A!%3BX8`fyF z6JxS(wO3vWc6Q&$pB8F#V@7(GvqSEKm<*}I<`AEwzFDOs>W1ky$ILkSQ|;VX+sUU* zV|N6M3~?@v%5a#Odey|`@S4)tg}2Oy4{DX3-#;dydi$*U)Nt3SrmNDHCp`VSDcoc6 zg;gKWX*R7*yS>&QSe+Z_DE@2YG2gxUy4kaL4ErbVwCrsDnuXI-hd(KZ47_*2T-kZs z&g=B)32&dT)n2-GUbA5s4Yw~ZvK?t}xMx_Xo!Poe(RB{iXWAkHUaTu$T{m)+@=R3v zi}jW5bg$W2|3IBni@5eIvqP1q0-e1#>}k*OK2+tp@Se|a1|4}(3pQWcw`FeBv{*@Njoz~+Gc5@WZDY-UopgXIQi>WZT8bhbPy6zBXW8%1D>Y?5Es9IRnKuCl<-ZSJ)y2rCP&*H}ukz>H~T$DVYC0^=_0yu(9M@qOg z;!yHDb`8UQ<}s2aCK5Zt9~naufh`h4NLbRMcE*v!gkjHoK9rTmSf6%=M#O;iq346K zdsneAGN1^fiE?>{-WysS1Wp8ra2UXYOgIenu_5Dd4oju73lNEs4D6HM1KwCUr>CU# ze)wsOP(pp>P7=DGB`a$5R`NuLyyQ)GdTIniq`chGay?@syJB~F_*h!uDpXLc4X5%n z-;IKEt)00Le1>v1qO}xs3UW1d2VwX4brAN~TTyles<0e)tqa;*h1Ty8N?DGgUIqdQ z!t?33K`5g+DEO-ZlEM@DFTyix-~ z`gXF?hK@@_@hs%{djiL!{TMac6whhsF^m@bOHDLTg&luChHK#OE%m=2s(uU=jg=ep z(li$E$CIiyv_G0JB1>?^n<$LLH6SZA4Zbh>vjSh=DA1Bf6f%GdMBvP~xbIS&{gwe) zOT*zg$iP?)+%khX%|o$gp29}z1~4BwC0Ln9Z!&acDszA}2f@kE!a}j*;azDB#D{U} zHlx!4@`PYLdcj{Qp+Cw{2!e?8rXPmn`WSeQdVO)8Pb?mAcb8Hx_IRL|JiMG*c%lX} zk5Uy)aTE3;X;L?wIX3jFGvueq7QH*(2+jfN%UBipDON>~1m(bqcr3Pre2;HPR^-WR zX$>-H3{qzT_Tks#Std`aO;l@Wb37WZk{c+f zo=Tlc2eH6x5o6t!vECdM%`yKWs?T0{>WucH!;m{e-9%SJ!09*ySFa3*OJHUgTu6ul z!x79QCGZ%}#_O@JoX!n~ui%*+y|0m@^|yoIFu6AYozXiUWBW9)lt+JM4}0|o;O(71 zBt&4!izU=_EZi_dbv4wHJ;&?g3-3yRPiZEN@y4eVFFu~x_JlaR^?-lOT`8v-u1Xc% z%0auYj)KE0cLX|DgtMyN!RLGnF2R$!Jmk-6mGCqjLB$_3WTD3zNmH)4_meL7UY5&f zn^DHvTR~@#E&?L;B502%d|D!E9EawKqA+L`EbKfqTq&Y8A#j%3GY6170Hd;C41BWf zo~YPqDf&r*)@jV$Rfy%-kjJq#CQYHH^A{67L_^0vKcw&qMKH*%t!a8bBNO6$6eFl6l4Q2BU_1w z`Ll4%D12L)iL!oV=5y^-PQw128C5Y(Cxb&C7nsq3Bc18+(_Tn}jFqQB6PPeuKoTRm zF156TeS`Z4M^fM)!s}mO8TPX-S=~q&QfVecGLR&=y4T~(ge1sIYa)KX$O1j#@Co9n zb=-oX1o$I)JVp`_1F;+kO9Jyb;v1R(KPr!$5-a%c(E@xK(!rhshHG{uzC@zrAu4xi zd?So)H!>%^uhzO)Wet3&Jh~x9nL0pUR7CTe5oh4hjZtvcT1ScwY&a4UNDye-qL?4;b6iCO#0XGX(1JMk9&_=(6>LdQI;gkJ% zqn_-+(C3WvIV6V*aSZr18Xr`eNtWU+MIBw#V7$73mIXp2D#pPdT^mqZN$dULfNNre zPk;=a$pD`Ve*8At3?h@hV$bv%_(Gc3`S4}*tv5c6@m8l2kB)vC1*=Ujc%UOQ+=T_i z6^i>E2f1Q`=8P%EX%E8Xj`;bW{eb9cX|Ww@lsgQ5S%5I`Ct5+AuA1`|biXOCGf{d{ zjUnnV1fD_)`=G}a&`0k;6_Ga$Qu6XiCbFTxe;8!;IUl);8stcnQcf zO#v!UPWpu6deq zQeuR*&7Q5qTsP~Cgt&F^hz_qOc*S<`XhR-uW}Jtio6B;Iok!4T0P9?v17mbnoM%j3 zr}Inbs%dz8l#RETY?y?7S$M-U@11lG5+2dbAD{vmNLfT}r@+|F$bjzNn5^z6yM+LI zCvy_o3($_%r^5%1QKY?ToMPY)=1DrFv^!PVMQc*IdPc{w*iZ>|N#)CUaFm+Kjp*JK z++|iuX*s=>%&#AaEbqg4vy&l-Zpo+;D_9Dnp<%f9R+b^fF%(_8 zAp}b68G>KG4aV&Pk?axXquc}viWpe)1jxgsfy9Ammp@ihzKH)R6WDS*b+iQA00z+`-a_NWgi&vJ@9Dg$VAU ze*GQISORGf@KxaX{X8Qq(ZE{jxr;#VWD-X14CeZ2E>D+91enwY@EtW`b|z?-NZCer zn7Y?s8puSnw;$G5_PiONPeyZTI=ZE3og-FETg4`AoBLuQ=CpnAg!cK^&YA&q&x|xuq1T{weU>@#c zmZxr`3ueGz{=}wOpInSqMGnqOoQ_itPlNroWI2o$XG0#ZWbvEHSf&-9vn*zPAE-O& zfvM2Je3l%*Cj)V^mkioFoQ5ktOyyFkECs59h?fyPkc7TSf)rv&O9GKVj2>i&&jJv4 zfw13DK8q2C+9HG*}9sXBn7Wn!s0Jr>3_B4GmB)Edgw&`TjoExjAe zFF4_gF_^Mid~y6&pE>0K1w=d_Z=^FZqggCQ3?N_;Zie8&)e9)*uQ=f~^zb))euw}6YG}Jq0{yKdgJLBJuZd{xV94(f zEZ_N<_?uX4&B)yb*)39O&j7gt1-5W+B$nuxVk_KVEJR$R6v;UUz#VlZUCnj~wgDU> zd14KuI)pDG+Sn4tq2P^4m@VVQKb{TYx-ko1C(Po*Jc48(5?v?Vk%Pe)l!IQKj>(F& z>YDIG1t&s)x6+i}XLFSz3j)6Ed(bQUHT>OKjY`7{B` z`L8+vaU?(hy%MmGdI5?Dc`5S5PDE=5KPs#Ret9c)))35rKXmraCW#N#(C ze~Lzo2x+%9wTZ#VRYyZk?Zr)&bY~Qr>x$GAv{A`viLVZ5gRX{#DA44y?!8onJVd06 zVKbSSP#`4*V(@5a&zmr)auE`3QNu8F)J7zwq!N~y(u>{YyAUoD*@)1*%WOxU9Slj* zVxNaP^jaeWD}J3i0bQ6Ih>_kAi1U6N$5)V7&zr<;7SzXI*+)}k5W2B2B(;991Buv> zLwG@!`#=*fc%cRvZaCiLgi`DzsLLZOPD%wPd<7oH0K7xGb>M?^o|v0KLqNsc|K3&X1$v%0Qsw-xoUvg2%;T&ZFwaI}_Et$?Q zr$0~QBy=3Zv6o~+=6)6z2xwpy?zklrZF%>>9xZL2iY3UhDUjgs49=7CCvz$qla6EO z)6`O`O5^8|4Pvc`M&W5QB%sT)8pz~HtHEW`1Ctu^NCGYhjE821#$$kA!ev1#;?Rpj z#U*^YWg>3tr0b+##`3$skag0g7*u}(d#($(B}!mTJjbT^AY7 zs58S56c7*s+i^CSFQVzesPtnw-o9h*8zjk=(x@PO)l7g?R&| z3L$ZU_~j04Vw9egjM8Bj0|98V>op<6(UN#e+^R(=l&@<7?1Ek4J@$4RX8In>OY~6e zX#y=M;p0b{3Eohh=ek}jYMMbuV9;Md{=rw`A(po+<;(94mE;d7mRwAgoyvrm zDn-Z)({F`^4_0{Yncy(HX|XkGVB^m4iLnD!F`HkGMI*SB`7n`24ZSov4+Cfhr~x;;i`Lt^GsLKQSLhGloX8pXGv+032yp%St^h-Hu5fcbg1 zSY?NFV*MlNsR*G0ZMqeX70xU%aX`j7Osru_XbbaAxi!eBYbb7Yq(MfaVzICfhPeyI z5{Jj|yc#(S{ZQ=X!D03p(@!Qq1U=z$ZIF|xVx9vrMXpKOEQ8(qlHJMwhboKpb~FY$Y>DTTlOc0D2_F++3twGMbJ?Q85Rzh~uB7qC zLK`~_j0jryNQ5?-3PpAW_;Z`W%5^N~khKyU4I2pKP^^b+)tGtMV+V^|m0Iar-}lcT z&dHGj)HdCcQ~0d;)XKa<7(4b=IcM+ZQiD(jb(hX3D#I-B(Ve~a7X#uHD~f3Ydx*Em?-Ne%x$ zr)a+X-%>OwHm6Li2xc_C)o%Zokh?2VW3!WW^#QEDd zZ0V~THQ^0kRpd}nE7~cI@E0Vk-(IoPb0;@(i6C*i!^S#w~}>k96+zSbW5As_#1M?;aPA{^a?&4~V(V zaibNU#a``Mq762!ZY#WW`R&srlgb7tn*Tz=qT-3~z;J?~i5?)5{$^+xtT8}K{TD~G zouxYh>t&E%oo!p+7UJTtLvSW9%lmFkyVZM+#=9~r+}wM|&_%OX_-uLJK0|IUzOZ_Q z?@q4{wQ7U-^1c;g8uE*0O&#<_S6i;%*L!qx<}Ul zv#k1#bcTPsdd-5ZgSPZ4kl?jiH1f;H|LO7A`LR<03=qsp@_{)3}=pQQp6 z*Lw`FbJ<++^u?t=-F-A>)y-0@PR>LuvjdGuS}=O=d94X&=zB)GVMhtP;SlhPKZxwM?F=|M|rWPNP5J$5ivptxx*y`mtOcmE#R`!(!+A%sMe& zTz|Ri<7RH+{LSWD9!}pqu7`_T`m_1Aw|902>A9$i#1=^XR3B>Z5?_{Xu|r&J7dc*# z@UO%=wf7S$Lrj*=+`z@oDVwzA#iiYHOP6?ES>jIb%X?HCU6LBgk{ae;{xZ|jHLas8 z`S8KZ4VsOvQ=XKieD~t=S6WNAEa9ruR_`kZ$~U^@xUWi^k+ zJ(}8o_Ve#ww|@2Mn@1lI!^-Bt5sgJdA7}ESD_g8iHLfr{ll7*c{qt`;jS~_J1(VR- zj3W3q_XLX4ULcMqW-9X8z?cDl0%GtVW5)PHhR|dj2Xs)(HEIp=OKw~2wmB_Rtt)n` zbFf@jYUJMrgQm!}{IauU<9^?v??EU1P3`M;o=v=$wW$y^&5A1b11(Xp<*B(XwN<5a z2D8y=b;&*ONrsy*%dry@yctUGH7k44>A=@sr?hU<9fl1(6P0^#Lv4E&H|g5C4NC7^?&rJRvLi1tH2q@5H@>^Zbg1K& zrC+M^8?!g5V`j>U^ebO~GiLvyj#(eLh8}FT@;ji@&CXf2>3zB#cW&0S$-i8G?bp;A zJ9oj3$u}M^9((L=?7WX|PyXj0ug5kUOw=qhH0%+~XgXoZy8aS9Ti0T-Llg2Z@a#X*y8H{_2xMaaUpS=(M2#noY_~}9G_X3E zFG!qj?|r9ywN;pX*?iRs@5#;U{oCWK7F6HP+H_(4rmq(cZIe4^S6;ZjDfNKAD~Ouv z+X=ZBP1ks+bF&|I#cXW8bR@ap=>m&ETPj0#ul=NCO-yao#a{1RXKvk7ubr#bKbW}N z`O;3~F?%Nue^h-b;OckAiw|tL@i;H?;Lq32PyF`8l&1^79e4AU@q%rAH=b#&1AByP z3tD|{J}>_~@UHvXB^?WH{#s)_{z2^8rI!!geAW2*_$PDLests4o4++%Pk63-mUzc? z+ne(%zkj)B-Y1V|ZTtP^kRSTb%=`4^m)qVwUHQWw59WRL$D?h3{W+wW2sB#iR-OSqeB|;Jek{_j>|)9HvJ9v6 zhagGY3ZYM3mT*w+iD9=qR|Z_SH~H&g=!ic(7qfIbj>&7J`b z$dEg5PH*YI>0yQ!*St@K6vwR7e;~sE0-5QOz+UAWOv((l-EA|(V-8j&$&gyOcGWQPub=a>Hxa%lFjP z;&%F;-ki5(*0a%-+F`a)ZYplw?{>Ud*njiT4$JGZ-%8&se%u%B6Lnp_B~g3n*N?R^%3lS06zB8cb_|{h*EBBI@&pP)dNC{v*AQ}pT z^{sV8p>qhuDxGpyxgI(%B3Re)-6sRB{lNL@3gSYiE-e0B@Zmt1tJHvHtCm^%F_x`g za!oU{z#x6kncJ4XCo|rdtyt<~6sBjnyZ(*kg$$qmS331n*Y@Pnxm7`K2O4%u7`(4p zy8rpkMJ=YDOY1^b9(cI@N~cQAeCzS3GTj|%9|vq?>9-7QWvFQbU+ZT4uhVWcP{AVHK`7vt(PzK zrktBV@@CE1kAzA1NT`U{l}r-$O8B=>!Ig}2JWfjw8!LLAjsrs0ZaGv($DSM1)aD)(!mGz!y5~BH z;AKzD&z}A+iaGTbe-D_8;ovy~R}L45;ZVbhjf-duEOA|G?`=BtzC9uWRigT;4iG2!Z_Xl~tUwcGMdC=5A_cJ9<8_IDvhj6Qxwi+)Uimh4RxF4^FJ? zLJI~uK8HEqm9Vk#1h{ z0P^iA)1Vw4L|dg-zA-i!KvAlH{FOfSA^#WIBkvEBaMYQ3@3a&~&^6^9`Zp)YIH=`w z!}iV*BsQTKD-kk*{uJm9Cd1KXD|yZb;kTgN3wlmbhH02%Lsj|QL&MGH#XsAls92sB z%%%ksSUblK{`I2=o%_wLw5QPIKkiQ*XYqa*Ptzw%XYhVbGgpEj^PUYbiFeh*H+kW; zvF7SHmDO=tII2PaOoRShY}@(Ty7TpXe1rF16HlW`Nn+XWYj!M15y7UTwI{`lX!vRK zsg>^vDfm&}`eB2#VbqP=PtCuggR^J8yYl|g(f5xg(R-8w5WR{@9ADYa_RdIe~q+_tHWY3)|4pvIUo4__1(9{cI0|HWsG8 zXf!$>D}&G5^jsX!ki}99m3Lo}=tAPF_X@4vD~C0<-SRwD*oCItM=mlG#PMOvXHv zv+ysQtt$dVq;LT*9tpgjN1vit=IQ0&3-$~=>a-+L`5GUVEcQRFy~{?J}D_F@j7-#{PQWBj1SeY_u;Eo+w7j~zg|t4w<5<_sWV&bI1W z`$5$BBqUFrI)tt+^00EUA4bhnx1#vxjG%^Py7RY?N0D%M@$u-6QFP$o_?OPXF(lD$ zywp~B0?c9uju#`%{nTD z-<;eZ^7zFp9PIX;nvg1sFY)rHh;#b>`h1cZMvu65DwD=g%$q;ua~%Gm02fx63yX}; zTg$sNHwfUtfU7M5SDAS2?`;BZ>)VkH|2#kbd4uSne2K4o2??L%@kwcH@X=JlN{@uw zvnNCJ=lw&TKkgYFUEGI~M1JmaitR_I$n~4!hWgQM;^?oYEd%H?oA1)U`~kE_A*sMOU<9zqK@Y01bhA4Xn@I`bEl48XHBk1V% zm-}gaqsTY^+M4cHqv*kdkC&3n$53^WNwNkUiT`jp5G2bu+Ob&t{Dnsos3ZP-!HT3w zL}BkM*Gl_~qNT(~8`7uH{UqlWwSs@B%bj*H$Bw}4x|gYUdI|iab*bLKV-mjfX!Ri( zdopIvJ8S>yE*ayj%-Od=Pbtl;4*A9peEf&Px@~S$e0=4qr1!6=_`bv3o{d9PEZQ=# z;b=7@awNCIY(5dCeicO0WzG(~Kg4M^emN^Mv zVRZ}A!5jgsEu_Og_)-8HZg#CbBtyfkCjyU$?4#jqdYw{wG7Voad{=O|nTEd^7(bf@ zU^L<;se@_<>Da(VG)OUvj!$C+>t!N>_(hyd=k|Gm*wy>_oZ+*zh(GIZ$G*RUxbM*o zpQzDVbb6%byt+#*Qd-2W`RP%Iu7;hcXu4X5N}9Z4ch=OQ)_o?-LsIpqe~Xgb(?fOW zm3r0tcd_-zpC|Y0(cb3sH!`IfkRr?d&9;pV=(pqKnsvzy$Z~m53azaH-FK7?_`R?Z zJt?@7Xnnc?=_*Yognej4sZj!2>y?^N&io{%nEo3>OceU4}(V1fwYeQmhFye zN2x&t_Wr6}Xl>kGIg8>hO(~Pb0y!QK9u}b>-3S>KD2Yr>`S-0`_Y#vzi(511IYA~ z`>}B{^dHvlE5cTTNKl8ZuqJ5`X%^Y3+|wUId3bKIkb6B!QEOX$IBpmvimtEqvKc|0 z)a-bj2O}u^bJPPU~GFpd&9#e%0I#!=6}m2D)C zN%XO2525GWitHBDII7H@LhHEf<48NAR^5HH*zzAB^r$ukmJ;}nD*v;8P6R&LB*W%& z>P8u>Ll*EilJTz$pM8O^dQpH*#L1DIKJ@yxTIIEjJ|vx0=CAXbAIHkeG;X*`!QV3( zUMtV?V{NwX&s)yJNHVDFR>?|1EUzeQd4?v47nSbLT69nZS8nR9xmYZQnPvwr%DYdY z3dsz&DoZAgXuB11*NK4xd6owxG2J(%S%uMpruknRQi&guk00tp**w12iatl5QOn8f zN7CPy?>;8ii-!Lx#>?jvs^^89K+|$#40ZD4!!T0c zd-(IE--Bq|c@L-a9%E?T$Cb0T`1K(lCM$@^>O=B}Ce{~?NZ>~@-;|B5q_E_m^_KTV zOgyaGufMB`fvZ9fF8&7mA$V9EG+Z6rq|;a5O_RngB6lpdG9|HkB5B`--Qrk(8Fi1= zNiwEp-@5)ZVgzOUeS2xLrU%8X*uD9jS}#g6`Hc2|gz>_0c|*rJeQ0^oR?>>PKIFLc zo3--MesuO|Me}U(0Q$H6?bsEs0i{C?YL-w5KnzLUwB96@s*{#?8-Z4_-gly4ff zdknqR@6|ub97hXP=D)2beL)K{+Yh4TFK8b9#kQB`RVb=<+Yy(^Dpb4tUM70_70v4o z`I;H=4Rs~Dgvo5LMh~|8@tND#pv__DzAUi+j-(Vn3LotLfvQHOPt8mCiQ3wjd?$WT zuuVtez=I#Z5caMfbhV@6%a)01v|=ij&EDhG3-UnmpqPrN6d$IJ&6hVl%ZK})k=??t z@ZrN6&!+0#Yf)tWp}6!jwP=?0#oKd)>JX*$X7>3HhTFlejE_G?dvlc0c=;Z z%>CFd0W5GM*|+|=0R9s`uFU=?fPGnUmZv!NXe3Tl`rSnurq_A0CGXSl&${NG_%Ry( zu4vEh#dIvm8<#bp1cC4vjZQi?RJ$4OZ!3uN^vG*b2OCvIDZ!*-3Z$j}azK^`|X+rlyZLF>+H={JN^VAYjGjc1jQ0ZUO zj7*MXNp}gfpwve%bZuLkQR_RQJ&pz~=#Gk5M_N=1(sMm@vvET!3O=c{*J)WRk`nj$ zCw;yZQO?#Gh7G{Z!Yc}X2P@l9hS8QSqYv9q{HZmEkwQDVzW2RAQCK^2RNh>YHqeen zEjhEg+dEM3(Wj!Qx&v7prS#g_bfOKLKa@{7b|LnYFY$dpx{%RMGrpqAE>yScr#A=q zTZJL%<5+t)dZALHUL)9xG=$9E0_eTy%!Z{$|7P~0ue{+}FLF=NJXL1jhv@!s);_mE zpYa|F$$rp>R<|WPtlHC$mi&r{B@TmL<0qD)T;Gp|SRHFjMv-@V``Y6t$55+qM8L8YbHjr^bK!D$kj}+`RTVX@bZwh9AGjTuf(vP+r$r)g$^5HX7tyHQOKR$Hd z{Y1_@8g_f^GS3?p={@>o-|bQ#K}-LBTJZN19mgtm-Q<5Qg!$RRn#Tf#Fqy}{7&s>O znB`rMDb#;N2L6lVDq*j+ZFSd@bo;yY+S_~ zuc^+2Q^N~*@<(@Oeqk{#D zJnTPKCvVHKJ7>{SLfc|~>Cvt;0?Z(IUVzy-DI;XfVs zH%v5BUyI>}OR0gS@)T_Lu~cGCq5$?I10X5o_*s;Clz1K zS$O()4OAiU+>s93F>yBL!9>t*U~%Cil2_f z23ehGAhJVZJgF0H=?{O_CDVllYPj=>AfI*<3K|;S$VOVDl+#DloZ5Slk^aE`MJxJH{<&?8=P7;2IjZ>idZHio z+nf5!dGsSTuYUVc+F3)Fn->RAD<}HaDws!EZE}R(1^U*#1UZWO^+EJ*>5knym4{G^ zGH3JrzF`#kt>Jz{=m`4ui@#P_WfXl-V^r)i8bg^Mlol2FkD>0pFJ8oJkE19-kCRJ= z#?gx3<*JvTP9PR}-g-+nB^)h(b@2Q4IXJq7&syf`T>yb5TIN4Cbid2V=~w(gvL}h zWnmsUBTc;QC|7RPBWuN@y+s0lkg2iZ8pZTlMh4+^mCV3K{l%uxoInxS5!Bm zOd^(S3i?GVt??qQu^mm156Cm~JW4b3KJ=M+Kq{V|S7FYK2gI-fSDe6chol+#Q#vz$ zSY;cu;P!C>$MfVEKfcH+E;wU5iQdkPEA)BeB4TFzGKMZ|I2*-m8AXZ@vMJsp!zk!a zO=i#TK@_oGIHA{U06FpGQa{q<$&)^m#*-Vp$P;FNS^~P!b0z*XH;n<*iBqK(3-qG| zUOIhfM~7f}mqRxaUGqvRBefIV!Fd0%6KyEF?n4NY=tlMxzvI^K>O=wC_=dYCTaam( zXm!`!X7p)s@AoVFnvhZX_`*@EMr1s3C~NPe2A;KKyxJg473MQ&N+Aqo{2XSPeC223 z>3K{!d}4-=M;|{-%5kP(S!X|yQOyA~@G|wt#moUzOVq1Zum+LJ4~MiZX9i)OVe8Hu z`Vgvkb(8pOF@l=%?Dy!7jiGuACp-1$<7n*Y-?J)bVLnjAk>zebiRNV--Np9%i%P_D zPgbv+LPUks7n4>0&=Iz#Ld`+~M^|0D+SN&5&X%X7B_1SfWtqM;6XwfAE)UOkETrIo zBai)#JO+N}8&*I~=fi^{TZIRo@Z)HPnruan0Jab;dEYaij-O2k8ofG1$6ppCZD^>W zV@uP|^F7xIV(LQ)16q_IZr2E>kl(fgR1HV}R8E8X~_XlsOU)7G-o<_>Eg*wpD_`EMm#@dl8_0LlJzZdXrw%$SgU$?_@8Us!d(EBn0>nZ$6b#rJiiG*>#u?`E+lmjX^)!;rFLm+PEJb(d>S0{0HXouku}5*WQn+H}O9* zFd0C(ym^HIls7yuIWaYWM!$W{+Uz=rbiar>xxN`h+UQ?iWatq3?)LFv|CJ%sy#8u) znbNp)E43$Q<2l-tIJ<31xXU(QF|xyYL2NkQ}M&A0x92}9V9+|4Hf;V1~RJ^-b1&61)HQse~4KogU2^k#gwm}gCFKj9Q_9Cp^B|eo74_Xp;^57nmT0r z?qErMO#^auSs1&a6Xa2b%M+)ogERWo7`lks6Hq&KMz4i-<>{NyuXyv&B>aTe&zUpx zB7bM*uP0{oXMSA7o3A3{P9B4#;S3(Xm_jzrpO4=I^v1|f_CoWP^I?77u1*R*0@|8H z8wuax>AS?tybFP~X5_^Mt~$G#j90z00*z-JRf;ApbMGc*=1E4;bKW}02>LBuP(c-* zLaWPHv*&-AMCU*4p{C_cpr5>a44^3<9~whFlq|Qs-oW<``OZ4zJA&*yb*>cqf!=@W zR_uwWA(WM1XQ7ckh%C>1>Y8_J1PLkHQ;w7jqC>)Fq*KiUs6+2n#vkuK^vYREy(7OJ z?TX&U%;@PsuR{_H--maj>ifyx_v?0{RB85u+t1n&j##u?tE>*)GHQ!Ag85H}4Go@Z zA31nlpS<7Lpc+o_$yBSenT=@**Ux$e$>F`hPv6iEx1mRTPb33^+tJr2(ESr1C-(dia%Wr?<1!h3z z^FR7|UvUr}6}Y=!F=!AqY1y3`8~=nlmapF*aCQhq9<*c_N)Mw?CI|OCyFQHkM>n!R z>W`q;bBv#=b%5TgVIm|Z^%aFF3%@tK{}ug|7IDiA8ADMoe$PAflsgU+9GDw5f!>_8 z;0p=a%j;u>; zK)GLIa~B6UqQ4vW=w15x5pk-{{CZZ~f-;7$?V*^rp> z{`MZ* z3)&-IFt+W|qh55+{f3|$=x+`MX(#5b>_dK5!v{jo_MwIOGO=Di`_Rz(V`>74zhPZ+ z;^$?UKYO8ALM=-K&egN)_Vg!FFxA3ZZoWhda5;jUOhI5 zyz&b}9E69^{0Lc(ONWNgENcA^+KW1Lvf!ZeZH0PNyIn&IGi9&`vF*w!k499fBk=S7 zQ3kHxsIW81x(QVjW|t{#WZ}?&b9dBi1hMtx9!sMXd0a0SE8rp{hgUvxOwZ|UL9cXD z8-^Y!;^N2ObBo?7-~_+U=3O@wvE8;jwbMZNEd8>_SM@uPOE}BR>!=cb&3ONuI;@0q zS4SIW6UsQ~K-?@=pAzPjr|4O@_Mn@z7xNX}*?8>R`fDe=Rq)P~>UK(qGIr(cc{#a9 z8Bfob_ak+(g>*@xGTvX+LAjfzjOT8>@HW<18K3ac*;lev8Q)%PxqsH=5DHs&B2}?m z5wHC9@2X^?622hQCUs-I5_Sv6WlqdlcujX=A*o>uc?WYB^4WM}TH&ulo8@ujl)#rh zD+!!^J?)Q%ia7rMrlHT@@Hg6>KR~ZJ^d0GP4U68ZMfO!zzrI-gLdUxJrq(t5MqZzT z)=93ZMg6}AGnPDSLbp0k#g5nR<_^y#1n^Vh~;B%^OW3^2z7P z3tA_T5N|zm0+BMdji+xLM>*uzesO9{N%C6h52Ki>BxIdr@m=;pS!9ElAg*VU9#= z7m5YxaT&lkDjf8E|J8ROo6rj9(28CpbdkG`*p6n)aDQ#cDzrSv6!`D-JV_I(m*mdF zw4;Z6ervulYeSYkM*J;qt?0J*QO=#?Eoi=bnvstB4>b;)kWj|`rm95f!^fcHnWK*}z zVe}h1!JC(=L(6#U(zWOs->fg3u|LSzn+GW;!M+F~Xoe7_+SHf+%pIsx_v$066?v}kfo^ zr1=R6m&95gkX9sNmg`&BK4n3yRq4OQ3Feh$-CK;-8}sAG@)wHp;>kG0#(MP@;6qEZ zNCyLbdXP`K?z$z--Kagbj#VH!fZmt9$~yws{RpyrA}0($iq74 zD%fpvrh$ePdfpwKt1F1bucfSl(kz$2QaVk#4>*$ez^;>4y0AZ{ ze9gMt)TffTCi|A|zII7`q;l!u&9EBL#sPEXq7q5uo0)&Bgm0{CkFYi+mp{4D$+ zL(w&It_EhqhmHCDq!cd2uyOB~cYopw*!UT9(Y0TRvUp;7 zFQ@da5-uZGXUZ;B#P-YlgIY|Kapj%;7G&xiZ0Yv#y;`&~CY{^+Yk%_`ta3imQPWik zr)~7yX8M4Q57cH~xz?eI75T44@`);8-GgZ*e;3aM`Ej+rI#vxE3(HE(-mQdNCXJrS zUWWOC68rS!GAfuMuD|ALlsZmP(t)0#f*&SrG2)nVuu4khnj^!iSh>$b*HLyZwmQ1c zvuZPeE5;lDzOwy}BK}C%A24b_Nz06=8cUiGpN4Gx*-b4dfXDxOQ0UCMrv2Rbx9+-Q zsB~t3&GbI6L8P3(ouH%7jMHgY&Rn&{gZXcUfBZ#-JU;Xn6}MTz%G(4g<;??AXXa_g z(KB{KaFh@k^Q)bRfARJonx1d?i|RLX$Mt__(kEf9nf1CCLpCp2(Y@=tG+p>S=~-glp8p z&)K!TNW}a1jeK`lKelC5ZvNAQt~dGYPU-JPpPM3=Gaj}h;fHm#aouewd8LpiR&PUM zT^3(%n|7gXYgSlk*A4D9y+*tFuNi~2KWde z6{aIK`9A|e^VUiUr~h`o?0@y;oiBUE`u_|Nv>oipo&k5}p+5tXtNHW^lvFkxVK4@4 z)!^v>u($rd!v61ppr=m`@$v8z;Xuk|A3iPj|98yQ=l&;i@Av9-u&(LM#_~*|o%S8@|**BhvIqxocSCQ8U(W(Lk%i|&iG{pOSL-+Ec;$}=1}1r#r{Nr*%C%}0T{Spo9pvZk`!Lzd}UuvqmMZR-v)=kt{wf$3y3}<(kZu1U4&!s0t zKOE)POJSDpFt?Zee3^gIO^yG;g%0>nTEnjd-%(o(EnS*@PTBNWD+wI^Dkuti>D>?>0}y< z9%h6ntEA9vGfku)Gs1M!Qbc?+S167%!cA0CnX#FsbC)tB?b1@E?q;r>f0!BNs&ZZC zW2V{S$ILVP(ylA?Wv((BXT}7pq$x3Pnwu>ZkBdu7Q`NcopNH5Mg;}KEj5~KbBwcIg z&NZ9c?KGdJMV4KzUvrDFPrT=IMl(EuYcClvRztbC&<$J?2X4YS4+kcJskq#g2ioTy zf=UV#=CYUoO?g%c4|)~5$k_->Wx_#2$09*%pO=Ym{6e{h)*R?Y@;c|>z@hp|DVG&s zINrHVz9sjihBfrmzI?}fDVAC6Q0daVNIRQ1@)_#(9-6NrIhS8rwzK%Q zzl%+BNINHWuDBt#OszjHLWDd(nJ^KLp*7}0>b-9t}vbV3iwXvpseg3<1 zw+|NI+B(+0VRoV5`P{IT*{(7jj-?jo|HCePW#sw1jFmZFP8}Po-<^N>usCN=K*y$9 z!3+6sR^Hy1)UmnM;==#qGiwH&E{xNOujiWGjdbdC{Z9+*oo;NQq|*GDqYu1E4t`?n5rW&E9VT+JA0xNtU034lwAdv3`C@b44P%a%-6h$o ztnCkOxo~!E{2}}8ar1*aLH`#BXpXnnCb=Kqn;$+Z;_TUXN$yws_D4_ZIC~HOkoz;< z{OAQ~zE7~6{Qu^pTHGc1CQZ+R_b&7IU;F`v;adtm1kLwLl~ZW5@O=C^W&Q!~d9aNw zkG~boKX~twLYG%b(!Q8B$uu9b!CVTTx}l5wfAkfwy8uVo^xyRH;G#iNxo1K{fDl-p z7%Xuc^XZ&>DcPdWr}-{cPWed(ST^%NC`abnh4yzF_xo*#-!!djHBL|3_kegJ*;`_rsYq zH8m~1weByUe1dbeH-1We@Gn`hwLjsJVe_I70Uu6o9ZXxYynWqTo3Bq4hwt5Z*5$k4 z;C~)ZJA1Tg;h(X}3r0gZXODI5|1(iL3yqbZJw9~*&)?n)=x^8A6MqN({3BSHBpMUQ zr&mj2CStz%F+n1JwG<_mG2J>QSSqiUPbbk>WKYaVg~3_@W0nc?OiYNXULD;w(M0NY zOen{%PRNC|LZ%`nY*Ahv5AV4<=G5}RIipOUF)o-g_k5Ri zY~;GUda1jKD>-{&Pj4BlpH;*%(>c=@;I4ID#wskyE`cJH28=5U^B5P1OEBy%I(?K4 zl%r|s%{|KYHmvwuQJDOH9ARr}XMn0xN3Z)sWYqnk1qr4F6%4Y;zGv){Q{`{gp3=!KMX4GL|l)@rlKH%{sA3mLButlga_#IYq{5 zr*-_rs=Ve!cayBV_rzcNHQ2nQNXFXtO#Edo%<{)1>jSsruXOpfEUS}Q8&DB{bttdp ze`8&pZ&9l;^P)}Y{Dc&d1Fb8RWNjm?6H=uXZB_W_Zp+!6A=&8v(j8=qrlX6XHA_Ou zTq#2nB*G26(!j1rY~2oHp#+_h3!3-&7Di7ufW`!q6AIPKKa>+i!ZWW)t#f4o@ zo4Z`Y!anQMx$c|SAG>LkX?m3|diW)M!4*YIH_gvUpYk#mOMS8Oy=Z@>JK@Iip|-U_ zvJNRzQAbv&df7%Fc1WAM?&cZ~&FR4a@BCWweyNJ3mQs15ywhuy22?SEP9msu0V=_@ zPzw-xOcEg_LI%qOc7l7 z0T>6EXrvY!&}G1gF$1vsXaL)Xsik}XopMtifLbI~;Ez)oU4!~)F`Y&viR`56${S3oaPK*h87mTSb5+t((LFh^HBzZ@~4n)mwnL%_p)sN>I1v#4(6}34HGl*-(XV zGr*MrS_v2TQ;nM+t1&_jkb$^{eqV7)p=vS##n7KP5B1r~0h_iQUm{H;mms|F0;I4y zq~{FwpVi?T0H3pRCT?;Fh?7Me_I^vKagwMHF};Rx_Ku}a0gMhI=AA^1bOWH6@5`WW z+m+#upCJ7$b>R*0)BQ|mhJdoLA=$RL8iD+!zxxXl~}01i9y zz|h9vlXUPK0JjmM$%U}v5aj}hW&@{^n-Z@{Yank?K%n=n903BE#Vf;YsPf=0C1?f~ zptC^-;Ajwj-gM%PNO)HXm3RT4wn8#rAzGjwAYC0W@3xvwXaoK1inb-HAkNhg$2E8f z_M8E_lMN<%8ANzaB>=^O@pVon!Nt)0X;lp!iUELy+R%KNV9S=40~M?VUL1H$hWO`l zxcz?z@kE4O?nx!SS|vmGON5Z>09vmOEHV(-C5uNGX^_efjt>xrI`JL+g5Vt&aDJq` z5(tO|EHn`app{s}NhUt$6aZeLlOXXGK%#EuL=gKS`A<-@YTncRzf2^CD9rJNT5qE+ z>!v4B_i}ODuSBzfj{Si%CKKDDm56SLveG*SxUxEM8g*iQG>H%^Hy|u?-V%?xstHRg ze;!Qc3J#61fl|qX>j1ZtegTTfaVARP;TYseAM&>W92a~`0I~tBg&J>4rxWE|@xVpe zTnY8r2ceC?JqGs{{1$+_3t32nXA8KGfv*vi`V(BiSO7487BF=#AQue^$RNb;Ev{(Xa@9F7VzvHL@{JD652DwyOQ`9Z4M--4z$B2 z!l8z^n6lZjGQz}x9AJ!AJBW5j>7O?N%si8D@zw_#uH+HKzbWmk*I4`<4zhqfdl+J42_@CY*g4KnW?(ME$_D`^t5I26G9R=LaCHF<~MeQWW5T z`B88iWpzZUKS*>gG_5*xB?eK;?U7?5)lg3?g3CC=z#V{>0YEt_kmNJ)mxE_+x8wr0 zxj=va1F06k{Yy>^us1OF$NetH9LR-DY=@c*=I8_4DFi;i2HD02)}#&Wj%#C49q=B* zi7W8^Uk=ymGlO^y`TPdo4@2Jn!2J%0cMWtniyRvs8L5h}6?M4OgrSR;+ zXE`>+U+-3EAQp%Sec)#xjyPO8X9FDr7B5tW7rYyQ%(!xPfbeeRDK^niz>V;|A|##w z-)w>Kh48!;?zw$L1l&(>yP;x2p`y-09H+rGM~{MtVt~?+3$&BWQ<}J(rY*-2n4dQB z00e(1v^$aoaO?ema|&z<6W2Lh=sp%txaH-PLT?NQOVm!HL>7?tS16|)B>xApJ-K zAcOK{TL8VC8ygo4aeK56!LdpPZk|XOcG(ceWf?-i;sMVY%B%#=5~$M&V%-hNronX| zT%iNWdWr)+`g%GOvY=1+(Z#5|rnZAj1GFz_3W<=!DB;7=7Fk7wZemV^%SMPnJDC%% zkhBqG>oQzVLVIn87#Bi;wIL;c@T;`i!PArJ5V0Jmm7sD038QElkf9IsJ8jUK)QLad z)dbtS7eq4yNU)lRPdW(%!PVJMKpb2hwgK`G3w~MfyaK*`24R;$I``n&7aZ4a#W~2& zHMoX@zZ3Ws1Hp`x`w%&BpWUSo+Kw}@%31&>?2`b7YEGD2WfEI*0HhfB<{Kcqm0&HN zaPS5pA=@TJY_N&}iJ}f_s}FG*YMcwi&D8+zKvOLRc9H?n2f}+#p!#`M+936{VW?3E zY(<@yy-~;p7ZdyeG-W6h!HLrgbOE9o{PaXxWxvgW22leIXDe5B9fIa?gEw5E&TX!3 z5Hb*`NggWK)JmOD1+r^W#6pmXMDQ--WD?=tfFCJK5{F6)go=XxDO)2BD6fF5=>#K@ zUZ_fY$me#bwm1k8z#U>Ngu2KncY*@s6LQc+>majBz-^Q*kO5wu3B0-&N&r*|d?5%* zBnI*Bk#&+F{NSMqh^!hsE_Q`O#>}Z{S&&X*G?Tb4J4OdKVgrEDK4OGzbSyAQeX2n) zT_1>1oyg{rl(Vd{EOA*@g9+Wo2UG%e0KaY(CN4mZmU(Lva$Tz-%g!(eVuR&YV@YVf zUZRELNIZ+yhwK^8A~K=@FCEyHFUJ{JojJ%M42&Th8ihtU02SW=aij#fH0D$jsopk( zKgR~NRqh}w6WEm_Pr0e*&_F45gj5;O`Di?m5d!y_aK8w0!qunppb;O!cgvv(*bx5> zsEQ@uBQOKkS z2bzjoXcd_f6qXKjY2nHciKR4nu@*B!CGBl&i|Ld}=VB=l)4-L|8+RA2oVE2R$&BS1 zWo#z1{jv|g?9R-){Bqv;ef;vir8)u%2daGq6a!lC3d}w>+9$vcqUq9&Q}Stu5zms-js>Bj`lIV(@B zrh)+%W0lk9x^&fZj{E3ylXl#rt6lN$r>jSrYGZZb@O`hd^3J32ti$!NmR6GNSUel%*aj z;Mb;|@}AtDy`Q?wIZ?h*w|x*WLNv8vwnuyTQBW;ZNJutUI~>d z98(B_4+=-tVh0jrAZQ{7nt`Cu*o9;fD)a*qRlAT(W`G}%M3DxG`<6^|4k6yql1mA3 zn$K%8S=hO7tq{wZDvtSzO$jT#Jcf-R{XntCiYxaB+s?dwA=C}R>6RoBNvR-PvbtXa zpQU=RBy}}C#bM4Gohk=p9nmZ4VB5y7a&TDZQMJy|BfV<<<^xSt8=ON`zdE{~^Z4qt zBR&1=#@!E^zHag>nv$m2%*m&#VmAUT;G8JfwO0y~2N)h%Uwozzc z(@*HKYY-8w5<}G`6O|XXZI}$@a}J^}X1Rz;W`w&um6t9gg;@nVLdi3#T`7sLSoG*N zJ3@oPat?7jYus$^9%p6dz|@BzC+D$%xr;{jbT!of%tv zWxZylXKeJkwdl=v>zsmN+1+>FE|&9tP;*djPeI#5xxLTEhUI*U=u6~%i-Tgrd`pxr z$m_r3lx*H#v0Pw_-zTe8TMm5PA~5S<&CW-^s6P*^B1qzJARL;9`v;nWAm_T35zV|i zVO|4p{{Xd;$kf7cGKJe7WQKO(eDO}@KqmJEVFnzENmf@TiBt4rF(E{QMmB>gAyxtH zkx!6EAqH__905)396~Xp2EHSQaB>Uh6NYh^LTA-&asLx^%EG@sDOHHLAGK<0K(m!8 z-R2xVpm;bUJ?<(TNiO-V-Bs}I>~_g#0)ITt6{~Gy4jeGuc5G+$q1ngB+8)h5@po)w zb|6VmpB?l^%Ku!DfO2ATu#j%G^Bnp7{e-5d5iLa^OPiGv5^O~aIxNo8DKva&uB{ZR zMyq{ABFjT#Qh)%JpHLlK<_Hq|3&}#lF@e-oY^6d{MC`uErA)0bhj~JdaQ5J-N>HRt zr`C3BzL(~eA;dXaWnpMGRW*`o&G8WolX7RhCst|oer7^d28D@@<_0pavzUa2;BNIG zCP|^FjzseNl5z?i(F}CB-n|c zubgjx&z|t0$U})DX@RB$mD{%Pr%;Tll^aNf&Q(Y@W8`v03!7L5%@s)Saod||$_DYk z>vfFEchKRm2Q`OglTHZa0V5_mY6KEO!pYnoo4kfX(sHJ1p3!3jDvMBkF_~;0^IDm_ zxdx-v`gesidlFIu}*VUmY;WPPTG-i zv-#rghi%&x_P&(4VYIJewda+Czazx22DG<*xO!Cd!D-@6RAGoRyw)U(X%n^vClWeo3CSdyPen2mDN14m zGqRW|WUd=H-%QdXGKC;~)Kh8f0m8rO?i=gWNLk`TYShJ|*M`wc$1_c=9h6kkVl9?x zq@UaPowhu5OQc3>QvJ=gjC(#CH{Q5r0aa>jbH4B0W7@aT!x|2C@Y+!@XP0ZOvgb<#NS+g zS#gSD~9<9UO_*e6Rb&=6;L% z7h1$)khzo!(cJeJgnr(8FGfH&K65nbRg5O3@)Jz1R@-eP3$^xF+K~L&MP#$G>qY;A ztv3OOvXB18ZwzJzH5A4$V@NfX(U3}|&R{T#k~WoU(ne9*wNH{%l#sNmR4Vmom!!d9 z>|-n_3HjB4ZX6N3U z^~)~1zhufk6b+g{s7Wp&p{38jBCRHYJ^uI~U5qg*`J zp{qGh`Yid?4B17B)AF=QI!NRh8Z=p&y?A^|sq^jMDKm)yJI(i+smZ0$!+&tDY&e+O zoiX75(x?Dy*5Gpvlt?$FPs!7;B&d#TMd6!mb+FiV?Ahfc7f6~l~Nja*a zb*^2b%zl@2=#WB%^Zn6A)dBa*Cw82>Uoj;=Z*!#)Q+9OvG|T>RMnYY7?ja4@pZqnE ze+65X6Th>mRmN=J2US0XOp)(kHebKm)aLdUoy)d-gBqV%ufN#Ony9z6)^C>2*JqCN zL%-JfuVF{jOV^i=moKR~mEN%I0DIf+=SQYaXu6xY(wl{0s zfBEQz_A>)s%f{04?^?Ft|BZMV{^s`gSG%XwKendpqrf3`29hy~TI6L?hLC$kY97qv z7ox&fT5C`Sd{F)nBr{M`N=eI)(4>*#h+uBSXX64<^B|25ibWx$`H^`^p^^4mARDa5 z><|fcY#6nM8pd1={BI!E`zQbUYY?uA7&)U_6{**=rEN^|uyQR54r3`r&=W^!4b6~h zYCLOE5qAXstB5;Psc>|ZC5LE7hLe@DXT%K*@^;$4e7Sd;pOpWUmy>De`Yb_4#ON_( zni{*QajWV28Bv5n-}i(yotsM;mo_wR#+cZVjQxWNY9=x4x}e=@RF={Zgq$rytmdxYG3?Ze3p>Ws z7-)g2|L{LPraaX!u2_a4Gt>V(^Bg0=O40fQ4#6aiozn}yOpMApSj4c2g36od_OLxdM23P^4=T+L!*Y#NVhK>@uE0H7o~_qa*5-lKTJkQk`WUi5$9fn0qXF(HBP7x zU*U|w-DKH=vCyw3|;H+s)qgK1ure~oZx#Uuhi0##Og0Y)8C(ESwR6iEDl9F`P=93;BR zM09`*?5GGEba5BqcMLnK-BN$Ne;U3%A5jDnW;Vw2)#%2?a5-%q~m`8jPpkWXfeZmo=O+#G5pP1s4hK{s9VzNA(cm_@i zLsmW{y5LJOFvJiLiBS6RWr);pkz^!l@bCiOydm}yf`}6Jj{ik(`XfF_vsWRWlWU-) zoEe1s>VjjbiCu_jg%p9OG+Zby0!nF!-3t)}QelZ#210ed2o?#+a2e&b9xVv*D_>$M zMjr0qpq%l683qi>E*4FIUld5&{={~K3KTR;+&;1)Ho!Ar8hpgViP)A=aGOa$j||_E z2=ad+;o0>U1zs(}m1xBlOS7b?gW`_=Ee8^ChMJpG@Kw6l z)mrSH#D&R_q7Hs`;H?#{sPr|?*g!))P`i^)Ujz(u%* zs)i-wLz|FV$S4pO;eIk8h$!}LCQ>s`z1Y!wG0r0cHvmIh*k2)@Cn2B>K8+~LxazT- z#dBrI=1sV~QoObu`zXe_{>6TG-X=o;7)!x>pR!!&2y0~`?ifyR_*{eI1aW&GHr$c9 zcwLCk9mSS_eUYICfBbxk-`8MUi&W3VK0WZb6Yu3?JC4U*28Y!VenT7s$*rrfZNqif z!q$vyj$s8#h^fKpSOM{oFGO6MEZ%B~kp^FsG7L3r*@B--af&1=`y9I@K|*(Y)d>7P z3y;@f`xhGtSsul1$-2}e02z#8gd`d=R3t$3%M1I~#x@%p3Ac|l;2M5c2jQ;cU1V${ z1bf+yS5M$%im|s}czg%Xk(==zk0bD@C%BR18z$oSa6BJ^pRL%meS*~@-3O0Fc)k#G zF{b0OJ|53PVaUU0NGQ?@-!%ps4TT>WYax{xIU_mV+m6@seGq%*6Br^Q!y;T<1t;Pr zUy3wLg1Af^ITbn43HOK$@sg{65HOy9h2#2w*9us(sgyg$qpZ}}|5g+{qzFhQxoSTi zT*Gdx@beHZumnGwW3k2%%Za8IxFy)%9h7Mw3>d6ReS+u(6f#Hztbg?>i2jBnz#pfM zOOin&G8R^kgV4an!KEI?XQ23EszdURZ~;s3dq=L05T9tT@#qCBEDNdZbgAvnZAd#dYGl)@iIuR52Lc*Fwqoao5A{g$Z?l+gE zK}XUiRlbv2y-dXy*yHgBR-ZnRK}HVx@%DYF6Zhl9W%#<)K0!#J3U#>KFLnop&t;VS zQKP(2rbH9o_!5ypG-aC=+WyyZ62DnD=(tTt$E?$Iq)aIha9fCV3=N5=KBEYB`6yzW zj{;>*3K}O^mDdJEdN|%hD&81u=UKUQjHCsr1BkUa8&ZHZ;CHeJ(H6WR0LMBU$ING) z)+1iB2J}$q@QC9+Vs$L7m`^H4F7XXD(jL5vf!Atq4yHa>*^>2E4+$ojxaz~eZc!4k z?i%7|_+vf7e<`TiGm&Zh2@{-A6iWkRgV>iZKMrY?+$Mk2^+Mzte`Ll!Ol}}!4biCG z8d0Y+)uA&|5SC#leK`4FNUN#H?CyA+f}bON{0SC64T%Xup0N_*8>@{@B=LDDVN}Ro z40UXcWWoE`@n#(38=o)?8iwQW8c`CG2}lCeL@Lx;Oq7VE#PuhR@sqK01_n2gMfn1v znjcME<%eTh$$yM?8DCzGi+u~1uLG@ullYtm4*DJTMJDW|u{IhKTlr3?v!ZdNTuP6v z!Txd;S`b2%(mV_rgb_NuT(l$@sNyi*=p#kq5D;0hgt}flDS1hwh|Gt0jC*(q1>tQZ z91&jshGQ_mHNM~@!v*tK$F0JBl8M*2x)<<1F+R&h-gu9j^t6073I`!tl;J3nxWwLA z%nga{MlB#ki5)~#hfcysj4#qY6(zq|9Sa+${!VHgF^WM6ZZ?y+<|83WZ<7IaDn83Z zDpcTF1z{MEiE-_P1}L)q(R|{nMY0xtUc-rv!a=^k7h#l$%&`i<=WgMc{`#0=dJR*Z zL%_lQGV%7&csnw>T6!-+g;+^uwmn;@r zD;|^K95O+Ml-i*C*jnYNSwYH z|KQ>jqlwSuWLuY3^c->a9rUyLne}%6EQecj6oYgq9qSpvH!w9ZN>$mG}VaaUU)YAslxy4C6Ydjfhe{ zsqBIXUHl};n2foT;>`hjqvClBoMQ&=%wC-DW_+mXb|Z=!96P_8@Q9688^&Z!!)APe zmq8fuBsL9)FTs)U)ILQuj%*~J55aXvLv1#O6;8#4^QZWa3pPVdp(1wU>Yv6py~VfZ z;+<=Hg-9@H;@}A8o24AaM{EldZW zOkylcK}X?(gos@-SZ@cT6ec|pf8r#cNw7jwP+}rO;Jo9}8#%Cy)`aSt94!;c)ffE^ zOnnIDq4?(#_C6R+!y6Z|%!Z;aN0#P?QI?OTNpP+b;xy}o0a6+RZ3NWFv5lzUu+$%R zGl;c(2;t5rB~2Jg4$L)TokmvjA#gvr1jUC+dEh~l;*yZcT0+V-%8V7LKeF)lVC?G% zNs)axmYMja0mtKkGZ~B1jlvuBeYoh;VNFaN8)?YB)8?KU^OMsm0lem=na&m&`zmQW&o zCsVP=Hk~iU=Sj9;;IMfp75oWXz5-X8iBvBjPWUKL_@=0R9f%d9>BuBPSf@Ee41a)F zSqx9 zXh6YLjKfXHK>0!%O+wU-{^$q@iBqiEbhK@F>O3tcTt3qK;;`NtqB0iZe)nOroj)2e zJXF67;u+2}&%n1AxnQji6$MlVF$$N2bd6HW#cCs`2yd0(I9+h-%y8LTaIyoTH`FN| z?xaOP<1+|Tz7sJzwhs*y0u=#TpuJL}ijSE#$ju~;`r_(1;(MRr3IyOh_LfJZ_34Bw zBT$F!b?_zKSOOYFYd8|7n7GZt|5|qm&%VdCdxKM$rY_rxkCFnl2!}4hHN1}FSy#?O z{TD>M?&T74%o|HaR>kDEawUrEI5d$ZxWbq%jH^5f2X-2-k!e-8aTcyPfEqj|P1cRr z&SQIs3vGq>jlg3vJROMFAL6mSK^RHTr%}M{#Q8kHVfyn0I6o(11$N)%L!jgrsI55{ zpEy*kWQre?_=Kc0)29lviK1z!Rs=*gD_W1>_>g%OWWjJUXWADNb9_-|Hlpr9hYVMc zw4JBowa3_+v602R$yFVLZ;wUUIs~V?7S9jh05h?lI$SVEKIxG4;i{@oTsoooAi;iu zaGS)an}To)nPh*I%e#@hNM}}xC!0y}=Z$Z>#lj*cXYe4SHw}r7fkO&HACjTY-fR!; zBWd3ncQOs78-iDSGBd{s#jc8IiA^K+8FKkTwFvkJua1sIcm+pG=Dk?>V4^9@YB=^M zK#G(gw3C8FIDjJvLUK*UwHKhji3Eh*{l#O_>?4f^dpsA6yL%8jM9iif-QjM&KcRoy zA895?&3%9QI9mdt=~!;;~|)N(GdjCGiUF1ri` zTbw$5c{wgclusCLd>U>QrfT!a%CKV6C&L=zc%nZv6DuccSg8$yy`emGdq__fGdXg6 zQjk=oYMcU7J4RsnS${ebri?Sm47UtZdsyNjYGAMzztr+oD7vYXqo?>ka7!t;R^jLx z7>qS&9RxdLcYXBT)9hpCzOVLY7@&4X(-YsnHUx- zAl~t1=(}YQp?oS~TpovdPs-64g*s7z*-pM{m+v9Va2W9c`zXg}B5=(j$*P?z@S%TW zGjP`7y$dMFqbbB9K9{ieQQ`*ja8ol0Eu8Lm9B2#D^ebE_G45O((#&V%kYGLoOt|98U(`>?mbz&s(gmrfW;lQ7b#ZI4$ zA|A1V^oS{}#z7Qsl~*{igVk@2FP9LLd;5ud`%AIy%&b{}^-G*m`3^D~L5*#1R=Y2v35C9Km3#N#_z{1jAH zPDC9pDVbn4lC_ab%nB7!+%C|H)f+z2M}|U!O3CKY?h?O4{c$%W2uNiRu`HKSXmLvs zfZ!t2=MF>rcO3DNpu`dy;`0i%Cr>&ED?+8j7+iY+ zp7X%t*R)m&ah_I0A)@&iD3cfl=-=(capo9MefCkXcZM1kszYY`h;+J142w+dbK@(Kc%0C6AXC}=k-d59Y_u)v>jP?+vmVa{ z8VH>)lF32%XHF)c;2)+O9T{(&IR5`hIa(a~-_`#&<>>!=R-JNG!1^LG_@9&`y?q3g zASeP1i%Br>Ob|Mlut1d&x&?;}K9iaphJXdZ*_M6ouy6zwj! zYLPPrOn24cQ1^CO%6ZCm4665qB?co9a zbbq<4$^8^}e#l0>fKFG_rz-cc=Tt|@gs$fVp`k;>NT~TlKB`|MUuht-gQ*Zl2@>z> zuXfBgtCV^;a=Ed=zE@cFnK~2hU5X72yJG%oK*uT1>e$A(D;8Z&x|5UR25n70!0rtz znxZlsyrb*@=W9mM)V>pg_Xs4Gp(dJO>@CG>`sIUD zLvn3Kx_C{WdpX87T~4Z;Qey8d4ZU&ybB^f?uQI#g~$W^LAm5$L?O(#ZF8=vCk z67;?j&b5Byj7WFeoS;H~#ixXOa+z(1(|;9Nc?bES8%q}_t7w^Wce~A(W-NKX$uzrj zxQ!N1YW?MMEct78?Y^U~e>IaeDc9%`R+!4>mYipsIxK2O{{K~{bqGi6^j(pM!@h(| z-m5Z}pDvY*7+0+_b$HlOLRSmUfadFg=XmcJ_V z)nZ+}noBcr|IWRWjGWSJg(-OwLX#;amSC0~vrkXscOaq36Ry&i=#yD{FMeom&&*>7 z>q`kuu5dentkvCN`f`*^kn>4TBfN+h)IEJw&i#{7&J^c1!@=}Iw+o+=-#CxKAG=d7 zU-&;icF))TQFdtB*SnQ_`VuTJ|L@|hLv#sku~5s}cfbA?E@imbMK93zfW;Rs)m`k` zA59bt?rhN322{O zk*SzxxB0x@lDB>hS&eme+n?zz?T>HB?p_t~|5s^sK0U&?Orqa-{$J%ddKT0I)X1rvC`@M)El#Jubuz&jP&n;hv~tg>%O!vYRLXJKI5QI$ckZ$ zn`}*Z_s<)I2G4nMufFinqw#s68*21h+DANovNdA;lpAMXet0yvL4`jhFO|O;o5J4edunps?PFVSo6`#dCSGVT)ZTXY>9P0Ti8$cS*t%udCwwF@_hc2J;>+V zQ_H`U15+l-b*z5WSo(jPIPCA&!3+QXvLv*+^~ii)KP!nwQMHamu1rdw(@Orxd_S*G zQ_sRo%e-5r>l(JnFfnD;2yrfbQC|eJEJf$g1D8SDlm~)-q%5DWr7nl6X|XqYTE|w zXw3g2FFpj6K*m8Qk@d0b(f#)AhAs!>HlsHl_71r`q~Vi@mt%Xx@0_*qtswWfB^wX< zms$Hf;JN({?PoFC=vwr!k;BnCAq3>ss53U(yTzdfVWIGZw#c(9SGd^_PCRbV>a`d$ZqP9n1eQL!vV$IloiO z{^*mDD>(P3D!jWgFI@4~;Bm=y)}RWJ^|=~LX~Y8LlNB31w-aa>Qf0=GA%~bcn0({? zS#LQ-XnFFk%)u%}KlXQ?__bv9xLqA(Yh1^jsZOsByqTC7Y;^ogorQG#Ka+@%ZDY?C zS9MLe6i8dYt>$biWsOt8q?wzNK5y!B9y$3*;{W@D_?mz(k@KeZ?wGZ^Yx9hsEhFLA z56yjl$)cy-LfRtV1Dv6kX!C+xO-qzflfPVI#HNWxPOmz$=*wkhd78(>lB#1nzg*!O z+z@+CuZ};~DexNi)@$||zmsiLsqb4_x|mTQiGv@6yw8gka7 z=bBUbjhWj^YA*cza$RU})Avx8VHV?In#a`9ehD{gf7#AU@D9B>=OVo>ZTi-mb8p|A z_s@~K^tD@W1@zur@SI+sab#Fn(y( z*V}WuEmKuTlJn*B?reURKkS8UNLKwktK`XXne@r9YY%JpXH)vETT; zOlKE0&!j%%kb6j=@zcf$4v+30+w;DbYre2}<~H3#_hqa2yB3zMo`3)BALBJs-ZfQ5 zOn7ja%@3Y2th}yfkKVY z@g-L1bAz>*vMe1*jK5=jl-`!ew=G+3s zqu5}MQDWE&`cNs6$ySI9{iK>P8B>N7^X*f7HMEm*r)It6Z`f5jI91z*9@!r%+*`Ux zr86-x?+@SXm7rzZr30BgWA1G96c|+bYH5@>wNRZI`s=b!npZgjQXLV-33*2tS44b#@s`5OkBFH4HW)0(; z%~*Cf)m)v06&L#D_=La^D}_efPq<0D{6UMrfBW`Qm#ZCs|EAlACnA#Z-+52G#L$p@ zfIGXB-e@p;;mfSByPBQvAR~14YAt0CTy$~!mx5)()?d-c))u}2>7dWAwTU-yMXzVE zj&~POB+dtP7+sKTv3TIa)SSn=X=nNG@UxD)(pBb}jweK#&nG)`%S2R)k~8mnHx z1^r|3x|=#-Q=3q1LcD^m9bwx|GGD^ZwoW&@3&xA0|;*_KA|k6Ufa zVl)DOPj>_>rU7`LY~Hf^>fzU`YhWHy4>#S`N0}4#Af>frnP=3&T=u4M76Y{~lK$ne z#g%u4l@p(2;PO43Ek%wLiYV_FWiF)fHH}< z+~b@a{{D*5^Gwc%xq{I*5;AhY_cwF%sqRcjev|w1w9`W{A~#0%5R?JePb3Mmz+&01 z)n0@QY$83)J*D~ZMB}2R2T=gB5$kH*qzdScmcmeW@oSJ)fWvmam8Db(gOh!VaD*jo02{_X?@XmH;7P1bp9%32sLPVQjis&d>EW6r3YNK`SS^%M zq*#_NW_k~W=m*~SDMPiTeK0AIKTVtH1DpExIfV2htc^(fMMyuuG5@2pG>8vSN16Ry z1Cu6jIWKAw?_tG~77s1r-T&}S&;RuQ_J8{6h5#o?{H_#Zq7`Q9E&XCFeFaI6hn+K#zJ!() zZ{19#EkH~zJ7r3=fM?eUU=lCDfA)c3rmPv(W^YMgN}J(W{DL=3q8U>Dhz-qTO>i%0 z@)R>^6Vy#(A2%bKU|=ZGVJ2+^i+Al4SVSYNIFj0B`RS=bk<;@umWm^B!vr8%7Hp>?Kh#S45lVc+v374 zgUt;_pIjuRaGm*PgKJ6&yj=LS*Hu*vb5rvgU5OGn@;Yh0o3I$}FV%l7QWb*pQ0<>0 zSs`qi*R;Z3LrcT{%^p%Y)Nii-<&lvO6Fxe*dkXWxzrg&o zrz{UjZf({VGxA{6$mV(Clw8oiwtPUGCWD))GldDh&%x~IwfhMvIq`K2UY7M$O7 zaQo@nhtR+Dp@U0g8T=l<@Crv*1y9djpG;wX2Ie&DYn1M8=we^*rUtcx;EMlx+PO9; zJ7;&47S;xPnO4s9Ko#UgU0*q9%*@(t#hiv*Npmnyv%^^w=bD$ZXT&;^^Mm9r#^8OO0E&f|}Tz6Ux zmP5JLyUa}71RI?`-!iLhg#BcPl1BK-dMYxGX@%+=V=fxwziH2KI`_jk{1v?M3z%o} z{w3V9ShUjIu^xIJ|D$Ev-U8*qRlm)>>%jm0*r%o?F92_^vmk2Wr|5zWJGutkcaL1n zwyA;i)4T7p?^FYJ^NlU8hFLfFOy;PnfQN)`8Ks0hcOC^=S}1`t&esewE8*xGr4mvq z;I!voiBMh+H=DF>3w_I>$Y$6Y7soPq_fz|+%Y#x#sHFwDrkB8O?chRJixLQo>@58Q1Y zyX6qer%V!; z`!>v7S_u0tZfp}0v-%1qb*4u(78HO!!knΠp` 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 Q&i~;*!bdDzh~;AXKfk!eSO5S3 literal 0 HcmV?d00001 diff --git a/Data/2_Silver_Processed/Options_Market_Data/2026-04-19/GLD_options_2026-04-19.parquet b/Data/2_Silver_Processed/Options_Market_Data/2026-04-19/GLD_options_2026-04-19.parquet new file mode 100644 index 0000000000000000000000000000000000000000..a67adbe10c929d699901597796bebee213a634c8 GIT binary patch literal 105078 zcmeEvd010d)A+sN1`;4K1PF_W1OWj9hOh;Ma0n0<0YliLq5_J7iUtJ49T60FKm=TB zalulz22@0ATeL3JT8oHCEwyOXT5ByLDz(=B=G;J+x9|Hs-}n6feSMyD&o*byoH;Xd z=FGiBWw6S_oHDmDw~IDsm=k=0;CdMn1R)VieB8udZXSN-gt@@nT4es#!JKEVZ?13S zLpU4$*=_lkvWW?dG;-F1=UWGoeCt2}YOXnd7`1^V?h20%{dYL^pxqKb{w)@sx!Eul zmd!G=W8ru2EJOc5W62us`m-b;oc~Shzn!G>sJ?mCAu<}T6|>@TwO%M>m|}^K*h?Y~ z5sN*=Bq*;!c)})4>Cj!eY!H;F#HG`t5`rl zg)#9G8t@$1UZZV-brvvhXJXE2N2amsHW&eK~b)2ry+&;3LTKV)JVRG%y^;O z5XfP(s~8!d4dw5^D#J9=zE za3CxlIK~#y+(}wMkk5gj;5m2$b^!{~4b!b9o z*#N7Py!&L>ElgAo5q4OY)8zBNV8eX;Qy37|%iqh!Q(*M~Y{4s_B5%`kETE+gN=(t- zEZk z*!HkMth<|`8}JRWF?Na`(;O31#1y6~WK2M6OOocW>vA6obol}c_EJkQ1;HyMY67+f zc5WNM%QG2FIjx?KqurxOAU_*Wf@(8GN&Q$Vm?C(vF)KiteaR5$m91p3U=XeK zQhI@e6yyRF25Sw5SO6v1R?rkFEgpDrm_ou2xBdMg2fgfpwtXZ#dIPbT|C+m71_~~-~MB^b)tfKNq29B@gnH(Ldkc+^of||IpXi~uNQ~Hz_HotpU z!HNl=)id!f_@uo9vIM#-+Qz<9S#lm}HRiWB>q@4Ap=0025k* zK|w|+FW6x@6mPRYW^S`GEHLJw3gsomP<^gtX&AZLC9wuk8k z$BJqbS&t3IA9(@E%m!5Ts{nuOeX@SLkBHzV*(zGFW$=Or%|u)h(N*SU38)L!3$Q12 zYb!o_TH)w{13BY4KF&RXJN#vaFpVOWdjUm9Z#aJV?-}BCXbIYa0J%(jYAOmT zQVYf|3iu|{<)Dz0K^qn2aHt3$0F3ZUn2`1$&W*%XYzBmH@FNY2+$Iv+`%CZu+8VLZ zhm#1a9d1_B&Co(`$8awE6_`S|fXV^J=^*e?b9vl8Q#lwrtZ`6d%7=2%a1O)43! zN`KSk|5@Ysz9TRQusWWjE9j1u(Z={#VH;y+LFYHvg44%JY_GmTD-6rzml|QA2eu_c z7toyM&JQsHYT$_n^%HzIJO~#o=)yIUPtt|mdQbo%B9mcr_s#>L)%8%4<(de+Xbz=~ z$Ea!j!aP;O+F*xhrP8Td9}C*yRG`_(V}K&jybnGs2hV}7kn%JVBLT<+yes=iaH-S; zR4Ao5R>mU*!Esx&++8hTdxFw?moFai{v9symP65256NNXYel{!*Y=b17n z$^osvKW+j$5)3*372pB12*9)RchL3FIk`&?uw316;dj6er~vF+KET4jLAH(u!#T8L zo`7;g=O2)1e2zZj}WvO1<&+4&WUc z03)l~tp~;#ZSESPWWb|$V!O%EZhhADr|F`thhleXuzT;Qmh3p0|a#S zudpV?HMmcm`wRx+682PvN@2GoUf33gfN6BZUObFYSnGqmTdN0Kbsze`COdj!Za9ym zyv3xPe*>Fkpqc*zE;vpEVdeimWR#&fYB!gA$P%^;^b>%BY5j&m@^B%0xUgoZ0FnP1wiE!! zovK0#puzmR!AVlORoA1k#3+~x0H{=muXHUWoT4Hk<6Gbs+!Ka%pohpq_%czWpEhI#de7Q_v+(9sYh$3_nW zeaFV~1GW`>cVICTHV!Emf5uRO_S*T8w1*GcH@xcAcB(Rc-Kux#R)<+3r@c(fHIWLA zh@o61HNcScJ&JAu1;eU9k5C;n2%Zg8;O(fg4E_;Vm~k1VktZ+-DR-qM+_FeP{Vja8CfWsFGe2)=;O9{6gIMqe+*C0mneQ+m&J7TaB=u=48aPmpO z@h2NWd=&RBz=7KZtdN7miTtDN32%--<_MHQdvXfTwIg2gKK=m#Hi z^u#Uclw%~$oAhXJOU2LwKL;8dAIL!7@Qs@`G-;Euqzqj^(iQ^0b?y-8sKUlfSir9^ z#Pb4Epa3o(-Vr7~g>W3iS9PBRa349roy7+*(C?RUg@PT1l0u&pq?H24h7K*seXtnV zSO^^1m{c$aBHA3NVD}2JE4NmUdywxhmxED&ja3sDbKvTwC^iMbiXw3?VwOUvBFe## z)b7RiR2m0KU!&o|{ViTDa1lFpkUtnwo(Do*U1t-NhFn`?d9f+np;v)nh*BCd>Q1`VkN^p$`Bs9G5`Y^g6;u~J`MXK4(c2aJI)2lF<4!*sX zh_YdG=kma-<Z}2)Y8UclHVxTRkK?%VTKoCec2uqbC7TmrNi-SWo%*iqw z)wmh%30RL?$oiw0NVq!Ejx6YCHq>Rg z`fM#cV6k97jYa?l*apIr|1DPs&Hrqu5d0%*D*!z%&jRii2;a#OAkTi!9?cBl4@>-S)E7%clG&oJP#{jt-9u3Cz0>*rh z&(vm22Fy?b;{{`I4!c4hlNq}J#&JKyjQ&)14AVQ7jjuI07oA(DV}#BVX(4H^0(zJw zNy`msh+)X#yi^Dz(>-8}XGk1o7e$I)P|_#Qa6cGnj~#qkuxBMGG{ zlLNkKw22EiOdF3!r;FQpZ{NAj?mu1>Y2J3`T4jBfatr`f0W}~eOit&3!2S@dqLdr zxr|BVp$K|4k($C^eX9nRBAu>r%=gk^!5pi2-g z0QVIiKOiKyMV61fbQ6MjZ(44GI5A2IYU=&9{#{lS^ z^1lKhG;lj`4+xgb!4NJ1_>}U$PjYZ%l5T-W9OPh_4*;Obi=-Rrw+J}is@qO;7K{qM zrK^RF1&#=3=yn>!3rxlEMXHAw4st!Yw`|ghFFLk z$KvS-A6$y*&>-z`g~jOz$5BBw5Gp?buLZ!U@Yl|k$MV?%g%bn3cttvng=0^VH1~m3 z0w*On8U(HcgnZ!MEmFAS>xDbGiLnd7Okj(nKiZLX(F%x!X70lgbSIo(;6y+)HGv1V z32fO3u!F!H(6s{cBJHSeA}_v!2R)?7eoX&vuFhia2B#OC2vB@DS~Xn$6eC$GDfgMc zQA2PClxr83O-ntDQ7t<$79`;BUc~C}f$_uspyD1|=mmZRhQ6d2WYf+w_!Drd0}4Po zbg!UoIoz%Pd9MJC`k(I=f4^J9y<+%o4ekWsgQd|z0qz7y1^)w?wExd66%MHqhUv|i` z-wkpux5RHOMuT!g33eH(0*GBh7-Tez1QQ6jwAgIIv=A{5h8(;5JMlvRM<+Pihrs)% z9S^!BoB<$7Al;Z!c^;co)3hcr^fGAS>|!XQjF}4@(Q@ zi&=sng0#zc;m06)9L&e!j!PJz80QcM&W58GD&TfO3wEr)6}m)(#RCt519gm`k63s) z2#SrvaV+K~xO>u`U+GM|BYY-zxgoY`e0X0pocmAFqkKHLJ-+-5^HDoZ1U~ynjsRjp z5V!z?I{9ogieI&GilWVTfVqXe^8&S|ghWKrQPF%#hiX$IMsU-b&0)RlhXTZd= zZXQQ;_cvHE9M9nJ;;02gB1>uC27JFX=m9b~+S2PF&l&IF)j*Clkv;&0`|%Nluc$&i zB={Tv=pu_*I#B)xrnr6VFc|h?T}I-iUn2Nl<34=0(LlIRZ>?+5-DI~~V{v|Ficvx5 z`msac({KTT^3bee@TXzpseAbgk)ADzYI z=)nh;zbsQ11Nv(YjzAPi*22}7@bqseWXlQ9`eQ&h84AfdzhrLU(d#DX5q0{&)WAVrnLl4V)~eHuMn zGIm-+Rr6^;wW^qI$8Sm?Zd%KNAUh}-K&pXt@a7MYAePQOE;k69fXV9B2ZIl} zSU+qI79~E9-5<6Bx3p73aiBk)iWZ%B{69Dq{Nd2gAFeU>DrECbU0P_@7)l(`IX#RY z>?OXiKrXvr%2@!e@%_KL#u`0(?dNi^n1NTdk$yP@(mZ4FTc>vuyi z{9lF(Bk1E6rW*3p`4eyh9d+Z!aj>5782mXyK>QU$g|G>j6?xt+E&TU~`#u>i+#D|a zI8@Nx>w!cIe8JFp$WR>ekh#`um`1hJ2zSH9{B!I(T)Yccy08&Y%D^wKv0l)Fp};i9 zfj+Je$Sj<&UHH8Tyf4MtuY33Egj;OEB
yq$m+xq^P*5+X^(1~V1+;_D139?08J z+z&_ju(gPqZpPI(0861jiohR-z+Z_k*eD1g=^E9#9K7aIu$0&@1>vTHVO~Q4;Xm(y zI@^KWTlhpkw~`&$DT0;2X-Y`=$@JwI7C3IW8NObTz|kZp9^3%L@Pdvu4A@>an*}?8 zUeRal1FToVQJ8lSLwJRy095O9KuwRJy*ZurfaZ4rR%bkLWeE0N9T`xk$@vvfL3QWXiAyt*eV8GLsf=AFCEAP3}84! z1S}a_yx^e&oKHK6U^@U0*$-=`SMuOJAbIaCSRRSp?YE-115kmLKe8iFg13I zVG6Jv!&hvu9fNF)Rm-p7>$t|x;A2+MA40$m)Ut5*PF+ri2#1Q;iok954-oY*2$+sk zY&u{ZxIisKMR2!i!vUt|KNt>x=k^Hc^@HUI+lF~=N9kh2aIgMfSdI^j@R&bUm89<@ zfcDG;ERV1bFdW$1!==4}I$*vh*7Sd|9jo_aR*49(9XgDd!+_&&rh|XV7@%U|0MnU| zDZ}PtA30<`_K~_s-99o3uCUGlU^U=v)&y)dz+u?C9V3Ol4QAY;0RMZg0vQi13HUGA zo&X3#kNE)xvBkCvUM>-y+yz?xdTb5+S>#Z_2dJ$7Ij{g~_aS&nADD1;WsAaY0V3Qc zf=@zVf%yF;c(w4r2PTPMMA4T=+BNY9Uq%aoV6a(DT#jgO5FU$5ATF|2@Gx+W>wp2G zC*UVy6@V7-i=i1JZ*aWm27oc92M*<+1aKk4N+8GaWO#s+6$+vT;*2ZupM`dt) zfW)sF{za1M3$*;80lAYFV#Of{*ublNhvDM2 z_5tP%Zh_ZP@NI<)ED-uif5V##`E^}Ri!uF{7!FUm=Z_GRwLZ)WAtrdat`lRB$3KlY z7DxGCLQJvI6eh9<RxO*pT1caFAGyETMQre`$Hc&QcI8aKX19)A& z4?BbqE7%NX))9a7NZtWT;XOb`BW4(U{C9aM|3;THcR+vCN)9(+B#vi16lY9<8k|+L z3~(;O)_Ev5^YIqLKlsx1wy*hp-@ku`%h!FF>fEI@fh}E zhJ%vfq+vLhGhDR{Q9HxEk0IviNyK_yN{x3^=B#dXKVB`%k}4K_2;+i zFX+?P@CwNcTe6fkC#KY7p&eSKzR9a!`-)I_e-Bk9>6q%UG zJG=F^{4^unN7RNs1A=&opGbOaz=GmjJn-8s^|KsJI_Y-n%Lg+u)QB=`!L7$QHAZ} zM%yRXZJ$1~?K2tO?=gBHZuHBX(W?e4M!#+x{pR}Ux6eisd^?83j#Am_=i0Fhv*K6*nS5k-%%xT zOi(!{9j7!orgS(??{`e)JEcpUW~rQJ=Q?FpI?Zizn&08Hpx;TuADb%~o2MFE zkUO@pa_rKkvCBKguIwLM#CI;1IG3oL*XBBxRXT5Ia^BS8yrti{obOU8aj8kdN9|uq0;qGlk1TV*JJ&zTK>2u$+#1$am~5oS}Mn# zX&QI7W8BC6<68Nm^AgbomFQBgsI5|TrAc(PLv*cQ)XsP7khpcK+`4kzx+~poH@Wq6 zxZUY@>*c%Olephkxj)Qxe^lxIxXJxVhx^lh_dfpke#!U&)%cgW;|D9pzit};replu z{_%vVnBgg=;>G%l#H?*%!{cJ(8)EKrG0)V4@9AL{?;%*^VY$u2`nZS94G-Jr9(JY@ zdryf&yu@jd#Ce;<^|(ZIL*o8iA~yAuczSxpd-^Q$ly39%KkgZD!&CO$6PbF+J-tHX zy%dYQBDQ%&9rud9;T8MbOKIw@^7KxK_fA^mt={H6<+yjs4e#mCy;Dtn(mj1<#rw=& z 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�o4RM?pzo@*<9z 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 literal 0 HcmV?d00001 diff --git a/Data/2_Silver_Processed/Options_Market_Data/2026-04-19/IWM_options_2026-04-19.parquet b/Data/2_Silver_Processed/Options_Market_Data/2026-04-19/IWM_options_2026-04-19.parquet new file mode 100644 index 0000000000000000000000000000000000000000..34166a5ec0ec6a01ed716328c0d2e93d8fd3d1a0 GIT binary patch literal 57567 zcmeFZc~n!^`ZvAS1gxhaC&wmG{=-R#`# zJR*ro{I6>HAMTx<(bGX?i}N;Tfnb|60cj^Umlve%<*dpy%KYDG+M-;}PXCpP)Xnt; z70$zTZ%W6k*s1)V$jG@DRsXt^5!HVw{jV>n`o+fWWM(=WDwD*LuLRk+For`Twc(-K zM6EV7Op8CGjF5;doOHu*3ePeS8Xl4rL+?UK1Rt=D zzt;-_jRuSb9Fu5+j5ua!wIL|saP_u}u@Iqb80tg4O_B46Ac%zI1QBnq(EIE@R8WGk z8fFNDLF^>UnoN=}fCKhm@D>?^*qtCqP>nkh<}EUSP#9w_3_=QG!!>3Lh4TzqHt36o zGNCXCSHWE4dSYBF6c`{~6z@i{U^JMv-m#KK*05fHs~{-B&p7XS$%~r*dIcY&jQ>Lo zV}o%&TV$*wMi(I)e11?QxDIie!x;)~L^AJd!PbixMjRh(D+-F2+X`hMX&{DJ8$8}8 zBAKAsFt7JfFog}U$@*Z3M*}uMt4h&YXkcAfiM1=c{%S7@%Gx3zkqL1IPl3Ue6B)7~ zV=MUv)}euQxKCJ3(2FZHiLS1kFv$A~6ZWt6xU&b_`5T<(I;250bx@PxjJ;4MObliB z!hXy+q159BsPPpvu`((cjbf|e#Odqe>{S;MA*MT!UclP%gV;3bbA?k%T_*4%XK2 zZ*3XTd*){svo-%&LNXTc!e524Cx~+Xd0Z ze}nE2=ZiW}wzheGg)?yi!(%)2LP@(FSX- zY<6bS`wNrzdLl3+yvw+16N-WaAB0{aLIcz!Bi>h-u=k+~C)|C&PE720p|ROkP=}LM zN(N@!5FU*Bp)G{>u(z09negBR>@MK~D6y_+W5}NZW~{|brmPy4C-_S!B2L)m-G(#) z#y=V6883w-1jivt+*?mDEg6Ca6x~FGK{>EjF=cX%v=DF4d}b`kMWLV-lrV&8J`Y0o z9>9hd%(zLwopFgkFb^ltnZo1)I}P&AM}_xL^!ARx$xx3bkUhH93#8!)q#+O#v3=RG^LW|*&1BxdT1BE8yx3HnG zlXnDYCisC%Yv2()z>5Xnv(s}S8x(f1Y=vE~+2WyB$c7~NG6ac0oCF~lw02g{%Q|mk zwBCLrAQ7|w3TG=ZT& zj1s90!Y-=c5nG#ix1`M@-dhczmFq0BFt09gM~6Tb#C2Iu1vnv6>$2bjIlJE- zne?g|+R5^_F-9tclTinYKtmZsKiO)ecrY+ywf44#23R+m8E_KGNCajW@4q9Ku?7Y~ zIhf2(hUzeSR$_s)S!<>+u*HZZTwqbeN{(Z7VCr9DXU`TqNh{5d2VzKq=JrqWlUk*VJvp~$jL71wwPPgUp3Ok7`#sJHO z$r?y}n@|!I(qLnMP*>Qw$%ggTFj24; z%-(vhFP=F8Bxrs3A9^5C#Xj$2V~bZxf)X;JWA^f(ENcm_mk{^Tta^>P>ga62Gp-V5 zwv$PWmbFC5pRb^`3Zl-sE8JcLD|Nc>AgE^c`_Ir=W|?ld7xaUP369|oqBCaM2qrUI zm04{SfdF<2!}Sz&RK_?dp$3r*I!SZ17a07!5YE_LQ2qnR5T=TF$SQCW%Dmr#488L~ zHolZ1G3kv?%wl70;-5Nd(pb~UBpiVQ_AFvCV+ylAm;ky@W|o926Dw=TW*yibD@mAy zh!NxAstIS0Og&liZR0&$A(Y-e&-)^LzROaN=Tu_+C6c<|dyJ#;{*piRu(3s4h2dM- zhrP;>5lC%}6t;Wh+aq*N=56*aD4;8$to?@&;pABL#PY#{+R_{cE>D;U9Gas zpZa_2-pGbt&!gcV+rH@Yr|S!wLN^1W%4FO7mgiTiY>l~~>V1X9xR3}Zg9F@LMq=g> zh@QrnKpWZ{f2PAhVs=F% zisgnPMkX4<1@W`&MVAoT4YTYe%w+Ivy(SES-NxURhzzWR4Lp7VtGO!Zz2bRTZ%f2R z>jPS%#M)Aa8l*L7%kEfTpWbW!aSRX-Xp0hSTgT@u{^JUPp_?OXiJCvPgy2E_J&Be2 zW@Z_9KwG(cZ(Cfg?{)2Ky%L>ZA7=incDwCyP)SyWo!}_0BrG12_4@5a24oIlSz5d8 z@1wNbA-;)hUjro$3m0tvn6*cC&yuz*C3VS^;Ko>D>omsc+C=1d@D-%BGQWJ7xR7P6 zEaVu#Jp8Aa*(dITj0h@B-t$PpyP%6$gP;yFw^^)a$)sU}t<~QUt!qTE=cR}hy>~3? zGP6Um0XBe$Y>l+PYd)<;Axqq#byNr@Z~qa+cp#zW0L47uxsQ#^O)+W2OMGzPgm8=7H+nw123NNjKEYqfm zoPv|Hs9jpB2n)N>@iPS5#IU*(ooQ`r5S^m@k^H7*3K#H=-0}lB! z-WB7|9C@u!B7<4M^l%q6`&SURW_7*u0bFahP{L-i_&OPk5Z6Ywwqdg%?%>eBK*zt= zu|&ukvk(edR%Bq;yC}pJb~KOR0rq_tsnW33Ht{USU@h1cvhWo2mON!wEV)?r@rM$t z54^}eSUJl+tSznChm|p?2C<4k2?^)eRB*{baIbeNKnDDLDpe;JSf3$H4Q11U z^`51{m)T60=P2{wHxEKM#;vF~4>k~)D9Gv{#}=}H4AVB+byVU6A%B8(8d3{P1Vh4+B4t&%;RaShR=kOR#W)BSS$900JYRhE_rGg*GrW z)XL(s(1|T;aAlxH%;YE%0Ue^G5Gy%M+Sa??DSmG+uwm6MIM^aE%;C_6typqy+w=k) zJM0CPgj#5|;|x3jDw|C5=NooOgtGj8R(Q(gFI*^F(j;Vpdt~l#3})DXK)^F*T^1Z5 zCgEh{gwS+82I~C;O`#lQo_|_18V^xHlcDlC)KQ6)&uYTPUnpkxN`&)xB~l}d#|mUv zK?H_@1SK2>IaUl*!~lQ_Ud@WLz7h1|B~3&c1td`m46{P+wo?A@0IN$c<`@wg4Hzoa z+ED(y?2kC46~&zA_|VqwIp*r{KHBZmZ;Gb4GrSOI15nrOp=TG|Z9Jw+pouvmFcgxr(-SJ6-c^rx^`%J$u^i zd2Wt$K0nV#-od4&&T(1WFwbAtAM`ArOk6aA2%$B@9F4M#?4dOB~%#Xm!%b{^L%87 zD~!6!&XpDOeEky^rdck#R5j1@k376^Sn1`yHC(yMn6N0T>auHXYI#7;;YB(1m)+_r z%7Y3L7LRGWEURxW51w&&@z|cr{TjIW+W84f#>ub9n^Wh9u06b@KzGHxwPJqwj)bL? zELRk5&GREaJG^vq>6QNN+yY%w!m>B2u6T5%E{HjQc-f5lD+9VK7Q}WYET7eO#j~e* zLHy&x%irs{;zdLiyq%$Pj{K^UGgTO5jg|9tSG}bRE0X*TD;8O<`p8dI7$X~3EGxY_ zP$^oNYBa1|S#{M{Wm=e))3|bN{Z&8h!iDJthE?m^uKMdvEF3nYan+`ttAlvaqKx^5 z)m!A(RH>##S!)|t@6cUSXDnQly~D6(m*rZ3<;0?#&l=b4Exi_)Ct7T2GOYci>RM2t zY4MozjcY%vzosc!xHz}du4Fy>R(EorxblZMz=- ze$R>J?>#>9;jcZ{^+a4*W|vfB&W}90 z*=c51qEft~!kDzhrMfFgm9}D0&e1KhgI&qmMJtvRByCk(>@w<3u2?qX=vL1sT`9bH zW##;&Z9eWdQd84bu3UR`n}75TQ^ul|t9K-A4;XzT&2n<(+Ru(|51x5rXr6dgRa4TA z(CQoMg=wqSpFg@I^56|~$)Z&oI+H$%xp-q(>B&`_9v}TE{>hEuW#ZK}cFDB{_nR3N zX{)!$j@25YZ)R35TD{Fbd1u<_n^{#SSMP{CwsY9bn_c-@kmgcmzpR7H$yCC}3 z=+;GR59~NQ;e)ie1J(FkNdZ}H!uD&UG?;F*(a=X&j9Xfw(?~H@DUhZDB z?u*Xkzs$OLYi!TSbzeO`_Lujb+*l!M&f|twHOiXm=11SomoBb4>Tle) zX!PxI@~^9!BAfOtn|XV@(xJN9X#8Yl_3a6&q17jInm$>3@b*OQ;_6cc#{KIr-Y(F6 zUH#3Brv00q+F|cwmeBox;?i>(8uhI(77I z^y%K2cV5eL_@J%H_}M4bcU~_X`oVYSn?C#O;GN=<#UEViG=6^Q;+@H*Uw`n!S z=cjye+5N}T=AoPJuRZ=nXY`LVTNiJ7xFhAuo1=f6)%NwK$DbYl^6tzZ-)?vKu%{{I ztNYbIzSA}I!>8wufA#p_kMH*HUi{%Nohg5Ndhy5idcOYf*T={I_Un@$-zSbW#6Gpb zM$uiyrPtW>Yi_WM>7FfJQbPx&9u|-3o+Ce1V;9wY*lAYxT&3e?E+w_mWqtQNRr+S} zsOCo5q3&|+lFg2@+cgP}vpiMwd2?R69JAyQlCBQpd`?&4k z(%qg4tZ(nKCqy9N8eZoG_8iG87ICCO!cj6=Bqd4-N^q3nsKL?BDyB%ZxaD!=;V8pV zgQEdQJF6}c@kELTC5{&jGjN}WqXb78j!GOgIO=dT;Aq9sj-#6qm?~jSlsL3FcpMox z@^F;kV0Eo%R`P}@gO(MD(4hz{*Pw`>1eV)zqkRoG4QPl5LNqm2Vm$8iaFpSw!O@O` zXqtbo`(rte@&;#4(m?7pO0NTZHsOcu#|#V}SRrTi=CnuiXIM2)1imuX4c zpO|hyJ!?ZW5WX`<-V_yD2U`dFWEx0jSPAs>pmReQu%l@0XS3@hZ7f#k_Hc3w55A z6%!0QEx}bw3Xa?;jjyRJObVzTR=axAu}KHV)>XZ3{P^PJdJq2dE01ix`jF_9)M5Ty z>57aXx#YO5%ZhZB+t zA!d8_v9%5btG_KN`+mg*ho1Lr+RLOtawkKQVP9UjN1xQB(9PLF{nCwFcL~cYgj+jG zd7qV{?c)ySg|3%;#HjdW-B=y))sl#^;lx8aM|dQmB2^_@GXIKTVXFV?Mc3w>en-AE z1w$!}-*)a}JI>L`!T7w+t~xvTrM>-5S!^Hv=NNXdChHlyQ^(;&3)=3z!*BkmR|Kx% z0ULMKetUUR;g{o9jJ~t>>$HG%nhOpEy9KiZ|NJ*5?9Q@5w=i~fA?_{n6K_M1jLOEW z*4k;iw&X1S*!!)EZ+w~8q^RlF{p=7M`$L(dz4zr0m>~ay3F~OBGTZ!n_sx$MB^P}9 z{!77uJ99tF9bC1~u1omN-}W+ne91)7;}6l#y}^XmIWKEp?uHlYbY6H!5%5y*c!{+8 z8Ep`FcWEH=qfwhJT17fjVE7=&?($LSYS{4yg7Tz+Stq6$w%6>kj(Y!hnssabQ+EIB z_gT#+LtSEtZ7TQ_?3!}cw!HcU%z4Gxm|y)SA5m+=AkdI&HCRH>kBX0Rj(NHm$rYG(kr8wf&MV3Lz(nW z-$lZ$ho{9V`#YQ7WL`Eb-MGJFTC7(_+C-gF=J+oSoGOg;7zYi+B@bLFT9f5ADsl3e zM|0d?D;wMJQ(s~~FYj;(|2wr_9c$P3vAR2^kSZIu`GRye*WTS1f`8kHf*mJL_!iGj zq3jgKPT}rOT!cnDK<9|FF4%*imcdRWIGdm#lxGLCIQ*TzF6AmZ1>vGDjVT^8@p|`_V)$c27w5i)(G4tykIng5Q%^Y5DIN@*y5l# z9B{bcaF=kgO6vd#8T9=6C%)v|i>eoKkPsFJ|6KZilTS>_-}U*!r2O!@t?l;?kG5B9 z`Ck?S@VO=Hev=dg^4%~0H1DhXYW}a;A03xPtNBcWz4`dDL45z{&zE~S4&plp zzk24aEPwv(0mnzF{^`pbUEf+?=I6^hI}G~1?X`jYKLi)NLO$`~cl693x3I^XpZa6u z_KtXOen@BM_2_aX?{G*n(s!K~;?mOZ&JFbBBi7t`rM%9A|9X!3T0~rb{*{tFlR8hh z^N(JZbg#{k^NWTSPfxibPDjdDgh5x7E&LWY_neY0c zS~)Gb5ASklbl|sR9r?I5?vatDBL3Bqi~PD3cKphr)kAxB+45ibkIor=l(6?hL;Eg7-hHHht0d%3kFr}|WgaJ-@zGWN+-XPh9=e~=?`(eTD|!8Z{z6;)gQvqU z=^KChaM;Yo8~P=t))lk%-q%O1%6O;#?H+xzposhFD>2_Edit=n?fv&)u|L;awNP>pEZh#5^K|-_)`H?99hn zzNl@y>`bhd-|*2}Q-1l|VE)xjgFeZ&8_b8Sx$tmzdNAKKCu-Kq7lZf}Gp~Q~saFs` z=+zWM!R`Ql{?Jk4DetTJeg6I2TC4o{RVPngTv6%GpP4iBubq_RpI*wo!PU6(eH=D? zbUQknx7qslO4azmeBcK@@=Mo}c|}f|;~Ud?Ub`m!Zw(4PAMhS6*q9c_e|vLTljO3J zUpw>Jpk;Fv{QCpGZzPF*dGng7m)F@p&|kjPTJSjaSG{pntxDlw!w;zM8gTF)LuG z?)mZjD+{s*CewKS=$ze2Q$LF1m(R>yaNS=9iy5F!^9mUw%{1m?dpmKYpkGt$44~D*izB+xI3;4dU|-3$xC1T7F`i z`Qs;TA^fBt*U$kw!}t=rA718XM)1=I_SVr#xt6+j9Eg4P`=e8(*8qCL#>%Nrl5a+k;Rd$HTrH8`Hn zs`o6vbvl+8U)Wj_cQS^b8i%{OXg(}VV55xVx0SHxNRgJ?8^H^lq$OX*@J9qGv@se> zO&ez}NyoRG!k?p#FTa&p?|BTZj9ge)xJc#L7{=!cW^)@td10YrcL?t)SV+%lMV9oq zVE!?fXq>L;eeI$^{%xT*Rr7-5TtR_9mcHeFA{|{lP*Ov@C3(b4(oXyH0==vFLO=d? zrl5nks)@8i%Bw-2I`RS;msw9G_(m$x(x3D~FUQ;;^K{J{tvXH_w<7KT<&rr=^{F{)Ukx; zQw3A$ah+PnJ&5Opd7OJZ4|1_;Y*-lrWMO)=ri6rG^&hF0({mB(IyyN*Ev0<|(ZHa> zia!jax~Ns>(WiqYN}>^EkaSHced>pnm;B5sGEl=)AKtGIC7$Y3s#9tzh(c6BAIY(l z@2jaJE}BB(Bu1ej$=}2<(DJ)J8W2s55Az8nymlagiU81YdPK4f6rclBpEs(Ni80EpZp6 zQcsygMO;L6bh%U_C-#zhq|-|Blew1MG?$XE%%${*-qcM_0SdWlt{~B(QgT`&r`3at zRU}ZYqq$hwHZ(%opZ%az-Sl!K1+UaHflNbqQ@q z1EarXiAw0_nRvBHZNdH%Q7QdqD8Q0r1JrWGhygE8zz95&!2LlU%IS(*nnCoMTA~;6 z)X#uXBml9|iyCMv51eG!)G`t;$ty0T5%Fjsj8&J>O);W6VxO5uqCwin1V4Azh?_qz!7YbR0Hg zF66|1{PqfZ%16{p`!MOg<}Jw}UNBWx4-Bu|9SpjG>ID}_wXa%BbEPIZt#_30gu~Nb zTZxVkQ6<;-M1KsbdALVQyY0hzAdV!w@#ZI$jRa!(qOJ5 zN1?W35;@nZFM#Kq*NfW8B}pM|*YE5mSMaV*ytr$rmfXQ&=+V+b`m=s}Ax(L=*+>sEvn);y_Lthd2|85HbYL z?>q!P7E>gpU+PRsI!7n!qJcV775#e@h8<-pq#lv#3VJ01Kwp@th6tC!t-_%05Ve#X z-&aS1L8Ds(w(Pa$8WM!}91pLvxJ+lUmBIpqkIi{Wq`cA_$xV!KdEXAyX3`On2Fu1EjashgvZy3O6>Hq5+z zPc!)jvTBC^9EKiGKtC5Hs;L>|nz_q*TrVyqx1im-#Tn!tdOSeuN5y62Deix}Qv&@V z3fQ3=LLI4u!R$>$yh@+|q_)1t9ENyz2sFLjU`sFsJ1o>u4JmcudR>vqWm?F6Nh*18r-$6%Q%N3}>&YWj zKY`SLF_&Oss@hjZY|N>|PTfYTJ-Yz^LZw^98dRZOA9$=Y9Adc(5L;IbN8A>s63>10 zWB?j?ij;KmE3i2Kaq3bU^zy=1dNmi4+4eFbg8e9rrO1M)^1~=~4c#>YroAC&p@rTY zj&75O!M3x_>Ta5BMy(-B(oR?a+>(u66Eo3&Qa0?_JOa`#7z))_86iHm5wOPBhoi~D z3=okIh35O3Vc=<)ww|_>(3`0s>z4|qQ{hu~DNw=+K*@>ddo~$%pP2vxmy_Vb%Mwf# zq_xFD&kcdjV)QWRK?ZbQWe}B+^5S~BHKC}4*6^Zs`mSDGMSqCisiOJuhT*2XC0}jaOHDnk&fwFkaw}f%U`NbKT6C zd|?O9OD#kS7Cj|+;2@0>AzbKLaUuD+IF+1JlsJ$}#g*hrv4vb#C`F`OAr+CwEn0BY zKz=H2B|R;22(A#yuEPvi2{5UW2u9MY-DK;wX9$k#nqlt)}!%IMx06Cp7Q zoio)MU^43sYQ*IzbQm71&Y-oC=x{0qlrBcYMx&wY)oLjAX%xI@`Vh!EJyufXT#Ce} z9ZY37lU#|Gei{jpFABzZH${kg=!P(uk84;_DlOH*h6)vhjtEX#;^~4H=~7>1kh_@&}3v$t4AGptqE;lvzqla|1w_cwi(dMG;SL^~WGid1g2O!qbt5 z@WSIQ8RRmqR}l)XDpDO`Ld_23MoS(J77>-?E{-P(xrjWo>XwJ1T8S+JI5m~hMj=dr zLnz1;W0G0!h!IpffU$aKXraSJBF$_g-llePS5rnWg{#X*wnEjHHpb!un3NiZm^nqM zGnwU?>O{1r3feswvOE;2;Ym15Elkr5DIt7?VldA_5qyF}Bo;ClL)Mrrm_NFRK_Pb` zjZ=A|29tx-HRLtV21g`ag!b{3WFVgLw9y;nJT+a&yDEuzMJs~1mOO>AbSUa1qzj4D zZJAO^J?|_nBi)*MdS5T=awbnO0sX?p3+p5142&7sWs#Dm2;n@BIJ{mAftNUF>V5n0 z1=c?|hC+0@xm|J#`q%FVbBp%8yAwW1IY#NA_`!?NPOgen`5 z(d0Dw1uTiAhR?{dBs;x6P z1lM&piUW7oy*Sm@%@GIJw;LP+1%0G0f#m%Ffk^1{FjWvxTQf(jX^_r!3~SApD~W2a zoa;2CyLE0KJ#n5VO_XNNbC!F|PI5^LI-JyZSgat~H7h+K*)1n`cDYzn-(Zjh?5-&n z2k)*sCJwBvF*pS6ZooSa)HON;)Psd!Mn0gveU5|XKr3oX_9gcl`;NdUAGajI=w7g4 zwox%@_hDoI$zKRkJl;5!kTPJ#rP(Q-vu+teodMuGzc7cT2O+lDe8X4#D+xHV*ICciT8DE$K*= zy%%d^@?Dv3F!`;`on!J}|9Yco(5826(o|cP7}C@`Hq1#2*tNScEpYD_Hba9xIb|5C z`Rvl1p}~i4Hx3>A)h{;b+D6C3^pGZxx#^)NgN~$!eG_YI4nLEgXpUG`*WL(*>gK42 zbAh{C{btZPV!!dR5G%xhaf>xfDjIM4aJj7}Z?;gDYuSG+;=NyHn9{2dt+~M(0Zyy=1|MeH!4BkeP zl#yUJU|xnntT~#I=oCjYlU&S6naQ%3=Vcld#YZz!Jl~~RsXj}SvP{#ern#i4cOGyV zsyX=3B|YRs_^Pn*ZzuFszO)-`Ste`-Z_G9VcUy-61If)>am;-F^^S^xx@+@VA}-`@ zJ!>9wX|+MTv_ac4EOzSnv!b|-?PrJc!beLo5}hMPWEuxV2(vUBSFO$(8uIPx5yKPQ z)?~+|CyyMN^K$vfoH516Mvi)a?7QW}lD{xQHhN<9blI4qouA5HDn9r~mOJ%CM8B7( zU!2}=?93bA9v=J7qiYvlxlUwNd2?T00VU@hv2oDtYp`*!)G`~YYe<&8mp4M9jQW0c zi}~Dyvs`|;`)6nK|B?EpaNKOVvT9swP=Rp#(&)$X2`iHQmrYoenNvM+UH;nYf)A#i zuYUEz*|PP8TUX?)FZyWn+Vzt@-gkceYkxT``{4Ecr*l3i{=8%D2b2GL@B9Z-{wCRoy{Dzar%Y)bsJ~=W9o&CZ~b$2zfGlAR`eS+ zvvcEuv9oUOIX?F7yI)=xymRkFl-IkDE-twEZqMPQ(eFK-eZ(B8D?TiA2x0~txSLtW z?%q4t^KRxO2Wo6&!F8=RXacj%Wp+RM^?XTWS>e=GvZy;hHNU65{gFBU7gJx`s7nv8 zzoOKu*UB>@;vRU7Cw8j#GP-Ppa-yAQMcy2--Dk?Vl9(RlJm)l>clnl)g&pOk`Bj_e z_kW{p^8&9q@+}nuS6a3#9JHls%c8(f+O{kn+}M-9B)(ZUaB0MMr305mf0DX&*^v8f zS4PGE%1x*=IGHA_FnTVWureZG=7p8%kvFcc$}p<0tVzpJ%T#??C*kdZQ z$BZu!WpF7^^ny{+l#a*xTww_Jqh2i(aaZ+O!fM*4_mgrZEqY-yH*2-tJ4GNselt%m z9K_Xc(hF<2l+${@RId7>-jCyM-P8N&xVWc!;VX1`q@-*Soudvq?!^Erzxa1VGv0ukQ*&SFoarUOl83uDGlPik8^S2K&(_Y zsgQnNQX`>Sc(SfCdLZ)kr>2Egqn6N zQh*iw#+J1|>62@?Q{8&MZu+QQqa*vk#x_j`&@L_c9QOmzW=^W9hT8JDvyT-a0YrL2 zbZ8rej4KiezkLK=8IEMcF%0=vD022bA$W4ug1OFM$a!lJ@{<6ppPs5fq|v`fPV;@y zbRcBljr^$IQ<^GJ;SK8>QxsTzkbW8!RykEHjpm3w=*+SaRng^-HA-?r!;!tH zK47lrzR)wZ9?=&m$rTe`8&#yEuHi-X)IAj3R%=aV^vhtZM*Jb2xc-s`D&)%v-P*0G zAO}%=8ibF$4Dlu9m`lh=bU8Kxr}8YAXD0M8C}SbkQ)a*fF+-8iZA#UY5hG-;NCLej zi6V|TN;ta2AgLh+WO&OGke;d%AQ4_&NJDrK_SA#_cpPy!V%4<_TF}x=1}JQf#sXr2 z4&sSKa&{#GY3O873ud|ac&jB~J-R;x$<-k(QZKCupieMlo2~)f+5qsW3M#e`6=c3T zK$1GO3Zvwy*bj0_83@w(KFmtIA@!|ZNY=ypfdh9y7p}-tT_CIiXC#t)rC7S1;>=}O zlToOIfP<&{atQv>9*%ym-~K8sIKKy*qs(%00vu#En=8nvr9I?3i3%9c?0-6XmS52y zlXH#N^hF%G4q)iEBo%Oh6sdH(a~ZP53MAHTgrdeC9Q47}0Y=tWqa`w!qkAz=JfNmq zUM8&ly&*+0GYvKTWHJL2UyH=4#bVNtZ_I6Udlu4mQ>L1y(hQ908?(BS4jhWd9c-C7 zz=*cWBuJ(vQKV%n0=m}#nU6C-9D@xo!aAlQzXWv~*}t@lV$*F6y`@L{*Ywc#@pwd< zt#Mdq?2VOhrvdPot4IvgwICV_vf_1rk2J|?dZeTQo7hWX_w^KMxvHg*)`dwj_CT>A zre<>^!bYtma z1$fML^eg>NEos=p5T0&wtfhe*$E%MjN;z^;fvpB-c4pA9voQ8^pmX7l5-X)VjP zE+ej7Rn$YHl2m$A?=(fk&2qh4T#8*}fG)5SdDJ2&KY_Dnk~(nELu}M#w1aJYaDq`H}`ESA&Jnb1+jP$=(ks!Yn!kwz0h;6&(gcp_?A4KT71 z26Y9!o&W)iN&tu70SqD;d)lcpj|kYvLf77Sbsaq&XCkyA)}*6XhM1JJuvcAh9;`;` z=x9?H?Tm&C42*(lkSO$85GmqG?YTO-{OVvVHXjYf zo%>*@*AOg{l4?bdm_7}_>PanW1}q0`%^&(Y?hERf1B<%pEpM3MawW{VKkT-|9TJtH zbw9i~#cg2&_3W!@CC-5KoZt-(kRXB1XLXw`7br;Yr>TuOdG zT?ek$TXf`3u@++2k_W}9iiz}71d8Ud1Hq_Gsv7{a`sf+Y6 zmCz0;_;8W*tN=!2)*_@Ti2^14)p^u3ey5b~8VBDHk5hMZujTVDT@F z6hvsrf@t$bsw>#WK-!*-m{pUF=#rleYYfPS?fzo~+;Q^=AQZSEK4^70i}_F%aGFliWscR`Efr<(djnTs5gAs8HG~o6^AmTwu zfGCx)Jf~3wQyC;t0f?@pula&)*MX8+;sY0+#ZZL~uVTPK=+A%`7G~W*XKP=Hg*fA# z5>$xc5JGrJm;h$+D_rO2JwRa26{JmTuW1l-fyZ2#2efc^im3fw&aXt9LeWRNPmC5RZAv&4ftN4-^K#Mm)VB zu}w-)=;NbSl2I7c1z(NSlXJkNp{1T`m{*Xf4x%V?pl?P(p~Ikrs5HD`xT&7jWr6$~ znGjn-aVqss5>=61EmdT&xtrcIsC(!EgQ$T-D|lzxfY?fn2}{eMl}fst#}qSy7xj=& z%{}y1yr_a+h(pn>Sa|fC3L+)X6cvt;QXN&{+X&^^SDn!c4mgMo-akF6$U;{{su5lz zV0@>;(Ih+EoI%1M-?50eBy?dNprBe2U9E+B25TCMRkTwB6X~PD$OA<>QtPRb5*4i0 zeGoLY-w)=Q>5KRYAVdiq58`7(1-KzouEyYJk1jArGtZq~s2E8Fh(v1&94YWH7BtDMN$Q6YSq>rM| ziELGraMUBrR7=xBHC6bAz?0FQwNf(J)JF4zH5HzvP9zYc2?VXD>JvzL)RK1Kmn!Nx z5YAHOqvmKIZ$t8@8)6|4ihEx!W+|b@sMpa@>sjoxtcUiF&>S=U!TkRV3N2tg8&Db>l_x-)3j6pqr zF112Eo5kIx7f_Gn{~^?41$bftiF1%ZL;~G}-LXM+4S*c5fOHIL*4j!U+VF$d=&m~3 zK5;$Ww$cPHggPh7r&1S_Y9F9$-974>nHnN=8)=y;1T5OWONjel&?*DQ#+CdKOqI-2^I9Q8i# zG3{Lb@d2e*Hy`)Z>=q_~gxEEZc!4#nZ5bM3$vb@9?cJVx_R87KN(S9*neV+oxw2Ut zh~KZx?=IFHC`*>T^Kdh;obb!d11pn!PWZ0Q9(Tg8YQmNi{u`!UJ~60fp3h0uw$C`Yu#J83=C6N~k_e-L_FMS}l62=?ae;%PrCN^(Ld{X(1#a@!lemf*9ol&oZq%qgJZm7|-1khX@0tl`OsehM&ZGr>dTxo#Cy?W=+q;FEE4<#T2c+}< zQQx!a;oB<>=E(2oopp%*blcfsv5&3-pxNWPIwLVZF&h9)d3IKs=2-TKVR6Ed*;(d) z!)C_5E6lNsTbi6Rx?p2@&X`Gij^(^G`O9nKe}iT|?f1&NPagHln=Oiz19F)mAE)jG z7yYi22ET}IV0)I_&0PBXr(9QswZyKf8W$Wi?(8_-mkpNj%SPXmD`U;J)x%eqX2=~^ zWg3$wuH8KCqN!@)j*A5wrgvU^wWi$vyTWa23cf3<-M-^H28}3Q+jH=-;`MzeBKsGA zdT~bo$p>$I)_=;EPagL#IV_6un0n0pEsr-&s6Y33vnBc`k7=h(Q3IxbJNm5wGomJZ z^!FsyFw14HD`z`BS-+kmZ{zKDG9qT@PZ&}EL1+sVY zP6KYLYiJZJ0?AO^Bpfgu>;^&;P>ZpR?%rH6H0+q~h%iW69u^GbY24She=>|esVq1) z>`eEC58sbZe*B6XfEZUd8>cGCY@wo5>BIR0wQ`K?YM(1Ls`7Q)&8hk2w?~(H&v&0x z@4aBaEctoye@A2FTbG2Lv20x$b-Bt4#B5!zw{hQAndmZl+lrKvb0(}z3qCPn)v)*{ zzHj#eF*!xo)>s}NXcSLO>)sm(XZ0FWAAUA$ar^2KYc)3>R;@kLeZVi`*QpmLPWa95 z^0jpdJ841HIB`Ww)w&f$mg=hNh0WE4J9h4fdTmyu;|Im_J3C+CFz(#)89yw1b=*3wQSz>gAm&h@{Z;D5Dy4AYulyJ%+z0e7^bl|%y4jqmt z{5~VH7i^go!DI6e-4PB@B@BCI0KC+Oic}fnL!N^>+Fsx$e=txW{H`a6&k_{*o(|~U zBh<$q$wH^UsFw5e;RR!*uE9!xG10!qy?Y^@MmaX2sN8tLZ>o|w+4BhlyF55C|5z}H zJ|Yq+?a?F8>t=f?uCYxu|IiC9H03lVrEM7FJd9_xUhtt~CPQ6b;VxkNO&h1Wq!%p5 zZj}4zPI(dg=2uVS@ja0kuxUV#sdY{~($5{Snhb6Tf7`ns{Wu21qH*XjweH3EvGndj za)Fz0wEQ#-UbRaT8$6ytYy+K%+meF)yOxfLjm@Z%Q)ud8i z-urKyDt7?p*i-HpRzKd=Zw0pDSg;Kzk8b6F9~7|tMm_q3KGK4M`wX;jywbb1=pf#` z6D{{@3dsQsYp@qbP8Vp=N;nvwr!>gpIs)dhrvH zxA()+M5d`DeUTr;If93B+aiw3?9or;xaBwX$#U-2KE0`pd~PlzUuZJO5%fHzSJ%?( zdcO;_AqE*)G*V#pUGH23GSo20ZgnUOHO0))Q~fpV_mv1Dn5H_!|N9=}gOwly&UX-X%LvH~8u{JS16+z_wM<5tA+CLM`2HPG525W%Gw zSk4d85S24qF>YX@?PB|L>LS7CjtCRbns8ACeK#EH*out=R2T;Gj-epXFGLOeU@%6C zMFW5t4N_?}ih}W}mFD^(wHk;q`v7SK97zW%MOY_$A+_=-BG|HJuEc^tnpp^uTfZ60 zk=gTv;;mrFX|%qfw|n0NNJ~jr-f_R$0b(-g3*$1ikrEk`mF6Cq}kj| z&Oj(_=>G%WcDbmF+k2fMV_l{~n)@U20k8Wu@y){Uk%8d%(ujy#XU`a+Xz`hum{U@W-+mx}6q}zyc^D3u1qq zp~fz@;Sg~*+l}*98hqqw3f2s_lChLXM)|WONi9jjuo9Dix7sD~!e;uw0CJ1*b)P;; z!20g*2@7?!G(nOF^sJ5+^6)NTGfLVM5B=50qghp=}qNNx0GERi;R2J;k!MEsQ3wBef$PFB~i{-!sEaYBs2B^x(Lq#iI zQ(Q@Z(O-ir{e~9_;On+f#4RBpT;hblAys1qq+VD?T_a%NKaYgcXN*wi(Wor&lnyzq zN`t)ZQqgQ{vZf4*g)bF!(EAI_onS{#T-bzPkev&(zF&RFVej$MD_# z110Um2Sxcl<~HJ0ggE8}j~D=<$RT+*81SvWq6%!6sS)kd(&PGx_#V)*rzEq%vquap zOi8}CLNK)o3x4R>Wv+p!RlqcrKu7upNtIZi6*LNYdXt-*mM5e~}EjhX@XWJi@P|%_AYB}vc9ya#& zIEe64K1BHQD;h0+#Ou=PKo5_G4CYv%w%4;ng)})w#1Wwcc=bqiDJjRml8co91~}T3 zjTPO3YzQFR)P-Qe(dH3|O%>RuL(*C-)GiZ-y<)hjmO7bDt@J<|2!$)84)k*qcphMa zuU4hvE{rNBvSDul>doT{O*zii2#|&WL2V<36}DeK|=jrR|BBbixvOwOmmu zq9q1V9hp^JMQnIN*jv2({gRMPI5hkX%nguzg6W`MeqUQiY1LG2Tz*x>?8 z+6vsn8_HHfxUL?OLaPepqCz6}EO8>Pq8ggwf=wt=Q8$@&xkzso@QprQttgG#cm zhWuEpbNr{i{Falm6S=adom_+Kb-^KT7uR4bTpnyeM;<7uM1+B@k0naa3`aobvN{nV znl}9Ys|P@OH?cFx0o0mww4D7COj0DJjeSt%3`6P*193x$Th4a8_SbNpIw#@*hsIi)Cdq|1{a0@ox_8ChSf|+oX_6Y2XkvNyEH=9<36( zM2AOl6lx8{DzZa?T_oKR*y7TosC1+Q!!c<0F!V18MRe4v3Edj3Q4$U05vW$tumJeU zaTVsp*9O778hsH_XAP88VB&=TFnp~)MCp#HVtGGIZXHg%Oe)Q+BJGMcfYvQ?azz0Z zcfuKO7IWklQk?q`-eVwqKfyVk;4MD`x`E%yfm-wAH>ll;Tq9fqNXO zMLSiPSqJ*5TM;(P`qE7UCDMKPHh@Xb8NIgRKOd1_*uKcyfTH@+J9?SQ3A@P%NA78A z$ODY!CruT3s!%zQ-xNI(Y}vv83Iyvmh!0^xG!bf4#BQmIh$LEH2|k#z?fX^~=NDJE z`~QyOSU<=f`cD++&!tur=PU8UTEYJ(Fit#!ajXzY9l!|Ov7H&%$ujtVxi=?8xniEn zQ0?g??hku&7~*0jB?}^>0Jf=2>*bkWAHr3v9X4gJ@nU$vIKpi7srNT}O&|$k>+(va{ z&rXgN)!{-p?{fJY6$)&~;oO3Le`P=}@Qcxwj^qD3z)tP9EhhtZAGmxnu4*1qWK$!oK8~8=$BZSx(R9V?JlnZBxbP>NA!`T+q!mM}C*F?{{$L$Wh(Z zpv+~_*K1ZSi@8;IcG-|08~QGfeb72$dE8I!tA-Eyf4Divf8)HYw17QFvxa_G|8S)Y z+IrtASnF1hcP5;MI4vCuWQ!Z^qik&*28ZFcs^iQkU2Ox*r$PVV$;-;T;F_d9Qyux8@< z(S_T$pC9x3r`K|VrW|%#m;2`Fk?UT5t7FZ&v2Wk|cHJxQ3)l{vg?Wzor*acVJXd#I z#KRPu73E%wT_eGYyR0R@;`CL+xFy-P=3$F8kCzM`5`Dxn{_XH9ZR4|fS@ncOvvKsq zEX&&C6aPEVvv$m+U3;3wytemCyO&=7q{aAB@n_%9e`)feJ54W5`RbWnZb_pgC3kAm zfCag4oYWl8ee;`p5B>=BTrB#0z+2zX{AoaG$HFMjnV+wI)zibY;a|IOtU%94?%0KM zz2)7WYd<-f&jy{bmjTW*F!y3UW_7d|mJFb$(G5mX4$CNmW#mp3dI6+79v<2hcfZ&Bv5!7q@cwUt9!r^xQ)=Gqr0L^pCffT{DGS8G&3SX3 znts9toI@8j&FhHji5z{1rETN$59SZqGO1 z1lL?y7W=sC%5vULeYG-4Cfc-O$^dM@vEn`o-4oyF=eW;3cxS>sxB7j7RqGJD1LurZH6zvh|y^r2Tq!gTkVjIrrHLd?f`u{ z*NZ>7xZ{HA# zy2tzM(D3gc+N}L0#15-Gf5Wk zs&xYnK%a(uw^RA)ZdH!fpJcUbA9mZE4fpODJ;;;ao%>4mu_jMGbV|N3!Q{#N4*rb( zv(t;8yv`+R@P`BOL!)wy&lGPyZ+*a)b3gg;wSt$Hj?M7p-#z)a|BJRakE`kX8pls{ zt9zT==G*OdyUlYdQ>NBxKqx{eqEN{Ym3h7;2_YnzGl%jvgpBVpMuTRla2q5;gpl$5 zTj%QYJkRHOzQ5P+`}^a$TJ|~n?6b$U*Rc0q>#QlBY=sTICudyqx5NFrbP6n1*`Z0` z`vZ*;c6j@P<*2spHW;&0{~mkX0o!L9EE_x0 z1%0<$4&QF+if@MaZ;H)u#+|)7x6Bc^qQ>%9r`9#N;dGf6_fcIhG}*GOpJRDn?7yYi zeT!0GOzBlOc*ahYWK{{-d*m^5^}r zsQ=4-3rg+K@oL-QP0r?cVffQs_b2G#)W?gaJYM99TVjq6(3xR}?=_}B8v4Z?Rcq@s zkM^?0h<5RdUtv}#j^pP}+G&YeO{;SomfN9GfqQh~NgHg~zJ2o8I0s~wxW<&sb-+`} zv;04vc0yU$#+5aiPPlFVXGy%X3kFR8N`Efc_l(pf%yB$(F3$~j_&rGT+u(+8 zKTL5?7Q6kaZ@wD_|7Lcph4seEs>Zh#SbPAJd3lXV#?H7@etgRoSN^*DK=RQA-BVjR zI|g{-fRW)YZ?<@#$C$xUE&CC__OQuIPW%m=p9*X8O&Qdxzoyl8?M zFf_J5-dQ&;de^H#SUd2z%9kyOF;=rD9$u`Evr=5|31*0pe?E1cW4IZP8PEP~y8GAT zPnbUz|MW9<$B#mJvg*L@=U#NW%&>E|KGPpp&zgKRNQ%gPKX{JaabrAvIaA~GB1^oX z9Q@JO$OilOo!u{GwgoO9oiH3s((DId!xm#7xjJCTOH}3{^q}hW+_q!=>o@OVLAch~bol?nM?V+kLZKU${v&u(ozZgS;w<24;jK2X=kz)TNgl+RxHGDQa?t8x--rW#$k`J9b$Z5citnwM}i|;xIcF6vk~i!qmMqk`}n#wPMCbmZQKtl^z@AlEef~7{`(w_3J+Oh zfH?F*`#}es(AU#&>lsH(Sm?Qb;Z!@U+R(GP_OTtRG@XzP@6{6*F^;zu7&xJpQGV(!gup7=W!_n^7o$!s>meetqd!g@)Kr_1$IJ>wL&S{q&Sa0wJlEyTK26lag>jz{f9zz446G zsyo+?+u_}ljX}%y+2hqcr?2cG!ZYFRol$S^XyLDjyoDF*`FJ|pZqCC!I;bMYJ0qOB zt|Z>aL4-fA{YuTRH$~lPS59cB8)LyE+Yh})SfXHl#6j=b_UO|-qUwx~6HcC!bFpSp zFFYy7PZzW%b}@YWAY^CNCTA~{XN!PO0;YN|)9llY&kpEM+GM2?hZY0=eUkIwW;Q) zEGI}Qk-f%d`5K5eTyy*tjM_Ae3g$2eJ}LtOO8ao91Hz^ zEYu!3Lu!gvi-+O#;_)N1RXx$8OSZO$2hk(_7olpWJuuykw^;w?AiPbzH|p&GJnp^Y zr+Q6)JS?1Z?A4`#C|)t=cJC#2$HM>n53{c?mh z4vSd7c(I6&`SWL8UGA-iho5c^u_w3pm5i8aGxO6e+EV1^yyTPwKl&2YHE5wEA4&2hy|$Iiqsa~$_9 zeD14cGxT(_iL2JI!0i1;_uhSBfzOsYx@8$zB6H%|u#kI}xWZ-P8Y62V0)W`UK7p!?g;5SajZz{v0vheDA%2XC1I5Ys!YYof6!%zfVHxdQ*H=_(=bP zh=;Wnk|h)OOVA%qDo+0V35?`FJA9g+GW$W+7YGlT>(FxD0(J1_vQbSIxc}XQh^=BV zE+i^G-Np*F7o6@j*7YB_dv|c##6WYLd;Wp--np*0=T5)G!PAD^F(C`xzIMWe0vn?EeoL%tmG z^>AEzL~we95t=zGdGrr4z}Xiv>lV0~;OT}+ZqZ;fGjr|ZeGv+Y%qmo?C#d6 z%&UzC)v}yqgu4bSjd@jQfI1;EMZ-J+u9uf@fC=*Y z7-I4#S9jC3y12;m;>+;wI{4x#`_se~FCUBJf)#MdhQ;)60D4Zz_gn2lj&LkWV|tu) zz#_u{yH$hv*fZttna4)xV1c~8y0~YRcJ+WC256nM$hIxq80~Lfs<5*VVPDs!v*#$7 zVcq9DPo}Ok!=BGSIz9hrhW^7Q+Qv>dNBwhJu*u9EKPC2g%A0F}59+c@>fTyl>(R5X zjwxFr|6a$+sXF)W0UJz6+gkI_F&p%C z+xhOMHsOD$Nf6h_4hu~0^l{g)#Nc-tYy4kXA~*Y~O2oQ0u!<{>>eb?a^*LZXcegdR zuYRMXWMG5h1MynZB5klnblg%rK!As~MhJ2wE|@QQPXFG+^Vh2jTq@tgkpW+7l3qFD zk>`r9E~6VJtSuh7LG}R(tQI&Ao^Odte#Y^)cbXzIWQ^XBF`e*Muy1R@H!&WcS^sO$ z8B?@S4=(h&B*C&Y&YapM<`}Z~$Ht@KB6PW#U%Gd#82JnNzi(gr31d3;w!Lcj4Q>6} z7U%3^(Bom`gZdH+)Y|lMXCT)eVevFqoe{k-E9GHU%7{Lg6rmKQ-G_%$mN4Tk-R0uX zVQSV3_bm`n={t4oq1DLOYScqZ$oQ1kX@Z-38u$Ko-V8-@eEJtY2X^Ca z-)_06H|ER7yB8YD>AfqCk@GWWwC|n=C**v{zFU5wap;cMAg=N_z#eDBumXZD3cCeY z`FyFi#N-bXzVtt8jT^h?i4kG@{a6e9lb<=>{E}L;rzbE`Dy?du09=1B?-}jM4y4R&1l0#lxiI!@`Wl zYT@Kz?tM!d)ltWF&LQa*O`J>8qTv)iJ}x~s)Lf#4$G@bB&z$7qlG10}N6*o~CfSC( zSAi;+*!d`_^N|>z&}?%JaKkO-oBtZvqJTGauCINPq==1YYI9qyl`v+!R%G#QCG@$S ze%QE|3SJMZn{9ne9WAPBHP)MHqD$bnzlBDxcKpG$LqmnC{UXHIz7si)22ippOmM{D@2BJX_MB5Ae;E*rxy z3whoH7qe{XzV;tJ#pvLUZa(AGt;oyC!6}z+I^lsNgc2p_iDoSQGqCTLhsD?^=eJf^ zC0__I!d~6)AD3q!L9V>sV*HqJGqY!#G1|!A7ow4nW#9t5_;!J>zl#_Z^>=9$3=m>q z-zVWa{Kcp%r#nJi8?W;$>a_?jt$6xo>Q^BimgmdIBDp*%?4~1{s54^ShOZWe_+IJM zjQP<59G#?9+kVafqhHwE3I1k;Z|3y4k}VM615vBX`u=(-%O9WH>zFFKXV**)NYcju zIsezec6mM3@$Y9lWJZD77%!(EU*JzWv@ki(;$8AUEv&Tm6*%?Oz=z{)w%YgAz&D>7 zdnb-iL%jo+UVo0~Vi~K3)~lfBsh7|E%T!RdfAja!p~{#lum5)llFRXm_$|cRa(}EM z9?JMM@R`3NzN(n0yaqX5W8NaHBukS&KsY4ef`&_7qyZU2BWOb$-tYYjZ@EGH35i108X- ztl*s%EjScAdvsNsBYmWQ%3>Mr8 zx4=7YVopVk1@2waa!i%vXldB3w#}0*@v61&`PLVf`8i@~&VKu<9*%hM%SAi>3}Ln)^ZnA<)t6te0Rb5KQ!-~=D1?)j(2XySGr=W)rd#0%G_|gS=B~yyBi+7 z_#;N$md2xD;DfQlEU^9gqsu#{SmMu~OL~^++u_>>R=*?XS>xRcDQ!xpY;c&_73t%8 zTfFgkp{~g?dpzA?Qm%i~0k_Xmxp;!;;If>$OvMss^scJ!sP5x}kLB{D3(j+439mXf zh204~C(^`rp=aNmh#puqv-;I)KR*7tm2>0VcVpZq$1fpP$mgXgev;$8ZFj#;KslRR z7>M`e^JfIgrzfqO{0VKl5YR&tie$E_oGD@cp*hG4g zT#gXqv)-YnXReoE)2k!ZmOf^((Mx+^`{>D0`P;Q{Sa!@^$bltG0HL2dwSCPKEW;LF*U&E*V`^LCx^7*U@?a#<0_wctqp$XM;2cZ0%7tH1Uuv4lJ~K zU0~{fv=q3+waFP}^6}}30~qs#4f~z(u1V~$25l$2@Xp0Lf3Xv$Yfa0lFmu6O_MJJS zRb229NvYd@yW#CO{Vw|*a={OSMZ8G9HCoh;?~3zwL)K?laj`w79ND#B7~+7I2UdSx znc#@&FGk$kf6x+74RTs||BN$!-5fnMC*B1gylnpT;hQablC;f zX8jIpF4sW&GLM#lDSW(j*Z7?9cz?@@x8x&M0i8qzXpHgOWAnrDX05m zyYa{!u^WNQO*z-c^Htrs6FH*c}Y z$=DTKV$zF&+XHBb8^sdo$=Oi zD@Je4z70}utpRWIy?c24WPJEu8lFDdL;ufi7={@9>)bxMbl^L%rsTX}ji__C)D(Ki z3?}7f4l%HwTd>YxO4$G1k^PmOjrUFMc>(`AwjUf`?qv|1byist&pE7Ykf7n^YnCKR z@HOA)*rZ~y+5MyZ*goT=pxhBH&EoqSO1b}Az7}din%AjK`p<*=apZB~tU?!4rtqnA zxf1R8vb(1S_IV6fGASy4Gr2ctR<^90d)vR?vz1Dt{&yTK{O2C7^9{~8KerN}aqL0- zaia#b|Jj^PGnAj)kJ3(7r%F)=E>##F;K}QwH>O@MB26;vm{fi?ziO<1|Id1XV}|$9 zA3r{Lk^Y3>Sr_#uPFeO@|Nql%!v8#*zrpU3pxX(;@V-V7JA)S+Med$;$!O;OWnYY< zd~^P_Iqs01dROhxx_h+c8LqS;sy=1tq*;$M77J(hJbJutcD7SBc}Munsqg*&=M+9| ztKyVJHB;74SzH%=f69_)t5l~hZQ49+>c6>2kZ;Zo3tjc)>H5&s-`nqpuKE2-HSEtm z>K`8l@-0*k?zBXmQFLnFU~2NTB;mZmY3s$Sxzqp4?&)7A^GY^Oic%;v2+k#^3hd#1 zCvyFue&}TCkf>nxaKhwV!iU-@g|z{W1`&aqhE=yVZ5mxbC+ua#zB4xWeHNv^rN7sa zf8TCBxn*)4TBW4{-pSp1tyE{7T z#2?QDTdv+xJ0u^S)JdmKo>04Me(L18^i!u`u)cjtbGDk+>46o=)3@ea{cfK<@vi-w z?A)5!Z*uZlPrW&F{mbh&f90zDp$_f2RTJj4U#yKh z-F~TI@tgL`y79(m@|w3#K6B;e;k{?BzByli=3358^}p0Vs9C+g?%FEYJ9ljPPj(fvaLAI+1T3CcV>&KgxZBB|e#{<9_%V{-Ubz}e%> zBV$BO3Fn6)U3}DhrP)JYL31>R&Ohm}2L?6gbLdPEpX`q5cs#)b0y=U|PL@~)aa_5h zxG)NR2@*AHIraKHZDuLGP{r%P`Zma7W@^ThccX2baBH3!Cuu5`yMfLl-f-Hj`IW;Y z@=Q6*N_ux3ffa!cfdfGv!6t&q1fB$B3{Ot)%$OR@OlCG+r#p>d&N~gKy4W(;HEZb@ z9WvXfScxWI^AU%!q)T^7c9o!x;448cC1JbEiOxM$((_n)HHbn#f*uq zI7DFY6vGUPenKX{0%keg4J;5aXvR=KbD5`fPaY&_l#rQ3;cX`YQ{-gJT%e-AYlbmP{bQJaHkZps zQxttg-m@~Nv&<1XjA%#cA5xl?l-GI9R5~2XCF@5n8HQxgb3SV($_yenp($amX>y}? zkr_4N4ShnKNA;4BjVKNHF-mxhUhvyIjS0?)Wwug=~NwmiZh^QtcVU~@~FuUPF!XN6~NjXG!j~tZ$8I)ro=O& z{w!k_M1P-IFypHfa9?66OxA-AR!ELCDD)<{Y@iNeo>Pur>JB~FFH z$8>tSH;rr(<#vIdvDE1i4a6f#`;*?aB{)rKd;8~cJf)QTAtxF&A(_>(w)rv9nbd*F z%-tLXI>c#56&FwrE<`6f81r@>Arqgmr=eHZTuO%5TxNcB8xu(#`NK)TR6B7QW8Ogy z;RlzB;nEDXmCx?oRK4Alh{aIW8OBhm-VMt57^PW5JwJ@%$=HFWVIC(@jc3OwIt4K8 zY=fgIr4OaNAq?g*I>K_As=`-ljEfUe*V=N%>GM44e5H)@Z9k99ntAlqqpCH$c%out zfxVf`L_QMY{Vm+UBPVNiJemQ?%oOU1d>YNcbZ&jzD4shLwwZjQP(}JU(IJ0o#eR)#zkSe^4UWnk)47^8OaF#cb!>p#1jRcVdr8IsK)E_iUY1aDE*Od6t{piT&dJf@Q z8N>QvB?BbF!(?U_wP6}1J4Cp;gI-xn*MW4+;^>Oa+Jns1|8TIg8h=7k4;pm!TXh}( zt66W=nm?x!$aJCm$C~y2&se#7@Q&Bn&gni7%3H%Ia`=2nKBK6tCUBQ#qN1{rflE|s zet{BK+tM#Hpx~CWhEeaiva*8Ps(dq_6v>#wi5qmRMx?pND&F0oYcpz}d#pKbWaJlK z%2GXL`dGv?bLCA23L)2}+TQmxgni~V`M`fq)51U{WO<4X!IW zTS_%kPiAbVw{W*xj!1Wz)zrdEv-KX4W;@25k?JUn+GiWap@{uyifk%lPF>1;-I=M#8Dhl!aVwwtfd!N{{pRsu-b4?xAgU4IZ zmDaY_d{YZ=<8V`NB_`-H+|Zbr0VtKH%>S+)l8~Cvc_?e!}+T7i_|ANPr0`A z^T*HXK`zs7CqK21d@DE~-c!RiAk)!vZ-jy(!&hSRH?sBPhA~nWOI&<8goP4^EiR`M z6z}egEFHzT_%s>iGRjkZ#z`}!xrUWmV@^l53op&ByA=DTwcR)`rs>`j$;8rz{tI7K zDKKFSswuBYqO7Dc&bCEw{feVhvjU8mcZ@*L;XH(4I^uq9u<22LUAZ%|dfb@Ab%RyD z`X!pJeKgu*)elL>o0soR^QFr;S{x=Hd5RnzzAeKbk6{!AZMu|a#B>b>ZkSY>#;9!M z1WmAwSJ35fbutyDzIzj*HN?3IF%!Iu9_mE~7oI(Idp+M`#J->=A0A_OYhUJ4whNWH zN29`hhiZGTvcGh0sVj3Y#Y@FDDpR|9XrO4|^0{BNEf1th)sjWS&mVnYYBT0|;;}fZ zqIBobTPb!6TJJGBG|vLeDIYtAu^q!^NZ+1e7?}^ltV&nNq_RNV|g zhdCb9FH+Pq-TA2^ zhyJ}rLDgVTM$EL^>$Pnryk!*b_M#%9R3%7rn2KTY)ueQh#ROz>=wie^Uxj>%B~t+6 zMt68rA3Yc8Mn<1e5*nCKGk+<)J6@okTA3GlJ8H|{SC_w4oUuVieT0A;aCr1aedQoL z-emr91FFOsoK2cO*HlGi)KTWidLJn&Sz1J0nCljyZoD&8Q{r~}T*LBxHtOxs^c9?aLKA`;e%-g=%7Q_Uwv9}4QIIGr zMyRPQO;?opBs@~u$mf5O4T)D6i`Oi?rtdB|psJB&hycCIx77`E3q{w2;CjGnTW;i5Oo8TlofxT|rNY>u4V$7e(&udz=-{ z)Hp@TZic@rbBkxlVfNFT4w|VPz9uy$f!Nk-|6t~%Q!>ZNkSAe^sKTk50?s!Lo`5Zs zBjFRnJw^Gl4tmUZhNR3;z12vW(Wi`9=Fh4Htnt@V0#>7GAYjF&T!Ih8*6T@#d_&?< zAT@9)#is|kWEGCF1VahDH8bUUm5|c0%$b$`w^KG`k4+4l zOA-c`6c7p1LHF#t2MMka#I za;!jqpWtr-BngB|G9VlGlB$Wt!$@HF-itD4v_rK2}aaceirVDjDm*f)xNgibT zsL9_poO&&aFereO9$R@^YUnAwM1nD2E|;(xiV^jaEj?%b{q3XpG>S{4YgVVdL6A%Z zSy4EZ;jOTQW@$7a9uz$y)+>#||eQcMPSqqkDFSU#4&^VaFXO zUlQ^qB*`tM=TRiMyU-+&FagnHn61&S)K+Aia%M61LIr9pX;3GrARkiCmeLEpRFQ*h zCNwff+Fvol3E|s#Bv*<^E^WwpMOY+dc+@Iy!U8243Bp}Y@18uQCX+fvO5+o!7z&d) zt3^CpCRzA^O9&P~TFFwmn6A4ym{JO8O0bO!qQWlJe+(a$<>C{G; zjWlq4nsXA8rISg4aVIr|Pu;+0HWLh?0uv|`)a=ltIrxR5Sat9Xg~M}BGMDJFAJrw4 z?pbA?#kW$@E&33?X3}dWlx?hB%ZVb~63B5co5Gfo2aIMkN#w$Kb>^TyRgw~4(+uPE zF(yhjnF#F@;VgC1-I9sG_|lxBrtx}mh!h8r0_n~)M6-I8l;(>s)q!kHolrh$lc)}< zG&JMBynLwO z1r&aEawqE4#aKEmWiDP z9;d#TL-qK?Bl7-}E)*%}xfJg352CdJchYDC%=8?jPDRFBxJ`>@9W4eBvTWEK!yMb3 z!8i$*v6>)jTOC7-8bl{c$gA#*?pb4p0wHxelFOwIrKScc=K&UUJDd0}4CIOt*5q1iUp;I9#thRDI+(g>d z5dQ!gTnTlcKu);pNug!G*RrNvMz(q+=M%QrP~mD$K}@8Rj5?epxg-i~Mq*_WCclJF zgCu2Yo$?vKk|?Sd4G8ZMeNdMYwK|m%7W_SXr|8W5XSdlJU5?Y zR!5f;rA%hlQ3Ll=-}dy+!>rP&umswWx25;-%c{I>ZMxpSiR3a1Xv^B%lI z%tm3nHff_VG~sF)ug!dBgz#JsT7&c@K;}ayjoCd=Zuk-SVMNqA11c~3s_ zIbBQ1wAAA+k65iRUX6(+taKr)R-iUcjef#0i{-hHqHRYmtAcfCOj3!n=QASzWM({( zicm^jLPhG)xZdQQ;4nv64f+~YkzI!K&=f=yN?K?NoR)CtjxX=k9D1^cAdhNxhQeS? z?&hx?THv5BchFRsO^s*S6gy3N69KmKFO&-x_xxiRCmN6lLIv$%G*!Gb%n&Y{A$$wg8ZZfzQ z9y`n+SRp}mvqen^yyv=Pc9oTWl;?bbasu_<4ceNaO;NhJ!|0`=l6GLKr>a?6s+YQJRjPLnPrYqEx?=*j4KbXSwr%Lyx&LyH z{#SBuo#9ry|J^{Qgxpm1iI}!S+)qJU zcU1pZy(<+SvnH5*xQgpX&;8kX*A*Y=q>c8{91=LDfit6uT&r#SuTIg&jnN-Ie!{kx z?#;cR@`|0-9Ii~?Va=VR9sgsWueK}PiyUz&PYj9M-0MGlq<3%jsYsQrgOt~5Pso_I z{zF3TIQfp>lAnhZ+4?3Z_KrF<#D7U1?em32>Es(^6z6-*=VduT@l+WZ65Mc z^W!FEcc>aTFqy*?9Jo^IUJhTX?yyvu(3o+Nst0pY^OeE`1t9??%Z{yE&}-1d9SUV7 z{3-rxeO2!)?5F2VTZ>mb3l{AR`FFw*)uUuEX**(ML8CwRtE1a?Qzqv>6_R7VJNELQ#ZVbxgTzq zmVT%zH$UAuTYA@&9PN7<1cfKCh!wBQ@M2z(p|WM>5XB|*V3%{YN!t_2_W#pcW9F{R%*voo%Oxmng)@fJkp8n@3m!L2OX`F-m zTB$#cu6^hcC95956mMxNzn{ z<;+YeIasgrRSX?wGuMB^Oq;bwIJF<( zWV5T1a&8BV;x95~%HG4yDqfUgRu??{r8Pu>{|*fNXWA&akOQ4NZ@w$bT0x_q?2}U0 zD|pra)heZ+&v3^6#~E&Z6O7PMbWr8LfI(}Me)IBW(Dv-Mm8#$c#I0L$g?qLMg3Mmn zDEo9kNL+)RvPTC9bB>(iVIv&ZTeyOk+z1Z_eNQdTKz1+NABhYH&sgT}?<%TzO3;KTb~^u6Y4$nI^YY?4wn3vwq^1a=6~-?0B!jhj2hKY>;=< z1DN{F@sW3OA#@oTYWdg}g4#N+yHDGF5Fai#@!=Q3;YERcJf+2O%6ndtF;fG>vhSW? znBQ=@oOz~*UtwWkNsN;8Go0cbey7BAfr0 z)%x^8nRy9ETdMo3NL!)sYTjlQrWJb3T-`^Nc>xo2eV(c^EwKERwJTTJ4Ez7)t>ZGy zkiYY7EmztEEpr|@@|Y&zdYzZ@q>bPpppj=9Vbr@NwrWxt#NC;+QjL*8Sn#Z|YA6G4 zXojD@^f|;eqOSq-46bZe=`diPg3hrU1%~0TZC2MzVBPLh^d0q3ujN5z%0Mq9 zJIk}I2r9-d8|c;X5PJW;N6E*%5SohrYQ?T%Sg9uczXc?WEy?A20b;AN($r4arO8aii!;`X;NLb0k!@yr`o zO$|`G`WkvsIULz5Q2y?7fYaFq#Y0xwsO)P6Ll(*Z9{1q2w|6 z8o0z8b8EotLl5t6U=K(!DV#DuDr^3)oke{SJoabh|6 zMmM#H8_Hnb=Y5?X9gpDNoz`YyR}IW|__E8SwgR5GPj?b`mP71`g=fW%<*-lt*bUFK zMc`8UJkd+~5LD9quXwpUgawavK6-`~!O4Q&8m5_Lz&_?MpMYZ)oX?SdfF!m-(%0}d zb#J4J^aZ#Lp0+_%+5(b_`Jt-$E%2o#e*!PR5e`q^_cu?{2zTAr=&EJPV3hjQPJQV! zaOkrlQ=fSb%z)xuhD-yTj~X!0Ncsf2^q6KNX)Uy#)VgAnUklC?s=|c%k6}o7&|Txq zYMA(F_s5_*x{Zgi{G)hMNRb!eB_@izO8>`qZicVp%!3*EeK{ z1InQ#GEc$uY#F5Wd2Ob)Q3jJQ)zE5P6YTr_c9>d#3|?tXpQ$F1!GM_3WJUA0@KpM! zhf?4hxK-+pGJpAM^X!}8O3;|Kyp@f#@pJyFe(f_j z`GYxXu<$7y9#J9|xYfhvD|2{8#ZMr-#qq6CTrJG?zUyupQU<3d54JH$tOR%4X~#`& zRlu!T1)Id-<&D zo;9 zIuotLOa*)?Kj~l^QwGBP$r6RspU@We>!4CcCrlbPUYC>l3FbVR6w1l^2$7?9-Q~o5 zfN8fY9hBWWy6NM`KX@;F1@WnlVTxgIAt~s)z?=!cuaflwuDTAM#yi^x0e_`M za9x^Vd*1yDRX)uF?Q!NjeiQ6h%IP4H|w`<@yWQ*XwYusz(dFpXBAio!bl#`S-7K&k!H|dzA_IKr@uve6-|g zG{H)n$Q#^KO;B9(-JI8>32vVBUB_G22p4aM?$FnJ4*CZb!$i4Npc7g5TR-L*?Cu!( zOLV6a%G5N1P24Nt(!e>FO|mMWPJ5KP*tP=v%eRGyv&$h$IVoH0Rt|OFR?ik4t%ADj z?;$2`mGE$l@82f-DqxGklQ$+o74XTlVm|bK1do$8#)?zQp?6fO zLaYTDkxda+154gSl4_Vr5v3NRo6KuWr7N0E#;(7$Y!;k@&_Bc8QI@XFWuA5Xs`=&I{A(yR6%)ZC5kjoeb0rawPi zoLLSuysJ!@O0WtNm5MZ~z~Oq)5K%)F5IebLe3ay<&qKV7qiR4lB-B&b@feCS5fu`W*2O_saW;~!d}1hS8jU=Wo1yH z?EVr~?*08%wXGR`62a!CHo>{hL+WbTGU$7De1dYuOPI@PTBLmXCA42sFHyFB31>+# zP;P34srzT3%Hmd7dh?)A)$RqP9i3yXYWM>3a)mmoeP4i2*4PWG*aDLds4h|6*8-`} z>pN8&h>jo5?Z;i*44w&1_qltTpw_;ii5uGl?C|rc{Ix9PW`0ka4kKxhuU!&VZ#UnINbhCfm;+Cg`k#BAV9%pE_`#J2}m$s}{;8rbdcR zRl&l=ZtlY0k73jh`xKMc6)@MV(9>w~6PQN=inwnDbZnHZF;=Sq>*CyB#v`g>Y+1XN zNm3qW{J_Squ zUvCVh zSYgbsfl2XZr;Q7%LENzaqH$g|T>ZJe(>SOaE{!HKEHKHafE3$yO|fMKY*?&6R(!o2 z?s(JxlKjOFknB>Jvcqa1n#82uy8Edx`!Fik0gebMv$Og+kA&@i@)WT(O zc-I(5Rjn7mZtQc5n&CmkdS`B8Gd$jOXdkzs38qG!spKY8=-f1r_o@*rZC9u8=8@b& zax~Ao5i(vDJmr0q!PKk6HPlYaU<mO}O0_z7550;kWv--wANV6A5^L&Xx<;2HJ;zZZkzhpVeS`Ni<PHl7QtCo;lvJzB6W+K-%KBh*N)*znqm0J7wz1zCfM-)PPU<}9+I82<{P;@fd`8T zGs7N3QuHP_V`&Y1SH3pQ*u4gNeT&>{EUN~!zpEY@r&dFz)621P20Z(Do$zyQr`dG7Q5^O;Rht*lXt=ld1{``R)DP#H#{WbxX{z09LFN z*OtSZBjYBDbIW0s`RMK9N##&gb^fB*vK-n3sW-%ea#$X-q(=O)3?v$ZzKZk9K;wO! zwrK{*-$ZXsmzKfz;TK1n_AdkD_@z@!Ez4j}TEaY2wK7nrba3YpTpc$c2!b8~x(wS2 zPmIA9jqHihWgx?>EZ%csV0V$YJ0tcqr6`^?vth%>O$+Nf^mXli{&+uZP zw) zU8CwZ;)4qZMRI#K!!O;CZ0?;Vn7cD9mMbRwDf6l2#y3IT1DP#Pr3rpANBiu_|a?(%V)#z|>AAWXh+Twu`V_<9 zbdQCel42mXy4mx45zH8(dEB$A2&S=&II{@yU#{2oaw!6qEqIBFAXROKx@Ued{5AN3 zB}z(Rd(j$ShA1Om{&U!-w{4n!*mH>XAO%B4d@8h2EKdPaVZ@tta5 zmv=<&)c?mEy+yJr7-Vx}zGz<+Fem-@iGr%&_oHbyMV3|Y^UETcsG}05j4V_&$*lxh z{;)Jjt_0ulx;`dBl|aiNktUXv(6s1Rf=O2eIFo{9Qdj|6?@H@T;wnHxzxk($M+LlH z34O$Ej8cfd z+gJ?8OMzYPLcda=RViP5T>^bQt5#t~37C#Fy^4cMfIEKn7nBvlhp89cJQIsSayBl? z)2$e?Qq~;wd{zXk+Un&|1k3N+4e^&2wH63gk`z$mTK^z%k>76Zx!JAaP%pY>lN@b z;pthE^A#}rgB>I8UjYvZQN_Q?!9}MoPQ0-k202#k5&M@z+OvK)#fIhJLkpAQ=Vh>S z)kKbIcA0$L+BBB%&Zu`M%q|5Izid!c3PmG!jK#VV*g^yb(@S7n%BOywD~mz1>!*ts zQ}kzDSK0=|4o)bCy@U!{{^em4uz}iH8Fa*HKj(GGU`b+Sf}x}V9`>tm5b&x0=+mY~ z9krlSJz2@Pum)_KpU)I!Rl!ut+!vy@N~qrX=%c8rQog<^s;LA?Nl`_OIvA7 zrC-$c0`k!$ZGiLvw>NE*wzQ#*lB8L&<|b*A_U6MRZQAl&`k)Ia=q{@wRu)BA1O;3d z77>vJfff&Nsd7#m9Ey`yi$&uI|KPJMt#3hb101+zP%qj<-K7 zom;T-IDS5A)9wPvaXj%m-46xlkKrp$n#IJzWBAE;kNrdbIbTb*J(6_qQ~S5}wA_CNEhxs`C`i2S z^QUkR@zl|j_#T`ecjNw)u`nM#(DQD}q#hi$Q&y)QIf2)L?r_BRiB{kfwcQi z;PG2|g=r_d@t?tddb*(t-`&&s%Bq>&^gb(otP_88)7hG|H^83U-Z&-w@h%*xMZuNh z_`?Ujf2E-QIR3)U{DTE!VIF$kv5k2DDE?>IHjt+s#Z#Z*Jtbdy1h4P#u9QD^1do3y z#XAfFG5q4(^cLaz^Z3%w=8aEYaSs1r(ah&YT|I@va$J&fwg=x7m-M%kizo5YN&TZ! zm!8Dm*kEo*O*x5ggas(I^#uOr-`9SZsyKn~R4*T$#y^4U|GA_+&C!id1_L%N1=go8 z#+*vK+J(Dp>xJphcG2s7dS(}XNRjb)`a|I7fc-b)VkdsHV`CLgcH*K{L?PbXiEmp? zuEZ~YgvUO5;7|CDkMPVJ*BT4f9>;U9&TO$QVtD}pA->xP{)5zR;=Z*1I{c`qhiJTGCqvW z>w$pl{*%685xNF@N?_S9Ar5-?FNYVSS2ind8GuXk*|J4xb1!$_7n^(C5cRYCzCBSR z+M@sZ;fR80qCF#FW-zYl#|^OgnTgSz=BhPp8- zml#=fDDl0#4;SZFPKz4Kj;pn0_mt0K6IAhZT=e4G1=pGdAp)|x3Zj!jgKJeMEK3Rv zj-H<5>8Xm%JNxUX5i?@M?W5DW)x#&Ir}9oDj=qqYc)x1uvb`wumU`rv)%#|`+nKZC zn9%8a=r~*ccQ5-wYz@iosVqt|!!P~Wrxro@^A`&PA+}B>-{u(a%b%bAxpRN^na4b* z%xC5_fAPCBDEhg!Vjg#S8^{z&TeqUcSdh)5~{DI346=sZkb9?5J zi94=mE)^f~1uma4^~;zSQQ-2Bcv+b*n@nZ-?_@n+k^g=$R-|30S;ex5fk z-)ng<`=vRp$roONsN`R+FePf%y=+29dc_-(<8nHSR`2PsdiG&)Hv5{7Cgk@mOUf*x52P!Fj;C7~YutbkT3q&$WzMRsOkb(W<#$?X7$D%J&=gyxPWpxc9Yo0Uai* z<2SD_`R1VS=r6AJ?8sy`<71ms7+f>svG9~@$}rv}`P0o^-{kBb)iPw~edBo}%AI@o=@W+U9XfvL$-S{tE?)jHUOD0G zeIvEh*ZYNa8^1n~Qgiy9gXs%W{&47_w~Jhdu~++Yj*NS2r{w6w_xmKr#5I{$j^*LY z6~`xk>fLf^>Zh-4@%-@pnkyeo)Ap=iGyUDquXJiQcRbKV44$Fev{{3L#gkjoWvIWS|>f9W~;H(ZhLIWF`vsB}1i5RYElc;ArWv6ta5 zcl5}%elF*F{}66Mb_^Uk84}OwhscTCxGXNjs7iV$x_{n~_ylfrTYnrkNi`O|0@i=R zfyRH0cRTz%A3lfEd!zq82p!*hlfyAxo(IinyF7w3tT!Fbw9Mly5b=Rh`RaH5v*4*0 z&c=V;?2kq*Jute6#?-~v)ZOUkCbn_rU%MH_$>^x=hu>Qu!(tBSiFU}+zXpI}`v2C? z<#LlBgM|4zMsT)`UHtkQ#3sSTX^)>DAC(lH+;_i}Bjme{7PHNel*LJk&E^T?+;)T0 zZE<*NOa_lRn^T?wW#|;XyTwL2C_iZ!WR7pNo6Ih%#cHpsak{KVGm~?K(P8(v3`S2) zXc5GJxWnnOI_x!`7H5DvV#RlRT-F93gJI@or`2UZ8U1k4kSEIIfea{joXuf3x7f{Y zca78NVQ9lBgWKb;2FesgT1`w+l)>HL%j9;t%mx!v3i0GOIjBY(uthg<4yV~(W3_wC zF0#au&Ig&_^Kx@#!wlZ}8YSeuZXlH8Yw zaZ-|ElcgMfd~%pI-Tn3Tz!vBM-H$>fQmyoq9&Fz6ceH+ce_qv0g+ z&?AlU@MoH!cOy5MpNw(VCO`)TqxkxXVc*UbEahSsx!5i)0*ETrRtV8oM3xtGLpcuf z)tlAL4DY>M!4WR@0}ngGOA*G<@7A97B)lfYe}xPt|MdVh67sl+4GC8x2KCU3QG)gc zY`zA2AsRI)5n3aeERsrOl_HU3iU>YJA1zNJDg;_CqD6ugEPj_4+G2lC1#2k-dxGxMuoVtkkj_RAgx5AuR7A$BriJqLOVX$149j&Hf`!T0=@#s{CqaH_Y;wAq0wT?2W=!EQ|t3MrH2kZA+{g`ee10%vJ#XxUw;|h+o zfuf!nf~~uRz}Y@50%uci56(%>=5vxm7eWU0GEdOP!@jvRWE#s7OHP3$46S6-Lc7by zY+wluaJmSbF5e+1!S7EDg=H0s5uCm<1XfKU-)XR$3~pgx!rV+NSS!snMzrAD-I@6r zKc6!pBa^v>MIX}4VO08dZl>K}Geh>w5Ys3V%GO%Vl&NOWWCofxbx`p}yVdA0nNdM| zqs`e8NN|w#W}^quZDx-F>@EXjw>MJMQxh_R&}s840&IYOck#k)J2rBp9AR~+r5py& zIa1*%7J`sCMxG^ zdvM~U+)25aPjQ5?gjzjIo6l_a2$w#TgFY>UiXez8_>Vp_2_lb>*AWVWs3QvNXqsFe zlI}&s;y`*)RT*;+-!vCGy_6ul1eAlnG?R)#NP~NVsPqC&KBd$~HR_d`Je@?zk9g}!Z9W<$bCNbSWmalhOY0qVTCvDoT3A+3N}9!_R?5(F-B!}3@aP{Y zoeXKMaP2ipEKMebtf5+`rb?}dpWdn0HaF-bQVXe_4LF3=2-n6Em4nPx*XorD5tK)~ zz13PNlvCB3N+_?7rg@jdaqbO3Tt_^NSaJo^c09h$ogE387sk2%lYw*>((WDi7 z%^I1=tdmm+x6~%H8f=<+Qz6|hj~?oS+F6a{q=Yson`PyNs2>Jo0z4b^x-z#}3wTS(U)w(K)im6Y8 z`s&@JL?KeuSJ6C3twvO>Ra;ETVx$+4zu8?2x?yf98>j=)6T7;l8f34_RY^&0Srf_d zXV-V|y!Wcln~WuDCn=HobqncRgnG)nCMDHGQog=K`fHb4U>sPC;-LNo`5UyVCOBBY z$jh$r7)vNWZ!{K~s$ti%I`>D&)2^9I$!|BG>>FY(U}?0F`T7O4+m4!o7D3|i@r z91r3q(x#EZ|5nfyufOjj%r73$L&~g`QpQ|Wtx@TlyCT*xY+SPSEUeG(X#R7<91CMs z-U2#2=p0SLoCouG@H}+SbgtS)H4L_P1k&!EyevkEo7U+FeHlo*XY;OI1%0Biz002_i-QWW$nk`J11-3FanI@mb4W&V3NHk@d!G$=K- zq*m6b*EI|_P9o-uB-d)2%x_0Tuv5Us@Y!v5W}{H8I!UwBsM9$0gW4vnJdx%(uoq=+ zrZ3p*YEYdc>LX)UD?}z_r`a{2TeQ7B1=&g37a8LnZ;;tU~J_Q z3a-nVOfB@`Abz1GcK3GTK%2T8!-N3TqzZtFYEG zo`w>+0{*;k`3SnV5EbBA)D^*HDYy@W7`YEKs|vwi5Fs~0jqV9A+!xJ8zJ>$2AthDd zR>(`yy#n3OLYxX4(6<47714l@0Q@Rjb8?V-QdLb8OAs;O`amf}RR;A1O0FoHnv*k? z$f?cAfjha}f{2V$L;ExIEvh)+!MHUkEtF2etiyCtC0*X@FHbbnRJwja<>~ehHlCnn zT3`7>LRl|E^#MT@(v1RXpd0#|{u05ryveB4H0mT^Ux1CShqV?Zc`K(d?MLn%d>oaz zK6#YV@}N5xXoJ02{#Im1}dFX!#csh4sGj#YJ?Z<#hg__M@(lTMgPOqPEG`-a2`eue{tReMe@uJT zB9Ju*$4fxhLKYedabj9JE6{!g(|+3D4r;#xWu?p|a;MRz5TS93#tW*yq7wXlTK^e& zD-l;#fBS5FXg>*M==^nZ0&Nu_#&R`XC|rK!hze^Qjpy@IiE@M|ficJED^p*Vz9L2GFJVxYZrC(6M`N9$^{6vm+4Z&w0iXks1O&tRGg z+DEABL+e8;dGPqDM)e8Q0meVdUxlO(RR=ys0!>h;^8=NrnoTPq+6W1jCq4C)s2Zzv z@>YXVCelfeKRX*`f}+3@T``~O9ASpj;Ciyr?3rkEIw#VbJQ==CoD61r2c9H>2XX$5 Of1KWj;9(*{E&gAZ!aYv_ literal 0 HcmV?d00001 diff --git a/Data/2_Silver_Processed/Options_Market_Data/2026-04-19/QQQ_options_2026-04-19.parquet b/Data/2_Silver_Processed/Options_Market_Data/2026-04-19/QQQ_options_2026-04-19.parquet new file mode 100644 index 0000000000000000000000000000000000000000..b97603406312f807e3d39184de0fd2a5f9f4a9d7 GIT binary patch literal 103256 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 z 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 Co_E;* literal 0 HcmV?d00001 diff --git a/Data/2_Silver_Processed/Options_Market_Data/2026-04-19/SLV_options_2026-04-19.parquet b/Data/2_Silver_Processed/Options_Market_Data/2026-04-19/SLV_options_2026-04-19.parquet new file mode 100644 index 0000000000000000000000000000000000000000..5c8308f8c78e031e0571c1e368718ad758ecefbf GIT binary patch literal 70822 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 $nVJF(f@ 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 DZXpgY literal 0 HcmV?d00001 diff --git a/Data/2_Silver_Processed/Options_Market_Data/2026-04-19/SPY_options_2026-04-19.parquet b/Data/2_Silver_Processed/Options_Market_Data/2026-04-19/SPY_options_2026-04-19.parquet new file mode 100644 index 0000000000000000000000000000000000000000..c63fc89c563e8d7ad4f32f9b961c1849db45a39a GIT binary patch literal 109345 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

|Xd+ORqhe+JE-* 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�)R@sru~Cx-Z|xvq&?L?&0vy_zWR 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 Ii0NhdKPVev9{>OV literal 0 HcmV?d00001 diff --git a/Data/3_Gold_Semantic/GPR_index/2026-04-10/gpr_narrative_corpus.md b/Data/3_Gold_Semantic/GPR_index/2026-04-10/gpr_narrative_corpus.md new file mode 100644 index 0000000..4974825 --- /dev/null +++ b/Data/3_Gold_Semantic/GPR_index/2026-04-10/gpr_narrative_corpus.md @@ -0,0 +1,1275 @@ +### Geopolitical Risk (GPR) Index Update: January 2020 + +**Date:** January 2020 +**GPR Score:** 138.42 + +**Summary:** +In January 2020, the global Geopolitical Risk (GPR) Index stood at **138.42**. This represents a **significant escalation**, surging by 86.35% compared to the previous month. Compared to the same period last year, the index shifted by 58.33%. + +**Historical Context:** +This reading sits at the **87.5th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 95.26 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: February 2020 + +**Date:** February 2020 +**GPR Score:** 75.96 + +**Summary:** +In February 2020, the global Geopolitical Risk (GPR) Index stood at **75.96**. This indicates a **cooling off** of geopolitical tensions, dropping by 45.13% month-over-month. Compared to the same period last year, the index shifted by -21.53%. + +**Historical Context:** +This reading sits at the **18.8th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 96.22 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: March 2020 + +**Date:** March 2020 +**GPR Score:** 81.54 + +**Summary:** +In March 2020, the global Geopolitical Risk (GPR) Index stood at **81.54**. The index changed by 7.35% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by -0.96%. + +**Historical Context:** +This reading sits at the **27.9th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 98.64 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: April 2020 + +**Date:** April 2020 +**GPR Score:** 69.34 + +**Summary:** +In April 2020, the global Geopolitical Risk (GPR) Index stood at **69.34**. This indicates a **cooling off** of geopolitical tensions, dropping by 14.96% month-over-month. Compared to the same period last year, the index shifted by -12.51%. + +**Historical Context:** +This reading sits at the **12.5th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 75.61 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: May 2020 + +**Date:** May 2020 +**GPR Score:** 68.51 + +**Summary:** +In May 2020, the global Geopolitical Risk (GPR) Index stood at **68.51**. The index changed by -1.20% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by -35.66%. + +**Historical Context:** +This reading sits at the **11.5th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 73.13 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: June 2020 + +**Date:** June 2020 +**GPR Score:** 71.23 + +**Summary:** +In June 2020, the global Geopolitical Risk (GPR) Index stood at **71.23**. The index changed by 3.97% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by -33.17%. + +**Historical Context:** +This reading sits at the **13.9th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 69.69 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: July 2020 + +**Date:** July 2020 +**GPR Score:** 66.47 + +**Summary:** +In July 2020, the global Geopolitical Risk (GPR) Index stood at **66.47**. The index changed by -6.68% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by -28.92%. + +**Historical Context:** +This reading sits at the **10.3th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 68.74 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: August 2020 + +**Date:** August 2020 +**GPR Score:** 65.47 + +**Summary:** +In August 2020, the global Geopolitical Risk (GPR) Index stood at **65.47**. The index changed by -1.52% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by -36.69%. + +**Historical Context:** +This reading sits at the **9.5th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 67.72 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: September 2020 + +**Date:** September 2020 +**GPR Score:** 80.38 + +**Summary:** +In September 2020, the global Geopolitical Risk (GPR) Index stood at **80.38**. This represents a **significant escalation**, surging by 22.78% compared to the previous month. Compared to the same period last year, the index shifted by -11.06%. + +**Historical Context:** +This reading sits at the **25.4th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 70.77 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: October 2020 + +**Date:** October 2020 +**GPR Score:** 76.08 + +**Summary:** +In October 2020, the global Geopolitical Risk (GPR) Index stood at **76.08**. The index changed by -5.34% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by -22.23%. + +**Historical Context:** +This reading sits at the **19.2th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 73.98 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: November 2020 + +**Date:** November 2020 +**GPR Score:** 70.07 + +**Summary:** +In November 2020, the global Geopolitical Risk (GPR) Index stood at **70.07**. The index changed by -7.91% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by -4.12%. + +**Historical Context:** +This reading sits at the **13.1th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 75.51 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: December 2020 + +**Date:** December 2020 +**GPR Score:** 64.07 + +**Summary:** +In December 2020, the global Geopolitical Risk (GPR) Index stood at **64.07**. The index changed by -8.56% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by -13.75%. + +**Historical Context:** +This reading sits at the **8.3th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 70.07 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: January 2021 + +**Date:** January 2021 +**GPR Score:** 77.42 + +**Summary:** +In January 2021, the global Geopolitical Risk (GPR) Index stood at **77.42**. This represents a **significant escalation**, surging by 20.84% compared to the previous month. Compared to the same period last year, the index shifted by -44.07%. + +**Historical Context:** +This reading sits at the **21.0th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 70.52 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: February 2021 + +**Date:** February 2021 +**GPR Score:** 73.96 + +**Summary:** +In February 2021, the global Geopolitical Risk (GPR) Index stood at **73.96**. The index changed by -4.47% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by -2.63%. + +**Historical Context:** +This reading sits at the **16.0th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 71.81 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: March 2021 + +**Date:** March 2021 +**GPR Score:** 78.62 + +**Summary:** +In March 2021, the global Geopolitical Risk (GPR) Index stood at **78.62**. The index changed by 6.30% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by -3.58%. + +**Historical Context:** +This reading sits at the **22.4th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 76.66 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: April 2021 + +**Date:** April 2021 +**GPR Score:** 88.17 + +**Summary:** +In April 2021, the global Geopolitical Risk (GPR) Index stood at **88.17**. This represents a **significant escalation**, surging by 12.14% compared to the previous month. Compared to the same period last year, the index shifted by 27.15%. + +**Historical Context:** +This reading sits at the **41.2th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 80.25 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: May 2021 + +**Date:** May 2021 +**GPR Score:** 93.01 + +**Summary:** +In May 2021, the global Geopolitical Risk (GPR) Index stood at **93.01**. The index changed by 5.49% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by 35.76%. + +**Historical Context:** +This reading sits at the **50.9th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 86.60 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: June 2021 + +**Date:** June 2021 +**GPR Score:** 74.13 + +**Summary:** +In June 2021, the global Geopolitical Risk (GPR) Index stood at **74.13**. This indicates a **cooling off** of geopolitical tensions, dropping by 20.30% month-over-month. Compared to the same period last year, the index shifted by 4.07%. + +**Historical Context:** +This reading sits at the **16.6th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 85.10 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: July 2021 + +**Date:** July 2021 +**GPR Score:** 58.42 + +**Summary:** +In July 2021, the global Geopolitical Risk (GPR) Index stood at **58.42**. This indicates a **cooling off** of geopolitical tensions, dropping by 21.19% month-over-month. Compared to the same period last year, the index shifted by -12.11%. + +**Historical Context:** +This reading sits at the **5.9th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 75.19 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: August 2021 + +**Date:** August 2021 +**GPR Score:** 89.49 + +**Summary:** +In August 2021, the global Geopolitical Risk (GPR) Index stood at **89.49**. This represents a **significant escalation**, surging by 53.18% compared to the previous month. Compared to the same period last year, the index shifted by 36.69%. + +**Historical Context:** +This reading sits at the **44.0th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 74.01 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: September 2021 + +**Date:** September 2021 +**GPR Score:** 80.7 + +**Summary:** +In September 2021, the global Geopolitical Risk (GPR) Index stood at **80.7**. The index changed by -9.82% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by 0.40%. + +**Historical Context:** +This reading sits at the **26.3th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 76.20 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: October 2021 + +**Date:** October 2021 +**GPR Score:** 79.03 + +**Summary:** +In October 2021, the global Geopolitical Risk (GPR) Index stood at **79.03**. The index changed by -2.07% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by 3.87%. + +**Historical Context:** +This reading sits at the **23.0th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 83.07 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: November 2021 + +**Date:** November 2021 +**GPR Score:** 86.57 + +**Summary:** +In November 2021, the global Geopolitical Risk (GPR) Index stood at **86.57**. The index changed by 9.54% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by 23.55%. + +**Historical Context:** +This reading sits at the **38.8th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 82.10 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: December 2021 + +**Date:** December 2021 +**GPR Score:** 105.35 + +**Summary:** +In December 2021, the global Geopolitical Risk (GPR) Index stood at **105.35**. This represents a **significant escalation**, surging by 21.69% compared to the previous month. Compared to the same period last year, the index shifted by 64.43%. + +**Historical Context:** +This reading sits at the **68.1th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 90.31 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: January 2022 + +**Date:** January 2022 +**GPR Score:** 138.67 + +**Summary:** +In January 2022, the global Geopolitical Risk (GPR) Index stood at **138.67**. This represents a **significant escalation**, surging by 31.64% compared to the previous month. Compared to the same period last year, the index shifted by 79.12%. + +**Historical Context:** +This reading sits at the **88.3th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 110.20 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: February 2022 + +**Date:** February 2022 +**GPR Score:** 216.16 + +**Summary:** +In February 2022, the global Geopolitical Risk (GPR) Index stood at **216.16**. This represents a **significant escalation**, surging by 55.87% compared to the previous month. Compared to the same period last year, the index shifted by 192.28%. + +**Historical Context:** +This reading sits at the **97.4th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 153.39 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: March 2022 + +**Date:** March 2022 +**GPR Score:** 318.95 + +**Summary:** +In March 2022, the global Geopolitical Risk (GPR) Index stood at **318.95**. This represents a **significant escalation**, surging by 47.56% compared to the previous month. Compared to the same period last year, the index shifted by 305.70%. + +**Historical Context:** +This reading sits at the **99.0th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 224.60 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: April 2022 + +**Date:** April 2022 +**GPR Score:** 191.14 + +**Summary:** +In April 2022, the global Geopolitical Risk (GPR) Index stood at **191.14**. This indicates a **cooling off** of geopolitical tensions, dropping by 40.07% month-over-month. Compared to the same period last year, the index shifted by 116.80%. + +**Historical Context:** +This reading sits at the **96.8th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 242.09 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: May 2022 + +**Date:** May 2022 +**GPR Score:** 142.26 + +**Summary:** +In May 2022, the global Geopolitical Risk (GPR) Index stood at **142.26**. This indicates a **cooling off** of geopolitical tensions, dropping by 25.57% month-over-month. Compared to the same period last year, the index shifted by 52.95%. + +**Historical Context:** +This reading sits at the **89.3th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 217.45 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: June 2022 + +**Date:** June 2022 +**GPR Score:** 130.71 + +**Summary:** +In June 2022, the global Geopolitical Risk (GPR) Index stood at **130.71**. The index changed by -8.12% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by 76.33%. + +**Historical Context:** +This reading sits at the **84.0th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 154.70 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: July 2022 + +**Date:** July 2022 +**GPR Score:** 117.18 + +**Summary:** +In July 2022, the global Geopolitical Risk (GPR) Index stood at **117.18**. This indicates a **cooling off** of geopolitical tensions, dropping by 10.35% month-over-month. Compared to the same period last year, the index shifted by 100.57%. + +**Historical Context:** +This reading sits at the **77.8th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 130.05 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: August 2022 + +**Date:** August 2022 +**GPR Score:** 132.86 + +**Summary:** +In August 2022, the global Geopolitical Risk (GPR) Index stood at **132.86**. This represents a **significant escalation**, surging by 13.39% compared to the previous month. Compared to the same period last year, the index shifted by 48.47%. + +**Historical Context:** +This reading sits at the **85.0th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 126.92 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: September 2022 + +**Date:** September 2022 +**GPR Score:** 131.99 + +**Summary:** +In September 2022, the global Geopolitical Risk (GPR) Index stood at **131.99**. The index changed by -0.66% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by 63.56%. + +**Historical Context:** +This reading sits at the **84.8th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 127.34 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: October 2022 + +**Date:** October 2022 +**GPR Score:** 143.16 + +**Summary:** +In October 2022, the global Geopolitical Risk (GPR) Index stood at **143.16**. The index changed by 8.47% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by 81.15%. + +**Historical Context:** +This reading sits at the **89.9th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 136.00 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: November 2022 + +**Date:** November 2022 +**GPR Score:** 116.72 + +**Summary:** +In November 2022, the global Geopolitical Risk (GPR) Index stood at **116.72**. This indicates a **cooling off** of geopolitical tensions, dropping by 18.47% month-over-month. Compared to the same period last year, the index shifted by 34.82%. + +**Historical Context:** +This reading sits at the **77.2th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 130.62 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: December 2022 + +**Date:** December 2022 +**GPR Score:** 111.2 + +**Summary:** +In December 2022, the global Geopolitical Risk (GPR) Index stood at **111.2**. The index changed by -4.73% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by 5.55%. + +**Historical Context:** +This reading sits at the **72.9th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 123.69 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: January 2023 + +**Date:** January 2023 +**GPR Score:** 104.27 + +**Summary:** +In January 2023, the global Geopolitical Risk (GPR) Index stood at **104.27**. The index changed by -6.23% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by -24.81%. + +**Historical Context:** +This reading sits at the **66.5th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 110.73 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: February 2023 + +**Date:** February 2023 +**GPR Score:** 120.99 + +**Summary:** +In February 2023, the global Geopolitical Risk (GPR) Index stood at **120.99**. This represents a **significant escalation**, surging by 16.04% compared to the previous month. Compared to the same period last year, the index shifted by -44.03%. + +**Historical Context:** +This reading sits at the **80.2th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 112.15 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: March 2023 + +**Date:** March 2023 +**GPR Score:** 105.38 + +**Summary:** +In March 2023, the global Geopolitical Risk (GPR) Index stood at **105.38**. This indicates a **cooling off** of geopolitical tensions, dropping by 12.91% month-over-month. Compared to the same period last year, the index shifted by -66.96%. + +**Historical Context:** +This reading sits at the **68.3th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 110.21 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: April 2023 + +**Date:** April 2023 +**GPR Score:** 106.81 + +**Summary:** +In April 2023, the global Geopolitical Risk (GPR) Index stood at **106.81**. The index changed by 1.36% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by -44.12%. + +**Historical Context:** +This reading sits at the **69.7th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 111.06 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: May 2023 + +**Date:** May 2023 +**GPR Score:** 108.47 + +**Summary:** +In May 2023, the global Geopolitical Risk (GPR) Index stood at **108.47**. The index changed by 1.55% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by -23.75%. + +**Historical Context:** +This reading sits at the **70.7th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 106.89 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: June 2023 + +**Date:** June 2023 +**GPR Score:** 110.53 + +**Summary:** +In June 2023, the global Geopolitical Risk (GPR) Index stood at **110.53**. The index changed by 1.90% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by -15.44%. + +**Historical Context:** +This reading sits at the **72.5th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 108.60 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: July 2023 + +**Date:** July 2023 +**GPR Score:** 107.45 + +**Summary:** +In July 2023, the global Geopolitical Risk (GPR) Index stood at **107.45**. The index changed by -2.79% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by -8.30%. + +**Historical Context:** +This reading sits at the **70.1th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 108.82 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: August 2023 + +**Date:** August 2023 +**GPR Score:** 101.14 + +**Summary:** +In August 2023, the global Geopolitical Risk (GPR) Index stood at **101.14**. The index changed by -5.87% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by -23.88%. + +**Historical Context:** +This reading sits at the **62.4th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 106.37 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: September 2023 + +**Date:** September 2023 +**GPR Score:** 98.63 + +**Summary:** +In September 2023, the global Geopolitical Risk (GPR) Index stood at **98.63**. The index changed by -2.48% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by -25.27%. + +**Historical Context:** +This reading sits at the **58.8th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 102.41 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: October 2023 + +**Date:** October 2023 +**GPR Score:** 197.89 + +**Summary:** +In October 2023, the global Geopolitical Risk (GPR) Index stood at **197.89**. This represents a **significant escalation**, surging by 100.63% compared to the previous month. Compared to the same period last year, the index shifted by 38.23%. + +**Historical Context:** +This reading sits at the **97.0th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 132.55 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: November 2023 + +**Date:** November 2023 +**GPR Score:** 156.7 + +**Summary:** +In November 2023, the global Geopolitical Risk (GPR) Index stood at **156.7**. This indicates a **cooling off** of geopolitical tensions, dropping by 20.82% month-over-month. Compared to the same period last year, the index shifted by 34.25%. + +**Historical Context:** +This reading sits at the **93.3th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 151.07 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: December 2023 + +**Date:** December 2023 +**GPR Score:** 142.28 + +**Summary:** +In December 2023, the global Geopolitical Risk (GPR) Index stood at **142.28**. The index changed by -9.20% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by 27.95%. + +**Historical Context:** +This reading sits at the **89.5th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 165.62 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: January 2024 + +**Date:** January 2024 +**GPR Score:** 160.37 + +**Summary:** +In January 2024, the global Geopolitical Risk (GPR) Index stood at **160.37**. This represents a **significant escalation**, surging by 12.72% compared to the previous month. Compared to the same period last year, the index shifted by 53.81%. + +**Historical Context:** +This reading sits at the **94.1th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 153.12 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: February 2024 + +**Date:** February 2024 +**GPR Score:** 146.6 + +**Summary:** +In February 2024, the global Geopolitical Risk (GPR) Index stood at **146.6**. The index changed by -8.59% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by 21.16%. + +**Historical Context:** +This reading sits at the **90.7th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 149.75 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: March 2024 + +**Date:** March 2024 +**GPR Score:** 133.21 + +**Summary:** +In March 2024, the global Geopolitical Risk (GPR) Index stood at **133.21**. The index changed by -9.13% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by 26.41%. + +**Historical Context:** +This reading sits at the **85.2th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 146.73 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: April 2024 + +**Date:** April 2024 +**GPR Score:** 163.95 + +**Summary:** +In April 2024, the global Geopolitical Risk (GPR) Index stood at **163.95**. This represents a **significant escalation**, surging by 23.07% compared to the previous month. Compared to the same period last year, the index shifted by 53.49%. + +**Historical Context:** +This reading sits at the **94.8th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 147.92 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: May 2024 + +**Date:** May 2024 +**GPR Score:** 130.52 + +**Summary:** +In May 2024, the global Geopolitical Risk (GPR) Index stood at **130.52**. This indicates a **cooling off** of geopolitical tensions, dropping by 20.39% month-over-month. Compared to the same period last year, the index shifted by 20.33%. + +**Historical Context:** +This reading sits at the **83.6th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 142.56 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: June 2024 + +**Date:** June 2024 +**GPR Score:** 113.09 + +**Summary:** +In June 2024, the global Geopolitical Risk (GPR) Index stood at **113.09**. This indicates a **cooling off** of geopolitical tensions, dropping by 13.35% month-over-month. Compared to the same period last year, the index shifted by 2.32%. + +**Historical Context:** +This reading sits at the **74.8th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 135.85 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: July 2024 + +**Date:** July 2024 +**GPR Score:** 92.39 + +**Summary:** +In July 2024, the global Geopolitical Risk (GPR) Index stood at **92.39**. This indicates a **cooling off** of geopolitical tensions, dropping by 18.30% month-over-month. Compared to the same period last year, the index shifted by -14.01%. + +**Historical Context:** +This reading sits at the **49.1th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 112.00 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: August 2024 + +**Date:** August 2024 +**GPR Score:** 140.98 + +**Summary:** +In August 2024, the global Geopolitical Risk (GPR) Index stood at **140.98**. This represents a **significant escalation**, surging by 52.58% compared to the previous month. Compared to the same period last year, the index shifted by 39.38%. + +**Historical Context:** +This reading sits at the **89.1th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 115.49 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: September 2024 + +**Date:** September 2024 +**GPR Score:** 130.36 + +**Summary:** +In September 2024, the global Geopolitical Risk (GPR) Index stood at **130.36**. The index changed by -7.53% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by 32.16%. + +**Historical Context:** +This reading sits at the **83.4th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 121.24 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: October 2024 + +**Date:** October 2024 +**GPR Score:** 130.69 + +**Summary:** +In October 2024, the global Geopolitical Risk (GPR) Index stood at **130.69**. The index changed by 0.25% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by -33.96%. + +**Historical Context:** +This reading sits at the **83.8th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 134.01 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: November 2024 + +**Date:** November 2024 +**GPR Score:** 128.9 + +**Summary:** +In November 2024, the global Geopolitical Risk (GPR) Index stood at **128.9**. The index changed by -1.37% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by -17.74%. + +**Historical Context:** +This reading sits at the **82.8th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 129.98 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: December 2024 + +**Date:** December 2024 +**GPR Score:** 142.37 + +**Summary:** +In December 2024, the global Geopolitical Risk (GPR) Index stood at **142.37**. This represents a **significant escalation**, surging by 10.45% compared to the previous month. Compared to the same period last year, the index shifted by 0.06%. + +**Historical Context:** +This reading sits at the **89.7th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 133.99 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: January 2025 + +**Date:** January 2025 +**GPR Score:** 113.23 + +**Summary:** +In January 2025, the global Geopolitical Risk (GPR) Index stood at **113.23**. This indicates a **cooling off** of geopolitical tensions, dropping by 20.46% month-over-month. Compared to the same period last year, the index shifted by -29.39%. + +**Historical Context:** +This reading sits at the **75.2th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 128.17 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: February 2025 + +**Date:** February 2025 +**GPR Score:** 136.97 + +**Summary:** +In February 2025, the global Geopolitical Risk (GPR) Index stood at **136.97**. This represents a **significant escalation**, surging by 20.96% compared to the previous month. Compared to the same period last year, the index shifted by -6.57%. + +**Historical Context:** +This reading sits at the **86.7th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 130.86 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: March 2025 + +**Date:** March 2025 +**GPR Score:** 173.91 + +**Summary:** +In March 2025, the global Geopolitical Risk (GPR) Index stood at **173.91**. This represents a **significant escalation**, surging by 26.97% compared to the previous month. Compared to the same period last year, the index shifted by 30.55%. + +**Historical Context:** +This reading sits at the **96.0th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 141.37 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: April 2025 + +**Date:** April 2025 +**GPR Score:** 140.97 + +**Summary:** +In April 2025, the global Geopolitical Risk (GPR) Index stood at **140.97**. This indicates a **cooling off** of geopolitical tensions, dropping by 18.94% month-over-month. Compared to the same period last year, the index shifted by -14.01%. + +**Historical Context:** +This reading sits at the **88.9th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 150.62 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: May 2025 + +**Date:** May 2025 +**GPR Score:** 165.66 + +**Summary:** +In May 2025, the global Geopolitical Risk (GPR) Index stood at **165.66**. This represents a **significant escalation**, surging by 17.51% compared to the previous month. Compared to the same period last year, the index shifted by 26.92%. + +**Historical Context:** +This reading sits at the **95.0th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 160.18 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: June 2025 + +**Date:** June 2025 +**GPR Score:** 222.38 + +**Summary:** +In June 2025, the global Geopolitical Risk (GPR) Index stood at **222.38**. This represents a **significant escalation**, surging by 34.24% compared to the previous month. Compared to the same period last year, the index shifted by 96.63%. + +**Historical Context:** +This reading sits at the **97.6th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 176.34 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: July 2025 + +**Date:** July 2025 +**GPR Score:** 134.02 + +**Summary:** +In July 2025, the global Geopolitical Risk (GPR) Index stood at **134.02**. This indicates a **cooling off** of geopolitical tensions, dropping by 39.73% month-over-month. Compared to the same period last year, the index shifted by 45.05%. + +**Historical Context:** +This reading sits at the **85.7th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 174.02 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: August 2025 + +**Date:** August 2025 +**GPR Score:** 138.56 + +**Summary:** +In August 2025, the global Geopolitical Risk (GPR) Index stood at **138.56**. The index changed by 3.39% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by -1.71%. + +**Historical Context:** +This reading sits at the **88.1th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 164.99 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: September 2025 + +**Date:** September 2025 +**GPR Score:** 125.87 + +**Summary:** +In September 2025, the global Geopolitical Risk (GPR) Index stood at **125.87**. The index changed by -9.16% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by -3.44%. + +**Historical Context:** +This reading sits at the **82.2th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 132.82 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: October 2025 + +**Date:** October 2025 +**GPR Score:** 154.51 + +**Summary:** +In October 2025, the global Geopolitical Risk (GPR) Index stood at **154.51**. This represents a **significant escalation**, surging by 22.76% compared to the previous month. Compared to the same period last year, the index shifted by 18.23%. + +**Historical Context:** +This reading sits at the **93.1th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 139.65 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: November 2025 + +**Date:** November 2025 +**GPR Score:** 104.34 + +**Summary:** +In November 2025, the global Geopolitical Risk (GPR) Index stood at **104.34**. This indicates a **cooling off** of geopolitical tensions, dropping by 32.47% month-over-month. Compared to the same period last year, the index shifted by -19.06%. + +**Historical Context:** +This reading sits at the **66.7th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 128.24 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: December 2025 + +**Date:** December 2025 +**GPR Score:** 131.39 + +**Summary:** +In December 2025, the global Geopolitical Risk (GPR) Index stood at **131.39**. This represents a **significant escalation**, surging by 25.93% compared to the previous month. Compared to the same period last year, the index shifted by -7.71%. + +**Historical Context:** +This reading sits at the **84.4th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 130.08 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: January 2026 + +**Date:** January 2026 +**GPR Score:** 167.8 + +**Summary:** +In January 2026, the global Geopolitical Risk (GPR) Index stood at **167.8**. This represents a **significant escalation**, surging by 27.71% compared to the previous month. Compared to the same period last year, the index shifted by 48.19%. + +**Historical Context:** +This reading sits at the **95.3th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 134.51 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: February 2026 + +**Date:** February 2026 +**GPR Score:** 121.62 + +**Summary:** +In February 2026, the global Geopolitical Risk (GPR) Index stood at **121.62**. This indicates a **cooling off** of geopolitical tensions, dropping by 27.52% month-over-month. Compared to the same period last year, the index shifted by -11.21%. + +**Historical Context:** +This reading sits at the **80.8th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 140.27 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + +### Geopolitical Risk (GPR) Index Update: March 2026 + +**Date:** March 2026 +**GPR Score:** 297.27 + +**Summary:** +In March 2026, the global Geopolitical Risk (GPR) Index stood at **297.27**. This represents a **significant escalation**, surging by 144.43% compared to the previous month. Compared to the same period last year, the index shifted by 70.93%. + +**Historical Context:** +This reading sits at the **98.6th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 195.56 suggests the current medium-term trend. + +**Impact on Precious Metals:** +Historically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG). + + +--- + diff --git a/Data/3_Gold_Semantic/GPR_index/2026-04-10/qdrant_gpr_input.jsonl b/Data/3_Gold_Semantic/GPR_index/2026-04-10/qdrant_gpr_input.jsonl new file mode 100644 index 0000000..d31bcdc --- /dev/null +++ b/Data/3_Gold_Semantic/GPR_index/2026-04-10/qdrant_gpr_input.jsonl @@ -0,0 +1,75 @@ +{"id": "8aa40e1b-b56e-55b4-addd-af6fe6041045", "text": "### Geopolitical Risk (GPR) Index Update: January 2020\n\n**Date:** January 2020\n**GPR Score:** 138.42\n\n**Summary:**\nIn January 2020, the global Geopolitical Risk (GPR) Index stood at **138.42**. This represents a **significant escalation**, surging by 86.35% compared to the previous month. Compared to the same period last year, the index shifted by 58.33%.\n\n**Historical Context:**\nThis reading sits at the **87.5th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 95.26 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2020-01", "publish_date": "2020-01-01", "publish_timestamp": 1577836800, "gpr_score": 138.42, "gpr_percentile": 87.47}} +{"id": "37c10f6b-7a33-54d4-aa57-f54d6e02b047", "text": "### Geopolitical Risk (GPR) Index Update: February 2020\n\n**Date:** February 2020\n**GPR Score:** 75.96\n\n**Summary:**\nIn February 2020, the global Geopolitical Risk (GPR) Index stood at **75.96**. This indicates a **cooling off** of geopolitical tensions, dropping by 45.13% month-over-month. Compared to the same period last year, the index shifted by -21.53%.\n\n**Historical Context:**\nThis reading sits at the **18.8th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 96.22 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2020-02", "publish_date": "2020-02-01", "publish_timestamp": 1580515200, "gpr_score": 75.96, "gpr_percentile": 18.79}} +{"id": "2085a0c1-043d-5f18-82a8-03eea46ea07f", "text": "### Geopolitical Risk (GPR) Index Update: March 2020\n\n**Date:** March 2020\n**GPR Score:** 81.54\n\n**Summary:**\nIn March 2020, the global Geopolitical Risk (GPR) Index stood at **81.54**. The index changed by 7.35% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by -0.96%.\n\n**Historical Context:**\nThis reading sits at the **27.9th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 98.64 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2020-03", "publish_date": "2020-03-01", "publish_timestamp": 1583020800, "gpr_score": 81.54, "gpr_percentile": 27.88}} +{"id": "214e06ea-3991-59b3-9fb6-5a198b0f4580", "text": "### Geopolitical Risk (GPR) Index Update: April 2020\n\n**Date:** April 2020\n**GPR Score:** 69.34\n\n**Summary:**\nIn April 2020, the global Geopolitical Risk (GPR) Index stood at **69.34**. This indicates a **cooling off** of geopolitical tensions, dropping by 14.96% month-over-month. Compared to the same period last year, the index shifted by -12.51%.\n\n**Historical Context:**\nThis reading sits at the **12.5th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 75.61 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2020-04", "publish_date": "2020-04-01", "publish_timestamp": 1585699200, "gpr_score": 69.34, "gpr_percentile": 12.53}} +{"id": "b17910ae-9aeb-5c07-995e-409bab57543a", "text": "### Geopolitical Risk (GPR) Index Update: May 2020\n\n**Date:** May 2020\n**GPR Score:** 68.51\n\n**Summary:**\nIn May 2020, the global Geopolitical Risk (GPR) Index stood at **68.51**. The index changed by -1.20% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by -35.66%.\n\n**Historical Context:**\nThis reading sits at the **11.5th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 73.13 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2020-05", "publish_date": "2020-05-01", "publish_timestamp": 1588291200, "gpr_score": 68.51, "gpr_percentile": 11.52}} +{"id": "cea60daa-73a0-5d98-bc8f-bf4000509223", "text": "### Geopolitical Risk (GPR) Index Update: June 2020\n\n**Date:** June 2020\n**GPR Score:** 71.23\n\n**Summary:**\nIn June 2020, the global Geopolitical Risk (GPR) Index stood at **71.23**. The index changed by 3.97% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by -33.17%.\n\n**Historical Context:**\nThis reading sits at the **13.9th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 69.69 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2020-06", "publish_date": "2020-06-01", "publish_timestamp": 1590969600, "gpr_score": 71.23, "gpr_percentile": 13.94}} +{"id": "58952a55-4410-5967-b6d7-6004ec1228dd", "text": "### Geopolitical Risk (GPR) Index Update: July 2020\n\n**Date:** July 2020\n**GPR Score:** 66.47\n\n**Summary:**\nIn July 2020, the global Geopolitical Risk (GPR) Index stood at **66.47**. The index changed by -6.68% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by -28.92%.\n\n**Historical Context:**\nThis reading sits at the **10.3th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 68.74 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2020-07", "publish_date": "2020-07-01", "publish_timestamp": 1593561600, "gpr_score": 66.47, "gpr_percentile": 10.3}} +{"id": "b20ee7e1-4664-5a0a-aa56-d15fe7eecb10", "text": "### Geopolitical Risk (GPR) Index Update: August 2020\n\n**Date:** August 2020\n**GPR Score:** 65.47\n\n**Summary:**\nIn August 2020, the global Geopolitical Risk (GPR) Index stood at **65.47**. The index changed by -1.52% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by -36.69%.\n\n**Historical Context:**\nThis reading sits at the **9.5th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 67.72 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2020-08", "publish_date": "2020-08-01", "publish_timestamp": 1596240000, "gpr_score": 65.47, "gpr_percentile": 9.49}} +{"id": "0a9eb60d-9cc7-53b0-8e7e-492efb7397c8", "text": "### Geopolitical Risk (GPR) Index Update: September 2020\n\n**Date:** September 2020\n**GPR Score:** 80.38\n\n**Summary:**\nIn September 2020, the global Geopolitical Risk (GPR) Index stood at **80.38**. This represents a **significant escalation**, surging by 22.78% compared to the previous month. Compared to the same period last year, the index shifted by -11.06%.\n\n**Historical Context:**\nThis reading sits at the **25.4th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 70.77 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2020-09", "publish_date": "2020-09-01", "publish_timestamp": 1598918400, "gpr_score": 80.38, "gpr_percentile": 25.45}} +{"id": "e04d9434-76eb-5f68-b85b-0c3ac4cb9b33", "text": "### Geopolitical Risk (GPR) Index Update: October 2020\n\n**Date:** October 2020\n**GPR Score:** 76.08\n\n**Summary:**\nIn October 2020, the global Geopolitical Risk (GPR) Index stood at **76.08**. The index changed by -5.34% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by -22.23%.\n\n**Historical Context:**\nThis reading sits at the **19.2th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 73.98 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2020-10", "publish_date": "2020-10-01", "publish_timestamp": 1601510400, "gpr_score": 76.08, "gpr_percentile": 19.19}} +{"id": "4c8c88a3-0e1f-5496-89e4-390f5a8e1770", "text": "### Geopolitical Risk (GPR) Index Update: November 2020\n\n**Date:** November 2020\n**GPR Score:** 70.07\n\n**Summary:**\nIn November 2020, the global Geopolitical Risk (GPR) Index stood at **70.07**. The index changed by -7.91% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by -4.12%.\n\n**Historical Context:**\nThis reading sits at the **13.1th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 75.51 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2020-11", "publish_date": "2020-11-01", "publish_timestamp": 1604188800, "gpr_score": 70.07, "gpr_percentile": 13.13}} +{"id": "b63072dc-5040-515f-b3ea-02483d3a8079", "text": "### Geopolitical Risk (GPR) Index Update: December 2020\n\n**Date:** December 2020\n**GPR Score:** 64.07\n\n**Summary:**\nIn December 2020, the global Geopolitical Risk (GPR) Index stood at **64.07**. The index changed by -8.56% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by -13.75%.\n\n**Historical Context:**\nThis reading sits at the **8.3th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 70.07 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2020-12", "publish_date": "2020-12-01", "publish_timestamp": 1606780800, "gpr_score": 64.07, "gpr_percentile": 8.28}} +{"id": "9b29a461-2be8-5ffe-a204-f4b0e198ee11", "text": "### Geopolitical Risk (GPR) Index Update: January 2021\n\n**Date:** January 2021\n**GPR Score:** 77.42\n\n**Summary:**\nIn January 2021, the global Geopolitical Risk (GPR) Index stood at **77.42**. This represents a **significant escalation**, surging by 20.84% compared to the previous month. Compared to the same period last year, the index shifted by -44.07%.\n\n**Historical Context:**\nThis reading sits at the **21.0th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 70.52 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2021-01", "publish_date": "2021-01-01", "publish_timestamp": 1609459200, "gpr_score": 77.42, "gpr_percentile": 21.01}} +{"id": "3d05aa85-4099-5390-84f9-8a43f4af2672", "text": "### Geopolitical Risk (GPR) Index Update: February 2021\n\n**Date:** February 2021\n**GPR Score:** 73.96\n\n**Summary:**\nIn February 2021, the global Geopolitical Risk (GPR) Index stood at **73.96**. The index changed by -4.47% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by -2.63%.\n\n**Historical Context:**\nThis reading sits at the **16.0th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 71.81 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2021-02", "publish_date": "2021-02-01", "publish_timestamp": 1612137600, "gpr_score": 73.96, "gpr_percentile": 15.96}} +{"id": "4c689546-4513-5498-87bf-f4be30a4e98d", "text": "### Geopolitical Risk (GPR) Index Update: March 2021\n\n**Date:** March 2021\n**GPR Score:** 78.62\n\n**Summary:**\nIn March 2021, the global Geopolitical Risk (GPR) Index stood at **78.62**. The index changed by 6.30% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by -3.58%.\n\n**Historical Context:**\nThis reading sits at the **22.4th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 76.66 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2021-03", "publish_date": "2021-03-01", "publish_timestamp": 1614556800, "gpr_score": 78.62, "gpr_percentile": 22.42}} +{"id": "b4a5f400-63fb-5c1f-9abf-cf10df4534f2", "text": "### Geopolitical Risk (GPR) Index Update: April 2021\n\n**Date:** April 2021\n**GPR Score:** 88.17\n\n**Summary:**\nIn April 2021, the global Geopolitical Risk (GPR) Index stood at **88.17**. This represents a **significant escalation**, surging by 12.14% compared to the previous month. Compared to the same period last year, the index shifted by 27.15%.\n\n**Historical Context:**\nThis reading sits at the **41.2th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 80.25 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2021-04", "publish_date": "2021-04-01", "publish_timestamp": 1617235200, "gpr_score": 88.17, "gpr_percentile": 41.21}} +{"id": "b476abc3-9b9c-5136-b076-e64f51f4833a", "text": "### Geopolitical Risk (GPR) Index Update: May 2021\n\n**Date:** May 2021\n**GPR Score:** 93.01\n\n**Summary:**\nIn May 2021, the global Geopolitical Risk (GPR) Index stood at **93.01**. The index changed by 5.49% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by 35.76%.\n\n**Historical Context:**\nThis reading sits at the **50.9th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 86.60 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2021-05", "publish_date": "2021-05-01", "publish_timestamp": 1619827200, "gpr_score": 93.01, "gpr_percentile": 50.91}} +{"id": "e650993e-f5ab-540e-bc76-b3fd191cc0f2", "text": "### Geopolitical Risk (GPR) Index Update: June 2021\n\n**Date:** June 2021\n**GPR Score:** 74.13\n\n**Summary:**\nIn June 2021, the global Geopolitical Risk (GPR) Index stood at **74.13**. This indicates a **cooling off** of geopolitical tensions, dropping by 20.30% month-over-month. Compared to the same period last year, the index shifted by 4.07%.\n\n**Historical Context:**\nThis reading sits at the **16.6th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 85.10 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2021-06", "publish_date": "2021-06-01", "publish_timestamp": 1622505600, "gpr_score": 74.13, "gpr_percentile": 16.57}} +{"id": "c7080c2d-fcb4-5ce8-be15-89ed1403142d", "text": "### Geopolitical Risk (GPR) Index Update: July 2021\n\n**Date:** July 2021\n**GPR Score:** 58.42\n\n**Summary:**\nIn July 2021, the global Geopolitical Risk (GPR) Index stood at **58.42**. This indicates a **cooling off** of geopolitical tensions, dropping by 21.19% month-over-month. Compared to the same period last year, the index shifted by -12.11%.\n\n**Historical Context:**\nThis reading sits at the **5.9th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 75.19 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2021-07", "publish_date": "2021-07-01", "publish_timestamp": 1625097600, "gpr_score": 58.42, "gpr_percentile": 5.86}} +{"id": "845edb1e-4779-52b6-9a66-44ec8e00501d", "text": "### Geopolitical Risk (GPR) Index Update: August 2021\n\n**Date:** August 2021\n**GPR Score:** 89.49\n\n**Summary:**\nIn August 2021, the global Geopolitical Risk (GPR) Index stood at **89.49**. This represents a **significant escalation**, surging by 53.18% compared to the previous month. Compared to the same period last year, the index shifted by 36.69%.\n\n**Historical Context:**\nThis reading sits at the **44.0th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 74.01 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2021-08", "publish_date": "2021-08-01", "publish_timestamp": 1627776000, "gpr_score": 89.49, "gpr_percentile": 44.04}} +{"id": "8ce4b880-6fce-561c-8128-87c805ba1333", "text": "### Geopolitical Risk (GPR) Index Update: September 2021\n\n**Date:** September 2021\n**GPR Score:** 80.7\n\n**Summary:**\nIn September 2021, the global Geopolitical Risk (GPR) Index stood at **80.7**. The index changed by -9.82% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by 0.40%.\n\n**Historical Context:**\nThis reading sits at the **26.3th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 76.20 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2021-09", "publish_date": "2021-09-01", "publish_timestamp": 1630454400, "gpr_score": 80.7, "gpr_percentile": 26.26}} +{"id": "4e49e4e0-e103-57b6-9f80-ff6fa27543d7", "text": "### Geopolitical Risk (GPR) Index Update: October 2021\n\n**Date:** October 2021\n**GPR Score:** 79.03\n\n**Summary:**\nIn October 2021, the global Geopolitical Risk (GPR) Index stood at **79.03**. The index changed by -2.07% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by 3.87%.\n\n**Historical Context:**\nThis reading sits at the **23.0th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 83.07 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2021-10", "publish_date": "2021-10-01", "publish_timestamp": 1633046400, "gpr_score": 79.03, "gpr_percentile": 23.03}} +{"id": "beabc870-4fcd-5636-944f-79054d24ecf0", "text": "### Geopolitical Risk (GPR) Index Update: November 2021\n\n**Date:** November 2021\n**GPR Score:** 86.57\n\n**Summary:**\nIn November 2021, the global Geopolitical Risk (GPR) Index stood at **86.57**. The index changed by 9.54% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by 23.55%.\n\n**Historical Context:**\nThis reading sits at the **38.8th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 82.10 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2021-11", "publish_date": "2021-11-01", "publish_timestamp": 1635724800, "gpr_score": 86.57, "gpr_percentile": 38.79}} +{"id": "71235083-8d71-5a97-bc58-373053ad79b6", "text": "### Geopolitical Risk (GPR) Index Update: December 2021\n\n**Date:** December 2021\n**GPR Score:** 105.35\n\n**Summary:**\nIn December 2021, the global Geopolitical Risk (GPR) Index stood at **105.35**. This represents a **significant escalation**, surging by 21.69% compared to the previous month. Compared to the same period last year, the index shifted by 64.43%.\n\n**Historical Context:**\nThis reading sits at the **68.1th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 90.31 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2021-12", "publish_date": "2021-12-01", "publish_timestamp": 1638316800, "gpr_score": 105.35, "gpr_percentile": 68.08}} +{"id": "dfacf6a7-3225-57b9-9e18-dd439c6639f6", "text": "### Geopolitical Risk (GPR) Index Update: January 2022\n\n**Date:** January 2022\n**GPR Score:** 138.67\n\n**Summary:**\nIn January 2022, the global Geopolitical Risk (GPR) Index stood at **138.67**. This represents a **significant escalation**, surging by 31.64% compared to the previous month. Compared to the same period last year, the index shifted by 79.12%.\n\n**Historical Context:**\nThis reading sits at the **88.3th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 110.20 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2022-01", "publish_date": "2022-01-01", "publish_timestamp": 1640995200, "gpr_score": 138.67, "gpr_percentile": 88.28}} +{"id": "bc68b51a-48a6-52af-b9f3-271beeaff356", "text": "### Geopolitical Risk (GPR) Index Update: February 2022\n\n**Date:** February 2022\n**GPR Score:** 216.16\n\n**Summary:**\nIn February 2022, the global Geopolitical Risk (GPR) Index stood at **216.16**. This represents a **significant escalation**, surging by 55.87% compared to the previous month. Compared to the same period last year, the index shifted by 192.28%.\n\n**Historical Context:**\nThis reading sits at the **97.4th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 153.39 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2022-02", "publish_date": "2022-02-01", "publish_timestamp": 1643673600, "gpr_score": 216.16, "gpr_percentile": 97.37}} +{"id": "eebd7873-7519-52d5-a5e3-cca45187edf2", "text": "### Geopolitical Risk (GPR) Index Update: March 2022\n\n**Date:** March 2022\n**GPR Score:** 318.95\n\n**Summary:**\nIn March 2022, the global Geopolitical Risk (GPR) Index stood at **318.95**. This represents a **significant escalation**, surging by 47.56% compared to the previous month. Compared to the same period last year, the index shifted by 305.70%.\n\n**Historical Context:**\nThis reading sits at the **99.0th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 224.60 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2022-03", "publish_date": "2022-03-01", "publish_timestamp": 1646092800, "gpr_score": 318.95, "gpr_percentile": 98.99}} +{"id": "0d3ed813-8c4a-52df-b617-a26dc62afe0c", "text": "### Geopolitical Risk (GPR) Index Update: April 2022\n\n**Date:** April 2022\n**GPR Score:** 191.14\n\n**Summary:**\nIn April 2022, the global Geopolitical Risk (GPR) Index stood at **191.14**. This indicates a **cooling off** of geopolitical tensions, dropping by 40.07% month-over-month. Compared to the same period last year, the index shifted by 116.80%.\n\n**Historical Context:**\nThis reading sits at the **96.8th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 242.09 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2022-04", "publish_date": "2022-04-01", "publish_timestamp": 1648771200, "gpr_score": 191.14, "gpr_percentile": 96.77}} +{"id": "1d6b0ec9-7653-5ed9-b26a-2605c4ca90fb", "text": "### Geopolitical Risk (GPR) Index Update: May 2022\n\n**Date:** May 2022\n**GPR Score:** 142.26\n\n**Summary:**\nIn May 2022, the global Geopolitical Risk (GPR) Index stood at **142.26**. This indicates a **cooling off** of geopolitical tensions, dropping by 25.57% month-over-month. Compared to the same period last year, the index shifted by 52.95%.\n\n**Historical Context:**\nThis reading sits at the **89.3th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 217.45 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2022-05", "publish_date": "2022-05-01", "publish_timestamp": 1651363200, "gpr_score": 142.26, "gpr_percentile": 89.29}} +{"id": "fe818e47-b1da-54e0-855b-9eb374e833c2", "text": "### Geopolitical Risk (GPR) Index Update: June 2022\n\n**Date:** June 2022\n**GPR Score:** 130.71\n\n**Summary:**\nIn June 2022, the global Geopolitical Risk (GPR) Index stood at **130.71**. The index changed by -8.12% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by 76.33%.\n\n**Historical Context:**\nThis reading sits at the **84.0th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 154.70 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2022-06", "publish_date": "2022-06-01", "publish_timestamp": 1654041600, "gpr_score": 130.71, "gpr_percentile": 84.04}} +{"id": "8b5d94be-38d3-55f4-99e1-403059e504f0", "text": "### Geopolitical Risk (GPR) Index Update: July 2022\n\n**Date:** July 2022\n**GPR Score:** 117.18\n\n**Summary:**\nIn July 2022, the global Geopolitical Risk (GPR) Index stood at **117.18**. This indicates a **cooling off** of geopolitical tensions, dropping by 10.35% month-over-month. Compared to the same period last year, the index shifted by 100.57%.\n\n**Historical Context:**\nThis reading sits at the **77.8th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 130.05 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2022-07", "publish_date": "2022-07-01", "publish_timestamp": 1656633600, "gpr_score": 117.18, "gpr_percentile": 77.78}} +{"id": "a09f0ea8-3acd-5358-ad45-1771145b7f15", "text": "### Geopolitical Risk (GPR) Index Update: August 2022\n\n**Date:** August 2022\n**GPR Score:** 132.86\n\n**Summary:**\nIn August 2022, the global Geopolitical Risk (GPR) Index stood at **132.86**. This represents a **significant escalation**, surging by 13.39% compared to the previous month. Compared to the same period last year, the index shifted by 48.47%.\n\n**Historical Context:**\nThis reading sits at the **85.0th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 126.92 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2022-08", "publish_date": "2022-08-01", "publish_timestamp": 1659312000, "gpr_score": 132.86, "gpr_percentile": 85.05}} +{"id": "05c42d4b-6e17-5e96-9016-1b0f710cd01d", "text": "### Geopolitical Risk (GPR) Index Update: September 2022\n\n**Date:** September 2022\n**GPR Score:** 131.99\n\n**Summary:**\nIn September 2022, the global Geopolitical Risk (GPR) Index stood at **131.99**. The index changed by -0.66% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by 63.56%.\n\n**Historical Context:**\nThis reading sits at the **84.8th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 127.34 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2022-09", "publish_date": "2022-09-01", "publish_timestamp": 1661990400, "gpr_score": 131.99, "gpr_percentile": 84.85}} +{"id": "549f8f4f-4081-566f-a3e2-f883083c3d5e", "text": "### Geopolitical Risk (GPR) Index Update: October 2022\n\n**Date:** October 2022\n**GPR Score:** 143.16\n\n**Summary:**\nIn October 2022, the global Geopolitical Risk (GPR) Index stood at **143.16**. The index changed by 8.47% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by 81.15%.\n\n**Historical Context:**\nThis reading sits at the **89.9th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 136.00 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2022-10", "publish_date": "2022-10-01", "publish_timestamp": 1664582400, "gpr_score": 143.16, "gpr_percentile": 89.9}} +{"id": "4bc4da11-be70-5626-a9b3-a5763cd9b58c", "text": "### Geopolitical Risk (GPR) Index Update: November 2022\n\n**Date:** November 2022\n**GPR Score:** 116.72\n\n**Summary:**\nIn November 2022, the global Geopolitical Risk (GPR) Index stood at **116.72**. This indicates a **cooling off** of geopolitical tensions, dropping by 18.47% month-over-month. Compared to the same period last year, the index shifted by 34.82%.\n\n**Historical Context:**\nThis reading sits at the **77.2th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 130.62 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2022-11", "publish_date": "2022-11-01", "publish_timestamp": 1667260800, "gpr_score": 116.72, "gpr_percentile": 77.17}} +{"id": "f4ebedde-7e31-5018-be36-c824111fb99d", "text": "### Geopolitical Risk (GPR) Index Update: December 2022\n\n**Date:** December 2022\n**GPR Score:** 111.2\n\n**Summary:**\nIn December 2022, the global Geopolitical Risk (GPR) Index stood at **111.2**. The index changed by -4.73% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by 5.55%.\n\n**Historical Context:**\nThis reading sits at the **72.9th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 123.69 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2022-12", "publish_date": "2022-12-01", "publish_timestamp": 1669852800, "gpr_score": 111.2, "gpr_percentile": 72.93}} +{"id": "d30e17d2-c624-58f9-887d-f0ec8c3da221", "text": "### Geopolitical Risk (GPR) Index Update: January 2023\n\n**Date:** January 2023\n**GPR Score:** 104.27\n\n**Summary:**\nIn January 2023, the global Geopolitical Risk (GPR) Index stood at **104.27**. The index changed by -6.23% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by -24.81%.\n\n**Historical Context:**\nThis reading sits at the **66.5th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 110.73 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2023-01", "publish_date": "2023-01-01", "publish_timestamp": 1672531200, "gpr_score": 104.27, "gpr_percentile": 66.46}} +{"id": "b57d4dcf-4f24-5f39-a0b5-a9b254227022", "text": "### Geopolitical Risk (GPR) Index Update: February 2023\n\n**Date:** February 2023\n**GPR Score:** 120.99\n\n**Summary:**\nIn February 2023, the global Geopolitical Risk (GPR) Index stood at **120.99**. This represents a **significant escalation**, surging by 16.04% compared to the previous month. Compared to the same period last year, the index shifted by -44.03%.\n\n**Historical Context:**\nThis reading sits at the **80.2th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 112.15 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2023-02", "publish_date": "2023-02-01", "publish_timestamp": 1675209600, "gpr_score": 120.99, "gpr_percentile": 80.2}} +{"id": "ab709dae-80e5-5621-8dee-51e6fc41edf0", "text": "### Geopolitical Risk (GPR) Index Update: March 2023\n\n**Date:** March 2023\n**GPR Score:** 105.38\n\n**Summary:**\nIn March 2023, the global Geopolitical Risk (GPR) Index stood at **105.38**. This indicates a **cooling off** of geopolitical tensions, dropping by 12.91% month-over-month. Compared to the same period last year, the index shifted by -66.96%.\n\n**Historical Context:**\nThis reading sits at the **68.3th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 110.21 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2023-03", "publish_date": "2023-03-01", "publish_timestamp": 1677628800, "gpr_score": 105.38, "gpr_percentile": 68.28}} +{"id": "9cd09bab-5b4c-5fdc-a7d7-de7d54e4e916", "text": "### Geopolitical Risk (GPR) Index Update: April 2023\n\n**Date:** April 2023\n**GPR Score:** 106.81\n\n**Summary:**\nIn April 2023, the global Geopolitical Risk (GPR) Index stood at **106.81**. The index changed by 1.36% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by -44.12%.\n\n**Historical Context:**\nThis reading sits at the **69.7th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 111.06 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2023-04", "publish_date": "2023-04-01", "publish_timestamp": 1680307200, "gpr_score": 106.81, "gpr_percentile": 69.7}} +{"id": "17a9f50e-d759-5f9a-a85f-8ae765234ac8", "text": "### Geopolitical Risk (GPR) Index Update: May 2023\n\n**Date:** May 2023\n**GPR Score:** 108.47\n\n**Summary:**\nIn May 2023, the global Geopolitical Risk (GPR) Index stood at **108.47**. The index changed by 1.55% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by -23.75%.\n\n**Historical Context:**\nThis reading sits at the **70.7th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 106.89 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2023-05", "publish_date": "2023-05-01", "publish_timestamp": 1682899200, "gpr_score": 108.47, "gpr_percentile": 70.71}} +{"id": "7fc08cea-d8f5-5366-9552-968bfcfe2610", "text": "### Geopolitical Risk (GPR) Index Update: June 2023\n\n**Date:** June 2023\n**GPR Score:** 110.53\n\n**Summary:**\nIn June 2023, the global Geopolitical Risk (GPR) Index stood at **110.53**. The index changed by 1.90% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by -15.44%.\n\n**Historical Context:**\nThis reading sits at the **72.5th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 108.60 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2023-06", "publish_date": "2023-06-01", "publish_timestamp": 1685577600, "gpr_score": 110.53, "gpr_percentile": 72.53}} +{"id": "8983f694-f54e-57bf-8e50-0bb16f9530ed", "text": "### Geopolitical Risk (GPR) Index Update: July 2023\n\n**Date:** July 2023\n**GPR Score:** 107.45\n\n**Summary:**\nIn July 2023, the global Geopolitical Risk (GPR) Index stood at **107.45**. The index changed by -2.79% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by -8.30%.\n\n**Historical Context:**\nThis reading sits at the **70.1th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 108.82 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2023-07", "publish_date": "2023-07-01", "publish_timestamp": 1688169600, "gpr_score": 107.45, "gpr_percentile": 70.1}} +{"id": "4726b8d5-1d61-5fdd-9586-13ab46b62b01", "text": "### Geopolitical Risk (GPR) Index Update: August 2023\n\n**Date:** August 2023\n**GPR Score:** 101.14\n\n**Summary:**\nIn August 2023, the global Geopolitical Risk (GPR) Index stood at **101.14**. The index changed by -5.87% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by -23.88%.\n\n**Historical Context:**\nThis reading sits at the **62.4th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 106.37 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2023-08", "publish_date": "2023-08-01", "publish_timestamp": 1690848000, "gpr_score": 101.14, "gpr_percentile": 62.42}} +{"id": "64e025c6-d993-5b06-b563-e3111e49b523", "text": "### Geopolitical Risk (GPR) Index Update: September 2023\n\n**Date:** September 2023\n**GPR Score:** 98.63\n\n**Summary:**\nIn September 2023, the global Geopolitical Risk (GPR) Index stood at **98.63**. The index changed by -2.48% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by -25.27%.\n\n**Historical Context:**\nThis reading sits at the **58.8th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 102.41 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2023-09", "publish_date": "2023-09-01", "publish_timestamp": 1693526400, "gpr_score": 98.63, "gpr_percentile": 58.79}} +{"id": "e0fa3eba-ccba-5679-a9ad-9dd7630f1ec4", "text": "### Geopolitical Risk (GPR) Index Update: October 2023\n\n**Date:** October 2023\n**GPR Score:** 197.89\n\n**Summary:**\nIn October 2023, the global Geopolitical Risk (GPR) Index stood at **197.89**. This represents a **significant escalation**, surging by 100.63% compared to the previous month. Compared to the same period last year, the index shifted by 38.23%.\n\n**Historical Context:**\nThis reading sits at the **97.0th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 132.55 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2023-10", "publish_date": "2023-10-01", "publish_timestamp": 1696118400, "gpr_score": 197.89, "gpr_percentile": 96.97}} +{"id": "90237d10-c10b-5fd3-a3d5-ad05e59ca97e", "text": "### Geopolitical Risk (GPR) Index Update: November 2023\n\n**Date:** November 2023\n**GPR Score:** 156.7\n\n**Summary:**\nIn November 2023, the global Geopolitical Risk (GPR) Index stood at **156.7**. This indicates a **cooling off** of geopolitical tensions, dropping by 20.82% month-over-month. Compared to the same period last year, the index shifted by 34.25%.\n\n**Historical Context:**\nThis reading sits at the **93.3th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 151.07 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2023-11", "publish_date": "2023-11-01", "publish_timestamp": 1698796800, "gpr_score": 156.7, "gpr_percentile": 93.33}} +{"id": "aad585ab-ab9c-591b-b86b-eeb198a23027", "text": "### Geopolitical Risk (GPR) Index Update: December 2023\n\n**Date:** December 2023\n**GPR Score:** 142.28\n\n**Summary:**\nIn December 2023, the global Geopolitical Risk (GPR) Index stood at **142.28**. The index changed by -9.20% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by 27.95%.\n\n**Historical Context:**\nThis reading sits at the **89.5th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 165.62 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2023-12", "publish_date": "2023-12-01", "publish_timestamp": 1701388800, "gpr_score": 142.28, "gpr_percentile": 89.49}} +{"id": "143aeb97-e095-51e1-bd87-b9be1203da92", "text": "### Geopolitical Risk (GPR) Index Update: January 2024\n\n**Date:** January 2024\n**GPR Score:** 160.37\n\n**Summary:**\nIn January 2024, the global Geopolitical Risk (GPR) Index stood at **160.37**. This represents a **significant escalation**, surging by 12.72% compared to the previous month. Compared to the same period last year, the index shifted by 53.81%.\n\n**Historical Context:**\nThis reading sits at the **94.1th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 153.12 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2024-01", "publish_date": "2024-01-01", "publish_timestamp": 1704067200, "gpr_score": 160.37, "gpr_percentile": 94.14}} +{"id": "baa96302-3b8f-57c7-a42d-94727e838254", "text": "### Geopolitical Risk (GPR) Index Update: February 2024\n\n**Date:** February 2024\n**GPR Score:** 146.6\n\n**Summary:**\nIn February 2024, the global Geopolitical Risk (GPR) Index stood at **146.6**. The index changed by -8.59% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by 21.16%.\n\n**Historical Context:**\nThis reading sits at the **90.7th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 149.75 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2024-02", "publish_date": "2024-02-01", "publish_timestamp": 1706745600, "gpr_score": 146.6, "gpr_percentile": 90.71}} +{"id": "6fe9e729-9f51-5fcc-b7bd-dbd74408c2a9", "text": "### Geopolitical Risk (GPR) Index Update: March 2024\n\n**Date:** March 2024\n**GPR Score:** 133.21\n\n**Summary:**\nIn March 2024, the global Geopolitical Risk (GPR) Index stood at **133.21**. The index changed by -9.13% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by 26.41%.\n\n**Historical Context:**\nThis reading sits at the **85.2th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 146.73 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2024-03", "publish_date": "2024-03-01", "publish_timestamp": 1709251200, "gpr_score": 133.21, "gpr_percentile": 85.25}} +{"id": "a2f0fd0c-6316-53e9-b68d-0e30fdc318f4", "text": "### Geopolitical Risk (GPR) Index Update: April 2024\n\n**Date:** April 2024\n**GPR Score:** 163.95\n\n**Summary:**\nIn April 2024, the global Geopolitical Risk (GPR) Index stood at **163.95**. This represents a **significant escalation**, surging by 23.07% compared to the previous month. Compared to the same period last year, the index shifted by 53.49%.\n\n**Historical Context:**\nThis reading sits at the **94.8th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 147.92 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2024-04", "publish_date": "2024-04-01", "publish_timestamp": 1711929600, "gpr_score": 163.95, "gpr_percentile": 94.75}} +{"id": "7d7c7172-50e6-5570-93ac-aa132a32dfea", "text": "### Geopolitical Risk (GPR) Index Update: May 2024\n\n**Date:** May 2024\n**GPR Score:** 130.52\n\n**Summary:**\nIn May 2024, the global Geopolitical Risk (GPR) Index stood at **130.52**. This indicates a **cooling off** of geopolitical tensions, dropping by 20.39% month-over-month. Compared to the same period last year, the index shifted by 20.33%.\n\n**Historical Context:**\nThis reading sits at the **83.6th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 142.56 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2024-05", "publish_date": "2024-05-01", "publish_timestamp": 1714521600, "gpr_score": 130.52, "gpr_percentile": 83.64}} +{"id": "e1ef82ab-1a8e-5b62-9a16-0c3d5e3d471e", "text": "### Geopolitical Risk (GPR) Index Update: June 2024\n\n**Date:** June 2024\n**GPR Score:** 113.09\n\n**Summary:**\nIn June 2024, the global Geopolitical Risk (GPR) Index stood at **113.09**. This indicates a **cooling off** of geopolitical tensions, dropping by 13.35% month-over-month. Compared to the same period last year, the index shifted by 2.32%.\n\n**Historical Context:**\nThis reading sits at the **74.8th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 135.85 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2024-06", "publish_date": "2024-06-01", "publish_timestamp": 1717200000, "gpr_score": 113.09, "gpr_percentile": 74.75}} +{"id": "9d49f9b2-d5bf-5f81-95e6-0e73ecd5eb38", "text": "### Geopolitical Risk (GPR) Index Update: July 2024\n\n**Date:** July 2024\n**GPR Score:** 92.39\n\n**Summary:**\nIn July 2024, the global Geopolitical Risk (GPR) Index stood at **92.39**. This indicates a **cooling off** of geopolitical tensions, dropping by 18.30% month-over-month. Compared to the same period last year, the index shifted by -14.01%.\n\n**Historical Context:**\nThis reading sits at the **49.1th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 112.00 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2024-07", "publish_date": "2024-07-01", "publish_timestamp": 1719792000, "gpr_score": 92.39, "gpr_percentile": 49.09}} +{"id": "e9d870f0-c970-5870-ab3b-852ac959072a", "text": "### Geopolitical Risk (GPR) Index Update: August 2024\n\n**Date:** August 2024\n**GPR Score:** 140.98\n\n**Summary:**\nIn August 2024, the global Geopolitical Risk (GPR) Index stood at **140.98**. This represents a **significant escalation**, surging by 52.58% compared to the previous month. Compared to the same period last year, the index shifted by 39.38%.\n\n**Historical Context:**\nThis reading sits at the **89.1th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 115.49 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2024-08", "publish_date": "2024-08-01", "publish_timestamp": 1722470400, "gpr_score": 140.98, "gpr_percentile": 89.09}} +{"id": "185cab6e-e1be-5c37-8460-050e49822442", "text": "### Geopolitical Risk (GPR) Index Update: September 2024\n\n**Date:** September 2024\n**GPR Score:** 130.36\n\n**Summary:**\nIn September 2024, the global Geopolitical Risk (GPR) Index stood at **130.36**. The index changed by -7.53% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by 32.16%.\n\n**Historical Context:**\nThis reading sits at the **83.4th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 121.24 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2024-09", "publish_date": "2024-09-01", "publish_timestamp": 1725148800, "gpr_score": 130.36, "gpr_percentile": 83.43}} +{"id": "d4490492-0303-585a-bc92-921459a3aef4", "text": "### Geopolitical Risk (GPR) Index Update: October 2024\n\n**Date:** October 2024\n**GPR Score:** 130.69\n\n**Summary:**\nIn October 2024, the global Geopolitical Risk (GPR) Index stood at **130.69**. The index changed by 0.25% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by -33.96%.\n\n**Historical Context:**\nThis reading sits at the **83.8th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 134.01 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2024-10", "publish_date": "2024-10-01", "publish_timestamp": 1727740800, "gpr_score": 130.69, "gpr_percentile": 83.84}} +{"id": "f0890fb0-45c2-5c8a-b3c7-16af61738eb5", "text": "### Geopolitical Risk (GPR) Index Update: November 2024\n\n**Date:** November 2024\n**GPR Score:** 128.9\n\n**Summary:**\nIn November 2024, the global Geopolitical Risk (GPR) Index stood at **128.9**. The index changed by -1.37% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by -17.74%.\n\n**Historical Context:**\nThis reading sits at the **82.8th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 129.98 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2024-11", "publish_date": "2024-11-01", "publish_timestamp": 1730419200, "gpr_score": 128.9, "gpr_percentile": 82.83}} +{"id": "ab17edc1-e7d6-5684-8080-1817a9597872", "text": "### Geopolitical Risk (GPR) Index Update: December 2024\n\n**Date:** December 2024\n**GPR Score:** 142.37\n\n**Summary:**\nIn December 2024, the global Geopolitical Risk (GPR) Index stood at **142.37**. This represents a **significant escalation**, surging by 10.45% compared to the previous month. Compared to the same period last year, the index shifted by 0.06%.\n\n**Historical Context:**\nThis reading sits at the **89.7th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 133.99 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2024-12", "publish_date": "2024-12-01", "publish_timestamp": 1733011200, "gpr_score": 142.37, "gpr_percentile": 89.7}} +{"id": "8ce5e6b4-3fc3-5770-ab05-a5a12971b8d9", "text": "### Geopolitical Risk (GPR) Index Update: January 2025\n\n**Date:** January 2025\n**GPR Score:** 113.23\n\n**Summary:**\nIn January 2025, the global Geopolitical Risk (GPR) Index stood at **113.23**. This indicates a **cooling off** of geopolitical tensions, dropping by 20.46% month-over-month. Compared to the same period last year, the index shifted by -29.39%.\n\n**Historical Context:**\nThis reading sits at the **75.2th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 128.17 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2025-01", "publish_date": "2025-01-01", "publish_timestamp": 1735689600, "gpr_score": 113.23, "gpr_percentile": 75.15}} +{"id": "f2ff6cd0-6b3c-5327-aec3-51d44abc12ca", "text": "### Geopolitical Risk (GPR) Index Update: February 2025\n\n**Date:** February 2025\n**GPR Score:** 136.97\n\n**Summary:**\nIn February 2025, the global Geopolitical Risk (GPR) Index stood at **136.97**. This represents a **significant escalation**, surging by 20.96% compared to the previous month. Compared to the same period last year, the index shifted by -6.57%.\n\n**Historical Context:**\nThis reading sits at the **86.7th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 130.86 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2025-02", "publish_date": "2025-02-01", "publish_timestamp": 1738368000, "gpr_score": 136.97, "gpr_percentile": 86.67}} +{"id": "43b2d8bd-21dd-54c5-b7eb-b2b8defbc0be", "text": "### Geopolitical Risk (GPR) Index Update: March 2025\n\n**Date:** March 2025\n**GPR Score:** 173.91\n\n**Summary:**\nIn March 2025, the global Geopolitical Risk (GPR) Index stood at **173.91**. This represents a **significant escalation**, surging by 26.97% compared to the previous month. Compared to the same period last year, the index shifted by 30.55%.\n\n**Historical Context:**\nThis reading sits at the **96.0th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 141.37 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2025-03", "publish_date": "2025-03-01", "publish_timestamp": 1740787200, "gpr_score": 173.91, "gpr_percentile": 95.96}} +{"id": "3d617a4e-2541-5841-9048-14a94f2b691c", "text": "### Geopolitical Risk (GPR) Index Update: April 2025\n\n**Date:** April 2025\n**GPR Score:** 140.97\n\n**Summary:**\nIn April 2025, the global Geopolitical Risk (GPR) Index stood at **140.97**. This indicates a **cooling off** of geopolitical tensions, dropping by 18.94% month-over-month. Compared to the same period last year, the index shifted by -14.01%.\n\n**Historical Context:**\nThis reading sits at the **88.9th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 150.62 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2025-04", "publish_date": "2025-04-01", "publish_timestamp": 1743465600, "gpr_score": 140.97, "gpr_percentile": 88.89}} +{"id": "234c7c3d-81e2-5b85-ac1c-58d8961a1e6f", "text": "### Geopolitical Risk (GPR) Index Update: May 2025\n\n**Date:** May 2025\n**GPR Score:** 165.66\n\n**Summary:**\nIn May 2025, the global Geopolitical Risk (GPR) Index stood at **165.66**. This represents a **significant escalation**, surging by 17.51% compared to the previous month. Compared to the same period last year, the index shifted by 26.92%.\n\n**Historical Context:**\nThis reading sits at the **95.0th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 160.18 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2025-05", "publish_date": "2025-05-01", "publish_timestamp": 1746057600, "gpr_score": 165.66, "gpr_percentile": 94.95}} +{"id": "e30e503e-a815-5871-9445-883c5af53165", "text": "### Geopolitical Risk (GPR) Index Update: June 2025\n\n**Date:** June 2025\n**GPR Score:** 222.38\n\n**Summary:**\nIn June 2025, the global Geopolitical Risk (GPR) Index stood at **222.38**. This represents a **significant escalation**, surging by 34.24% compared to the previous month. Compared to the same period last year, the index shifted by 96.63%.\n\n**Historical Context:**\nThis reading sits at the **97.6th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 176.34 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2025-06", "publish_date": "2025-06-01", "publish_timestamp": 1748736000, "gpr_score": 222.38, "gpr_percentile": 97.58}} +{"id": "2874f4d9-d0c2-5fd3-aa14-7516e13ae8ec", "text": "### Geopolitical Risk (GPR) Index Update: July 2025\n\n**Date:** July 2025\n**GPR Score:** 134.02\n\n**Summary:**\nIn July 2025, the global Geopolitical Risk (GPR) Index stood at **134.02**. This indicates a **cooling off** of geopolitical tensions, dropping by 39.73% month-over-month. Compared to the same period last year, the index shifted by 45.05%.\n\n**Historical Context:**\nThis reading sits at the **85.7th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 174.02 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2025-07", "publish_date": "2025-07-01", "publish_timestamp": 1751328000, "gpr_score": 134.02, "gpr_percentile": 85.66}} +{"id": "da9bd184-06b8-5fb3-b935-2241b35d9d43", "text": "### Geopolitical Risk (GPR) Index Update: August 2025\n\n**Date:** August 2025\n**GPR Score:** 138.56\n\n**Summary:**\nIn August 2025, the global Geopolitical Risk (GPR) Index stood at **138.56**. The index changed by 3.39% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by -1.71%.\n\n**Historical Context:**\nThis reading sits at the **88.1th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 164.99 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2025-08", "publish_date": "2025-08-01", "publish_timestamp": 1754006400, "gpr_score": 138.56, "gpr_percentile": 88.08}} +{"id": "3831f3e0-7c4b-510a-af3d-8186e1ad9632", "text": "### Geopolitical Risk (GPR) Index Update: September 2025\n\n**Date:** September 2025\n**GPR Score:** 125.87\n\n**Summary:**\nIn September 2025, the global Geopolitical Risk (GPR) Index stood at **125.87**. The index changed by -9.16% month-over-month, showing relative stability. Compared to the same period last year, the index shifted by -3.44%.\n\n**Historical Context:**\nThis reading sits at the **82.2th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 132.82 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2025-09", "publish_date": "2025-09-01", "publish_timestamp": 1756684800, "gpr_score": 125.87, "gpr_percentile": 82.22}} +{"id": "62373a3e-5090-56f6-b483-4e49dd322ace", "text": "### Geopolitical Risk (GPR) Index Update: October 2025\n\n**Date:** October 2025\n**GPR Score:** 154.51\n\n**Summary:**\nIn October 2025, the global Geopolitical Risk (GPR) Index stood at **154.51**. This represents a **significant escalation**, surging by 22.76% compared to the previous month. Compared to the same period last year, the index shifted by 18.23%.\n\n**Historical Context:**\nThis reading sits at the **93.1th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 139.65 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2025-10", "publish_date": "2025-10-01", "publish_timestamp": 1759276800, "gpr_score": 154.51, "gpr_percentile": 93.13}} +{"id": "e39ffc50-574f-55e6-b057-d312958ed344", "text": "### Geopolitical Risk (GPR) Index Update: November 2025\n\n**Date:** November 2025\n**GPR Score:** 104.34\n\n**Summary:**\nIn November 2025, the global Geopolitical Risk (GPR) Index stood at **104.34**. This indicates a **cooling off** of geopolitical tensions, dropping by 32.47% month-over-month. Compared to the same period last year, the index shifted by -19.06%.\n\n**Historical Context:**\nThis reading sits at the **66.7th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 128.24 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2025-11", "publish_date": "2025-11-01", "publish_timestamp": 1761955200, "gpr_score": 104.34, "gpr_percentile": 66.67}} +{"id": "d861053f-3ce3-57d5-99ca-b54907183bde", "text": "### Geopolitical Risk (GPR) Index Update: December 2025\n\n**Date:** December 2025\n**GPR Score:** 131.39\n\n**Summary:**\nIn December 2025, the global Geopolitical Risk (GPR) Index stood at **131.39**. This represents a **significant escalation**, surging by 25.93% compared to the previous month. Compared to the same period last year, the index shifted by -7.71%.\n\n**Historical Context:**\nThis reading sits at the **84.4th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 130.08 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2025-12", "publish_date": "2025-12-01", "publish_timestamp": 1764547200, "gpr_score": 131.39, "gpr_percentile": 84.44}} +{"id": "bd672c3b-1f25-5ae1-9b2c-dea11f718305", "text": "### Geopolitical Risk (GPR) Index Update: January 2026\n\n**Date:** January 2026\n**GPR Score:** 167.8\n\n**Summary:**\nIn January 2026, the global Geopolitical Risk (GPR) Index stood at **167.8**. This represents a **significant escalation**, surging by 27.71% compared to the previous month. Compared to the same period last year, the index shifted by 48.19%.\n\n**Historical Context:**\nThis reading sits at the **95.3th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 134.51 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2026-01", "publish_date": "2026-01-01", "publish_timestamp": 1767225600, "gpr_score": 167.8, "gpr_percentile": 95.35}} +{"id": "9e7b3f18-e68d-541e-a3b3-76b9fbcb8ac7", "text": "### Geopolitical Risk (GPR) Index Update: February 2026\n\n**Date:** February 2026\n**GPR Score:** 121.62\n\n**Summary:**\nIn February 2026, the global Geopolitical Risk (GPR) Index stood at **121.62**. This indicates a **cooling off** of geopolitical tensions, dropping by 27.52% month-over-month. Compared to the same period last year, the index shifted by -11.21%.\n\n**Historical Context:**\nThis reading sits at the **80.8th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 140.27 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2026-02", "publish_date": "2026-02-01", "publish_timestamp": 1769904000, "gpr_score": 121.62, "gpr_percentile": 80.81}} +{"id": "25620164-722d-50a3-8776-330bdcc83a75", "text": "### Geopolitical Risk (GPR) Index Update: March 2026\n\n**Date:** March 2026\n**GPR Score:** 297.27\n\n**Summary:**\nIn March 2026, the global Geopolitical Risk (GPR) Index stood at **297.27**. This represents a **significant escalation**, surging by 144.43% compared to the previous month. Compared to the same period last year, the index shifted by 70.93%.\n\n**Historical Context:**\nThis reading sits at the **98.6th percentile** of all historically recorded geopolitical risk levels. A 3-month moving average of 195.56 suggests the current medium-term trend.\n\n**Impact on Precious Metals:**\nHistorically, spikes in the GPR index correlate with safe-haven asset accumulation, driving up the implied volatility and spot prices of Gold (XAU) and Silver (XAG).\n", "metadata": {"topic": "macro_geopolitics_risk", "title": "GPR Index Update 2026-03", "publish_date": "2026-03-01", "publish_timestamp": 1772323200, "gpr_score": 297.27, "gpr_percentile": 98.59}} diff --git a/Data/3_Gold_Semantic/Macro_Narratives/2026-04-04/macro_context_2026-04-04.md b/Data/3_Gold_Semantic/Macro_Narratives/2026-04-04/macro_context_2026-04-04.md new file mode 100644 index 0000000..524dec8 --- /dev/null +++ b/Data/3_Gold_Semantic/Macro_Narratives/2026-04-04/macro_context_2026-04-04.md @@ -0,0 +1,16 @@ +## 📊 Macro & Market Daily Snapshot +> **Generated on:** 2026-04-04 +> **Note to LLM:** Macro indicators lag behind market data. Use YoY/MoM changes to gauge economic momentum. + +### 📈 Market Data (Daily) +- **[Equity Index] S&P 500 (^GSPC)**: 6582.69 Points | Change: **+0.11%** *(Observed: 2026-04-02)* +- **[Equity Index] NASDAQ (^IXIC)**: 21879.18 Points | Change: **+0.18%** *(Observed: 2026-04-02)* +- **[Volatility Index] VIX Volatility (^VIX)**: 23.87 Points | Change: **-2.73%** *(Observed: 2026-04-02)* +- **[Currency] US Dollar Index (DX-Y.NYB)**: 100.19 Points | Change: **+0.16%** *(Observed: 2026-04-03)* +- **[Commodity ETF] Gold ETF (GLD)**: 429.41 USD | Change: **-1.92%** *(Observed: 2026-04-02)* +- **[Commodity ETF] Silver ETF (SLV)**: 65.79 USD | Change: **-3.45%** *(Observed: 2026-04-02)* + +### 🏛️ Macro Economic Indicators (Lagging) +- **[Interest Rate] Effective Federal Funds Rate (FEDFUNDS)**: 3.64 % | MoM: **+0.00%** | YoY: **-15.94%** *(Observed: 2026-03-01)* +- **[Inflation] CPI (Inflation) (CPIAUCSL)**: 327.46 Index | MoM: **+0.27%** | YoY: **+2.66%** *(Observed: 2026-02-01)* +- **[Labor Market] Unemployment Rate (UNRATE)**: 4.30 % | MoM: **-2.27%** | YoY: **+2.38%** *(Observed: 2026-03-01)* \ No newline at end of file diff --git a/Data/3_Gold_Semantic/Macro_Narratives/2026-04-06/macro_context_2026-04-06.md b/Data/3_Gold_Semantic/Macro_Narratives/2026-04-06/macro_context_2026-04-06.md new file mode 100644 index 0000000..815feaf --- /dev/null +++ b/Data/3_Gold_Semantic/Macro_Narratives/2026-04-06/macro_context_2026-04-06.md @@ -0,0 +1,16 @@ +## 📊 Macro & Market Daily Snapshot +> **Generated on:** 2026-04-06 +> **Note to LLM:** Macro indicators lag behind market data. Use YoY/MoM changes to gauge economic momentum. + +### 📈 Market Data (Daily) +- **[Equity Index] S&P 500 (^GSPC)**: 6603.27 Points | Change: **+0.31%** *(Observed: 2026-04-06)* +- **[Equity Index] NASDAQ (^IXIC)**: 21974.25 Points | Change: **+0.43%** *(Observed: 2026-04-06)* +- **[Volatility Index] VIX Volatility (^VIX)**: 24.37 Points | Change: **+2.09%** *(Observed: 2026-04-06)* +- **[Currency] US Dollar Index (DX-Y.NYB)**: 99.99 Points | Change: **-0.04%** *(Observed: 2026-04-06)* +- **[Commodity ETF] Gold ETF (GLD)**: 427.36 USD | Change: **-0.48%** *(Observed: 2026-04-06)* +- **[Commodity ETF] Silver ETF (SLV)**: 66.16 USD | Change: **+0.56%** *(Observed: 2026-04-06)* + +### 🏛️ Macro Economic Indicators (Lagging) +- **[Interest Rate] Effective Federal Funds Rate (FEDFUNDS)**: 3.64 % | MoM: **+0.00%** | YoY: **-15.94%** *(Observed: 2026-03-01)* +- **[Inflation] CPI (Inflation) (CPIAUCSL)**: 327.46 Index | MoM: **+0.27%** | YoY: **+2.66%** *(Observed: 2026-02-01)* +- **[Labor Market] Unemployment Rate (UNRATE)**: 4.30 % | MoM: **-2.27%** | YoY: **+2.38%** *(Observed: 2026-03-01)* \ No newline at end of file diff --git a/Data/3_Gold_Semantic/Macro_Narratives/2026-04-08/macro_context_2026-04-08.md b/Data/3_Gold_Semantic/Macro_Narratives/2026-04-08/macro_context_2026-04-08.md new file mode 100644 index 0000000..5417342 --- /dev/null +++ b/Data/3_Gold_Semantic/Macro_Narratives/2026-04-08/macro_context_2026-04-08.md @@ -0,0 +1,16 @@ +## 📊 Macro & Market Daily Snapshot +> **Generated on:** 2026-04-08 +> **Note to LLM:** Macro indicators lag behind market data. Use YoY/MoM changes to gauge economic momentum. + +### 📈 Market Data (Daily) +- **[Equity Index] S&P 500 (^GSPC)**: 6774.82 Points | Change: **+2.39%** *(Observed: 2026-04-08)* +- **[Equity Index] NASDAQ (^IXIC)**: 22651.88 Points | Change: **+2.88%** *(Observed: 2026-04-08)* +- **[Volatility Index] VIX Volatility (^VIX)**: 20.97 Points | Change: **-18.66%** *(Observed: 2026-04-08)* +- **[Currency] US Dollar Index (DX-Y.NYB)**: 98.95 Points | Change: **-0.69%** *(Observed: 2026-04-08)* +- **[Commodity ETF] Gold ETF (GLD)**: 435.65 USD | Change: **+0.89%** *(Observed: 2026-04-08)* +- **[Commodity ETF] Silver ETF (SLV)**: 68.22 USD | Change: **+3.46%** *(Observed: 2026-04-08)* + +### 🏛️ Macro Economic Indicators (Lagging) +- **[Interest Rate] Effective Federal Funds Rate (FEDFUNDS)**: 3.64 % | MoM: **+0.00%** | YoY: **-15.94%** *(Observed: 2026-03-01)* +- **[Inflation] CPI (Inflation) (CPIAUCSL)**: 327.46 Index | MoM: **+0.27%** | YoY: **+2.66%** *(Observed: 2026-02-01)* +- **[Labor Market] Unemployment Rate (UNRATE)**: 4.30 % | MoM: **-2.27%** | YoY: **+2.38%** *(Observed: 2026-03-01)* \ No newline at end of file diff --git a/Data/3_Gold_Semantic/Macro_Narratives/2026-04-09/macro_context_2026-04-09.md b/Data/3_Gold_Semantic/Macro_Narratives/2026-04-09/macro_context_2026-04-09.md new file mode 100644 index 0000000..f8506e7 --- /dev/null +++ b/Data/3_Gold_Semantic/Macro_Narratives/2026-04-09/macro_context_2026-04-09.md @@ -0,0 +1,16 @@ +## 📊 Macro & Market Daily Snapshot +> **Generated on:** 2026-04-09 +> **Note to LLM:** Macro indicators lag behind market data. Use YoY/MoM changes to gauge economic momentum. + +### 📈 Market Data (Daily) +- **[Equity Index] S&P 500 (^GSPC)**: 6815.30 Points | Change: **+0.48%** *(Observed: 2026-04-09)* +- **[Equity Index] NASDAQ (^IXIC)**: 22749.99 Points | Change: **+0.51%** *(Observed: 2026-04-09)* +- **[Volatility Index] VIX Volatility (^VIX)**: 19.96 Points | Change: **-5.13%** *(Observed: 2026-04-09)* +- **[Currency] US Dollar Index (DX-Y.NYB)**: 98.77 Points | Change: **-0.26%** *(Observed: 2026-04-09)* +- **[Commodity ETF] Gold ETF (GLD)**: 439.27 USD | Change: **+1.09%** *(Observed: 2026-04-09)* +- **[Commodity ETF] Silver ETF (SLV)**: 68.78 USD | Change: **+1.94%** *(Observed: 2026-04-09)* + +### 🏛️ Macro Economic Indicators (Lagging) +- **[Interest Rate] Effective Federal Funds Rate (FEDFUNDS)**: 3.64 % | MoM: **+0.00%** | YoY: **-15.94%** *(Observed: 2026-03-01)* +- **[Inflation] CPI (Inflation) (CPIAUCSL)**: 327.46 Index | MoM: **+0.27%** | YoY: **+2.66%** *(Observed: 2026-02-01)* +- **[Labor Market] Unemployment Rate (UNRATE)**: 4.30 % | MoM: **-2.27%** | YoY: **+2.38%** *(Observed: 2026-03-01)* \ No newline at end of file diff --git a/Data/3_Gold_Semantic/Macro_Narratives/2026-04-10/macro_context_2026-04-10.md b/Data/3_Gold_Semantic/Macro_Narratives/2026-04-10/macro_context_2026-04-10.md new file mode 100644 index 0000000..5d7a65e --- /dev/null +++ b/Data/3_Gold_Semantic/Macro_Narratives/2026-04-10/macro_context_2026-04-10.md @@ -0,0 +1,16 @@ +## 📊 Macro & Market Daily Snapshot +> **Generated on:** 2026-04-10 +> **Note to LLM:** Macro indicators lag behind market data. Use YoY/MoM changes to gauge economic momentum. + +### 📈 Market Data (Daily) +- **[Equity Index] S&P 500 (^GSPC)**: 6812.93 Points | Change: **-0.17%** *(Observed: 2026-04-10)* +- **[Equity Index] NASDAQ (^IXIC)**: 22895.40 Points | Change: **+0.32%** *(Observed: 2026-04-10)* +- **[Volatility Index] VIX Volatility (^VIX)**: 19.53 Points | Change: **+0.21%** *(Observed: 2026-04-10)* +- **[Currency] US Dollar Index (DX-Y.NYB)**: 98.66 Points | Change: **-0.16%** *(Observed: 2026-04-10)* +- **[Commodity ETF] Gold ETF (GLD)**: 437.34 USD | Change: **-0.13%** *(Observed: 2026-04-10)* +- **[Commodity ETF] Silver ETF (SLV)**: 69.11 USD | Change: **+1.05%** *(Observed: 2026-04-10)* + +### 🏛️ Macro Economic Indicators (Lagging) +- **[Interest Rate] Effective Federal Funds Rate (FEDFUNDS)**: 3.64 % | MoM: **+0.00%** | YoY: **-15.94%** *(Observed: 2026-03-01)* +- **[Inflation] CPI (Inflation) (CPIAUCSL)**: 330.29 Index | MoM: **+0.87%** | YoY: **+3.32%** *(Observed: 2026-03-01)* +- **[Labor Market] Unemployment Rate (UNRATE)**: 4.30 % | MoM: **-2.27%** | YoY: **+2.38%** *(Observed: 2026-03-01)* \ No newline at end of file diff --git a/Data/3_Gold_Semantic/Macro_Narratives/2026-04-14/macro_context_2026-04-14.md b/Data/3_Gold_Semantic/Macro_Narratives/2026-04-14/macro_context_2026-04-14.md new file mode 100644 index 0000000..a727356 --- /dev/null +++ b/Data/3_Gold_Semantic/Macro_Narratives/2026-04-14/macro_context_2026-04-14.md @@ -0,0 +1,16 @@ +## 📊 Macro & Market Daily Snapshot +> **Generated on:** 2026-04-14 +> **Note to LLM:** Macro indicators lag behind market data. Use YoY/MoM changes to gauge economic momentum. + +### 📈 Market Data (Daily) +- **[Equity Index] S&P 500 (^GSPC)**: 6967.38 Points | Change: **+1.18%** *(Observed: 2026-04-14)* +- **[Equity Index] NASDAQ (^IXIC)**: 23639.08 Points | Change: **+1.96%** *(Observed: 2026-04-14)* +- **[Volatility Index] VIX Volatility (^VIX)**: 18.36 Points | Change: **-3.97%** *(Observed: 2026-04-14)* +- **[Currency] US Dollar Index (DX-Y.NYB)**: 98.19 Points | Change: **-0.19%** *(Observed: 2026-04-14)* +- **[Commodity ETF] Gold ETF (GLD)**: 445.09 USD | Change: **+2.23%** *(Observed: 2026-04-14)* +- **[Commodity ETF] Silver ETF (SLV)**: 72.04 USD | Change: **+5.51%** *(Observed: 2026-04-14)* + +### 🏛️ Macro Economic Indicators (Lagging) +- **[Interest Rate] Effective Federal Funds Rate (FEDFUNDS)**: 3.64 % | MoM: **+0.00%** | YoY: **-15.94%** *(Observed: 2026-03-01)* +- **[Inflation] CPI (Inflation) (CPIAUCSL)**: 330.29 Index | MoM: **+0.87%** | YoY: **+3.32%** *(Observed: 2026-03-01)* +- **[Labor Market] Unemployment Rate (UNRATE)**: 4.30 % | MoM: **-2.27%** | YoY: **+2.38%** *(Observed: 2026-03-01)* \ No newline at end of file diff --git a/Data/3_Gold_Semantic/Macro_Narratives/2026-04-16/macro_context_2026-04-16.md b/Data/3_Gold_Semantic/Macro_Narratives/2026-04-16/macro_context_2026-04-16.md new file mode 100644 index 0000000..83d35d6 --- /dev/null +++ b/Data/3_Gold_Semantic/Macro_Narratives/2026-04-16/macro_context_2026-04-16.md @@ -0,0 +1,16 @@ +## 📊 Macro & Market Daily Snapshot +> **Generated on:** 2026-04-16 +> **Note to LLM:** Macro indicators lag behind market data. Use YoY/MoM changes to gauge economic momentum. + +### 📈 Market Data (Daily) +- **[Equity Index] S&P 500 (^GSPC)**: 7022.95 Points | Change: **+0.80%** *(Observed: 2026-04-15)* +- **[Equity Index] NASDAQ (^IXIC)**: 24016.02 Points | Change: **+1.59%** *(Observed: 2026-04-15)* +- **[Volatility Index] VIX Volatility (^VIX)**: 18.25 Points | Change: **+0.44%** *(Observed: 2026-04-16)* +- **[Currency] US Dollar Index (DX-Y.NYB)**: 98.22 Points | Change: **+0.16%** *(Observed: 2026-04-16)* +- **[Commodity ETF] Gold ETF (GLD)**: 440.46 USD | Change: **-1.04%** *(Observed: 2026-04-15)* +- **[Commodity ETF] Silver ETF (SLV)**: 71.84 USD | Change: **-0.28%** *(Observed: 2026-04-15)* + +### 🏛️ Macro Economic Indicators (Lagging) +- **[Interest Rate] Effective Federal Funds Rate (FEDFUNDS)**: 3.64 % | MoM: **+0.00%** | YoY: **-15.94%** *(Observed: 2026-03-01)* +- **[Inflation] CPI (Inflation) (CPIAUCSL)**: 330.29 Index | MoM: **+0.87%** | YoY: **+3.32%** *(Observed: 2026-03-01)* +- **[Labor Market] Unemployment Rate (UNRATE)**: 4.30 % | MoM: **-2.27%** | YoY: **+2.38%** *(Observed: 2026-03-01)* \ No newline at end of file diff --git a/Data/3_Gold_Semantic/Macro_Narratives/2026-04-19/macro_context_2026-04-19.md b/Data/3_Gold_Semantic/Macro_Narratives/2026-04-19/macro_context_2026-04-19.md new file mode 100644 index 0000000..1ef6f6a --- /dev/null +++ b/Data/3_Gold_Semantic/Macro_Narratives/2026-04-19/macro_context_2026-04-19.md @@ -0,0 +1,16 @@ +## 📊 Macro & Market Daily Snapshot +> **Generated on:** 2026-04-19 +> **Note to LLM:** Macro indicators lag behind market data. Use YoY/MoM changes to gauge economic momentum. + +### 📈 Market Data (Daily) +- **[Equity Index] S&P 500 (^GSPC)**: 7126.06 Points | Change: **+1.20%** *(Observed: 2026-04-17)* +- **[Equity Index] NASDAQ (^IXIC)**: 24468.48 Points | Change: **+1.52%** *(Observed: 2026-04-17)* +- **[Volatility Index] VIX Volatility (^VIX)**: 17.48 Points | Change: **-2.56%** *(Observed: 2026-04-17)* +- **[Currency] US Dollar Index (DX-Y.NYB)**: 98.10 Points | Change: **-0.12%** *(Observed: 2026-04-17)* +- **[Commodity ETF] Gold ETF (GLD)**: 445.93 USD | Change: **+1.33%** *(Observed: 2026-04-17)* +- **[Commodity ETF] Silver ETF (SLV)**: 73.63 USD | Change: **+3.35%** *(Observed: 2026-04-17)* + +### 🏛️ Macro Economic Indicators (Lagging) +- **[Interest Rate] Effective Federal Funds Rate (FEDFUNDS)**: 3.64 % | MoM: **+0.00%** | YoY: **-15.94%** *(Observed: 2026-03-01)* +- **[Inflation] CPI (Inflation) (CPIAUCSL)**: 330.29 Index | MoM: **+0.87%** | YoY: **+3.32%** *(Observed: 2026-03-01)* +- **[Labor Market] Unemployment Rate (UNRATE)**: 4.30 % | MoM: **-2.27%** | YoY: **+2.38%** *(Observed: 2026-03-01)* \ No newline at end of file diff --git a/Data/3_Gold_Semantic/News_Qdrant/2026-04-08/qdrant_asset_precious_metals_spot_processed.jsonl b/Data/3_Gold_Semantic/News_Qdrant/2026-04-08/qdrant_asset_precious_metals_spot_processed.jsonl new file mode 100644 index 0000000..8a7af9a --- /dev/null +++ b/Data/3_Gold_Semantic/News_Qdrant/2026-04-08/qdrant_asset_precious_metals_spot_processed.jsonl @@ -0,0 +1,3 @@ +{"id": "cca38239-6593-5985-9ba4-7ecbd87b54e4", "text": "\"Anxin Unveils New High-End Brand Hyper, Aiming to Lead the Industry in Smart Cars\". Anxin, a Chinese company, has launched its new high-end brand Hyper, which aims to lead the industry in smart cars. The brand's first product, Hyper SSR, is a supercar with impressive acceleration and AI-powered trajectory control system. This move is seen as a key step in Anxin's transformation from a traditional car manufacturer to a technology company. As China continues to strengthen its technological attributes through space cooperation projects, Anxin's new brand may drive the country's new energy vehicle industry to break new ground.\n\nThe tone score of +2 reflects the bullish sentiment towards Gold/Silver prices due to the potential increase in market fear/VIX driven by the rapid development of smart cars and China's growing technological capabilities. The impacted assets include Equities, Gold, and USD, as the news may have implications for global markets and currencies.", "metadata": {"topic": "asset_precious_metals_spot", "title": "\"Anxin Unveils New High-End Brand Hyper, Aiming to Lead the Industry in Smart Cars\"", "original_title": "逆境中破局前行 , 埃安换标推新高端品牌引领行业新变革 - 智能汽车 - ITBear比尔科技", "publish_date": "2026-04-09T01:22:35Z", "publish_timestamp": 1775697755, "source": "itbear.com.cn", "url": "https://www.itbear.com.cn/html/2026-04/1264928.html", "entities": ["Anxin", "Tesla", "China"], "impacted_assets": ["Equities", "Gold", "USD"], "volatility_implication": "Increase", "llm_tone_score": 2}} +{"id": "17caf862-efab-55c3-9d5d-6c626214176c", "text": "Unfazed by Geopolitical Headwinds! Goldman Sachs: AI Spending Wave Surges, Sets Up for Sell-Off at the Right Time| Artificial Intelligence. Goldman Sachs' commentary on AI spending trends suggests a potential sell-off in the market. The firm notes that despite geopolitical headwinds, the AI sector remains resilient and poised for growth. This neutral tone implies no significant macro drivers impacting gold or silver prices at this time.", "metadata": {"topic": "asset_precious_metals_spot", "title": "Unfazed by Geopolitical Headwinds! Goldman Sachs: AI Spending Wave Surges, Sets Up for Sell-Off at the Right Time| Artificial Intelligence", "original_title": "无惧地缘逆风 ! 高盛 : AI支出浪潮汹涌 , 布局 卖铲人 正当时|人工智能", "publish_date": "2026-04-09T01:22:35Z", "publish_timestamp": 1775697755, "source": "163.com", "url": "https://www.163.com/dy/article/KQ2DKDEO05198UNI.html", "entities": ["Goldman Sachs", "NetEase Hao", "artificial intelligence"], "impacted_assets": ["Equities", "Gold", "USD"], "volatility_implication": "Neutral", "llm_tone_score": 0}} +{"id": "a0a487b3-c585-5852-b167-58cec9b24127", "text": "March 2026 Quarter Production Update from Alkane Resources Limited. Alkane Resources reported strong quarterly production of 45,776 oz AuEq from its three operating mines. The company maintained a healthy cash balance of $362 million and pro forma liquidity of $472 million. Guidance for FY2026 remains unchanged at 160,000 to 175,000 AuEq oz production at an AISC of A$2,600 - $2,900 per AuEq oz. The update suggests a stable macro environment with no significant disruptions or surprises that would impact gold and antimony prices.", "metadata": {"topic": "asset_precious_metals_spot", "title": "March 2026 Quarter Production Update from Alkane Resources Limited", "original_title": "Alkane Resources Limited : March 2026 Quarter Production Update", "publish_date": "2026-04-09T01:22:35Z", "publish_timestamp": 1775697755, "source": "finanznachrichten.de", "url": "https://www.finanznachrichten.de/nachrichten-2026-04/68152259-alkane-resources-limited-march-2026-quarter-production-update-399.htm", "entities": ["Alkane Resources Limited", "Nic Earner (Managing Director & CEO)", "Australia", "Sweden"], "impacted_assets": ["Gold", "Antimony", "Cash and Bullion"], "volatility_implication": "Neutral", "llm_tone_score": 2}} diff --git a/Data/3_Gold_Semantic/News_Qdrant/2026-04-08/qdrant_macro_central_banks_processed.jsonl b/Data/3_Gold_Semantic/News_Qdrant/2026-04-08/qdrant_macro_central_banks_processed.jsonl new file mode 100644 index 0000000..9a22dc6 --- /dev/null +++ b/Data/3_Gold_Semantic/News_Qdrant/2026-04-08/qdrant_macro_central_banks_processed.jsonl @@ -0,0 +1,9 @@ +{"id": "e59121fd-02bd-5521-a7b4-7f1e860eeaba", "text": "Housing Market Mood Shift Amid Rising Mortgage Costs and Geopolitical Uncertainty. The UK housing market is losing momentum due to rising mortgage costs and geopolitical uncertainty. Buyer demand has softened, with a net balance of 39% of professionals seeing new buyer inquiries falling rather than rising. This trend is expected to continue in the coming months, with a net balance of 33% of professionals expecting sales activity to weaken further. The macro transmission mechanism is driven by higher borrowing costs and inflationary concerns, which are likely to keep mortgage rates elevated for some time yet.", "metadata": {"topic": "macro_central_banks", "title": "Housing Market Mood Shift Amid Rising Mortgage Costs and Geopolitical Uncertainty", "original_title": "Rising mortgage costs dent buyer demand amid housing market mood shift ", "publish_date": "2026-04-09T01:19:11Z", "publish_timestamp": 1775697551, "source": "clactonandfrintongazette.co.uk", "url": "https://www.clactonandfrintongazette.co.uk/news/national/26005807.rising-mortgage-costs-dent-buyer-demand-amid-housing-market-mood-shift/", "entities": ["Royal Institution of Chartered Surveyors (Rics)", "Moneyfacts", "Sprive"], "impacted_assets": ["Equities", "Gold", "Oil", "USD"], "volatility_implication": "Increase", "llm_tone_score": -2}} +{"id": "3efce571-c129-5a55-8662-5fb1c0b49592", "text": "Housing Market Mood Shift Amid Rising Mortgage Costs and Geopolitical Uncertainty. The UK housing market is losing momentum due to rising mortgage costs and geopolitical uncertainty. Buyer demand has softened, with a net balance of 39% of professionals seeing new buyer inquiries falling rather than rising. This trend is expected to continue in the short term, with a net balance of 33% of professionals expecting sales activity to weaken further over the next few months. The macro transmission mechanism is driven by higher borrowing costs and inflationary concerns, which are likely to impact gold and silver prices positively.\n\nNote: The tone score is bearish due to the negative sentiment surrounding the housing market and the potential for increased volatility in the short term.", "metadata": {"topic": "macro_central_banks", "title": "Housing Market Mood Shift Amid Rising Mortgage Costs and Geopolitical Uncertainty", "original_title": "Rising mortgage costs dent buyer demand amid housing market mood shift ", "publish_date": "2026-04-09T01:19:11Z", "publish_timestamp": 1775697551, "source": "northwichguardian.co.uk", "url": "https://www.northwichguardian.co.uk/news/national/26005807.rising-mortgage-costs-dent-buyer-demand-amid-housing-market-mood-shift/", "entities": ["Royal Institution of Chartered Surveyors (Rics)", "Moneyfacts", "Sprive"], "impacted_assets": ["Equities", "Gold", "Oil", "USD"], "volatility_implication": "Increase", "llm_tone_score": -2}} +{"id": "6d4345a8-6526-5cd9-87d9-2dc152fa6b84", "text": "Turkish Treasury's Cash Flow and Debt Management in the First Quarter of 2023. The Turkish Treasury reported a significant increase in debt repayment and interest payments in the first quarter of 2023. The treasury's cash flow deficit widened to 618 billion lira, driven by high-interest payments and debt repayments. This development may lead to increased market volatility and potentially weigh on gold prices.\n\nThe macro transmission mechanism is as follows: The Turkish Treasury's increasing debt repayment and interest payments will likely lead to a decrease in the value of government bonds, which may cause investors to seek safer assets like gold. Additionally, the widening cash flow deficit may lead to concerns about Turkey's fiscal sustainability, further contributing to market volatility.", "metadata": {"topic": "macro_central_banks", "title": "Turkish Treasury's Cash Flow and Debt Management in the First Quarter of 2023", "original_title": "Günde ortalama 18 milyar TL - Naki BAKIR", "publish_date": "2026-04-09T01:19:11Z", "publish_timestamp": 1775697551, "source": "dunya.com", "url": "https://www.dunya.com/kose-yazisi/gunde-ortalama-18-milyar-tl/820965", "entities": ["Turkish Treasury", "Hazine", "Tasarruf Mevduatı Sigorta Fonu (TMSF)"], "impacted_assets": ["Government Bonds", "Turkish Lira (TRY)", "Gold"], "volatility_implication": "Decrease", "llm_tone_score": -2}} +{"id": "92e564c6-62ea-568d-8e67-5727cd26dcbb", "text": "South Korea's Card Loan Balance Surpasses 15 Trillion Won for the First Time in 6 Months Amid Economic Downturn. South Korea's card loan balance has surpassed 15 trillion won for the first time in six months amid economic downturn. The increase is attributed to banks tightening credit standards, leading to a surge in demand for credit cards. This trend may continue, potentially increasing delinquency rates and affecting the overall economy. The Bank of Korea's recent data shows that the credit card loan delinquency rate has reached its highest level in 20 years, indicating a potential risk to the financial system.\n\nThe macro transmission mechanism is as follows: the economic downturn leads to increased demand for credit cards, which in turn drives up delinquency rates. This may have a negative impact on the overall economy and potentially affect asset prices such as equities and gold. The decrease in volatility implication suggests that market fear (VIX) may decrease due to the expected increase in delinquency rates, which could lead to a decrease in risk appetite and a subsequent decline in asset prices.", "metadata": {"topic": "macro_central_banks", "title": "South Korea's Card Loan Balance Surpasses 15 Trillion Won for the First Time in 6 Months Amid Economic Downturn", "original_title": "경기 불황에 카드 돌려막기 6개월 만에 반등 … 연체율도 20년새 최고", "publish_date": "2026-04-09T01:19:11Z", "publish_timestamp": 1775697551, "source": "fnnews.com", "url": "https://www.fnnews.com/news/202604090630516306", "entities": ["Bank of Korea", "Korean Federation of Banks", "major credit card companies (Shinhan", "Samsung", "Hyundai", "KB Kookmin", "Lotte", "Woosong", "Hanwha", "and BC Card)"], "impacted_assets": ["Equities", "Gold", "USD"], "volatility_implication": "Decrease", "llm_tone_score": -2}} +{"id": "5fb74704-7627-5fd8-ac58-a5ad871baee4", "text": "Stocks Rally as Oil Prices Plummet Following Iran War Ceasefire. The temporary ceasefire between the US and Iran has led to a surge in global equities, with the S&P 500, Dow Jones Industrial Average, and Nasdaq composite all rising significantly. The decline in oil prices has also had a positive impact on airline and travel stocks, while Treasury yields have fallen as hopes of lower interest rates later in the year increase. However, analysts caution that the ceasefire remains fragile, and any further escalation could negatively impact market sentiment.\n\nThe macro transmission mechanism is as follows: A decrease in oil prices reduces inflationary pressures, which can lead to a more accommodative monetary policy from central banks like the Federal Reserve. This, in turn, can boost equities and other risk assets, while also reducing the appeal of safe-haven assets like gold.", "metadata": {"topic": "macro_central_banks", "title": "Stocks Rally as Oil Prices Plummet Following Iran War Ceasefire", "original_title": "Stocks Close The Day Higher As Oil Prices Plummet Over Iran War Cease Fire", "publish_date": "2026-04-09T01:19:11Z", "publish_timestamp": 1775697551, "source": "newsradio1290wtks.iheart.com", "url": "https://newsradio1290wtks.iheart.com/content/2026-04-08-stocks-close-the-day-higher-as-oil-prices-plummet-over-iran-war-cease-fire/", "entities": ["United States", "Iran", "President Donald Trump", "United Airlines", "Carnival cruise lines", "Delta Air Lines"], "impacted_assets": ["Equities", "Gold", "Oil"], "volatility_implication": "Neutral", "llm_tone_score": 2}} +{"id": "9432d3d9-5abe-590f-bba0-9bb072a5ba6c", "text": "Housing Market Mood Shift: Rising Mortgage Costs Dent Buyer Demand. The UK housing market is losing momentum due to rising mortgage costs and geopolitical uncertainty. Buyer demand has softened, with a net balance of 39% of professionals seeing new buyer inquiries falling rather than rising. This trend is expected to continue, with a net balance of 33% of professionals expecting sales activity to weaken further over the next few months. The macro transmission mechanism is driven by higher borrowing costs and inflationary concerns, which are likely to impact gold and silver prices positively.\n\nNote: The tone score is bearish due to the negative impact on buyer demand and housing market activity, which may lead to increased volatility in the short term.", "metadata": {"topic": "macro_central_banks", "title": "Housing Market Mood Shift: Rising Mortgage Costs Dent Buyer Demand", "original_title": "Rising mortgage costs dent buyer demand amid housing market mood shift ", "publish_date": "2026-04-09T01:19:11Z", "publish_timestamp": 1775697551, "source": "watfordobserver.co.uk", "url": "https://www.watfordobserver.co.uk/news/national/26005807.rising-mortgage-costs-dent-buyer-demand-amid-housing-market-mood-shift/", "entities": ["Royal Institution of Chartered Surveyors (Rics)", "Moneyfacts", "Sprive"], "impacted_assets": ["Equities", "Gold", "Oil", "USD"], "volatility_implication": "Increase", "llm_tone_score": -2}} +{"id": "63b64aeb-5490-563b-9263-f47110cbd261", "text": "Stocks Rally as Oil Prices Plummet Following Iran War Ceasefire. The temporary ceasefire between the US and Iran led to a surge in stocks, with the S&P 500, Dow Jones Industrial Average, and Nasdaq composite all rising. Oil prices plummeted, falling below $95 per barrel, which could lead to lower inflation and potentially pave the way for further interest rate cuts by the Federal Reserve. The market's optimism was tempered by concerns about the ceasefire's fragility and potential continued attacks in the region.", "metadata": {"topic": "macro_central_banks", "title": "Stocks Rally as Oil Prices Plummet Following Iran War Ceasefire", "original_title": "Stocks Close The Day Higher As Oil Prices Plummet Over Iran War Cease Fire | NewsRadio WKCY", "publish_date": "2026-04-09T01:19:11Z", "publish_timestamp": 1775697551, "source": "newsradiowkcy.iheart.com", "url": "https://newsradiowkcy.iheart.com/content/2026-04-08-stocks-close-the-day-higher-as-oil-prices-plummet-over-iran-war-cease-fire/", "entities": ["United States", "Iran", "President Donald Trump", "United Airlines", "Carnival cruise lines", "Delta Air Lines"], "impacted_assets": ["Equities", "Gold", "Oil"], "volatility_implication": "Neutral", "llm_tone_score": 2}} +{"id": "d80bb29c-caf5-5828-80db-b71322f41e81", "text": "Housing Market Mood Shift: Rising Mortgage Costs Dent Buyer Demand. The UK housing market is losing momentum due to rising mortgage costs and geopolitical uncertainty. Buyer demand has softened, with a net balance of 39% of professionals seeing new buyer inquiries falling rather than rising. This trend is expected to continue, with a net balance of 33% of professionals expecting sales activity to weaken further over the next few months. The macro transmission mechanism is driven by higher borrowing costs and inflationary concerns, which are likely to impact gold and silver prices positively.\n\nNote: The tone score is bearish due to the negative impact on buyer demand and housing market activity, which may lead to increased volatility in the short term.", "metadata": {"topic": "macro_central_banks", "title": "Housing Market Mood Shift: Rising Mortgage Costs Dent Buyer Demand", "original_title": "Rising mortgage costs dent buyer demand amid housing market mood shift ", "publish_date": "2026-04-09T01:19:11Z", "publish_timestamp": 1775697551, "source": "stourbridgenews.co.uk", "url": "https://www.stourbridgenews.co.uk/news/national/26005807.rising-mortgage-costs-dent-buyer-demand-amid-housing-market-mood-shift/", "entities": ["Royal Institution of Chartered Surveyors (Rics)", "Moneyfacts", "Sprive"], "impacted_assets": ["Equities", "Gold", "Oil", "USD"], "volatility_implication": "Increase", "llm_tone_score": -2}} +{"id": "17c196f3-2982-5021-9934-22612ee7a3c3", "text": "The Harm Caused by Export Restrictions to Prevent Price Increases. The article discusses the negative impact of export restrictions on producers and the economy. The restriction is intended to prevent price increases, but it hinders production capacity, investment, and exports. The author suggests that a re-consideration of the credit mechanism could help stimulate production, exports, and economic growth. The article highlights the importance of prioritizing policies that drive demand and stimulate production in sectors such as construction, which has a high domestic content rate and contributes significantly to the economy.\n\nThe macro transmission mechanism is that the export restriction reduces production capacity, investment, and exports, leading to a decrease in economic activity and potentially inflationary pressures. The article's tone is neutral, as it presents both sides of the argument without taking a clear stance on the issue.", "metadata": {"topic": "macro_central_banks", "title": "The Harm Caused by Export Restrictions to Prevent Price Increases", "original_title": "Fiyat artışını ihracat kısıtlaması ile önlemenin verdiği zarar … ", "publish_date": "2026-04-09T01:19:11Z", "publish_timestamp": 1775697551, "source": "dunya.com", "url": "https://www.dunya.com/kose-yazisi/fiyat-artisini-ihracat-kisitlamasi-ile-onlemenin-verdigi-zarar/820975", "entities": ["Erdem Çenesiz", "Çimento", "Cam", "Seramik ve Toprak Ürünleri İhracatçıları Birliği"], "impacted_assets": ["Equities", "Gold", "USD"], "volatility_implication": "Neutral", "llm_tone_score": 0}} diff --git a/Data/3_Gold_Semantic/News_Qdrant/2026-04-08/qdrant_macro_inflation_employment_processed.jsonl b/Data/3_Gold_Semantic/News_Qdrant/2026-04-08/qdrant_macro_inflation_employment_processed.jsonl new file mode 100644 index 0000000..e072134 --- /dev/null +++ b/Data/3_Gold_Semantic/News_Qdrant/2026-04-08/qdrant_macro_inflation_employment_processed.jsonl @@ -0,0 +1,6 @@ +{"id": "921918df-ca85-5319-acb0-e0d377b4569c", "text": "Why Is Carnival (CCL) Stock Soaring Today?. The suspension of military action in Iran and a potential negotiated settlement have triggered a relief rally in cruise operator stocks, including Carnival. Lower \"bunker\" fuel costs and eased travel concerns due to the ceasefire have positively impacted the company's stock price. The macro transmission mechanism is through reduced uncertainty and increased consumer confidence, which may also benefit other tourism-related industries.", "metadata": {"topic": "macro_inflation_employment", "title": "Why Is Carnival (CCL) Stock Soaring Today?", "original_title": "Why Is Carnival ( CCL ) Stock Soaring Today", "publish_date": "2026-04-09T01:20:13Z", "publish_timestamp": 1775697613, "source": "finance.yahoo.com", "url": "https://finance.yahoo.com/markets/stocks/articles/why-carnival-ccl-stock-soaring-000547814.html", "entities": ["President Trump", "Iran", "Carnival Corporation (CCL)", "Strait of Hormuz"], "impacted_assets": ["Equities", "Gold", "Oil"], "volatility_implication": "Increase", "llm_tone_score": 2}} +{"id": "d41a4ff3-d568-59a6-81c7-2875aabd28eb", "text": "Iran to Limit Passage of Ships Through Hormuz Strait Despite Ceasefire Agreement. Despite the ceasefire agreement, Iran is planning to limit the passage of ships through the Hormuz Strait, requiring vessels to pay fees in cryptocurrencies or Chinese yuan. This move could lead to a significant decrease in oil and LNG supplies, impacting global energy markets and inflation expectations. The uncertainty surrounding this development may increase market volatility, particularly for oil prices.\n\nThe macro transmission mechanism is as follows: Iran's control over the Hormuz Strait, a critical energy transportation route, could lead to a shortage of oil and LNG supplies, driving up prices and inflation expectations. This, in turn, could strengthen the USD and weigh on gold prices. The increased uncertainty may also lead to a decrease in equities and an increase in volatility.", "metadata": {"topic": "macro_inflation_employment", "title": "Iran to Limit Passage of Ships Through Hormuz Strait Despite Ceasefire Agreement", "original_title": "호르무즈 계속 막은 이란 … 하루 통과 10여척으로 제한 계획 ", "publish_date": "2026-04-09T01:20:13Z", "publish_timestamp": 1775697613, "source": "fnnews.com", "url": "https://www.fnnews.com/news/202604090857326831", "entities": ["Iran", "United States", "Israel", "China"], "impacted_assets": ["Equities", "Gold", "Oil", "USD"], "volatility_implication": "Increase", "llm_tone_score": -2}} +{"id": "e051fc3b-d996-5c0a-ba45-5d3fc6bceb06", "text": "Oil prices plummet as hopes for resolving Strait of Hormuz tensions rise. The article reports a significant decline in oil prices due to increased hopes for resolving tensions at the Strait of Hormuz. This development is expected to ease concerns about inflation and stabilize global energy supplies. As a result, gold prices may decrease as market fear (VIX) subsides.", "metadata": {"topic": "macro_inflation_employment", "title": "Oil prices plummet as hopes for resolving Strait of Hormuz tensions rise", "original_title": "Giá dầu giảm mạnh khi kỳ vọng khơi thông eo biển Hormuz gia tăng", "publish_date": "2026-04-09T01:20:13Z", "publish_timestamp": 1775697613, "source": "baotintuc.vn", "url": "https://baotintuc.vn/thi-truong-tien-te/gia-dau-giam-manh-khi-ky-vong-khoi-thong-eo-bien-hormuz-gia-tang-20260409072028597.htm", "entities": ["United States", "Iran", "Pakistan", "Capital Economics"], "impacted_assets": ["Gold", "Oil"], "volatility_implication": "Decrease", "llm_tone_score": 2}} +{"id": "98ca5474-a386-5054-9a20-74cd0f45cde5", "text": "FRP Holdings Announces Earnings Release Date and Conference Call Details. FRP Holdings, a real estate holding company, announced its earnings release date for the fourth quarter and full year 2025, as well as details for an upcoming conference call. The event is unlikely to have any significant impact on gold or silver prices, as it is a routine corporate announcement unrelated to macroeconomic or financial market drivers.", "metadata": {"topic": "macro_inflation_employment", "title": "FRP Holdings Announces Earnings Release Date and Conference Call Details", "original_title": "FRP Holdings , Inc . Announces Release Date for Its 2025 Fourth Quarter and Full Year Earnings and Details for the Earnings Conference Call", "publish_date": "2026-04-09T01:20:13Z", "publish_timestamp": 1775697613, "source": "californiatelegraph.com", "url": "http://www.californiatelegraph.com/news/278972410/frp-holdings-inc-announces-release-date-for-its-2025-fourth-quarter-and-full-year-earnings-and-details-for-the-earnings-conference-call", "entities": ["FRP Holdings", "Inc.", "Securities and Exchange Commission", "Matthew C. McNulty"], "impacted_assets": [], "volatility_implication": "Neutral", "llm_tone_score": 0}} +{"id": "62ea6efd-e04b-5da4-b4d1-99aec73d9aaa", "text": "Wall Street Closes in Strong Gain, Relieved by Iran-US Ceasefire Agreement. The US stock market surged on the news of a 2-week ceasefire agreement between the US and Iran, easing concerns about a potential conflict in the Middle East. This development contributed to reduced fears of recession, higher growth expectations, and lower inflation anticipations, leading to a strong gain for equities. The oil price decline also had a positive impact on the market, with energy sector stocks experiencing losses due to the reduced demand.", "metadata": {"topic": "macro_inflation_employment", "title": "Wall Street Closes in Strong Gain, Relieved by Iran-US Ceasefire Agreement", "original_title": "Wall Street clôture en nette hausse , soulagée par le cessez - le - feu en Iran", "publish_date": "2026-04-09T01:20:13Z", "publish_timestamp": 1775697613, "source": "africanmanager.com", "url": "https://africanmanager.com/wall-street-cloture-en-nette-hausse-soulagee-par-le-cessez-le-feu-en-iran/", "entities": ["United States", "Iran", "Edward Jones", "Interactive Brokers", "Chevron", "ConocoPhillips", "EOG Resources", "ExxonMobil"], "impacted_assets": ["Equities", "Oil", "USD"], "volatility_implication": "Decrease", "llm_tone_score": 3}} +{"id": "739516af-d0a7-5fa3-b647-4132035e5d4b", "text": "Update the IRPF (Personal Income Tax). The article suggests that the Spanish government should consider reducing the IRPF tax rate to help consumers and improve their purchasing power. This could be a positive macro driver for gold and silver prices, as it may lead to increased consumer spending and inflationary pressures.", "metadata": {"topic": "macro_inflation_employment", "title": "Update the IRPF (Personal Income Tax)", "original_title": "Actualitzar lIRPF", "publish_date": "2026-04-09T01:20:13Z", "publish_timestamp": 1775697613, "source": "lavanguardia.com", "url": "https://www.lavanguardia.com/participacion/cartas/20260409/11508990/actualitzar-l-irpf.html", "entities": ["Rosa Martí Conill", "Spanish Government", "IRPF (Spanish Personal Income Tax)"], "impacted_assets": ["Equities", "Gold", "USD"], "volatility_implication": "Neutral", "llm_tone_score": 2}} diff --git a/Data/3_Gold_Semantic/News_Qdrant/2026-04-08/qdrant_macro_yields_dollar_processed.jsonl b/Data/3_Gold_Semantic/News_Qdrant/2026-04-08/qdrant_macro_yields_dollar_processed.jsonl new file mode 100644 index 0000000..0c1237c --- /dev/null +++ b/Data/3_Gold_Semantic/News_Qdrant/2026-04-08/qdrant_macro_yields_dollar_processed.jsonl @@ -0,0 +1,9 @@ +{"id": "62ea6efd-e04b-5da4-b4d1-99aec73d9aaa", "text": "Wall Street Closes in Strong Gain, Relieved by Iran-US Ceasefire Agreement. The US stock market surged on the news of a 2-week ceasefire agreement between the US and Iran, easing concerns about a potential conflict in the Middle East. This development contributed to reduced fears of recession, higher growth expectations, and lower inflation anticipations, leading to a strong gain for equities. The oil price decline also had a positive impact on the market, with energy sector stocks experiencing losses due to the reduced demand.", "metadata": {"topic": "macro_yields_dollar", "title": "Wall Street Closes in Strong Gain, Relieved by Iran-US Ceasefire Agreement", "original_title": "Wall Street clôture en nette hausse , soulagée par le cessez - le - feu en Iran", "publish_date": "2026-04-09T01:21:11Z", "publish_timestamp": 1775697671, "source": "africanmanager.com", "url": "https://africanmanager.com/wall-street-cloture-en-nette-hausse-soulagee-par-le-cessez-le-feu-en-iran/", "entities": ["United States", "Iran", "Edward Jones", "Interactive Brokers", "Chevron", "ConocoPhillips", "EOG Resources", "ExxonMobil"], "impacted_assets": ["Equities", "Oil", "USD"], "volatility_implication": "Decrease", "llm_tone_score": 3}} +{"id": "5fb74704-7627-5fd8-ac58-a5ad871baee4", "text": "Stocks Rally as Oil Prices Plummet Following Iran War Ceasefire. The temporary ceasefire between the US and Iran has led to a surge in global equities, with the S&P 500, Dow Jones Industrial Average, and Nasdaq composite all rising significantly. The decline in oil prices has also had a positive impact on airline and travel stocks, while Treasury yields have fallen as hopes of lower interest rates later in the year increase. However, analysts caution that the ceasefire remains fragile, and any further escalation could negatively impact market sentiment.\n\nThe macro transmission mechanism is as follows: A decrease in oil prices reduces inflationary pressures, which can lead to a more accommodative monetary policy from central banks like the Federal Reserve. This, in turn, can boost equities and other risk assets, while also reducing the appeal of safe-haven assets like gold.", "metadata": {"topic": "macro_yields_dollar", "title": "Stocks Rally as Oil Prices Plummet Following Iran War Ceasefire", "original_title": "Stocks Close The Day Higher As Oil Prices Plummet Over Iran War Cease Fire", "publish_date": "2026-04-09T01:21:11Z", "publish_timestamp": 1775697671, "source": "newsradio1290wtks.iheart.com", "url": "https://newsradio1290wtks.iheart.com/content/2026-04-08-stocks-close-the-day-higher-as-oil-prices-plummet-over-iran-war-cease-fire/", "entities": ["United States", "Iran", "President Donald Trump", "United Airlines", "Carnival cruise lines", "Delta Air Lines"], "impacted_assets": ["Equities", "Gold", "Oil"], "volatility_implication": "Neutral", "llm_tone_score": 2}} +{"id": "63b64aeb-5490-563b-9263-f47110cbd261", "text": "Stocks Rally as Oil Prices Plummet Following Iran War Cease Fire. The temporary ceasefire between the US and Iran led to a surge in stocks, with the S&P 500, Dow Jones Industrial Average, and Nasdaq composite all rising. The decline in oil prices also boosted airline and travel stocks, while Treasury yields fell as hopes for lower interest rates increased. The market's optimism was tempered by concerns about the ceasefire's fragility and potential disruptions to shipping through the Strait of Hormuz.\n\nThe macro transmission mechanism is that a decrease in oil prices can lead to increased consumer spending and economic growth, which can boost equities and reduce inflationary pressures, making it more likely for the Federal Reserve to cut interest rates.", "metadata": {"topic": "macro_yields_dollar", "title": "Stocks Rally as Oil Prices Plummet Following Iran War Cease Fire", "original_title": "Stocks Close The Day Higher As Oil Prices Plummet Over Iran War Cease Fire | NewsRadio WKCY", "publish_date": "2026-04-09T01:21:11Z", "publish_timestamp": 1775697671, "source": "newsradiowkcy.iheart.com", "url": "https://newsradiowkcy.iheart.com/content/2026-04-08-stocks-close-the-day-higher-as-oil-prices-plummet-over-iran-war-cease-fire/", "entities": ["United Airlines", "Carnival cruise lines", "Delta Air Lines", "President Donald Trump", "Iran's foreign minister"], "impacted_assets": ["Equities", "Gold", "Oil"], "volatility_implication": "Neutral", "llm_tone_score": 2}} +{"id": "a6ea31b5-c35a-54e7-b593-feb4f8d7e6cc", "text": "Stocks Rally as Oil Prices Plummet Following Iran War Ceasefire. The temporary ceasefire between the US and Iran led to a surge in global equities, with the S&P 500, Dow Jones, and Nasdaq composite all rising significantly. The decline in oil prices also boosted airline and travel stocks, while Treasury yields fell as hopes for lower interest rates increased. However, analysts cautioned that the ceasefire remains fragile, and market optimism faded somewhat later in the day.\n\nThe macro transmission mechanism is as follows: a decrease in oil prices reduces inflationary pressures, which could lead to a more accommodative monetary policy from the Federal Reserve, potentially resulting in lower interest rates. This, in turn, can boost equities and other risk assets, such as gold. The ceasefire also reduces geopolitical tensions, which can positively impact market sentiment and investor confidence.", "metadata": {"topic": "macro_yields_dollar", "title": "Stocks Rally as Oil Prices Plummet Following Iran War Ceasefire", "original_title": "Stocks Close The Day Higher As Oil Prices Plummet Over Iran War Cease Fire", "publish_date": "2026-04-09T01:21:11Z", "publish_timestamp": 1775697671, "source": "whp580.iheart.com", "url": "https://whp580.iheart.com/content/2026-04-08-stocks-close-the-day-higher-as-oil-prices-plummet-over-iran-war-cease-fire/", "entities": ["United States", "Iran", "President Donald Trump", "United Airlines", "Carnival cruise lines", "Delta Air Lines"], "impacted_assets": ["Equities", "Gold", "Oil"], "volatility_implication": "Neutral", "llm_tone_score": 2}} +{"id": "9da3262c-b5fa-541c-964d-06cbc2042a3a", "text": "Wall Street Closes Higher, Relieved by Iran Ceasefire Announcement. Wall Street closed higher as investors welcomed the announcement of a 14-day ceasefire between the US and Iran. The news contributed to a decrease in oil prices, which in turn reduced concerns about recession, inflation, and growth. This led to optimism on the equity markets, with sectors such as energy, airlines, and logistics companies performing well. Cryptocurrency-related stocks also benefited from the increased appetite for risk.", "metadata": {"topic": "macro_yields_dollar", "title": "Wall Street Closes Higher, Relieved by Iran Ceasefire Announcement", "original_title": "Wall Street clôture en nette hausse , soulagée par le cessez - le - feu en Iran", "publish_date": "2026-04-09T01:21:11Z", "publish_timestamp": 1775697671, "source": "lecourrier.vn", "url": "https://lecourrier.vn/wall-street-cloture-en-nette-hausse-soulagee-par-le-cessez-le-feu-en-iran/1345035.html", "entities": ["United States", "Iran", "Edward Jones", "Interactive Brokers", "Chevron", "ConocoPhillips", "EOG Resources", "ExxonMobil", "Delta Air Lines", "American Airlines", "Alaska Air Group", "Carnival", "Royal Caribbean", "FedEx", "UPS", "Robinhood", "Riot Platforms"], "impacted_assets": ["Equities", "Gold", "Oil", "USD"], "volatility_implication": "Neutral: The ceasefire announcement has a calming effect on the market, reducing volatility.", "llm_tone_score": 2}} +{"id": "369d1304-9d6b-5291-83f2-02f4990faaf5", "text": "Rupee Expected to Stabilize at 92-93 Level Against USD. The article quotes the EAC-PM chairman as saying that the Indian Rupee is expected to stabilize at 92-93 levels against the USD, driven by improvements in macroeconomic fundamentals and a reduction in global uncertainties. He also expressed optimism about India's economic growth prospects, citing its resilience and fiscal space to absorb external shocks. The article highlights structural factors such as debt-to-GDP ratio improvements, ongoing reforms, and technological advancements as supportive of private sector investment and higher growth.\n\nThe stabilization of the Rupee is expected to have a positive impact on Indian equities and gold prices, as it reduces uncertainty and increases investor confidence in the economy.", "metadata": {"topic": "macro_yields_dollar", "title": "Rupee Expected to Stabilize at 92-93 Level Against USD", "original_title": "Rupee likely to stabilise at 92 - 93 level : EAC - PM chairman", "publish_date": "2026-04-09T01:21:11Z", "publish_timestamp": 1775697671, "source": "dailyexcelsior.com", "url": "https://www.dailyexcelsior.com/rupee-likely-to-stabilise-at-92-93-level-eac-pm-chairman/", "entities": ["S Mahendra Dev", "Economic Advisory Council to the Prime Minister (EAC-PM)", "Reserve Bank of India (RBI)"], "impacted_assets": ["Equities", "Gold"], "volatility_implication": "Neutral", "llm_tone_score": 2}} +{"id": "6cadf122-0f0b-51cd-9fd8-d998ce4b86fd", "text": "Stocks Rally as Oil Prices Plummet Following Iran War Ceasefire. The temporary ceasefire between the US and Iran has led to a surge in global equities, with the S&P 500, Dow Jones Industrial Average, and Nasdaq composite all rising significantly. The decline in oil prices has also had a positive impact on airline and travel stocks, while Treasury yields have fallen as hopes of lower interest rates later in the year increase. However, analysts caution that the ceasefire remains fragile, and any further escalation could negatively impact market sentiment.\n\nThe macro transmission mechanism is as follows: A decrease in oil prices reduces inflationary pressures, which can lead to a more accommodative monetary policy from central banks like the Federal Reserve. This, in turn, can boost equities and other risk assets, while also reducing the appeal of safe-haven assets like gold.", "metadata": {"topic": "macro_yields_dollar", "title": "Stocks Rally as Oil Prices Plummet Following Iran War Ceasefire", "original_title": "Stocks Close The Day Higher As Oil Prices Plummet Over Iran War Cease Fire", "publish_date": "2026-04-09T01:21:11Z", "publish_timestamp": 1775697671, "source": "1019bigwaax.iheart.com", "url": "https://1019bigwaax.iheart.com/content/2026-04-08-stocks-close-the-day-higher-as-oil-prices-plummet-over-iran-war-cease-fire/", "entities": ["United States", "Iran", "President Donald Trump", "United Airlines", "Carnival cruise lines", "Delta Air Lines"], "impacted_assets": ["Equities", "Gold", "Oil"], "volatility_implication": "Neutral", "llm_tone_score": 2}} +{"id": "ee33f9a6-575d-5c99-a12a-2bb5e9204f55", "text": "Oil Prices Plunge Below $95 as Global Markets Rally Following Ceasefire with Iran. The ceasefire between Iran and the global community has led to a surge in global markets, with the Dow Jones Industrial Average rising by 1,300 points. This development has resulted in a decrease in oil prices, which have fallen below $95 per barrel. The macro transmission mechanism is that the improved geopolitical situation has reduced uncertainty, leading to increased risk appetite and a subsequent rally in equities.", "metadata": {"topic": "macro_yields_dollar", "title": "Oil Prices Plunge Below $95 as Global Markets Rally Following Ceasefire with Iran", "original_title": "Oil plunges below $95 as the Dow surges 1 , 300 in a worldwide rally following a ceasefire with Iran", "publish_date": "2026-04-09T01:21:11Z", "publish_timestamp": 1775697671, "source": "santamariatimes.com", "url": "https://santamariatimes.com/ap/business/oil-plunges-below-95-as-the-dow-surges-1-300-in-a-worldwide-rally-following/article_a54e11c8-bfe7-4866-8e05-38da805d67ae.html", "entities": ["Iran", "Dow Jones Industrial Average"], "impacted_assets": ["Equities", "Gold", "Oil"], "volatility_implication": "Neutral", "llm_tone_score": 2}} +{"id": "15f1b2a9-51fd-5069-b6f4-25eea5fe8912", "text": "Suze Orman's Advice on Using Tax Refunds to Build Financial Security. Suze Orman advises using tax refunds strategically to build financial security. She recommends building emergency reserves, paying off high-interest credit card debt, investing in maintenance spending for cars and homes, contributing to retirement accounts, and avoiding unnecessary expenses. This advice is aimed at helping individuals strengthen their financial position rather than simply spending the refund.\n\nNote: As this article does not have a direct impact on gold or silver prices, the tone score is neutral. The advice provided by Suze Orman is general financial guidance that may indirectly affect consumer spending and savings habits, but it does not have a significant macro transmission mechanism to influence precious metals markets.", "metadata": {"topic": "macro_yields_dollar", "title": "Suze Orman's Advice on Using Tax Refunds to Build Financial Security", "original_title": "Suze Orman : 6 Best Ways To Use Tax Refund", "publish_date": "2026-04-09T01:21:11Z", "publish_timestamp": 1775697671, "source": "gobankingrates.com", "url": "https://www.gobankingrates.com/taxes/refunds/suze-orman-best-ways-use-large-tax-refund-to-become-financially-secure/", "entities": ["Suze Orman", "Congress", "economists"], "impacted_assets": [], "volatility_implication": "Neutral", "llm_tone_score": 0}} diff --git a/Data/3_Gold_Semantic/News_Qdrant/2026-04-10/qdrant_asset_metals_derivatives_processed.jsonl b/Data/3_Gold_Semantic/News_Qdrant/2026-04-10/qdrant_asset_metals_derivatives_processed.jsonl new file mode 100644 index 0000000..1321fca --- /dev/null +++ b/Data/3_Gold_Semantic/News_Qdrant/2026-04-10/qdrant_asset_metals_derivatives_processed.jsonl @@ -0,0 +1,3 @@ +{"id": "08241189-e8f3-59fc-a636-57188345649e", "text": "March CPI Surges to 3.3% as Iran War Drives Energy Costs Higher; What It Means for Investors. The March CPI report showed a 3.3% annual increase, driven primarily by energy costs due to the Iran war. This has led to a surge in oil prices and inflationary pressures. While headline inflation is high, core inflation remains relatively calm. The market reaction was positive, with equities rising on the news. The Federal Reserve is unlikely to make any significant moves in response to this data, as both headline and core inflation are within expected ranges. Energy stocks, gold, and commodity-linked assets have been beneficiaries of the war-driven volatility and are likely to continue to perform well. The focus now shifts to earnings reports from major banks next week.", "metadata": {"topic": "asset_metals_derivatives", "title": "March CPI Surges to 3.3% as Iran War Drives Energy Costs Higher; What It Means for Investors", "original_title": "March CPI Surges to 3 . 3 % as Iran War Drives Energy Costs Higher ; What It Means for Investors", "publish_date": "2026-04-10T19:51:20Z", "publish_timestamp": 1775850680, "source": "investorideas.com", "url": "https://www.investorideas.com/news/2026/main/04101-cpi-inflation-energy-surge-market-impact.asp", "entities": ["Federal Reserve", "Bureau of Labor Statistics", "deVere", "JPMorgan", "Wells Fargo", "Citigroup", "Goldman Sachs", "BlackRock"], "impacted_assets": ["Equities", "Gold", "Oil", "USD"], "volatility_implication": "Neutral", "llm_tone_score": 2}} +{"id": "30a0c48f-ed77-5b6e-a9da-1ba419968047", "text": "Major airlines cut flights and hike fares as fuel costs rise due to Middle East conflict. The ongoing conflict in the Middle East has led to a surge in fuel prices, prompting major airlines to cut flights and increase fares. This development may contribute to inflationary pressures, which could benefit gold and silver prices. The impact on oil prices is uncertain, but rising costs may lead to increased volatility.", "metadata": {"topic": "asset_metals_derivatives", "title": "Major airlines cut flights and hike fares as fuel costs rise due to Middle East conflict", "original_title": "Major airlines cut flights and hike fares as fuel costs rise", "publish_date": "2026-04-10T19:51:20Z", "publish_timestamp": 1775850680, "source": "penarthtimes.co.uk", "url": "https://www.penarthtimes.co.uk/news/26009421.major-airlines-cut-flights-hike-fares-fuel-costs-rise/", "entities": ["US", "Israel", "Iran", "Skybus", "Ryanair", "Air India", "Air New Zealand", "Delta Airlines", "Blue Islands Limited", "Air Kilroe Limited t/a Eastern Airways", "Play Airlines", "Legend Airlines"], "impacted_assets": ["Equities", "Gold", "Oil", "USD"], "volatility_implication": "Increase", "llm_tone_score": 2}} +{"id": "92826a0d-8fe9-585f-b6b5-f26305b2542a", "text": "Utilities Seek Federal Pause on Grid Bidding Amid AI-Driven Power Demand. A coalition of utilities is seeking federal intervention to pause competitive bidding for transmission projects needed to meet the vast energy needs of the data center boom. The request aims to address \"bureaucratic red tape\" and potential delays in project timelines. Ratepayer advocacy groups are pushing back, citing concerns about higher electricity bills. This development has no direct impact on gold or silver prices but may indirectly influence market sentiment through its implications for the broader economy.\n\nNote: As there is no explicit macro-financial driver mentioned in the article, I assigned a tone score of 0 (Neutral). The event's potential impact on the broader economy and market sentiment is indirect and not significant enough to warrant a specific tone score.", "metadata": {"topic": "asset_metals_derivatives", "title": "Utilities Seek Federal Pause on Grid Bidding Amid AI-Driven Power Demand", "original_title": "Utilities seek federal pause on grid bidding amid AI - driven power demand - WRCO", "publish_date": "2026-04-10T19:51:20Z", "publish_timestamp": 1775850680, "source": "wrco.com", "url": "https://wrco.com/news/2026/04/10/utilities-seek-federal-pause-on-grid-bidding-amid-ai-driven-power-demand", "entities": ["Xcel Energy", "Northern States Power Company-Wisconsin", "American Transmission Company (ATC)", "Wisconsin Citizens Utility Board", "Midcontinent Independent System Operator (MISO)", "Meta"], "impacted_assets": ["Equities", "Gold", "USD"], "volatility_implication": "Neutral", "llm_tone_score": 0}} diff --git a/Data/3_Gold_Semantic/News_Qdrant/2026-04-10/qdrant_macro_central_banks_processed.jsonl b/Data/3_Gold_Semantic/News_Qdrant/2026-04-10/qdrant_macro_central_banks_processed.jsonl new file mode 100644 index 0000000..df01bb9 --- /dev/null +++ b/Data/3_Gold_Semantic/News_Qdrant/2026-04-10/qdrant_macro_central_banks_processed.jsonl @@ -0,0 +1,8 @@ +{"id": "65919d40-9bb8-597e-b7c3-df8f64b1b702", "text": "Inflation Surges in March Amid Oil Shock Triggered by U.S.-Israeli War with Iran. The article reports a surge in inflation in March due to an oil shock triggered by the U.S.-Israeli war with Iran. This development could complicate interest rate policy at the Federal Reserve, which may be reluctant to lower borrowing costs as inflation climbs. The rapid acceleration of price increases could pose difficulty for the Fed, particularly if it decides to raise interest rates to combat inflation.", "metadata": {"topic": "macro_central_banks", "title": "Inflation Surges in March Amid Oil Shock Triggered by U.S.-Israeli War with Iran", "original_title": "Business - HITS FM", "publish_date": "2026-04-10T19:48:06Z", "publish_timestamp": 1775850486, "source": "hitsfm.net", "url": "https://hitsfm.net/business/9a906e8ed2f1be1191aa6d7dc2574e4c", "entities": ["United States", "Israel", "Iran", "Federal Reserve Chairman Jerome Powell"], "impacted_assets": ["Equities", "Gold", "Oil", "USD"], "volatility_implication": "Increase", "llm_tone_score": 2}} +{"id": "22a75fef-140e-5f11-892f-644349c7b3ca", "text": "Inflation Surges to Highest Level in Nearly Two Years as Energy Costs Spike. The surge in inflation to its highest level in nearly two years, driven by energy costs and the US-Iran conflict, is likely to boost gold and silver prices. The Federal Reserve may be cautious about cutting interest rates due to rising core inflation, which could support precious metals. The uncertainty surrounding the war's impact on the job market and economy also contributes to a bullish tone for gold and silver.\n\nNote: The tone score of +2 reflects the moderate increase in inflation, which is likely to have a positive impact on gold and silver prices, but not strong enough to trigger a significant rate cut by the Federal Reserve.", "metadata": {"topic": "macro_central_banks", "title": "Inflation Surges to Highest Level in Nearly Two Years as Energy Costs Spike", "original_title": "Inflation surges to highest level in nearly 2 years as energy costs spike", "publish_date": "2026-04-10T19:48:06Z", "publish_timestamp": 1775850486, "source": "kacu.org", "url": "https://www.kacu.org/2026-04-10/inflation-surges-to-highest-level-in-nearly-2-years-as-energy-costs-spike", "entities": ["Austan Goolsbee", "Federal Reserve Bank of Chicago", "New York Fed"], "impacted_assets": ["Equities", "Gold", "Oil", "USD"], "volatility_implication": "Increase", "llm_tone_score": 2}} +{"id": "4ea0158e-e17d-50d7-9f42-c3be4f118d6b", "text": "Trump Summons Banking Chiefs for Closed-Door Meeting on AI Model. The meeting between President Trump, Treasury Secretary Scott Bessent, Federal Reserve Chair Jerome Powell, and top banking executives is focused on an artificial intelligence model called Mythos. The AI model has identified thousands of high-severity vulnerabilities in major operating systems and web browsers, raising concerns about national defense firewalls. While this event may not have a direct impact on gold or silver prices, it could contribute to market uncertainty and potentially influence interest rates or currency markets, which may indirectly affect precious metals.", "metadata": {"topic": "macro_central_banks", "title": "Trump Summons Banking Chiefs for Closed-Door Meeting on AI Model", "original_title": "Trump summons banking chiefs for a closed - door meeting about an AI model : report", "publish_date": "2026-04-10T19:48:06Z", "publish_timestamp": 1775850486, "source": "wgme.com", "url": "https://wgme.com/news/nation-world/trump-summons-banking-chiefs-for-a-closed-door-meeting-about-an-ai-model-report-jerome-powell-scott-bessent", "entities": ["Donald Trump", "Scott Bessent", "Jerome Powell", "Ted Pick", "David Solomon", "Jane Fraser"], "impacted_assets": [], "volatility_implication": "Neutral", "llm_tone_score": 0}} +{"id": "b72097d8-e01d-5d87-ab77-7979dbc7d003", "text": "Why did Trump's government go back to attacking the Pix (and what can the US do about it)?. The US government has reopened an investigation into Brazil's Pix payment system, citing concerns over competitive unfairness. This development may lead to retaliatory measures from the US, such as tariffs or trade restrictions, which could negatively impact gold and silver prices. The tone is bearish due to the potential for increased market uncertainty and a possible weakening of the USD.\n\nThe macro transmission mechanism is as follows: an investigation into Pix may lead to retaliatory measures from the US, which could weaken the USD and increase market volatility, ultimately impacting gold and silver prices.", "metadata": {"topic": "macro_central_banks", "title": "Why did Trump's government go back to attacking the Pix (and what can the US do about it)?", "original_title": "Por que governo Trump voltou a atacar o Pix ( e o que EUA podem fazer contra ele )? ", "publish_date": "2026-04-10T19:48:06Z", "publish_timestamp": 1775850486, "source": "em.com.br", "url": "http://www.em.com.br/economia/2026/04/7394973-por-que-governo-trump-voltou-a-atacar-o-pix-e-o-que-eua-podem-fazer-contra-ele.html", "entities": ["President Luiz Inácio Lula da Silva", "President Gustavo Petro", "Office of the United States Trade Representative (USTR)", "Banco Central do Brasil"], "impacted_assets": ["Equities", "Gold", "USD"], "volatility_implication": "Decrease", "llm_tone_score": -2}} +{"id": "ea4a0790-7887-560b-b61f-0732d27e0a1b", "text": "Soaring Gas Prices Lead to Biggest Monthly Inflation Spike in Four Years in March. The article reports a significant increase in inflation due to soaring gas prices, which is expected to impact the Federal Reserve's monetary policy decisions. This development may lead to a rate hike or delay in rate cuts, potentially benefiting gold and silver prices. The macro transmission mechanism involves higher energy costs affecting consumer spending and economic growth, which could slow down the economy and increase demand for safe-haven assets like precious metals.", "metadata": {"topic": "macro_central_banks", "title": "Soaring Gas Prices Lead to Biggest Monthly Inflation Spike in Four Years in March", "original_title": "Soaring gas prices leads to biggest monthly inflation spike in four years in March", "publish_date": "2026-04-10T19:48:06Z", "publish_timestamp": 1775850486, "source": "1037qcountry.com", "url": "https://1037qcountry.com/news/030030-soaring-gas-prices-leads-to-biggest-monthly-inflation-spike-in-four-years-in-march/", "entities": ["Federal Reserve", "Iran", "White House", "Labor Department", "motor club AAA", "UBS"], "impacted_assets": ["Equities", "Gold", "Oil", "USD"], "volatility_implication": "Increase", "llm_tone_score": 2}} +{"id": "4a3d7ef5-8028-5979-8dba-c3c17e3c833e", "text": "Mexican Peso Strengthens to its Best Week in Over a Year as Dollar Falls. The Mexican peso is strengthening against the US dollar, with a 3.17% gain this week, driven by a weakening dollar and optimism in global markets. This trend is supported by a favorable international environment, including reduced tensions in the Middle East and potential diplomatic progress. The peso's appreciation is also influenced by inflation expectations in the US, which are driving interest rate decisions at the Federal Reserve.\n\nNote: The tone score of +2 reflects the bullish sentiment towards the Mexican peso, driven by its strengthening trend against the dollar, but with a neutral volatility implication as market fear/VIX remains stable.", "metadata": {"topic": "macro_central_banks", "title": "Mexican Peso Strengthens to its Best Week in Over a Year as Dollar Falls", "original_title": "Precio del dólar hoy viernes 10 de abril : peso mexicano perfila su mejor semana en un año", "publish_date": "2026-04-10T19:48:06Z", "publish_timestamp": 1775850486, "source": "elsiglodetorreon.com.mx", "url": "https://www.elsiglodetorreon.com.mx/noticia/2026/precio-del-dolar-hoy-viernes-10-de-abril-peso-mexicano-perfila-su-mejor-semana-en-un-ano.html", "entities": ["Mexican Peso", "US Dollar", "Bloomberg", "Banco Base", "Reserva Federal"], "impacted_assets": ["Gold", "Silver", "USD"], "volatility_implication": "Neutral", "llm_tone_score": 2}} +{"id": "ff6c4ccb-0384-5b7f-bb30-9764e4784ece", "text": "The Comeback of Swap Futures - Risk.net. A surge in directional block trades in interest rate swap futures contracts has been observed, with a total notional value of $2.5 billion printed in March. This increase in activity suggests growing market participation and potential for increased volatility in the interest rate derivatives space. The macro transmission mechanism is likely driven by changes in market expectations around monetary policy and economic growth, which may impact gold and silver prices through their inverse correlation with interest rates.", "metadata": {"topic": "macro_central_banks", "title": "The Comeback of Swap Futures - Risk.net", "original_title": "The swap futures comeback - Risk . net", "publish_date": "2026-04-10T19:48:06Z", "publish_timestamp": 1775850486, "source": "risk.net", "url": "https://www.risk.net/markets/7963346/the-swap-futures-comeback", "entities": ["None explicitly mentioned"], "impacted_assets": ["Gold", "Silver", "Interest Rate Derivatives"], "volatility_implication": "Neutral", "llm_tone_score": 2}} +{"id": "6dd1d9f9-5bdc-5e6b-aae1-cda390659f91", "text": "Oil Shock Triggers Inflation Surge Amid Middle East Conflict. The ongoing Middle East conflict has triggered a significant oil shock, leading to a surge in inflation and prices. This development could complicate interest rate policy at the Federal Reserve, which may be reluctant to lower borrowing costs as inflation climbs. The rapid acceleration of price increases could pose difficulty for the Fed, particularly if it decides to raise interest rates to combat inflation.", "metadata": {"topic": "macro_central_banks", "title": "Oil Shock Triggers Inflation Surge Amid Middle East Conflict", "original_title": "Prices surged in March after oil shock set off by Iran war", "publish_date": "2026-04-10T19:48:06Z", "publish_timestamp": 1775850486, "source": "abc30.com", "url": "https://abc30.com/post/prices-surged-march-oil-shock-set-off-iran-war/18865879/", "entities": ["Iran", "United States", "Israel", "Jerome Powell", "Federal Reserve"], "impacted_assets": ["Gold", "Silver", "USD", "Crude Oil"], "volatility_implication": "Increase", "llm_tone_score": 2}} diff --git a/Data/3_Gold_Semantic/News_Qdrant/2026-04-10/qdrant_macro_geopolitics_risk_processed.jsonl b/Data/3_Gold_Semantic/News_Qdrant/2026-04-10/qdrant_macro_geopolitics_risk_processed.jsonl new file mode 100644 index 0000000..4b0f0a1 --- /dev/null +++ b/Data/3_Gold_Semantic/News_Qdrant/2026-04-10/qdrant_macro_geopolitics_risk_processed.jsonl @@ -0,0 +1,7 @@ +{"id": "953bd332-c506-5eaa-b648-5cef0e82ed24", "text": "Vice President Challenges President on Aid Amid 2026 Energy Crisis. Vice President Sara Duterte questioned President Marcos' efforts to assist Filipinos affected by the ongoing energy crisis. She suggested that fuel prices could ease if tensions in the Middle East subside or alternative fuel sources are secured. The government has implemented measures to reduce energy consumption, and a State of National Energy Emergency has been declared. This development is likely to have a neutral impact on gold and silver prices, but may lead to some volatility in oil markets.\n\nNote: The tone score is +1 because while the Vice President's comments may create some uncertainty, they do not directly affect the macroeconomic environment or the central bank's monetary policy stance, which are key drivers of gold and silver prices.", "metadata": {"topic": "macro_geopolitics_risk", "title": "Vice President Challenges President on Aid Amid 2026 Energy Crisis", "original_title": "VP Sara Challenges Marcos on Aid Amid 2026 Energy Crisis", "publish_date": "2026-04-10T19:50:08Z", "publish_timestamp": 1775850608, "source": "sunstar.com.ph", "url": "https://www.sunstar.com.ph/davao/vp-sara-questions-pbbm-on-aid-amid-energy-crisis", "entities": ["Sara Duterte", "Ferdinand \"Bongbong\" Marcos Jr."], "impacted_assets": ["Equities", "Gold", "Oil"], "volatility_implication": "Neutral", "llm_tone_score": 1}} +{"id": "65919d40-9bb8-597e-b7c3-df8f64b1b702", "text": "Inflation Surges in March Amid Oil Shock Triggered by U.S.-Israeli War with Iran. The article reports a surge in inflation in March due to an oil shock triggered by the U.S.-Israeli war with Iran. This development could pose difficulties for the Federal Reserve as it weighs its interest rate policy. The rapid acceleration of price increases may lead to higher borrowing costs, which could impact gold and silver prices positively.", "metadata": {"topic": "macro_geopolitics_risk", "title": "Inflation Surges in March Amid Oil Shock Triggered by U.S.-Israeli War with Iran", "original_title": "Business - HITS FM", "publish_date": "2026-04-10T19:50:08Z", "publish_timestamp": 1775850608, "source": "hitsfm.net", "url": "https://hitsfm.net/business/9a906e8ed2f1be1191aa6d7dc2574e4c", "entities": ["United States", "Israel", "Iran", "Jerome Powell", "Federal Reserve"], "impacted_assets": ["Gold", "Silver", "USD", "Equities"], "volatility_implication": "Increase", "llm_tone_score": 2}} +{"id": "a94553db-aff9-5b82-ba8d-fa5ac28e600b", "text": "Trump Reveals Timeline for Iran-US Talks Outcome: US Warships Being Rearmed with Best Weapons. The article reports that US President Donald Trump has revealed a 24-hour timeline for the outcome of talks between the US and Iran. If negotiations fail, Trump warns that the US will rearm its warships with the best weapons ever made, implying a potential escalation in tensions. This development increases market fear and volatility, particularly in gold and oil markets, as investors anticipate a possible conflict scenario.\n\nNote: The tone score is bearish due to the escalating rhetoric and implied threat of military action, which could lead to increased uncertainty and market volatility.", "metadata": {"topic": "macro_geopolitics_risk", "title": "Trump Reveals Timeline for Iran-US Talks Outcome: US Warships Being Rearmed with Best Weapons", "original_title": " USKORO ĆEMO SAZNATI Tramp otkrio kad će biti poznato da li će pregovori SAD i Irana biti uspešni : Mi punimo brodove najboljim oružjem", "publish_date": "2026-04-10T19:50:08Z", "publish_timestamp": 1775850608, "source": "novosti.rs", "url": "https://www.novosti.rs/planeta/svet/1596010/uskoro-cemo-saznati-tramp-otkrio-kad-biti-poznato-pregovori-sad-irana-biti-uspesni-punimo-brodove-najboljim-oruzjem", "entities": ["Donald Trump", "Pakistan", "Iran", "United States"], "impacted_assets": ["Gold", "Oil", "USD"], "volatility_implication": "Increase", "llm_tone_score": -3}} +{"id": "0f382490-5526-5ad3-965b-8d85e1bb6c2c", "text": "China Sees Solid Rise in Cross-Border Travel in Q1, with Foreign National Trips Surging. China's cross-border travel growth is driven by relaxed entry policies and streamlined customs procedures. The surge in foreign national trips is a positive sign for the country's tourism industry, which saw over 150 million inbound tourist visits in 2025, with spending exceeding $130 billion. This trend may lead to increased demand for gold and silver as investors seek safe-haven assets amid growing economic activity.\n\nThe macro transmission mechanism is that increased consumer spending and tourism can boost economic growth, leading to higher demand for precious metals like gold and silver.", "metadata": {"topic": "macro_geopolitics_risk", "title": "China Sees Solid Rise in Cross-Border Travel in Q1, with Foreign National Trips Surging", "original_title": "China sees solid rise in cross - border travel in Q1 , with foreign national trips surging", "publish_date": "2026-04-10T19:50:08Z", "publish_timestamp": 1775850608, "source": "shanghainews.net", "url": "http://www.shanghainews.net/news/278975895/china-sees-solid-rise-in-cross-border-travel-in-q1-with-foreign-national-trips-surging", "entities": ["China", "Xinhua", "National Immigration Administration", "Hong Kong", "Macao", "Taiwan", "Fujian province", "Hainan province", "Ministry of Culture and Tourism"], "impacted_assets": ["Equities", "Gold", "USD"], "volatility_implication": "Neutral", "llm_tone_score": 2}} +{"id": "cce40e36-706a-5adf-bfba-2bcffb1e03ba", "text": "Club Med Opens New Resort in Sabah, Malaysia!. The opening of Club Med's new resort in Sabah, Malaysia, is expected to boost tourism in the region. The resort features a unique blend of natural and cultural experiences, including red forest exploration and wildlife observation. This development may have a neutral impact on gold and silver prices, as it does not directly affect macroeconomic drivers or global financial markets.\n\nNote: As there are no explicit mentions of macroeconomic drivers, interest rates, inflation, or geopolitical conflicts in the article, I assigned a tone score of 0 (Neutral).", "metadata": {"topic": "macro_geopolitics_risk", "title": "Club Med Opens New Resort in Sabah, Malaysia!", "original_title": "亞洲最新隱奢海島誕生 ! Club Med沙巴度假村開訂 4天3夜2萬起全包 | 流行消費 | 生活", "publish_date": "2026-04-10T19:50:08Z", "publish_timestamp": 1775850608, "source": "udn.com", "url": "https://udn.com/news/story/7270/9433920", "entities": ["Club Med", "Sabah", "Malaysia", "Kuala Penyu", "Amazon"], "impacted_assets": ["Equities", "Gold", "USD"], "volatility_implication": "Neutral", "llm_tone_score": 0}} +{"id": "fa744fb4-9367-5506-93fc-0ef864e84f13", "text": "Germany Delivers Five Armored Medical Vehicles to Ukrainian National Guard. The German government has delivered five armored medical vehicles, known as MEDIGUARD, to the Ukrainian National Guard. This is part of a larger agreement funded by Germany and marks an increase in military aid to Ukraine. The new batch of vehicles includes anti-drone nets for enhanced protection. While this news may not have a direct impact on Gold/Silver prices, it could contribute to market sentiment and potentially influence investor decisions.\n\nNote: As the tone score is 0 (Neutral), this event is unlikely to have a significant impact on Gold/Silver prices. However, as part of a broader macroeconomic context, it may contribute to market sentiment and influence investor decisions.", "metadata": {"topic": "macro_geopolitics_risk", "title": "Germany Delivers Five Armored Medical Vehicles to Ukrainian National Guard", "original_title": "Συνεχίζουν να εξοπλίζουν τους εγκληματίες - Η Γερμανία παρέδωσε 5 τεθωρακισμένα οχήματα MEDIGUARD στην Εθνοφρουρά της Ουκρανίας", "publish_date": "2026-04-10T19:50:08Z", "publish_timestamp": 1775850608, "source": "bankingnews.gr", "url": "https://www.bankingnews.gr/diethni/articles/867952/synexizoun-na-eksoplizoun-tous-egklimaties-i-germania-paredose-5-tethorakismena-oximata-mediguard-stin-ethnofroura-tis-oukranias", "entities": ["German government", "Ukraine", "MEDIGUARD manufacturers (Ukrainian and German companies)"], "impacted_assets": [], "volatility_implication": "Neutral", "llm_tone_score": 0}} +{"id": "c44c3ee2-f0bf-5202-92d6-f1f49dc05481", "text": "Airports Warn of Systemic Jet Fuel Shortage if Strait of Hormuz Remains Closed. The potential shortage of jet fuel due to the closure of the Strait of Hormuz could lead to higher prices, which may benefit gold and silver prices. The increased cost of jet fuel could be passed on to passengers, leading to higher airfares, which may negatively impact equities and oil prices. The USD may strengthen as a safe-haven asset in response to the potential shortage.\n\nNote: The tone score is +2 because while the event has negative implications for airlines and air travel, it may have positive implications for gold and silver prices due to increased market uncertainty and risk aversion.", "metadata": {"topic": "macro_geopolitics_risk", "title": "Airports Warn of Systemic Jet Fuel Shortage if Strait of Hormuz Remains Closed", "original_title": "Airports warn of systemic jet fuel shortage if Strait of Hormuz stays closed", "publish_date": "2026-04-10T19:50:08Z", "publish_timestamp": 1775850608, "source": "cravenherald.co.uk", "url": "https://www.cravenherald.co.uk/news/national/26012377.airports-warn-systemic-jet-fuel-shortage-strait-hormuz-stays-closed/", "entities": ["European Commission", "Airports Council International (ACI)", "Ryanair", "Sir Keir Starmer", "US President Donald Trump"], "impacted_assets": ["Equities", "Gold", "Oil", "USD"], "volatility_implication": "Increase", "llm_tone_score": 2}} diff --git a/Data/3_Gold_Semantic/News_Qdrant/2026-04-10/qdrant_macro_yields_dollar_processed.jsonl b/Data/3_Gold_Semantic/News_Qdrant/2026-04-10/qdrant_macro_yields_dollar_processed.jsonl new file mode 100644 index 0000000..35bec1b --- /dev/null +++ b/Data/3_Gold_Semantic/News_Qdrant/2026-04-10/qdrant_macro_yields_dollar_processed.jsonl @@ -0,0 +1,5 @@ +{"id": "f4bc7cc6-83a1-5646-8499-ff457a94e7d0", "text": "Commodity Prices Update. The article reports on the current prices of various commodities, including gold, silver, oil, and agricultural products. Gold and silver prices have increased, while oil prices have decreased. Agricultural commodity prices are mixed, with some increasing and others decreasing. Energy commodity prices have also seen changes, with natural gas and heating oil prices declining. The overall tone is neutral, as there are no clear directional macro drivers impacting the commodities market.\n\nNote: As the article does not explicitly mention any entities or macroeconomic factors that would significantly impact gold and silver prices, I assigned a tone score of +1 (Neutral).", "metadata": {"topic": "macro_yields_dollar", "title": "Commodity Prices Update", "original_title": "Rohstoffpreise am Freitagabend", "publish_date": "2026-04-10T19:49:15Z", "publish_timestamp": 1775850555, "source": "finanzen.net", "url": "https://www.finanzen.net/nachricht/rohstoffe/rohstoffpreise-am-freitagabend-15604785", "entities": ["None explicitly mentioned"], "impacted_assets": ["Gold", "Silver", "Oil", "Agricultural commodities (e.g.", "Wheat", "Coffee", "Soybeans)", "Energy commodities (e.g.", "Natural Gas", "Heating Oil)"], "volatility_implication": "Neutral", "llm_tone_score": 1}} +{"id": "a52e4d37-76f8-5d6c-9706-cb71c0372f1c", "text": "Elderly Man Suffers Serious Injury While Driving Tractor in Agricultural Area. A 79-year-old man suffered serious injuries while driving a tractor in an agricultural area near Arcisate, Varese. The incident occurred when the driver lost control of the vehicle and crashed into a fence. Emergency services were quickly dispatched to the scene, and the patient was transported to a nearby hospital for treatment. This event is unlikely to have any significant impact on gold or silver prices, but may contribute to a neutral tone in the market.", "metadata": {"topic": "macro_yields_dollar", "title": "Elderly Man Suffers Serious Injury While Driving Tractor in Agricultural Area", "original_title": "Arcisate , ha un malore mentre guida il trattore nei campi : 79enne in condizioni disperate", "publish_date": "2026-04-10T19:49:15Z", "publish_timestamp": 1775850555, "source": "ilgiorno.it", "url": "https://www.ilgiorno.it/varese/cronaca/arcisate-malore--guida-trattore-79enne-condizioni-disperate-764da021", "entities": ["Arcisate", "Varese", "Velmaio", "Donizetti", "Croce Rossa Valceresio"], "impacted_assets": [], "volatility_implication": "Neutral", "llm_tone_score": -2}} +{"id": "52a00f1e-74d1-514a-87d6-7ee730f3541b", "text": "India's Domestic Investors Show Resilience Amid Global Uncertainty and Market Volatility. Despite global market volatility and geopolitical tensions, Indian domestic investors have shown surprising resilience by increasing their inflows into equity funds. This trend is notable as it contrasts with the outflows seen from foreign investors. The data suggests that local demand for stocks in India remains robust even during periods of extreme uncertainty. While this may not be enough to offset the ongoing outflows from abroad, it does indicate where the market's current support lies - within the domestic market.\n\nNote: The tone score is +2 as the article highlights a positive trend in Indian equity markets, which could potentially boost gold prices if investors seek safe-haven assets.", "metadata": {"topic": "macro_yields_dollar", "title": "India's Domestic Investors Show Resilience Amid Global Uncertainty and Market Volatility", "original_title": "Schwellenländer - Rallye voraus ?: Trotz Krieg : Warum Indiens Aktienfonds jetzt plötzlich Kapital anziehen | wallstreetONLINE", "publish_date": "2026-04-10T19:49:15Z", "publish_timestamp": 1775850555, "source": "wallstreet-online.de", "url": "https://www.wallstreet-online.de/nachricht/20716512-schwellenlaender-rallye-voraus-trotz-krieg-indiens-aktienfonds-kapital-anziehen", "entities": ["Association of Mutual Funds in India", "NSE Nifty 50 Index", "Bloomberg"], "impacted_assets": ["Equities", "Gold"], "volatility_implication": "Neutral", "llm_tone_score": 2}} +{"id": "ba889749-cbe5-53de-874e-b8f97314f556", "text": "OpenAI's Compute Advantage Over Anthropic Escalates the AI Competition. The article highlights the escalating competition between OpenAI and Anthropic in the AI space. OpenAI has increased its compute capacity to gain an advantage over its rival, while Anthropic is investing heavily to catch up. This intensifying competition may lead to increased volatility in technology stocks and potentially impact the USD.", "metadata": {"topic": "macro_yields_dollar", "title": "OpenAI's Compute Advantage Over Anthropic Escalates the AI Competition", "original_title": "Konter gegen Anthropic : KI - Wettrennen eskaliert : OpenAI setzt Rivalen unter Druck | wallstreetONLINE", "publish_date": "2026-04-10T19:49:15Z", "publish_timestamp": 1775850555, "source": "wallstreet-online.de", "url": "https://www.wallstreet-online.de/nachricht/20718345-konter-anthropic-ki-wettrennen-eskaliert-openai-rivalen-druck", "entities": ["OpenAI", "Anthropic", "Bloomberg", "Google", "Broadcom"], "impacted_assets": ["Equities", "Technology Stocks", "USD"], "volatility_implication": "Increase", "llm_tone_score": 2}} +{"id": "ce32d34f-3e5b-55ca-b032-627433045f44", "text": "Two workers killed in crane accident in Palermo. A tragic accident occurred in Palermo where two workers fell from a crane during a work intervention. The incident is under investigation by authorities. This event has no direct macro-financial implications and is unlikely to impact gold or silver prices.\n\nNote: As the article reports on a localized industrial accident with no apparent macroeconomic or financial connections, it does not have any significant bearing on the Gold/Silver options trading desk.", "metadata": {"topic": "macro_yields_dollar", "title": "Two workers killed in crane accident in Palermo", "original_title": "Palermo morti due operai caduti da una gru", "publish_date": "2026-04-10T19:49:15Z", "publish_timestamp": 1775850555, "source": "zazoom.it", "url": "https://www.zazoom.it/2026-04-10/palermo-morti-due-operai-caduti-da-una-gru/18980070/", "entities": ["Pierluigi Vito", "TV2000.it", "Adnkronos", "La Sicilia"], "impacted_assets": [], "volatility_implication": "Neutral", "llm_tone_score": 0}} diff --git a/Data/3_Gold_Semantic/News_Qdrant/2026-04-12/qdrant_asset_metals_derivatives_processed.jsonl b/Data/3_Gold_Semantic/News_Qdrant/2026-04-12/qdrant_asset_metals_derivatives_processed.jsonl new file mode 100644 index 0000000..9b7009c --- /dev/null +++ b/Data/3_Gold_Semantic/News_Qdrant/2026-04-12/qdrant_asset_metals_derivatives_processed.jsonl @@ -0,0 +1,4 @@ +{"id": "193f29a1-7d1e-5ad9-97da-f142bb567ee9", "text": "The Rise of DeepSeek, a Chinese AI Company that's Quietly Taking on the Giants. DeepSeek, a Chinese AI company, has been quietly gaining traction in the industry by releasing high-quality models at affordable prices. Its V2 model was praised for its efficiency and effectiveness, while its R1 model demonstrated impressive performance in deep learning tasks. The company's open-source approach and willingness to collaborate with other developers have earned it recognition and admiration from the AI community. As DeepSeek prepares to release its V4 model, it is expected to further solidify its position as a major player in the industry.\n\nThe article highlights DeepSeek's remarkable journey, from being an underdog to becoming a force to be reckoned with in the AI space. The company's success can be attributed to its focus on developing high-quality models at affordable prices, as well as its willingness to collaborate with other developers and share knowledge openly. As DeepSeek continues to innovate and push boundaries, it is likely to remain a major player in the industry for years to come.\n\nThe article also touches on the topic of AI's potential impact on the job market, with some experts predicting that AI will create more jobs than it replaces. However, the author notes that this is still a topic of debate and that more research is needed to fully understand the implications of AI on the job market.\n\nOverall, the article provides a comprehensive overview of DeepSeek's rise to prominence in the AI industry, highlighting its achievements, challenges, and potential impact on the job market.", "metadata": {"topic": "asset_metals_derivatives", "title": "The Rise of DeepSeek, a Chinese AI Company that's Quietly Taking on the Giants", "original_title": "DeepSeek , 该卸下扫地僧的枷锁了", "publish_date": "2026-04-12T14:43:52Z", "publish_timestamp": 1776005032, "source": "tech.ifeng.com", "url": "https://tech.ifeng.com/c/8sGYfvCKmod", "entities": ["DeepSeek", "OpenAI", "Meta", "SemiAnalysis", "Alexander Wang"], "impacted_assets": ["Equities", "Gold", "Oil", "USD"], "volatility_implication": "Neutral", "llm_tone_score": 2}} +{"id": "1381fed0-d03a-5e47-b513-c019f553fd5e", "text": "Major airlines cut flights and hike fares as fuel costs rise due to Middle East conflict. The ongoing conflict in the Middle East has led to a surge in fuel prices, prompting major airlines to cut flights and hike fares. This development may contribute to inflationary pressures, which could benefit Gold/Silver prices. The impact on USD is uncertain, but rising fuel costs may weaken the currency.", "metadata": {"topic": "asset_metals_derivatives", "title": "Major airlines cut flights and hike fares as fuel costs rise due to Middle East conflict", "original_title": "Major airlines cut flights and hike fares as fuel costs rise", "publish_date": "2026-04-12T14:43:52Z", "publish_timestamp": 1776005032, "source": "swindonadvertiser.co.uk", "url": "https://www.swindonadvertiser.co.uk/news/26014087.major-airlines-cut-flights-hike-fares-fuel-costs-rise/", "entities": ["US", "Israel", "Iran", "Skybus", "Ryanair", "Air India", "Air New Zealand", "Delta Airlines", "Blue Islands Limited", "Air Kilroe Limited t/a Eastern Airways", "Play Airlines", "Legend Airlines"], "impacted_assets": ["Equities", "Gold", "Oil", "USD"], "volatility_implication": "Increase (Rising fuel costs and potential supply chain disruptions may increase market fear/VIX)", "llm_tone_score": 2}} +{"id": "c5212f5a-37ca-50a2-b921-33367bcb9271", "text": "Gold Volatility Amid Geopolitical Crises: What History Tells Us. The article discusses the volatility of gold prices during times of geopolitical crises. Despite a sharp escalation in tensions, gold prices pulled back after briefly retesting record highs. Historical context suggests that gold can experience volatility during the early stages of major global disruptions, driven by factors such as liquidity needs, rising rates, and a stronger U.S. dollar. The article concludes that once conditions stabilize, central bank demand is likely to normalize, and the broader trend of reserve diversification remains intact.\n\nNote: The tone score is neutral because the article does not provide clear directional macro drivers that would significantly impact gold prices.", "metadata": {"topic": "asset_metals_derivatives", "title": "Gold Volatility Amid Geopolitical Crises: What History Tells Us", "original_title": "Gold Volatility Amid Geopolitical Crises : What History Tells Us", "publish_date": "2026-04-12T14:43:52Z", "publish_timestamp": 1776005032, "source": "etftrends.com", "url": "https://www.etftrends.com/tactical-allocation-content-hub/gold-volatility-amid-geopolitical-crises-history-tells/", "entities": ["United States", "Israel", "Iran", "Turkey", "Indonesia", "Guatemala", "Malaysia", "World Gold Council"], "impacted_assets": ["Equities", "Oil", "USD", "Gold"], "volatility_implication": "Neutral", "llm_tone_score": 0}} +{"id": "60e0203d-8ef1-5fa7-ba95-812b553d3146", "text": "Risk of Power Struggle between Brussels and Rome's Palazzo. The article discusses the potential power struggle between Brussels and Rome's Palazzo regarding the European Media Freedom Act. This regulation could impact the governance of Rai, Italy's public broadcasting service. The situation is complex, with various stakeholders involved, including the Italian government, Commissione europea, Agcom, and internal factions within Rai. The article highlights the uncertainty surrounding the future of Rai's leadership and potential changes to its governance structure.", "metadata": {"topic": "asset_metals_derivatives", "title": "Risk of Power Struggle between Brussels and Rome's Palazzo", "original_title": "Rai , in onda il risiko dei poteri tra Bruxelles e Palazzo", "publish_date": "2026-04-12T14:43:52Z", "publish_timestamp": 1776005032, "source": "iltempo.it", "url": "https://www.iltempo.it/personaggi/2026/04/12/news/luigi-bisignani-rai-poteri-riforma-governance-lobby-logge-giampaolo-rossi-47241443/", "entities": ["European Media Freedom Act", "Rai", "Italian government", "Commissione europea", "Agcom", "Simona Agnes", "Gian Marco Chiocci", "Francesco Verderami", "Incoronata Boccia", "Nicola Rao", "Mario Orfeo", "Stefano Coletta"], "impacted_assets": ["Equities", "Gold", "EURUSD"], "volatility_implication": "Neutral", "llm_tone_score": 0}} diff --git a/Data/3_Gold_Semantic/News_Qdrant/2026-04-12/qdrant_asset_precious_metals_spot_processed.jsonl b/Data/3_Gold_Semantic/News_Qdrant/2026-04-12/qdrant_asset_precious_metals_spot_processed.jsonl new file mode 100644 index 0000000..fabb309 --- /dev/null +++ b/Data/3_Gold_Semantic/News_Qdrant/2026-04-12/qdrant_asset_precious_metals_spot_processed.jsonl @@ -0,0 +1,6 @@ +{"id": "b381c7f6-ecbb-5353-82a7-e86f87efd582", "text": "Mid-East Update from Islam Memiş: Gold and Housing Warning for Monday!. A ceasefire agreement in the Middle East has been reached, leading to a natural and expected price adjustment. As a result, gold and silver prices have stabilized, while other assets like euro, Bitcoin, and equities have rebounded. However, market participants are still cautious, expecting further volatility before a more stable trend emerges.\n\nNote: The tone score is +2 because the article suggests a positive development in the Middle East, which could lead to increased investor confidence and a subsequent rise in gold and silver prices.", "metadata": {"topic": "asset_precious_metals_spot", "title": "Mid-East Update from Islam Memiş: Gold and Housing Warning for Monday!", "original_title": "İslam Memiş ten altın ve konut için pazartesi uyarısı ! Artık zamanı geldi", "publish_date": "2026-04-12T14:42:33Z", "publish_timestamp": 1776004953, "source": "tgrthaber.com", "url": "https://www.tgrthaber.com/ekonomi/islam-memisten-altin-ve-konut-icin-pazartesi-uyarisi-artik-zamani-geldi-3294009", "entities": ["Islam Memiş", "Middle East"], "impacted_assets": ["Gold", "Silver", "Euro", "Bitcoin", "Equities"], "volatility_implication": "Neutral", "llm_tone_score": 2}} +{"id": "39ca5764-6907-5ec4-8c90-e95986db48d1", "text": "Gold Prices in Egypt: A Stable Outlook for the Weekend of April 12, 2026. The article reports on the current state of gold prices in Egypt, with no significant changes or market-moving events. The prices of different karat weights (24, 22, 21, and 18) are stable, with the Egyptian pound-gold price remaining high. The article also provides information on the current exchange rate between the US dollar and the Egyptian pound. This neutral tone suggests that there is no immediate impact on gold or silver prices.\n\nNote: As the article does not contain any market-moving news or events, the tone score is neutral, indicating no significant impact on gold or silver prices.", "metadata": {"topic": "asset_precious_metals_spot", "title": "Gold Prices in Egypt: A Stable Outlook for the Weekend of April 12, 2026", "original_title": "بكام جرام الذهب ؟.. أسعار الذهب اليوم الأحد 12 إبريل 2026", "publish_date": "2026-04-12T14:42:33Z", "publish_timestamp": 1776004953, "source": "dostor.org", "url": "https://www.dostor.org/5503201", "entities": ["Egyptian gold prices", "Central Bank of Egypt", "international markets"], "impacted_assets": ["Equities", "Gold", "USD"], "volatility_implication": "Neutral", "llm_tone_score": 0}} +{"id": "0784abc8-2142-5e70-bb98-aa8a3a3ebeab", "text": "Who are the Toesca protagonists: The key players in Sanhattan's moment. Toesca S.A. Administradora de Fondos de Inversión, a specialized alternative assets manager, has been making headlines with its recent acquisitions and partnerships. The company's founders, Alejandro Reyes and Carlos Saieh, have a background in the financial industry, having worked at BTG Pactual and Celfin before starting Toesca. With over $2.5 billion in investments and managing around $1.5 billion in 25 funds, Toesca is gaining prominence in the market. The company's growth and expansion plans may have implications for the broader financial markets, particularly in the equities and gold sectors.\n\nNote: As there are no explicit macro-financial or geopolitical drivers mentioned in the article, I assigned a tone score of 0 (Neutral).", "metadata": {"topic": "asset_precious_metals_spot", "title": "Who are the Toesca protagonists: The key players in Sanhattan's moment", "original_title": "Quiénes son los Toesca : Los protagonistas del momento en Sanhattan", "publish_date": "2026-04-12T14:42:33Z", "publish_timestamp": 1776004953, "source": "latercera.com", "url": "https://www.latercera.com/pulso/noticia/quienes-son-los-toesca-los-protagonistas-del-momento-en-sanhattan/", "entities": ["Alejandro Reyes", "Carlos Saieh", "BTG Pactual", "Celfin", "Aetna", "ING", "Moneda Asset Management", "Frontal Trust", "TC Latin America Partners", "Primus Capital", "Ameris Capital"], "impacted_assets": ["Equities", "Gold", "USD"], "volatility_implication": "Neutral", "llm_tone_score": 0}} +{"id": "193f29a1-7d1e-5ad9-97da-f142bb567ee9", "text": "The Rise of DeepSeek, a Chinese AI Company that's Quietly Taking on the Giants. DeepSeek, a Chinese AI company, has been quietly gaining traction in the industry by releasing high-quality models at affordable prices. Its V2 model was praised for its efficiency and effectiveness, while its R1 model demonstrated impressive performance in deep learning tasks. The company's open-source approach and willingness to collaborate with other developers have earned it recognition and admiration from the AI community. As DeepSeek prepares to release its V4 model, it is expected to further solidify its position as a major player in the industry.\n\nThe article highlights DeepSeek's remarkable journey, from being an underdog to becoming a force to be reckoned with in the AI space. The company's success can be attributed to its focus on developing high-quality models at affordable prices, as well as its willingness to collaborate with other developers and share knowledge openly. As DeepSeek continues to innovate and push boundaries, it is likely to remain a major player in the industry for years to come.\n\nThe article also touches on the topic of AI's potential impact on the job market, with some experts predicting that AI will create more jobs than it replaces. However, the author notes that this is still a topic of debate and that more research is needed to fully understand the implications of AI on the job market.\n\nOverall, the article provides a comprehensive overview of DeepSeek's rise to prominence in the AI industry, highlighting its achievements, challenges, and potential impact on the job market.", "metadata": {"topic": "asset_precious_metals_spot", "title": "The Rise of DeepSeek, a Chinese AI Company that's Quietly Taking on the Giants", "original_title": "DeepSeek , 该卸下扫地僧的枷锁了", "publish_date": "2026-04-12T14:42:33Z", "publish_timestamp": 1776004953, "source": "tech.ifeng.com", "url": "https://tech.ifeng.com/c/8sGYfvCKmod", "entities": ["DeepSeek", "OpenAI", "Meta", "SemiAnalysis", "Alexander Wang"], "impacted_assets": ["Equities", "Gold", "Oil", "USD"], "volatility_implication": "Neutral", "llm_tone_score": 2}} +{"id": "70d77a50-0bf0-5149-8e26-83fcfde790f3", "text": "Liverpool band's historic song and its connection to the city's music scene.. This article is a nostalgic look at the Liverpool band The Real Thing and their hit song \"You To Me Are Everything\". The story highlights the group's journey to success, including their early struggles and eventual breakthrough with the help of manager Tony Hall. The article provides insight into the band's history and music style, but does not have any direct impact on gold or silver prices.", "metadata": {"topic": "asset_precious_metals_spot", "title": "Liverpool band's historic song and its connection to the city's music scene.", "original_title": "Liverpool band made history - but theyre not the Beatles | Celebrity News | Showbiz & TV", "publish_date": "2026-04-12T14:42:33Z", "publish_timestamp": 1776004953, "source": "express.co.uk", "url": "https://www.express.co.uk/celebrity-news/2192212/liverpool-boy-band-who-made-history", "entities": ["The Real Thing", "Chris Amoo", "Dave Smith", "Tony Hall", "Ken Gold", "Micky Denne", "David Essex", "Johnny Bristol"], "impacted_assets": [], "volatility_implication": "Neutral", "llm_tone_score": 0}} +{"id": "707cd706-8727-51dd-94b5-579f9bccc536", "text": "WisdomTree Silver 3x ETC: Holdings Break Out!. The silver market is heading towards its sixth supply deficit in a row, driven by growing industrial demand and shrinking physical inventories. This fundamental imbalance supports prices and fuels leveraged investment products like the WisdomTree Silver 3x ETC. The strong US dollar weakness and diplomatic tensions in Islamabad are also contributing to the upward momentum.", "metadata": {"topic": "asset_precious_metals_spot", "title": "WisdomTree Silver 3x ETC: Holdings Break Out!", "original_title": "WisdomTree Silver 3x ETC : Bestände brechen ein ! ", "publish_date": "2026-04-12T14:42:33Z", "publish_timestamp": 1776004953, "source": "boerse-express.com", "url": "https://www.boerse-express.com/news/articles/wisdomtree-silver-3x-etc-bestaende-brechen-ein-891172", "entities": ["WisdomTree", "Silver Institute", "COMEX"], "impacted_assets": ["Gold", "Equities", "USD"], "volatility_implication": "Increase", "llm_tone_score": 4}} diff --git a/Data/3_Gold_Semantic/News_Qdrant/2026-04-12/qdrant_macro_central_banks_processed.jsonl b/Data/3_Gold_Semantic/News_Qdrant/2026-04-12/qdrant_macro_central_banks_processed.jsonl new file mode 100644 index 0000000..235c494 --- /dev/null +++ b/Data/3_Gold_Semantic/News_Qdrant/2026-04-12/qdrant_macro_central_banks_processed.jsonl @@ -0,0 +1,7 @@ +{"id": "73edcea6-f323-5e99-9eb9-a58b3ecc5cab", "text": "Should I Invest in an IRA or Pay Off Debt First?. The article discusses the importance of paying off debt before investing in a Roth IRA. According to Dave Ramsey, the caller should focus on eliminating their $45,000 non-mortgage debt first, as every dollar going towards debt payments is a dollar that cannot be invested. This advice suggests a bearish tone for gold and silver prices, as it implies a more cautious approach to investing and potentially less demand for precious metals.\n\nNote: The article does not directly impact the macro-financial landscape or have any significant implications for gold and silver prices. However, the emphasis on debt repayment and delayed investment in a Roth IRA could contribute to a slightly bearish tone in the market.", "metadata": {"topic": "macro_central_banks", "title": "Should I Invest in an IRA or Pay Off Debt First?", "original_title": "I Have $45K in Debt . Should I Invest in an IRA or Pay the Bills First ? ", "publish_date": "2026-04-12T14:39:07Z", "publish_timestamp": 1776004747, "source": "finance.yahoo.com", "url": "https://finance.yahoo.com/markets/options/articles/45k-debt-invest-ira-pay-125503481.html", "entities": ["Dave Ramsey", "SoFi Crypto"], "impacted_assets": ["Equities", "Gold"], "volatility_implication": "Neutral", "llm_tone_score": -3}} +{"id": "8027d293-efc0-5106-9f0b-028b07476ff4", "text": "Workers can withdraw up to 20% of their FGTS to pay debts, says minister. The Brazilian government plans to allow workers with income up to 5 minimum salaries (R$8,105) to withdraw up to 20% of their FGTS (Fundo de Garantia por Tempo de Serviço) to pay off debts. This measure aims to reduce endividamento and will be part of a broader program that includes bank discounts and government guarantees for refinancing. The macro transmission mechanism is expected to have a positive impact on the economy, potentially boosting consumer spending and reducing debt burdens.\n\nNote: The tone score is +2 because while the news is generally positive for the economy, it may not have a significant direct impact on gold or silver prices. However, the potential reduction in endividamento could lead to increased consumer spending and economic growth, which could indirectly support precious metals.", "metadata": {"topic": "macro_central_banks", "title": "Workers can withdraw up to 20% of their FGTS to pay debts, says minister", "original_title": "Trabalhador poderá sacar até 20 % do FGTS para pagar dívidas , diz ministro | Tribuna Online", "publish_date": "2026-04-12T14:39:07Z", "publish_timestamp": 1776004747, "source": "tribunaonline.com.br", "url": "https://tribunaonline.com.br/economia/trabalhador-podera-sacar-ate-20-do-fgts-para-pagar-dividas-diz-ministro-298957", "entities": ["Dario Durigan", "Luiz Marinho", "Jair Bolsonaro", "Lula"], "impacted_assets": ["Equities", "Gold", "USD"], "volatility_implication": "Neutral", "llm_tone_score": 2}} +{"id": "d92ee245-ab8e-5514-bf47-53fb1301b3d9", "text": "Recommendations for Stocks to Watch on April 13th. The article discusses the outlook for two Vietnamese companies, Gelex (GEX) and Masan High-Tech Materials (MSR). For GEX, the report highlights the potential growth in its equipment and construction materials segments, driven by domestic policies and FDI inflows. MSR is expected to benefit from strong demand for its vonfram products due to global supply chain disruptions and increasing prices. The article recommends buying GEX and increasing exposure to MSR.\n\nNote: The tone score is +2 because the article presents a neutral-bullish outlook for both companies, with no major bearish factors mentioned.", "metadata": {"topic": "macro_central_banks", "title": "Recommendations for Stocks to Watch on April 13th", "original_title": "Cổ phiếu cần quan tâm ngày 13 / 4", "publish_date": "2026-04-12T14:39:07Z", "publish_timestamp": 1776004747, "source": "tinnhanhchungkhoan.vn", "url": "https://www.tinnhanhchungkhoan.vn/co-phieu-can-quan-tam-ngay-134-post388652.html", "entities": ["Gelex (GEX)", "Masan High-Tech Materials (MSR)", "Agriseco (AGR)"], "impacted_assets": ["Equities", "Gold"], "volatility_implication": "Neutral", "llm_tone_score": 2}} +{"id": "0737dd43-bfb6-540d-91d9-e313b720342f", "text": "Vietnamese authorities prosecute Bankland group for fraudulently obtaining over 500 billion VND from over 5,300 victims. A group of individuals, led by Vũ Đức Tĩnh, has been accused of fraudulently obtaining over 500 billion VND (approximately $22 million) from over 5,300 victims through a Ponzi scheme. The group established three companies, Bankland, Cawiho, and GBF, which were used to solicit investments with high interest rates. The authorities have concluded that the group's actions resulted in the loss of over 572 billion VND (approximately $25 million) for the victims. This event is likely to decrease market volatility as it highlights the risks associated with unregulated investment schemes.\n\nNote: The tone score is bearish due to the negative impact on investor confidence and the potential for increased regulatory scrutiny, which may lead to a decrease in gold prices.", "metadata": {"topic": "macro_central_banks", "title": "Vietnamese authorities prosecute Bankland group for fraudulently obtaining over 500 billion VND from over 5,300 victims", "original_title": "Truy tố nhóm điều hành Bankland lừa gần 500 tỷ đồng của hơn 5 . 300 bị hại", "publish_date": "2026-04-12T14:39:07Z", "publish_timestamp": 1776004747, "source": "baomoi.com", "url": "https://baomoi.com/truy-to-nhom-dieu-hanh-bankland-lua-gan-500-ty-dong-cua-hon-5-300-bi-hai-c54920488.epi", "entities": ["Vũ Đức Tĩnh", "Nguyễn Thị Thanh Vân", "Bankland", "Cawiho", "GBF"], "impacted_assets": ["Equities", "Gold", "USD"], "volatility_implication": "Decrease", "llm_tone_score": -3}} +{"id": "547523a8-5e6f-5c4d-bad3-80a885a39bc0", "text": "The Conference Board Employment Trends Index Declined in March. The Conference Board's Employment Trends Index (ETI) declined in March, indicating a potential slowdown in job growth. This is reflected in the increase in consumers reporting \"jobs are hard to get\" and the rise in involuntary part-time workers. The decline was driven by negative contributions from five ETI components, including industrial production and real manufacturing and trade sales. This news may lead to increased market caution, potentially impacting equities and gold prices, while having a neutral impact on USD volatility.\n\nNote: As the tone score is -2, it suggests a bearish sentiment for Gold/Silver prices, but not extremely bearish.", "metadata": {"topic": "macro_central_banks", "title": "The Conference Board Employment Trends Index Declined in March", "original_title": "The Conference Board Employment Trends Index™ ( ETI ) Declined in March", "publish_date": "2026-04-12T14:39:07Z", "publish_timestamp": 1776004747, "source": "prnewswire.com", "url": "https://www.prnewswire.com/news-releases/the-conference-board-employment-trends-index-eti-declined-in-march-302734697.html", "entities": ["Mitchell Barnes", "Economist at The Conference Board", "U.S. Department of Labor", "National Federation of Independent Business Research Foundation", "Federal Reserve Board", "Bureau of Economic Analysis", "Bureau of Labor Statistics"], "impacted_assets": ["Equities", "Gold", "USD"], "volatility_implication": "Neutral", "llm_tone_score": -2}} +{"id": "643e42a6-e60b-5fda-9163-37016c4bdf71", "text": "Central Banks Flee to Gold for First Time in 30 Years. Central banks have shifted their reserves from dollars to gold for the first time in 30 years, with gold now making up 24% of global reserve holdings. This trend is driven by concerns over US dollar dominance and the potential for sanctions on foreign assets. The World Gold Council reports that central banks purchased a record 863 tons of gold in 2025, with Poland's central bank leading the way. This surge in demand has pushed gold prices up around 70% year-over-year, making it an attractive alternative to US dollars.\n\nThe macro transmission mechanism is as follows: Central banks' shift away from US dollars and towards gold reflects concerns over the stability of the global financial system. As a result, investors are seeking safe-haven assets like gold, driving up prices and increasing market volatility. This trend has implications for the value of the US dollar, which could weaken further if central banks continue to diversify their reserves away from USD-denominated assets.", "metadata": {"topic": "macro_central_banks", "title": "Central Banks Flee to Gold for First Time in 30 Years", "original_title": "30 yıldır ilk kez yaşanıyor : Merkez bankaları dolardan kaçıp altına sığındı", "publish_date": "2026-04-12T14:39:07Z", "publish_timestamp": 1776004747, "source": "sozcu.com.tr", "url": "https://www.sozcu.com.tr/30-yildir-ilk-kez-yasaniyor-merkez-bankalari-dolardan-kacip-altina-sigindi-p309549", "entities": ["World Gold Council", "central banks", "Russia", "Ukraine", "US Treasury"], "impacted_assets": ["Gold", "USD", "Equities"], "volatility_implication": "Increase", "llm_tone_score": 3}} +{"id": "b835eb59-ccdf-5a76-97c9-5128f6fb3b33", "text": "Will Low Interest Rates Trigger a Stock Market Boom?. The article discusses the potential impact of low interest rates and market expectations on Vietnam's stock market. Analysts from various firms expect the VN-Index to continue its upward trend, potentially reaching 1,800 points in the near future. However, they also caution that the market may experience short-term corrections due to geopolitical risks and uncertainty. The article highlights the potential benefits for sectors such as construction, real estate, and consumer goods, which are expected to benefit from government investment plans and a recovering economy.\n\nThe macro transmission mechanism is driven by the combination of low interest rates, improving market sentiment, and government stimulus packages, which are expected to boost economic growth and investor confidence. The article does not explicitly mention any specific drivers that would significantly impact gold or silver prices; therefore, I have assigned a neutral tone score.", "metadata": {"topic": "macro_central_banks", "title": "Will Low Interest Rates Trigger a Stock Market Boom?", "original_title": "Tiền rẻ có quay lại , chứng khoán sáng cửa bứt phá ? ", "publish_date": "2026-04-12T14:39:07Z", "publish_timestamp": 1776004747, "source": "tinnhanhchungkhoan.vn", "url": "https://www.tinnhanhchungkhoan.vn/tien-re-co-quay-lai-chung-khoan-sang-cua-but-pha-post388709.html", "entities": ["Vietinbank", "Yuanta Việt Nam", "OCBS", "CTS"], "impacted_assets": ["Equities", "Gold", "USD"], "volatility_implication": "Neutral", "llm_tone_score": 2}} diff --git a/Data/3_Gold_Semantic/News_Qdrant/2026-04-12/qdrant_macro_geopolitics_risk_processed.jsonl b/Data/3_Gold_Semantic/News_Qdrant/2026-04-12/qdrant_macro_geopolitics_risk_processed.jsonl new file mode 100644 index 0000000..67b31e7 --- /dev/null +++ b/Data/3_Gold_Semantic/News_Qdrant/2026-04-12/qdrant_macro_geopolitics_risk_processed.jsonl @@ -0,0 +1,5 @@ +{"id": "35805df8-e8b6-5883-8b68-1f2c12f439f0", "text": "Russia and Ukraine Trade Blame over Orthodox Easter Ceasefire Violations. The ongoing conflict between Russia and Ukraine has led to a breakdown in the Orthodox Easter ceasefire. Both sides have accused each other of violating the truce, with reports of shelling, drone strikes, and small arms fire. This escalation in violence is likely to increase market fear and volatility, potentially driving up gold prices as investors seek safe-haven assets. The USD may also strengthen as risk aversion increases.", "metadata": {"topic": "macro_geopolitics_risk", "title": "Russia and Ukraine Trade Blame over Orthodox Easter Ceasefire Violations", "original_title": "Russia and Ukraine trade blame for violating Orthodox Easter ceasefire", "publish_date": "2026-04-12T14:41:52Z", "publish_timestamp": 1776004912, "source": "readingchronicle.co.uk", "url": "https://www.readingchronicle.co.uk/news/national/26014084.russia-ukraine-trade-blame-violating-orthodox-easter-ceasefire/", "entities": ["Vladimir Putin", "Volodymyr Zelensky", "Russian President", "Ukrainian President"], "impacted_assets": ["Gold", "USD"], "volatility_implication": "Increase", "llm_tone_score": -2}} +{"id": "a43dd760-9cb8-5a0b-ab18-18f9b88e6177", "text": "UK Prime Minister Urges US and Iran to Find a Way Through After Peace Talks Fail. The UK Prime Minister has called for the US and Iran to find a way through after peace talks failed. The situation remains fragile, with the Strait of Hormuz still blocked by Iran, leading to soaring energy prices. The UK will host further talks next week to explore ways to support a sustainable end to the conflict and increase international diplomatic pressure on Iran.", "metadata": {"topic": "macro_geopolitics_risk", "title": "UK Prime Minister Urges US and Iran to Find a Way Through After Peace Talks Fail", "original_title": "Starmer urges US and Iran to find a way through after peace talks fail", "publish_date": "2026-04-12T14:41:52Z", "publish_timestamp": 1776004912, "source": "bordertelegraph.com", "url": "https://www.bordertelegraph.com/news/national/26014105.starmer-urges-us-iran-to-find-way-through-peace-talks-fail/", "entities": ["Sir Keir Starmer", "Donald Trump", "His Majesty Sultan Haitham bin Tarik al Said"], "impacted_assets": ["Equities", "Gold", "Oil", "USD"], "volatility_implication": "Neutral", "llm_tone_score": 0}} +{"id": "5c326183-8136-5fca-b1ff-aef2bd329af5", "text": "China to Reestablish Some Ties with Taiwan after Opposition Leader Visit. The reestablishment of some ties between China and Taiwan is a neutral event for the gold/silver market. This development does not have a direct macro transmission mechanism to affect gold or silver prices, as it is primarily a diplomatic move without significant implications for global economic growth or inflation.", "metadata": {"topic": "macro_geopolitics_risk", "title": "China to Reestablish Some Ties with Taiwan after Opposition Leader Visit", "original_title": "China to reinstate some Taiwan ties after opposition leader visit", "publish_date": "2026-04-12T14:41:52Z", "publish_timestamp": 1776004912, "source": "article.wn.com", "url": "https://article.wn.com/view/2026/04/12/China_to_reinstate_some_Taiwan_ties_after_opposition_leaders/", "entities": ["China", "Taiwan", "Beijing-friendly opposition leader"], "impacted_assets": [], "volatility_implication": "Neutral", "llm_tone_score": 0}} +{"id": "5232d8b1-7f86-5f8d-9305-bcb5c0cd47ea", "text": "Russia-Ukraine Conflict: Ceasefire Breaches and Prisoner Exchange. The Russia-Ukraine conflict has seen a ceasefire breach, with both sides accusing each other of violating the agreement. Despite this, hundreds of prisoners were exchanged, and the situation remains tense at the front lines. The macro transmission mechanism is neutral, as there are no clear directional drivers for gold or silver prices.", "metadata": {"topic": "macro_geopolitics_risk", "title": "Russia-Ukraine Conflict: Ceasefire Breaches and Prisoner Exchange", "original_title": "Ukraine - Krieg : Tausende Verste bei Osterwaffenruhe beklagt", "publish_date": "2026-04-12T14:41:52Z", "publish_timestamp": 1776004912, "source": "muensterschezeitung.de", "url": "https://www.muensterschezeitung.de/nachrichten/schlagzeilen/ukraine-krieg-tausende-verstoesse-bei-osterwaffenruhe-beklagt-3530354", "entities": ["Vladimir Putin", "Volodymyr Zelensky", "Dmitri Peskow"], "impacted_assets": ["Equities", "Gold", "Oil", "USD"], "volatility_implication": "Neutral", "llm_tone_score": 0}} +{"id": "e06b791b-28a4-5e4d-b465-e69cb4f9a816", "text": "Trump Announces Blockade of Strait of Hormuz for Those Paying Iran. US President Donald Trump has announced a blockade of the Strait of Hormuz for any vessel paying Iran to pass through. This move is likely to increase tensions in the region and boost gold prices as investors seek safe-haven assets. The strengthening of Russia's support for Iran may also lead to increased volatility in oil markets, while a weakening USD could further fuel inflation concerns.\n\nThe macro transmission mechanism at play here is the potential escalation of geopolitical tensions, which can drive up demand for safe-haven assets like gold and increase market fear, leading to higher VIX levels. The blockade announcement also has implications for global trade and commerce, particularly in the oil sector, as Iran is a significant player in global energy markets.", "metadata": {"topic": "macro_geopolitics_risk", "title": "Trump Announces Blockade of Strait of Hormuz for Those Paying Iran", "original_title": "Trump anuncia un bloqueo del Estrecho de Ormuz para todos aquellos que paguen a Irán", "publish_date": "2026-04-12T14:41:52Z", "publish_timestamp": 1776004912, "source": "diariocritico.com", "url": "https://www.diariocritico.com/internacional/trump-anuncia-bloqueo-estrecho-ormuz-paguen-a-iran", "entities": ["Donald Trump", "Irán", "Vladimir Putin", "Masud Pezeshkian"], "impacted_assets": ["Gold", "Oil", "USD"], "volatility_implication": "Increase", "llm_tone_score": 3}} diff --git a/Data/3_Gold_Semantic/News_Qdrant/2026-04-12/qdrant_macro_inflation_employment_processed.jsonl b/Data/3_Gold_Semantic/News_Qdrant/2026-04-12/qdrant_macro_inflation_employment_processed.jsonl new file mode 100644 index 0000000..acacf31 --- /dev/null +++ b/Data/3_Gold_Semantic/News_Qdrant/2026-04-12/qdrant_macro_inflation_employment_processed.jsonl @@ -0,0 +1,7 @@ +{"id": "49fb7d82-f0b7-5b32-9ea2-2e3a320a1259", "text": "Norwegian Labor Union and Industry Reach Agreement on Wage Increase. The Norwegian Labor Union and Industry have reached an agreement on a wage increase, with a 6.50 kr general addendum and additional 4 kr for the lowest-paid workers. This development is neutral for gold/silver prices, as it does not significantly impact macroeconomic drivers or global market sentiment.\n\nNote: As there are no explicit mentions of monetary policy, inflation, or currency movements in this article, the tone score is neutral. The agreement on wage increase may have some indirect effects on consumer spending and economic growth, but these are not directly relevant to gold/silver prices.", "metadata": {"topic": "macro_inflation_employment", "title": "Norwegian Labor Union and Industry Reach Agreement on Wage Increase", "original_title": "Lønnsforhandlinger , Arbeidsliv | Enighet med Fellesforbundet i frontfagsoppgjøret – Parat fortsatt i mekling", "publish_date": "2026-04-12T14:40:26Z", "publish_timestamp": 1776004826, "source": "ringblad.no", "url": "https://www.ringblad.no/enighet-med-fellesforbundet-i-frontfagsoppgjoret-parat-fortsatt-i-mekling/s/5-45-2209025", "entities": ["Fellesforbundet", "Parat", "Norsk Industri", "Riksmekleren"], "impacted_assets": ["Equities", "Gold", "Oil", "USD"], "volatility_implication": "Neutral", "llm_tone_score": 0}} +{"id": "092a0a3c-8587-5774-8e43-edfd28e1794f", "text": "The US-Iran Talks Fail, Trump Considers Naval Blockade as Next Move. The US-Iran talks have failed to achieve any progress, and the US is considering a naval blockade as its next move. This development could lead to increased market volatility, particularly in oil prices, and potentially weigh on gold prices. The threat of resumed combat operations and the potential for supply chain disruptions could also contribute to higher inflation expectations, further supporting gold's safe-haven appeal.\n\nThe tone score is bearish due to the escalating tensions between the US and Iran, which could lead to increased market volatility and a decline in risk assets like equities and oil. The consideration of a naval blockade as a next move adds to the negative sentiment, suggesting that the situation may worsen before it improves.", "metadata": {"topic": "macro_inflation_employment", "title": "The US-Iran Talks Fail, Trump Considers Naval Blockade as Next Move", "original_title": "War On Iran : – Loser Tries Setting Terms – The Strange Idea Of Blockading Blockaders – Moon of Alabama", "publish_date": "2026-04-12T14:40:26Z", "publish_timestamp": 1776004826, "source": "moonofalabama.org", "url": "https://www.moonofalabama.org/2026/04/war-on-iran-loser-tries-setting-terms-the-strange-idea-of-blockading-blockaders.html/comment-page-2", "entities": ["Donald Trump", "Iran", "United States", "Jack Keane", "John Solomon"], "impacted_assets": ["Gold", "Oil", "USD"], "volatility_implication": "Increase", "llm_tone_score": -2}} +{"id": "a2c8f543-5fe4-5445-8230-3dc242f4ed3e", "text": "Zimbabwe Banks Hedge Against Global Shocks Amid Cautious Optimism. Zimbabwe's banking sector is cautiously optimistic about 2026 growth prospects, driven by stable macroeconomic indicators and improving economic fundamentals. However, banks are also hedging against global shocks and currency pressures. The sector's focus on stability in inflation, interest rates, and exchange rates is seen as critical for sustaining momentum after years of volatility.\n\nNote: The tone score is +1 because while the article mentions some risks and challenges, the overall sentiment is cautiously optimistic, which is slightly bullish for gold and silver prices.", "metadata": {"topic": "macro_inflation_employment", "title": "Zimbabwe Banks Hedge Against Global Shocks Amid Cautious Optimism", "original_title": "Zimbabwe lenders hedge against global shocks", "publish_date": "2026-04-12T14:40:26Z", "publish_timestamp": 1776004826, "source": "thestandard.co.zw", "url": "https://www.thestandard.co.zw/business/article/200053827/zimbabwes-lenders-hedge-against-global-shocks", "entities": ["Luxon Zembe", "CBZ Holdings Limited", "Tawanda Nyambirai", "TN CyberTech Bank", "Agnes Makamure", "ZB Financial Holdings Limited", "Herbert Nkala", "FBC Holdings Limited", "Pearson Gowero", "NMB Bank", "Patrick Devenish", "First Capital Bank Zimbabwe"], "impacted_assets": ["Equities", "Gold", "USD"], "volatility_implication": "Neutral", "llm_tone_score": 1}} +{"id": "303c24bf-d4c3-5210-8ae2-a898e7d805dc", "text": "Immigration Crackdown Reaches Beyond Workplaces in Rural Missouri. The article highlights an immigration crackdown in rural Missouri, where ICE agents arrested three individuals, including two from Senegal and one from Guatemala. This expansion of enforcement beyond workplaces may increase uncertainty and potentially weigh on the USD, leading to a short-term boost for gold prices.", "metadata": {"topic": "macro_inflation_employment", "title": "Immigration Crackdown Reaches Beyond Workplaces in Rural Missouri", "original_title": "In rural Missouri , immigration crackdown reaches beyond the workplace", "publish_date": "2026-04-12T14:40:26Z", "publish_timestamp": 1776004826, "source": "newstribune.com", "url": "http://www.newstribune.com/news/2026/apr/12/in-rural-missouri-immigration-crackdown-reaches-beyond-the-workplace/", "entities": ["Eliseo Affholter", "U.S. Immigration and Customs Enforcement (ICE)", "President Donald Trump", "Axel Fuentes", "Kevin R. Johnson"], "impacted_assets": ["USD", "Equities", "Gold"], "volatility_implication": "Neutral", "llm_tone_score": -2}} +{"id": "c0875d6d-6d02-51c9-b031-b6bc716e756e", "text": "Chinese Tourism | Spring in China Beckons Foreign Visitors!. The article highlights the increasing popularity of Chinese tourism among foreign visitors, particularly during the spring season. With China's visa-free policy and social media platforms, overseas tourists are flocking to experience the country's vibrant culture and natural beauty. This trend is expected to drive growth in the tourism industry, with data showing a 21% increase in international arrivals in March. The article also touches on the cultural exchange between China and foreign visitors, highlighting the mutual understanding and appreciation that can be gained through travel.\n\nNote: As there are no direct macro-financial implications from this article, I have assigned a neutral tone score of 0.", "metadata": {"topic": "macro_inflation_employment", "title": "Chinese Tourism | Spring in China Beckons Foreign Visitors!", "original_title": "中国游记 | 春色不负万里客 ! 老外爱上 春日中国行 - 水母网", "publish_date": "2026-04-12T14:40:26Z", "publish_timestamp": 1776004826, "source": "news.shm.com.cn", "url": "https://news.shm.com.cn/2026-04/12/content_5482767.htm", "entities": ["China", "Overseas Tourists", "Shanghai", "Guizhou", "Jiangxi", "Xinjiang", "Kashgar", "Ili"], "impacted_assets": ["Equities", "Gold", "USD"], "volatility_implication": "Neutral", "llm_tone_score": 0}} +{"id": "0784abc8-2142-5e70-bb98-aa8a3a3ebeab", "text": "Who are the Toesca protagonists: The key players in Sanhattan's moment. Toesca S.A. Administradora de Fondos de Inversión, a specialized alternative assets manager, has been making headlines with its recent acquisitions and partnerships. The company's founders, Alejandro Reyes and Carlos Saieh, have a background in the financial industry, having worked at BTG Pactual and Celfin before starting Toesca. With over $2.5 billion in investments and managing around $1.5 billion in 25 funds, Toesca is gaining prominence in the market. The company's growth and expansion plans may have implications for the broader financial markets, particularly in the equities and gold sectors.\n\nNote: As there are no explicit macro-financial or geopolitical drivers mentioned in the article, I assigned a tone score of 0 (Neutral).", "metadata": {"topic": "macro_inflation_employment", "title": "Who are the Toesca protagonists: The key players in Sanhattan's moment", "original_title": "Quiénes son los Toesca : Los protagonistas del momento en Sanhattan", "publish_date": "2026-04-12T14:40:26Z", "publish_timestamp": 1776004826, "source": "latercera.com", "url": "https://www.latercera.com/pulso/noticia/quienes-son-los-toesca-los-protagonistas-del-momento-en-sanhattan/", "entities": ["Alejandro Reyes", "Carlos Saieh", "BTG Pactual", "Celfin", "Aetna", "ING", "Moneda Asset Management", "Frontal Trust", "TC Latin America Partners", "Primus Capital", "Ameris Capital"], "impacted_assets": ["Equities", "Gold", "USD"], "volatility_implication": "Neutral", "llm_tone_score": 0}} +{"id": "7f51aba0-52c7-515e-9478-a57755aefbd3", "text": "Haiti's Food and Fuel Crisis Deepens Amid Rising Oil Prices. The article highlights the devastating impact of rising oil prices on Haiti's already fragile economy. As fuel costs surge, food prices are expected to increase, exacerbating hunger and poverty in a country where nearly 40% of the population survives on less than $2.15 per day. This macro transmission mechanism is bearish for Gold/Silver prices, as it increases market fear/VIX, which may lead to increased demand for safe-haven assets like precious metals.", "metadata": {"topic": "macro_inflation_employment", "title": "Haiti's Food and Fuel Crisis Deepens Amid Rising Oil Prices", "original_title": "Haitians cut back on already scarce food and ask how theyll survive rising fuel prices – Sun Sentinel", "publish_date": "2026-04-12T14:40:26Z", "publish_timestamp": 1776004826, "source": "sun-sentinel.com", "url": "https://www.sun-sentinel.com/2026/04/12/haitians-cut-back-on-already-scarce-food-and-ask-how-theyll-survive-rising-fuel-prices/", "entities": ["Alexandre Joseph", "Erwan Rumen", "Emmline Toussaint", "Fedline Jean-Pierre", "Maxime Poulard"], "impacted_assets": ["Gold", "Silver", "USD"], "volatility_implication": "Increase", "llm_tone_score": -3}} diff --git a/Data/3_Gold_Semantic/News_Qdrant/2026-04-14/qdrant_asset_precious_metals_spot_processed.jsonl b/Data/3_Gold_Semantic/News_Qdrant/2026-04-14/qdrant_asset_precious_metals_spot_processed.jsonl new file mode 100644 index 0000000..b9828e0 --- /dev/null +++ b/Data/3_Gold_Semantic/News_Qdrant/2026-04-14/qdrant_asset_precious_metals_spot_processed.jsonl @@ -0,0 +1,6 @@ +{"id": "ad97a3a6-1567-57bd-855b-a68a12c65490", "text": "Silver Prices Surge in Vietnam and Globally Amid Geopolitical Developments. The article reports a surge in silver prices in Vietnam and globally, driven by geopolitical developments. The US and Iran are reportedly close to reaching a long-term ceasefire agreement, which has boosted market sentiment and led to increased demand for safe-haven assets like gold and silver. This development is expected to have a positive impact on the price of these precious metals.\n\nThe macro transmission mechanism at play here is the increase in risk appetite among investors, driven by the potential resolution of geopolitical tensions. As investors become more optimistic about the future, they are likely to seek out higher-risk assets like gold and silver, driving up their prices.", "metadata": {"topic": "asset_precious_metals_spot", "title": "Silver Prices Surge in Vietnam and Globally Amid Geopolitical Developments", "original_title": "Ngày 15 / 4 : Giá bạc trong nước và thế giới bật tăng mạnh", "publish_date": "2026-04-15T03:32:11Z", "publish_timestamp": 1776223931, "source": "thoibaotaichinhvietnam.vn", "url": "https://thoibaotaichinhvietnam.vn/ngay-154-gia-bac-trong-nuoc-va-the-gioi-bat-tang-manh-195669.html", "entities": ["Phú Quý", "Vàng bạc Đá quý Phú Quý", "Iran", "United States"], "impacted_assets": ["Gold", "Silver", "USD"], "volatility_implication": "Increase", "llm_tone_score": 3}} +{"id": "41747a6d-7e5d-5f42-b738-76980675bd44", "text": "Gold Price on April 15: Prices at Jewelry Companies. The gold price rose around 2% to $4,831.78 per ounce due to a weakening US dollar and expectations of renewed US-Iran negotiations. Analysts at Commerzbank believe that as long as the Fed doesn't signal rate hikes, gold prices will be difficult to drop significantly. Meanwhile, Vietnamese jewelry companies such as SJC listed their gold prices in Hanoi at 173-175.5 million VND per tael (buying and selling).\n\nThe macro transmission mechanism is that a weakening US dollar and expectations of renewed US-Iran negotiations are driving up the gold price, which is likely to continue as long as there is no indication of rate hikes from the Fed. This has a bullish tone for gold prices.", "metadata": {"topic": "asset_precious_metals_spot", "title": "Gold Price on April 15: Prices at Jewelry Companies", "original_title": "Giá vàng ngày 15 / 4 : Bảng giá tại các công ty vàng bạc đá quý", "publish_date": "2026-04-15T03:32:11Z", "publish_timestamp": 1776223931, "source": "baomoi.com", "url": "https://baomoi.com/gia-vang-ngay-15-4-bang-gia-tai-cac-cong-ty-vang-bac-da-quy-c54939126.epi", "entities": ["Bob Haberkorn", "RJO Futures", "Commerzbank", "Federal Reserve (Fed)", "SJC (Vàng bạc đá quý Sài Gòn)"], "impacted_assets": ["Gold", "USD"], "volatility_implication": "Neutral", "llm_tone_score": 2}} +{"id": "f0a80642-d4ab-5fcb-bacc-737ac97be417", "text": "Alacant's Budget and Housing Crisis. The approved budget for 2026 in Alacant is the highest in history, but it reflects a concerning reality: investment in neighborhoods has hit historic lows. The inefficient execution of the budget by the government leads to a lack of municipalization, with funds ending up in the treasury instead of being used for public services. This crisis affects not only housing but also tourism, as thousands of apartments are dedicated to short-term rentals. To address this issue, a drastic measure is proposed: no new licenses or renewals for tourist apartments by 2028.\n\nThe macro transmission mechanism at play here is the impact on the local economy and the housing market. The lack of investment in neighborhoods and the inefficient use of funds can lead to a decrease in economic activity and a rise in unemployment, which can negatively affect gold and silver prices. Additionally, the crisis in the tourism sector can also have a negative impact on the overall economy and asset prices.", "metadata": {"topic": "asset_precious_metals_spot", "title": "Alacant's Budget and Housing Crisis", "original_title": " Pisos turístics ? Les cases , per als veïns i els turistes , als hotels ", "publish_date": "2026-04-15T03:32:11Z", "publish_timestamp": 1776223931, "source": "elpuntavui.cat", "url": "http://www.elpuntavui.cat/politica/article/17-politica/2635259-pisos-turistics-les-cases-per-als-veins-i-els-turistes-als-hotels.html", "entities": ["PP", "Vox", "Alacant", "Spain"], "impacted_assets": ["Equities", "Gold", "USD"], "volatility_implication": "Decrease", "llm_tone_score": -2}} +{"id": "c4a6111c-1818-50a6-8d0d-c2687106f4a7", "text": "Wanda Commercial Properties Wins Arbitration Case Against Dalian Yunding, Wang Jianlin et al. to Pay 38.57 Billion Yuan in Damages. Wanda Commercial Properties won an arbitration case against Dalian Yunding and its related parties, including Wang Jianlin, for failing to pay damages totaling 38.57 billion yuan. This outcome may help Wanda Commercial Properties recover some of its losses, but the impact on gold/silver prices is limited. The company's financial performance has been under pressure due to declining revenue and increasing losses.", "metadata": {"topic": "asset_precious_metals_spot", "title": "Wanda Commercial Properties Wins Arbitration Case Against Dalian Yunding, Wang Jianlin et al. to Pay 38.57 Billion Yuan in Damages", "original_title": "永辉超市38亿追款获胜 , 王健林等承担连带保证责任", "publish_date": "2026-04-15T03:32:11Z", "publish_timestamp": 1776223931, "source": "stcn.com", "url": "https://www.stcn.com/article/detail/3750646.html", "entities": ["Wanda Commercial Properties", "Dalian Yunding", "Wang Jianlin", "Sun Xishuang", "One-way Group"], "impacted_assets": ["Equities", "Gold (indirectly)"], "volatility_implication": "Neutral", "llm_tone_score": 2}} +{"id": "ff95ca9a-5004-595b-98b0-5618198073e8", "text": "China's Pilot Free Trade Zone (FTZ) in Hainan Seeks to Boost Aviation Industry and Economic Growth. The article highlights the development of Hainan's Pilot Free Trade Zone (FTZ) and its efforts to boost the aviation industry and economic growth. The FTZ aims to create a high-efficiency logistics loop by building a 1-kilometer-long underground tunnel connecting the airport with the industrial park, allowing for streamlined customs clearance, warehousing, processing, and departure procedures. This initiative is expected to drive the development of aircraft maintenance, aviation logistics, low-altitude economy, and other related industries, ultimately contributing to China's economic growth.\n\nThe article also mentions the benefits of Hainan's FTZ, including tax exemptions on imported equipment, the seventh air rights, and visa-free policies for 86 countries. These advantages have attracted foreign companies, such as Boeing and Airbus, to set up operations in the region. The development of the aviation industry is expected to drive economic growth and create new job opportunities.\n\nThe tone score is +2 because while the article highlights the potential benefits of Hainan's FTZ, it does not explicitly mention any macroeconomic drivers that would significantly impact gold or silver prices. However, the initiative could potentially contribute to China's economic growth, which could have a positive impact on these assets.", "metadata": {"topic": "asset_precious_metals_spot", "title": "China's Pilot Free Trade Zone (FTZ) in Hainan Seeks to Boost Aviation Industry and Economic Growth", "original_title": "开局之年看中国 · 开放自贸港 : 从 机场流量 迈向 经济增量 - 千龙网 · 中国首都网", "publish_date": "2026-04-15T03:32:11Z", "publish_timestamp": 1776223931, "source": "china.qianlong.com", "url": "https://china.qianlong.com/2026/0415/8654785.shtml", "entities": ["Zhang Hao Peng", "Wang Hai Yue", "Hainan FTZ", "Hainan Provincial Government", "Civil Aviation Administration of China (CAAC)", "Boeing", "Airbus"], "impacted_assets": ["Equities", "Gold", "USD"], "volatility_implication": "Neutral", "llm_tone_score": 2}} +{"id": "ae9c2d8f-a65f-5e69-82af-dfa12478e3a8", "text": "Vietnam Develops Human Resources for the Semiconductor Industry to Prepare for the Future. Vietnam is accelerating the development of high-quality human resources for the semiconductor industry to capitalize on opportunities and enhance its competitiveness. The government has set a target to train 50,000 engineers by 2030, with 15,000 specializing in chip design, 35,000 in production, packaging, and testing, and 5,000 AI experts. This initiative aims to bridge the gap between supply and demand for skilled labor, supporting the growth of the industry.\n\nThe macro transmission mechanism is that a well-trained workforce will attract more foreign investment, drive economic growth, and increase Vietnam's competitiveness in the global semiconductor market. This could positively impact gold prices if investors become more optimistic about Vietnam's economic prospects.", "metadata": {"topic": "asset_precious_metals_spot", "title": "Vietnam Develops Human Resources for the Semiconductor Industry to Prepare for the Future", "original_title": "Phát triển nguồn nhân lực công nghiệp bán dẫn , sẵn sàng cho tương lai", "publish_date": "2026-04-15T03:32:11Z", "publish_timestamp": 1776223931, "source": "thanhtra.com.vn", "url": "https://thanhtra.com.vn/doanh-nghiep-70CE54C31/phat-trien-nguon-nhan-luc-cong-nghiep-ban-dan-san-sang-cho-tuong-lai-7632e8f4b.html", "entities": ["Vietnamese government", "Intel", "Samsung", "Amkor", "Hana Micron", "Viettel", "FPT", "VNChip", "Marvell", "Synopsys", "Cadence"], "impacted_assets": ["Equities", "Gold", "USD"], "volatility_implication": "Neutral", "llm_tone_score": 2}} diff --git a/Data/3_Gold_Semantic/News_Qdrant/2026-04-14/qdrant_macro_central_banks_processed.jsonl b/Data/3_Gold_Semantic/News_Qdrant/2026-04-14/qdrant_macro_central_banks_processed.jsonl new file mode 100644 index 0000000..259b342 --- /dev/null +++ b/Data/3_Gold_Semantic/News_Qdrant/2026-04-14/qdrant_macro_central_banks_processed.jsonl @@ -0,0 +1,6 @@ +{"id": "41747a6d-7e5d-5f42-b738-76980675bd44", "text": "Gold Price on April 15: Prices at Jewelry Companies. The gold price rose around 2% to $4,831.78 per ounce due to a weakening US dollar and expectations of renewed US-Iran negotiations. Analysts at Commerzbank believe that as long as the Federal Reserve (Fed) does not signal rate hikes, gold prices will be difficult to fall significantly. Meanwhile, Vietnamese jewelry companies such as SJC listed their gold prices in Hanoi at 173-175.5 million VND per tael (buying and selling). The macro transmission mechanism is a weakening US dollar and expectations of renewed negotiations, which are bullish for gold prices.\n\nNote: The tone score is +2 because the article mentions a strengthening USD, which is bearish for gold prices, but also notes that Fed rate hikes are not expected, which is neutral.", "metadata": {"topic": "macro_central_banks", "title": "Gold Price on April 15: Prices at Jewelry Companies", "original_title": "Giá vàng ngày 15 / 4 : Bảng giá tại các công ty vàng bạc đá quý", "publish_date": "2026-04-15T03:28:27Z", "publish_timestamp": 1776223707, "source": "baomoi.com", "url": "https://baomoi.com/gia-vang-ngay-15-4-bang-gia-tai-cac-cong-ty-vang-bac-da-quy-c54939126.epi", "entities": ["Bob Haberkorn", "RJO Futures", "Commerzbank", "Federal Reserve (Fed)", "SJC (Vàng bạc đá quý Sài Gòn)"], "impacted_assets": ["Gold", "USD"], "volatility_implication": "Neutral", "llm_tone_score": 2}} +{"id": "1b3c6216-eb7b-55cc-ab8d-8bc810335094", "text": "Producer Prices Rise Sharply Due to Energy Surge Linked to Iran War. Rising energy costs linked to the Iran war pushed US wholesale prices higher in March, adding to inflation concerns and complicating the Federal Reserve's policy outlook. The producer price index rose 0.5% from February and 4% year-on-year, driven by an 8.5% surge in energy prices. This adds pressure on the Fed to consider rate hikes or maintain a neutral stance, which may support gold and silver prices while increasing market fear/VIX.", "metadata": {"topic": "macro_central_banks", "title": "Producer Prices Rise Sharply Due to Energy Surge Linked to Iran War", "original_title": "Producer prices rise sharply on energy surge from Iran war", "publish_date": "2026-04-15T03:28:27Z", "publish_timestamp": 1776223707, "source": "europesun.com", "url": "http://www.europesun.com/news/278983984/producer-prices-rise-sharply-on-energy-surge-from-iran-war", "entities": ["Federal Reserve", "President Donald Trump", "International Energy Agency"], "impacted_assets": ["Gold", "Silver", "USD", "Oil"], "volatility_implication": "Increase", "llm_tone_score": 2}} +{"id": "fbb8885f-e47c-5c14-a49c-3a0f538c02d6", "text": "Mexican Bank's Economic Forecasts Criticized by Banamex. Banamex, a Mexican bank, has criticized the economic forecasts of the Bank of Mexico (Banxico) and the Ministry of Finance and Public Credit (SHCP), stating that their predictions are \"erratic\" and lack credibility. The criticism centers around Banxico's inability to effectively implement monetary policy, which may lead to reduced market confidence in the Mexican economy. This could have a negative impact on gold prices and the US dollar.\n\nThe macro transmission mechanism is as follows: Banamex's skepticism towards Banxico's economic forecasts may lead to increased uncertainty and decreased market confidence in Mexico's economic prospects. This could result in a decrease in gold prices, as investors seek safer assets, and a weakening of the US dollar, as the Mexican economy becomes less attractive to foreign investors.", "metadata": {"topic": "macro_central_banks", "title": "Mexican Bank's Economic Forecasts Criticized by Banamex", "original_title": "Banamex tacha de erráticos los pronósticos de Banxico y la SHCP sobre crecimiento e inflación", "publish_date": "2026-04-15T03:28:27Z", "publish_timestamp": 1776223707, "source": "zetatijuana.com", "url": "https://zetatijuana.com/2026/04/banamex-tacha-de-erraticos-los-pronosticos-de-banxico-y-la-shcp-sobre-crecimiento-e-inflacion/", "entities": ["Sergio Kurczyn", "Iván Arias", "Banco de México (Banxico)", "Secretaría de Hacienda y Crédito Público (SHCP)"], "impacted_assets": ["Gold", "USD"], "volatility_implication": "Decrease", "llm_tone_score": -2}} +{"id": "c134a64b-5f23-5e31-9200-811cf9b6ba6d", "text": "Gold Prices Surge in Vietnam as Global Rates Rise. Vietnamese gold prices surged today, tracking global rates, as the US dollar weakened amid rising expectations of a potential Iran-US deal. The market is cautious about the Federal Reserve's monetary policy stance, with some data indicating low inflation, but still expects interest rates to remain high in the long term.\n\nThe article highlights the strong correlation between Vietnamese gold prices and global rates, with the latter driving the former. The weakening US dollar also contributed to the increase in gold prices. While the market is uncertain about the Fed's next move, the overall tone remains bullish for gold prices.", "metadata": {"topic": "macro_central_banks", "title": "Gold Prices Surge in Vietnam as Global Rates Rise", "original_title": "Giá vàng hôm nay 15 / 4 đồng loạt tăng mạnh", "publish_date": "2026-04-15T03:28:27Z", "publish_timestamp": 1776223707, "source": "baotintuc.vn", "url": "https://baotintuc.vn/kinh-te/gia-vang-sang-154-dong-loat-tang-manh-20260415082802323.htm", "entities": ["SJC", "Bảo Tín Minh Châu", "DOJI", "Vietcombank", "Fed"], "impacted_assets": ["Gold", "USD"], "volatility_implication": "Increase", "llm_tone_score": 2}} +{"id": "846233f2-d115-5c70-b857-0de4c4c97442", "text": "Oil Shock is Here: Are Businesses Prepared?. The escalating Middle East conflict has sent shockwaves through global energy markets, driving oil prices higher and increasing operational costs for businesses. This surge in fuel prices poses significant risks to micro, small, and medium enterprises' (MSMEs) viability, with direct and indirect cost shocks, rising raw material costs, \"stagflation\" squeeze, margin compression, and cash flow tightness being the key concerns. The uncertainty surrounding the supply of raw materials and input prices has resulted in suppliers and manufacturers taking a cautious stance, leading to increased volatility in the market.\n\nNote: The tone score is bearish due to the negative impact on businesses' operating costs and profitability, which may lead to decreased consumer spending and ultimately affect gold and silver prices.", "metadata": {"topic": "macro_central_banks", "title": "Oil Shock is Here: Are Businesses Prepared?", "original_title": "Oil shock is here : Are businesses prepared ? ", "publish_date": "2026-04-15T03:28:27Z", "publish_timestamp": 1776223707, "source": "thestar.com.my", "url": "https://www.thestar.com.my/business/insight/2026/04/15/oil-shock-is-here-are-businessesprepared", "entities": ["Middle East conflict", "oil prices", "MSMEs (Micro", "Small and Medium Enterprises)", "global energy markets"], "impacted_assets": ["Equities", "Gold", "Oil", "USD"], "volatility_implication": "Increase", "llm_tone_score": -2}} +{"id": "aff5f7ce-32f7-5224-b3fe-52ba6bc7b911", "text": "Indonesian Rupiah Strengthens Against US Dollar on April 15th. The Indonesian Rupiah strengthened against the US Dollar on April 15th due to external pressures and market optimism. The Rupiah's appreciation is driven by a combination of factors, including the weakening US Dollar, rising oil prices, and improving market sentiment. This development may have a positive impact on gold and equity markets, while also influencing the direction of monetary policy in Indonesia.\n\nNote: The tone score is +2 because the article mentions external pressures and market optimism, which are generally bullish for gold and silver prices. However, the article also notes that domestic sentiment remains weak, which could temper the Rupiah's appreciation.", "metadata": {"topic": "macro_central_banks", "title": "Indonesian Rupiah Strengthens Against US Dollar on April 15th", "original_title": "Rupiah Hari Ini ( 15 / 4 ) Dibuka Menguat ke Rp17 . 126 per dolar AS", "publish_date": "2026-04-15T03:28:27Z", "publish_timestamp": 1776223707, "source": "market.bisnis.com", "url": "https://market.bisnis.com/read/20260415/93/1966735/rupiah-hari-ini-154-dibuka-menguat-ke-rp17126-per-dolar-as", "entities": ["Bank Indonesia", "Doo Financial Futures", "Lukman Leong"], "impacted_assets": ["Equities", "Gold", "Oil", "USD"], "volatility_implication": "Neutral", "llm_tone_score": 2}} diff --git a/Data/3_Gold_Semantic/News_Qdrant/2026-04-14/qdrant_macro_geopolitics_risk_processed.jsonl b/Data/3_Gold_Semantic/News_Qdrant/2026-04-14/qdrant_macro_geopolitics_risk_processed.jsonl new file mode 100644 index 0000000..c64ffde --- /dev/null +++ b/Data/3_Gold_Semantic/News_Qdrant/2026-04-14/qdrant_macro_geopolitics_risk_processed.jsonl @@ -0,0 +1,6 @@ +{"id": "ab952c09-e756-5f41-9d4a-4b5fb6c2b3b3", "text": "Trump's Feud with Pope Over AI Christ Image Intensifies Amid Controversy. The feud between US President Donald Trump and Pope Leo over an AI-generated image of Christ has escalated, with both sides trading barbs. While this controversy is unlikely to have a direct impact on gold or silver prices, it may contribute to increased market uncertainty and volatility in the short term.", "metadata": {"topic": "macro_geopolitics_risk", "title": "Trump's Feud with Pope Over AI Christ Image Intensifies Amid Controversy", "original_title": "Trump Bible - Thumper Assassination Fears Explode Amid Bust - Up With Pope", "publish_date": "2026-04-15T03:31:19Z", "publish_timestamp": 1776223879, "source": "radaronline.com", "url": "https://radaronline.com/p/trump-assassination-fears-pope-conflict-iran-war/", "entities": ["Donald Trump", "Pope Leo", "JD Vance"], "impacted_assets": [], "volatility_implication": "Neutral", "llm_tone_score": 0}} +{"id": "b434614a-e7c2-511c-99a2-3c16cc2fffcd", "text": "More Than Half of Households in Energy Credit at End of Winter – Poll. The survey by comparison site Uswitch found that more than half of UK households have credit in their energy accounts at the end of winter. This could be due to a milder winter and direct debits not changing as quickly as energy rates. While this may seem positive, it's essential for households to keep some credit for higher winter bills ahead. The predicted 18% hike in energy prices from July could impact gold and silver prices, but the overall tone is neutral.\n\nNote: As there are no explicit macro-financial drivers or market-moving events mentioned in the article, I assigned a tone score of 0 (Neutral).", "metadata": {"topic": "macro_geopolitics_risk", "title": "More Than Half of Households in Energy Credit at End of Winter – Poll", "original_title": "More than half of households in energy credit at end of winter – poll", "publish_date": "2026-04-15T03:31:19Z", "publish_timestamp": 1776223879, "source": "whtimes.co.uk", "url": "https://www.whtimes.co.uk/news/national/26021871.half-households-energy-credit-end-winter---poll/", "entities": ["Uswitch", "Ofgem", "Chancellor", "Cornwall Insight"], "impacted_assets": ["Equities", "Gold", "Oil", "USD"], "volatility_implication": "Neutral", "llm_tone_score": 0}} +{"id": "919a7702-4dfc-533a-9faf-4bb5007ca67b", "text": "Chancellor to hold talks with US counterpart after strong criticism of Iran war. The escalating tensions between the US and Iran have led to a global economic shock, with the IMF slashing Britain's economic growth forecast. The conflict has also sent energy prices soaring, which could impact gold and oil prices. The Chancellor's criticism of the US actions in the Middle East may lead to increased market volatility, as investors become more risk-averse.\n\nThe macro transmission mechanism is as follows: The conflict in the Gulf has led to a global economic shock, which has impacted Britain's economic growth forecast. This has increased uncertainty and volatility in financial markets, making investors more cautious and potentially driving up gold prices.", "metadata": {"topic": "macro_geopolitics_risk", "title": "Chancellor to hold talks with US counterpart after strong criticism of Iran war", "original_title": "Chancellor to hold talks with US counterpart after strong criticism of Iran war", "publish_date": "2026-04-15T03:31:19Z", "publish_timestamp": 1776223879, "source": "wharfedaleobserver.co.uk", "url": "https://www.wharfedaleobserver.co.uk/news/national/26021877.chancellor-hold-talks-us-counterpart-strong-criticism-iran-war/", "entities": ["Scott Bessent", "Rishi Sunak", "Andrew Bailey", "Donald Trump", "Keir Starmer", "Xi Jinping"], "impacted_assets": ["Gold", "Oil", "USD"], "volatility_implication": "Increase", "llm_tone_score": -2}} +{"id": "20b30dcc-f607-5415-9aae-decf05fe1e0e", "text": "CENTCOM Reports Success in Blockading Iranian Ports on First Day. The US Central Command has reported a successful first day of blockading Iranian ports, with no ships entering or leaving the country. This development may put pressure on Iran to reconsider its claims of control over the Strait of Hormuz. However, Saudi Arabia is reportedly pressing the US to drop the blockade and return to negotiations, citing concerns about escalation from the Houthis. The situation remains fluid, with implications for global oil markets and currency fluctuations.\n\nNote: The tone score is neutral because while there are some macro-financial implications, the event itself does not have a clear directional impact on Gold/Silver prices.", "metadata": {"topic": "macro_geopolitics_risk", "title": "CENTCOM Reports Success in Blockading Iranian Ports on First Day", "original_title": "CENTCOM : 24 Hours And All Well On the Blockade Front ( Updated ) ", "publish_date": "2026-04-15T03:31:19Z", "publish_timestamp": 1776223879, "source": "hotair.com", "url": "https://hotair.com/ed-morrissey/2026/04/14/centcom-24-hours-and-alls-well-on-the-blockade-front-n3813891", "entities": ["US Central Command (CENTCOM)", "Iran", "Saudi Arabia", "Houthis", "China"], "impacted_assets": ["Equities", "Gold", "Oil", "USD"], "volatility_implication": "Neutral", "llm_tone_score": 0}} +{"id": "41747a6d-7e5d-5f42-b738-76980675bd44", "text": "Gold Price on April 15: Prices at Jewelry Companies. The gold price rose around 2% to $4,831.78 per ounce due to a weakening US dollar and expectations of renewed US-Iran negotiations. Analysts at Commerzbank believe that as long as the Fed doesn't signal rate hikes, gold prices will be difficult to drop significantly. Meanwhile, Vietnamese jewelry companies such as SJC listed their gold prices in Hanoi at 173-175.5 million VND per tael (buying and selling).\n\nThe macro transmission mechanism is that a weakening US dollar and expectations of renewed US-Iran negotiations are driving up the gold price, which is likely to continue as long as there is no indication of rate hikes from the Fed. This has a bullish tone for gold prices.", "metadata": {"topic": "macro_geopolitics_risk", "title": "Gold Price on April 15: Prices at Jewelry Companies", "original_title": "Giá vàng ngày 15 / 4 : Bảng giá tại các công ty vàng bạc đá quý", "publish_date": "2026-04-15T03:31:19Z", "publish_timestamp": 1776223879, "source": "baomoi.com", "url": "https://baomoi.com/gia-vang-ngay-15-4-bang-gia-tai-cac-cong-ty-vang-bac-da-quy-c54939126.epi", "entities": ["Bob Haberkorn", "RJO Futures", "Commerzbank", "Federal Reserve (Fed)", "SJC (Vàng bạc đá quý Sài Gòn)"], "impacted_assets": ["Gold", "USD"], "volatility_implication": "Neutral", "llm_tone_score": 2}} +{"id": "aa37052e-9108-5aa8-8970-65679c41f016", "text": "Italy Suspends Defense Agreement with Israel Amid Tensions Over War in Lebanon. The suspension of Italy's defense agreement with Israel amid escalating tensions over the war in Lebanon may lead to increased market uncertainty and a flight-to-safety bid for gold. This development could also put pressure on the US dollar as European countries continue to reevaluate their relationships with Israel. The macro transmission mechanism is driven by the potential for increased geopolitical risk, which can boost demand for safe-haven assets like gold and weaken the USD.", "metadata": {"topic": "macro_geopolitics_risk", "title": "Italy Suspends Defense Agreement with Israel Amid Tensions Over War in Lebanon", "original_title": "EU country suspends defense agreement with Israel", "publish_date": "2026-04-15T03:31:19Z", "publish_timestamp": 1776223879, "source": "europesun.com", "url": "http://www.europesun.com/news/278984446/eu-country-suspends-defense-agreement-with-israel", "entities": ["Giorgia Meloni", "Antonio Tajani", "Jonathan Peled", "Benjamin Netanyahu", "Pedro Sanchez"], "impacted_assets": ["Gold", "USD"], "volatility_implication": "Increase", "llm_tone_score": -2}} diff --git a/Data/3_Gold_Semantic/News_Qdrant/2026-04-14/qdrant_macro_inflation_employment_processed.jsonl b/Data/3_Gold_Semantic/News_Qdrant/2026-04-14/qdrant_macro_inflation_employment_processed.jsonl new file mode 100644 index 0000000..df6d2cd --- /dev/null +++ b/Data/3_Gold_Semantic/News_Qdrant/2026-04-14/qdrant_macro_inflation_employment_processed.jsonl @@ -0,0 +1,7 @@ +{"id": "919a7702-4dfc-533a-9faf-4bb5007ca67b", "text": "Chancellor to hold talks with US counterpart after strong criticism of Iran war. The escalating tensions between the US and Iran have led to a global economic shock, with the IMF slashing Britain's economic growth forecast. The conflict has also sent energy prices soaring, which could impact gold and oil prices. The Chancellor's criticism of the US actions in the Middle East may lead to increased market volatility, as investors become more risk-averse.\n\nThe macro transmission mechanism is as follows: The conflict in the Gulf has led to a global economic shock, which has impacted Britain's economic growth forecast. This has increased uncertainty and volatility in financial markets, making investors more cautious and potentially driving up gold prices.", "metadata": {"topic": "macro_inflation_employment", "title": "Chancellor to hold talks with US counterpart after strong criticism of Iran war", "original_title": "Chancellor to hold talks with US counterpart after strong criticism of Iran war", "publish_date": "2026-04-15T03:29:41Z", "publish_timestamp": 1776223781, "source": "wharfedaleobserver.co.uk", "url": "https://www.wharfedaleobserver.co.uk/news/national/26021877.chancellor-hold-talks-us-counterpart-strong-criticism-iran-war/", "entities": ["Scott Bessent", "Rishi Sunak", "Andrew Bailey", "Donald Trump", "Keir Starmer", "Xi Jinping"], "impacted_assets": ["Gold", "Oil", "USD"], "volatility_implication": "Increase", "llm_tone_score": -2}} +{"id": "df7fe02c-4e0a-5257-8759-980baa207a0c", "text": "Reality Check on the Introduction of the Euro in Hungary: A Very High Stakes Game for Those Who Hoped for 2030. The article discusses the feasibility of introducing the Euro in Hungary by 2030. The analysis highlights the country's significant distance from meeting the Maastricht criteria, particularly regarding inflation stability and public debt/GDP ratio. The Hungarian National Bank's data shows that the country's public debt is increasing, and its GDP-based public deficit remains above the 3% threshold. This suggests a challenging path ahead for Hungary to meet the Eurozone's requirements, which may lead to decreased market volatility and potentially negative sentiment for gold and silver prices.", "metadata": {"topic": "macro_inflation_employment", "title": "Reality Check on the Introduction of the Euro in Hungary: A Very High Stakes Game for Those Who Hoped for 2030", "original_title": "Kiderült a meztelen igazság az euró magyarországi bevezetéséről : nagyon ráfázhat , aki a 2030 - as dátumban reménykedett", "publish_date": "2026-04-15T03:29:41Z", "publish_timestamp": 1776223781, "source": "penzcentrum.hu", "url": "https://www.penzcentrum.hu/gazdasag/20260415/kiderult-a-meztelen-igazsag-az-euro-magyarorszagi-bevezeteserol-nagyon-rafazhat-aki-a-2030-as-datumban-remenykedett-1196964", "entities": ["Tisza Párt", "European Central Bank (ECB)", "Hungarian National Bank (MNB)"], "impacted_assets": ["Equities", "Gold", "Oil", "USD"], "volatility_implication": "Decrease", "llm_tone_score": -3}} +{"id": "dbf666e4-2f7a-56db-8895-426c56b871d0", "text": "How Much Do You Really Need to Retire?. The article discusses the importance of having a clear plan for retirement, including considering factors such as monthly expenses, expected lifespan, and investment returns. The author emphasizes that a simple rule-of-thumb approach may not be sufficient, especially in France where inflation and interest rates are lower than in some other countries. The article provides examples of how different monthly expenses and expected lifespans can affect the required retirement savings, highlighting the need for individualized planning. While the content is not directly related to Gold/Silver prices, it does touch on broader macroeconomic themes (inflation, interest rates) that could indirectly impact these assets.\n\nNote: The article's focus on French financial products and cultural context means that its relevance to global markets and asset classes may be limited.", "metadata": {"topic": "macro_inflation_employment", "title": "How Much Do You Really Need to Retire?", "original_title": " « Demain , jarrête ! » : quel montant faut - il vraiment avoir en banque pour tout quitter et vivre libre ? ", "publish_date": "2026-04-15T03:29:41Z", "publish_timestamp": 1776223781, "source": "sixactualites.fr", "url": "https://sixactualites.fr/retraites/demain-jarrete-quel-montant-faut-il-vraiment-avoir-en-banque-pour-tout-quitter-et-vivre-libre/106597/", "entities": ["None explicitly mentioned", "but references to France and French financial products (e.g.", "Livret A) are present."], "impacted_assets": ["Equities", "Gold/Silver (indirectly)", "USD"], "volatility_implication": "Neutral", "llm_tone_score": 0}} +{"id": "27f5d494-28f3-5db8-9211-43e18bb8750e", "text": "Italian Economy Growth Forecast Revised Downward Amid Global Uncertainty and Structural Challenges. The Italian economy is expected to slow down in 2026 and 2027 due to global uncertainty and structural challenges. The country's growth rate could stall at around 0.3% in 2026 and 0.4% in 2027, with the risk of a new decade of stagnation. The analysis highlights the need for structural reforms to address issues such as high taxes, lack of investment, and skills obsolescence. The report also notes that the Italian economy has been characterized by a decline in growth rates over the past few decades, from 3.7% between 1966 and 1980 to 1.8% between 1981 and 2007, with stagnation in recent years.", "metadata": {"topic": "macro_inflation_employment", "title": "Italian Economy Growth Forecast Revised Downward Amid Global Uncertainty and Structural Challenges", "original_title": "Confcom , crescita +0 , 3 % nel 2026 e rischio stagnazione – Padovanews", "publish_date": "2026-04-15T03:29:41Z", "publish_timestamp": 1776223781, "source": "padovanews.it", "url": "https://www.padovanews.it/2026/04/15/confcom-crescita-03-nel-2026-e-rischio-stagnazione/", "entities": ["Confcommercio", "Carlo Sangalli", "Mariano Bella"], "impacted_assets": ["Equities", "Gold", "Oil", "EURUSD"], "volatility_implication": "Increase", "llm_tone_score": -3}} +{"id": "1b3c6216-eb7b-55cc-ab8d-8bc810335094", "text": "Producer Prices Rise Sharply Due to Energy Surge Linked to Iran War. Rising energy costs linked to the Iran war pushed US wholesale prices higher in March, adding to inflation concerns and complicating the Federal Reserve's policy outlook. The producer price index rose 0.5% from February and 4% year-on-year, driven by an 8.5% surge in energy prices. This adds pressure on the Fed to consider rate hikes or maintain a neutral stance, which may support gold and silver prices while increasing market fear/VIX.", "metadata": {"topic": "macro_inflation_employment", "title": "Producer Prices Rise Sharply Due to Energy Surge Linked to Iran War", "original_title": "Producer prices rise sharply on energy surge from Iran war", "publish_date": "2026-04-15T03:29:41Z", "publish_timestamp": 1776223781, "source": "europesun.com", "url": "http://www.europesun.com/news/278983984/producer-prices-rise-sharply-on-energy-surge-from-iran-war", "entities": ["Federal Reserve", "President Donald Trump", "International Energy Agency"], "impacted_assets": ["Gold", "Silver", "USD", "Oil"], "volatility_implication": "Increase", "llm_tone_score": 2}} +{"id": "8b40ead8-47fb-5d09-a65f-6c4e298f521b", "text": "Prospects Of Iran Playing Ball With U.S. Causes Oil To Plunge By Nearly 8%. The oil market is buoyed by hopes of a de-escalation of hostilities between Iran and the US, leading to a 7% plunge in West Texas Intermediate prices. This development could temporarily add to oil outages but focus on the possibility of an agreement rather than short-term risks. The International Energy Agency expects global oil demand to contract this year due to the war's impact, with initial cuts coming from the Middle East and Asia Pacific.", "metadata": {"topic": "macro_inflation_employment", "title": "Prospects Of Iran Playing Ball With U.S. Causes Oil To Plunge By Nearly 8%", "original_title": "Prospects Of Iran Playing Ball With U . S . Causes Oil To Plunge By Nearly 8 % ", "publish_date": "2026-04-15T03:29:41Z", "publish_timestamp": 1776223781, "source": "shipandbunker.com", "url": "https://shipandbunker.com/news/world/571889-prospects-of-iran-playing-ball-with-us-causes-oil-to-plunge-by-nearly-8", "entities": ["Rachel Ziemba", "Peter Tuz", "International Energy Agency"], "impacted_assets": ["Equities", "Gold", "Oil", "USD"], "volatility_implication": "Neutral", "llm_tone_score": 2}} +{"id": "8bacbbd1-1af3-5963-81a8-eed95e4a4f34", "text": "Colombian Retail Giant Makro Launches New Promotions for Essential Products. Colombian retail giant Makro has launched a new campaign called \"Precios Felices\" aimed at stimulating domestic consumption by offering aggressive discounts on essential products. The initiative focuses on democratizing savings for families and small businesses, allowing them to access high-quality products without compromising their monthly budgets. This move may have implications for inflation and consumer spending patterns in Colombia.\n\nThe campaign's emphasis on reducing prices for basic food items like fruits, vegetables, and proteins could potentially impact the local economy and consumer behavior. While this news does not directly affect gold or silver prices, it may contribute to a more stable economic environment in Colombia, which could have indirect effects on global markets.", "metadata": {"topic": "macro_inflation_employment", "title": "Colombian Retail Giant Makro Launches New Promotions for Essential Products", "original_title": "Supermercado en Colombia sigue pisando fuerte y lanzó nuevos remates en productos : de esto se trata", "publish_date": "2026-04-15T03:29:41Z", "publish_timestamp": 1776223781, "source": "noticiasrcn.com", "url": "https://www.noticiasrcn.com/economia/makro-anuncio-nuevo-remate-de-productos-1012163", "entities": ["Makro", "Colombia"], "impacted_assets": [], "volatility_implication": "Neutral", "llm_tone_score": 1}} diff --git a/Data/3_Gold_Semantic/News_Qdrant/2026-04-16/qdrant_asset_metals_derivatives_processed.jsonl b/Data/3_Gold_Semantic/News_Qdrant/2026-04-16/qdrant_asset_metals_derivatives_processed.jsonl new file mode 100644 index 0000000..9f29ca8 --- /dev/null +++ b/Data/3_Gold_Semantic/News_Qdrant/2026-04-16/qdrant_asset_metals_derivatives_processed.jsonl @@ -0,0 +1,5 @@ +{"id": "520f060b-9c84-5d78-9423-ba3a7cdfbe43", "text": "Formation Metals Reports Positive Gold Drill Results at N2 Project. Formation Metals announced positive gold drill results at its N2 project in Quebec. The company reported multiple high-grade intercepts, including 1.8 g/t Au over 21.9 meters and 1.37 g/t Au over 24.0 meters. These results confirm the geological continuity of the A-Zone and suggest a significant open-pit target. With a strong working capital position and no debt, Formation Metals is well-positioned to continue exploring its N2 project and potentially unlocking value for shareholders. The positive drill results are likely to increase market volatility and boost gold prices.", "metadata": {"topic": "asset_metals_derivatives", "title": "Formation Metals Reports Positive Gold Drill Results at N2 Project", "original_title": "Formation Metals durchteuft 1 , 8 g / t Au auf 21 , 9 m , östlich von 1 , 75 g / t Au auf 30 , 4 m auf fortgeschrittenem Goldprojekt N2 : Bohrungen bestätigen Beständigkeit von 300 m innerhalb von 5 km entlang von mineralisiertem Streichen", "publish_date": "2026-04-16T12:32:28Z", "publish_timestamp": 1776342748, "source": "finanznachrichten.de", "url": "https://www.finanznachrichten.de/nachrichten-2026-04/68216726-formation-metals-durchteuft-1-8-g-t-au-auf-21-9-m-oestlich-von-1-75-g-t-au-auf-30-4-m-auf-fortgeschrittenem-goldprojekt-n2-bohrungen-bestaetigen-bestae-248.htm", "entities": ["Formation Metals Inc.", "Deepak Varshney", "Matagami", "Quebec"], "impacted_assets": ["Equities", "Gold"], "volatility_implication": "Increase", "llm_tone_score": 3}} +{"id": "1b451587-3a3c-5000-833c-4e1ea973ac0f", "text": "Oil Trades Lower on De-escalation Hopes; US Crude Exports Jump to Record Levels. The oil market is edging lower amid hopes of a ceasefire extension between the US and Iran. However, the physical market remains tight due to pipeline diversions and Strait of Hormuz disruptions. US crude exports jumped to record levels, while domestic production forecasts suggest little change this year. Meanwhile, European gas prices are easing, and copper prices rose on optimism about de-escalation. The macro transmission mechanism is driven by the impact of Middle East tensions on global energy markets, with a potential supply response from US producers if disruptions persist.\n\nNote: The tone score is neutral because there are no clear directional macro drivers that would significantly impact gold or silver prices.", "metadata": {"topic": "asset_metals_derivatives", "title": "Oil Trades Lower on De-escalation Hopes; US Crude Exports Jump to Record Levels", "original_title": "The Commodities Feed : Oil trades lower on de - escalation hopes | Hellenic Shipping News Worldwide", "publish_date": "2026-04-16T12:32:28Z", "publish_timestamp": 1776342748, "source": "hellenicshippingnews.com", "url": "https://www.hellenicshippingnews.com/the-commodities-feed-oil-trades-lower-on-de-escalation-hopes/", "entities": ["United States", "Iran", "Energy Information Administration (EIA)", "Baker Hughes", "European Union"], "impacted_assets": ["Equities", "Gold", "Oil", "USD"], "volatility_implication": "Neutral", "llm_tone_score": 0}} +{"id": "485c2082-7e3f-5654-a98a-74ae082c56c0", "text": "The Sudanese Economy Under Two Wars. The article discusses the devastating impact of two wars on the Sudanese economy. The country's agricultural potential is significant, but it relies heavily on imported energy and lacks strategic reserves. The economic crisis has led to a 37.5% decline in GDP, with 4.6 million jobs lost and 64% of the population living in extreme poverty. The second war, triggered by tensions in the Strait of Hormuz, has further exacerbated the crisis, making Sudan one of the most vulnerable economies globally.", "metadata": {"topic": "asset_metals_derivatives", "title": "The Sudanese Economy Under Two Wars", "original_title": "الاقتصاد السوداني في ظل حربين", "publish_date": "2026-04-16T12:32:28Z", "publish_timestamp": 1776342748, "source": "sudanile.com", "url": "https://sudanile.com/%D8%A7%D9%84%D8%A7%D9%82%D8%AA%D8%B5%D8%A7%D8%AF-%D8%A7%D9%84%D8%B3%D9%88%D8%AF%D8%A7%D9%86%D9%8A-%D9%81%D9%8A-%D8%B8%D9%84-%D8%AD%D8%B1%D8%A8%D9%8A%D9%86/", "entities": ["Omar Sied Ahmed", "Sudan", "Libya", "Chad", "South Sudan", "Saudi Arabia"], "impacted_assets": ["Equities", "Gold", "Oil", "USD"], "volatility_implication": "Increase", "llm_tone_score": -4}} +{"id": "1d8aca9d-502c-5f6d-be55-ba2f7c0c6387", "text": "Greek Stock Market: Selective Moves and Increased Volatility. The Greek stock market is experiencing selective moves and increased volatility. While some blue chips are rising sharply, others are declining. The overall tone remains neutral, with no clear directional macro drivers. The global markets are also showing mixed signals, with the US and European indices moving in different directions.", "metadata": {"topic": "asset_metals_derivatives", "title": "Greek Stock Market: Selective Moves and Increased Volatility", "original_title": "Χρηματιστήριο : Επιλεκτικές κινήσεις και αυξημένη μεταβλητότητα", "publish_date": "2026-04-16T12:32:28Z", "publish_timestamp": 1776342748, "source": "capital.gr", "url": "https://www.capital.gr/agores/3985670/xrimatistirio-epilektikes-kiniseis-kai-auximeni-metablitotita/", "entities": ["Metlen", "ΓΕΚ ΤΕΡΝΑ", "Λάμδα", "Aegean", "Πειραιώς", "Alpha", "ΕΤΕ", "Eurobank", "Credia", "ΔΤΡ", "ΟΛΘ", "Alter Ego", "Qualco", "Intralot"], "impacted_assets": ["Equities", "Gold"], "volatility_implication": "Neutral", "llm_tone_score": 0}} +{"id": "7cc24cf0-3355-5b7b-8bc8-3ccc77387d30", "text": "Formation Metals Inc. Reports Positive Gold Drill Results at N2 Project. Formation Metals Inc. announced positive gold drill results from its N2 project in Quebec, Canada. The company reported multiple high-grade gold intercepts, including 1.8 g/t Au over 21.9 meters and 1.37 g/t Au over 24.0 meters. These results confirm the geological continuity of the A-Zone, which is now considered a solid mineralized gold system with potential for further exploration and development. The company's working capital stands at approximately CAD 10.5 million, leaving it debt-free.", "metadata": {"topic": "asset_metals_derivatives", "title": "Formation Metals Inc. Reports Positive Gold Drill Results at N2 Project", "original_title": "newratings . de", "publish_date": "2026-04-16T12:32:28Z", "publish_timestamp": 1776342748, "source": "newratings.de", "url": "https://www.newratings.de/du/main/company_headline.m?nid=19666857", "entities": ["Formation Metals Inc.", "Quebec", "Matagami", "Canada"], "impacted_assets": ["Gold", "Equities"], "volatility_implication": "Neutral", "llm_tone_score": 1}} diff --git a/Data/3_Gold_Semantic/News_Qdrant/2026-04-16/qdrant_macro_central_banks_processed.jsonl b/Data/3_Gold_Semantic/News_Qdrant/2026-04-16/qdrant_macro_central_banks_processed.jsonl new file mode 100644 index 0000000..1273ab3 --- /dev/null +++ b/Data/3_Gold_Semantic/News_Qdrant/2026-04-16/qdrant_macro_central_banks_processed.jsonl @@ -0,0 +1,9 @@ +{"id": "76f45bb4-ab59-5f41-995e-ee4a5cf44362", "text": "Trump's Actions Against Powell and the Fed are Working Against Him. President Trump's actions against the Fed and its Chair Jerome Powell are having an unintended consequence - making rate cuts less likely. The recent war with Iran has driven up inflation, and the Fed is now more cautious about cutting rates. Additionally, Trump's attempts to push out Fed officials have been unsuccessful, which may keep Powell in place for longer. This development could lead to a hike in interest rates instead of a cut, negatively impacting gold and silver prices.", "metadata": {"topic": "macro_central_banks", "title": "Trump's Actions Against Powell and the Fed are Working Against Him", "original_title": "Trump own actions against Powell and the Fed are working against him", "publish_date": "2026-04-16T12:28:19Z", "publish_timestamp": 1776342499, "source": "edition.cnn.com", "url": "https://edition.cnn.com/2026/04/16/economy/powell-fed-trump-interest-rates", "entities": ["Donald Trump", "Jerome Powell", "Federal Reserve", "Iran", "United States", "Israel"], "impacted_assets": ["Gold", "Silver", "USD", "Equities", "Oil"], "volatility_implication": "Increase", "llm_tone_score": -3}} +{"id": "a92ccaec-5fd4-5789-861a-358e1123ac27", "text": "Eurozone Inflation Shifts Focus to ECB Signals Amid Escalating Iran Conflict. The escalating Iran conflict has driven energy prices higher, posing a structural problem for the global economy. Rising inflation pressures may lead to increased risks for interest rate cuts and market volatility. However, this crisis also presents opportunities for companies that profit from high energy prices, such as oil and gas producers, utilities, renewable energy providers, and select commodity and agricultural stocks. Our special report highlights three stocks with a solid business model, attractive valuation, and long-term potential.\n\nThe tone score is +2 because the article discusses the potential benefits of high energy prices for certain companies, which could lead to increased demand for gold and other safe-haven assets. The ECB's focus on inflation signals also suggests a more hawkish monetary policy stance, which could support gold prices.", "metadata": {"topic": "macro_central_banks", "title": "Eurozone Inflation Shifts Focus to ECB Signals Amid Escalating Iran Conflict", "original_title": "EUR / JPY gibt leicht nach , da die höhere Inflation in der Eurozone den Fokus auf EZB - Signale verlagert", "publish_date": "2026-04-16T12:28:19Z", "publish_timestamp": 1776342499, "source": "finanznachrichten.de", "url": "https://www.finanznachrichten.de/nachrichten-2026-04/68216751-eur-jpy-gibt-leicht-nach-da-die-hoehere-inflation-in-der-eurozone-den-fokus-auf-ezb-signale-verlagert-545.htm", "entities": ["European Central Bank (ECB)", "Iran", "Eurozone"], "impacted_assets": ["Equities", "Gold", "Oil", "EUR/JPY"], "volatility_implication": "Increase", "llm_tone_score": 2}} +{"id": "eb2f5e06-bd13-5064-af91-282bd7f2ae9a", "text": "VDSC's Chairman Discusses Relationship with KIDO Foods. The chairman of Vietnam's Dragon Securities Company (VDSC) discussed the company's relationship with KIDO Foods, a long-term shareholder. He emphasized that KIDO Foods is a supportive partner, providing financial resources and contributing to VDSC's capital base. The chairman also highlighted the challenges faced by VDSC due to high interest rates, but expressed optimism about the company's growth prospects driven by Vietnam's GDP targets, foreign investment flows, and corporate earnings.\n\nThe article does not have a direct impact on gold or silver prices, but it provides insights into the Vietnamese financial market and the country's economic outlook. The tone is neutral, as there are no significant macroeconomic drivers that would affect the precious metals markets.", "metadata": {"topic": "macro_central_banks", "title": "VDSC's Chairman Discusses Relationship with KIDO Foods", "original_title": "Chủ tịch Chứng khoán Rồng Việt nói về mối quan hệ với KIDO Foods", "publish_date": "2026-04-16T12:28:19Z", "publish_timestamp": 1776342499, "source": "dantri.com.vn", "url": "https://dantri.com.vn/kinh-doanh/chu-tich-chung-khoan-rong-viet-noi-ve-moi-quan-he-voi-kido-foods-20260416175340107.htm", "entities": ["Nguyễn Miên Tuấn", "KIDO Foods", "Nutifood", "VDSC"], "impacted_assets": ["Equities", "Gold"], "volatility_implication": "Neutral", "llm_tone_score": 0}} +{"id": "7a99f7d9-a721-5abd-affe-fd9c2b4ca187", "text": "Why Gold and Silver Prices are Rising on a Weaker Dollar and Geopolitical Tensions?. The article highlights the rising prices of gold and silver due to a weaker US dollar, geopolitical tensions, and shifting expectations around global interest rates. The macro transmission mechanism is driven by the weakening dollar, which increases demand for safe-haven assets like gold and silver, while the geopolitical tensions surrounding the Iran conflict add to the upward momentum.", "metadata": {"topic": "macro_central_banks", "title": "Why Gold and Silver Prices are Rising on a Weaker Dollar and Geopolitical Tensions?", "original_title": "Why gold , silver are rising on weak dollar & geopolitical tensions ? ", "publish_date": "2026-04-16T12:28:19Z", "publish_timestamp": 1776342499, "source": "thehindubusinessline.com", "url": "https://www.thehindubusinessline.com/markets/gold/gold-silver-prices-rise-on-weak-dollar-geopolitical-cues-analysts-see-near-term-volatility/article70868399.ece", "entities": ["Gaurav Garg", "Ponmudi R", "Enrich Money", "Lemonn Markets Desk"], "impacted_assets": ["Equities", "Gold", "Oil", "USD"], "volatility_implication": "Increase", "llm_tone_score": 2}} +{"id": "10610233-3552-5d0c-bef0-76cf0686f8ec", "text": "AUD/USD Rally at Risk of Minor Mean Reversion Decline. The Australian dollar has rallied significantly since the US-Iran ceasefire agreement, mirroring risk-off movements in equities. While the RBA's hawkish guidance hasn't deterred the AUD/USD rally, a minor mean reversion decline below 0.7200 could be imminent before a new upleg begins.", "metadata": {"topic": "macro_central_banks", "title": "AUD/USD Rally at Risk of Minor Mean Reversion Decline", "original_title": "Chart alert : AUD / USD 360 pips rally at risk of a minor mean reversion decline below 0 . 7200 before new upleg", "publish_date": "2026-04-16T12:28:19Z", "publish_timestamp": 1776342499, "source": "marketpulse.com", "url": "https://www.marketpulse.com/markets/chart-alert-audusd-360-pips-rally-at-risk-of-a-minor-mean-reversion-decline-below-07200-before-new-upleg/", "entities": ["Australian dollar", "US-Iran war", "RBA (Reserve Bank of Australia)", "USD/EUR", "euro"], "impacted_assets": ["Equities", "Gold", "Oil", "AUD/USD"], "volatility_implication": "Neutral", "llm_tone_score": 1}} +{"id": "b02c9963-fc86-50ec-8c73-d0bf53918cd3", "text": "UAE Highlights Proactive Approach to Financial Resilience at Washington Meetings. The Central Bank of the UAE participated in international meetings, highlighting its proactive approach to financial resilience. Governor Khaled Mohamed Balama delivered a keynote address on global economic developments and geopolitical challenges, emphasizing the UAE's efforts to enhance financial sector efficiency. This event has no direct impact on Gold/Silver prices but may contribute to broader market sentiment.\n\nNote: The tone score is neutral as there are no clear directional macro drivers or significant events that would directly affect gold/silver prices.", "metadata": {"topic": "macro_central_banks", "title": "UAE Highlights Proactive Approach to Financial Resilience at Washington Meetings", "original_title": "CBUAE highlights UAE proactive approach to financial resilience in Washington", "publish_date": "2026-04-16T12:28:19Z", "publish_timestamp": 1776342499, "source": "irishsun.com", "url": "http://www.irishsun.com/news/278987031/cbuae-highlights-uae-proactive-approach-to-financial-resilience-in-washington", "entities": ["Central Bank of the UAE (CBUAE)", "International Monetary Fund (IMF)", "World Bank Group", "G20", "G24", "BRICS", "Eesti Pank", "National Bank of Georgia"], "impacted_assets": [], "volatility_implication": "Neutral", "llm_tone_score": 0}} +{"id": "79886d78-6f3a-5742-bdcb-ac6b5ea52df3", "text": "Senator Thom Tillis Vows to Block Jerome Powell's Replacement at Federal Reserve. Senator Thom Tillis has vowed to block the nomination of Kevin Warsh to replace Jerome Powell as head of the Federal Reserve. This is a principled political act aimed at forcing the Trump Department of Justice to drop its investigation into Powell or provide evidence of corruption. The move may have indirect implications for USD and Equities, but the macro transmission mechanism is unclear.", "metadata": {"topic": "macro_central_banks", "title": "Senator Thom Tillis Vows to Block Jerome Powell's Replacement at Federal Reserve", "original_title": "Say What You Mean", "publish_date": "2026-04-16T12:28:19Z", "publish_timestamp": 1776342499, "source": "dailykos.com", "url": "https://www.dailykos.com/stories/2026/4/16/800020794/community/this/", "entities": ["Senator Thom Tillis", "Kevin Warsh", "Jerome Powell", "Donald Trump", "Stephen Miller"], "impacted_assets": [], "volatility_implication": "Neutral", "llm_tone_score": 0}} +{"id": "8f92dbba-2454-5b29-a5f7-7c996405b9d7", "text": "Russian Inflation Expectations Fall to 12.9% in April. Russian inflation expectations have decreased to 12.9% in April, with those having savings expecting a slightly lower rate of 11.4%. This moderation in inflationary pressures may lead to a slight increase in gold and silver prices as investors seek safe-haven assets. The USD might also benefit from the reduced inflation concerns, potentially leading to a minor decrease in precious metal values.", "metadata": {"topic": "macro_central_banks", "title": "Russian Inflation Expectations Fall to 12.9% in April", "original_title": "Инфляционные ожидания россиян в апреле сократились до 12 , 9 % ", "publish_date": "2026-04-16T12:28:19Z", "publish_timestamp": 1776342499, "source": "vedomosti.ru", "url": "https://www.vedomosti.ru/economics/news/2026/04/16/1190832-inflyatsionnie-ozhidaniya", "entities": ["Russia", "citizens with savings", "citizens without savings"], "impacted_assets": ["Gold", "Silver", "USD"], "volatility_implication": "Neutral", "llm_tone_score": 1}} +{"id": "d869cdb8-a8fb-5012-9522-0f277de07fcd", "text": "Brazilian Government Projects GDP Growth of 2.56% and Inflation of 3.04% in 2027. The Brazilian government projects GDP growth of 2.56% in 2027, with inflation expected to remain stable at 3.04%. The report also forecasts moderate wage growth and a gradual reduction in interest rates. These projections suggest a positive economic outlook for Brazil, which may have a neutral impact on global markets.", "metadata": {"topic": "macro_central_banks", "title": "Brazilian Government Projects GDP Growth of 2.56% and Inflation of 3.04% in 2027", "original_title": "Governo projeta crescimento de 2 , 56 % do PIB e inflao de 3 , 04 % em 2027", "publish_date": "2026-04-16T12:28:19Z", "publish_timestamp": 1776342499, "source": "brasil247.com", "url": "https://www.brasil247.com:443/economia/governo-projeta-crescimento-de-2-56-do-pib-e-inflacao-de-3-04-em-2027-u72b8zti", "entities": ["Brazilian government", "Ministry of Finance", "Ministry of Planning and Budget", "Congress National"], "impacted_assets": ["Equities", "Gold", "Oil", "USD"], "volatility_implication": "Neutral", "llm_tone_score": 1}} diff --git a/Data/3_Gold_Semantic/News_Qdrant/2026-04-16/qdrant_macro_geopolitics_risk_processed.jsonl b/Data/3_Gold_Semantic/News_Qdrant/2026-04-16/qdrant_macro_geopolitics_risk_processed.jsonl new file mode 100644 index 0000000..28ce508 --- /dev/null +++ b/Data/3_Gold_Semantic/News_Qdrant/2026-04-16/qdrant_macro_geopolitics_risk_processed.jsonl @@ -0,0 +1,4 @@ +{"id": "475add2f-79b9-58e2-a4f5-34afabc0651c", "text": "Three Misconceptions About the $402B Semiconductor Foundry Industry. This article discusses the semiconductor foundry industry's growth to $402 billion in 2026, highlighting its complexity and connection to geopolitics and AI capex. The piece also clarifies TSMC's market share, emphasizing that its dominance at the leading edge is often understated due to inconsistent definitions of \"advanced.\"", "metadata": {"topic": "macro_geopolitics_risk", "title": "Three Misconceptions About the $402B Semiconductor Foundry Industry", "original_title": "Three Misconceptions About the $402B Semiconductor Foundry Industry", "publish_date": "2026-04-16T12:30:54Z", "publish_timestamp": 1776342654, "source": "design-reuse.com", "url": "https://www.design-reuse.com/news/202530378-three-misconceptions-about-the-402b-semiconductor-foundry-industry/", "entities": ["Pierre Cambou", "Yole Développement", "TSMC"], "impacted_assets": [], "volatility_implication": "Neutral", "llm_tone_score": 0}} +{"id": "7a448934-3774-5828-97e2-4774fb255b8f", "text": "Pakistani Army Chief Visits Tehran in Hopes of Renewed US-Iran Talks. The Pakistani army chief's visit to Tehran aims to extend the ceasefire between Israel and Iran-backed Hezbollah. While this development may lead to a deal, uncertainty remains as both sides continue exchanging fire across the border. The meeting comes amid progress in US-Iran talks, with regional officials reporting an \"in-principle agreement\" to extend the ceasefire. This event is unlikely to have a significant impact on gold or silver prices, but it may contribute to market volatility if tensions escalate or de-escalate.", "metadata": {"topic": "macro_geopolitics_risk", "title": "Pakistani Army Chief Visits Tehran in Hopes of Renewed US-Iran Talks", "original_title": "Pakistani army chief visits Tehran in hopes of renewed US - Iran talks", "publish_date": "2026-04-16T12:30:54Z", "publish_timestamp": 1776342654, "source": "redlandsdailyfacts.com", "url": "https://www.redlandsdailyfacts.com/2026/04/16/us-iran-war-israel/", "entities": ["Pakistan", "Iran", "United States", "Israel", "Lebanon"], "impacted_assets": ["Equities", "Oil", "USD"], "volatility_implication": "Neutral", "llm_tone_score": 0}} +{"id": "43cfb012-8a21-5232-9ad4-874857ec06b1", "text": "Eurozone Inflation Surges to 2.6% in March Due to Energy Price Increase Following Iran Conflict. The eurozone inflation rate surged to 2.6% in March, driven by a 5.1% increase in energy prices following the Iran conflict. This is the highest inflation rate since July 2024 and reflects the immediate impact of the war on oil prices. The rise in energy costs has also led to higher food prices, with fresh foods increasing by 4.2%. The underlying inflation rate, excluding energy and food, remained stable at 2.3%. This development is likely to support gold and silver prices, while also increasing market fear and volatility.\n\nNote: The tone score of +3 reflects the bullish impact on gold and silver prices due to the increase in energy costs and potential for higher inflation.", "metadata": {"topic": "macro_geopolitics_risk", "title": "Eurozone Inflation Surges to 2.6% in March Due to Energy Price Increase Following Iran Conflict", "original_title": "La inflación de la eurozona repunta al 2 , 6 % en marzo por el encarecimiento de la energía tras la guerra en Irán", "publish_date": "2026-04-16T12:30:54Z", "publish_timestamp": 1776342654, "source": "laprovincia.es", "url": "https://www.laprovincia.es/economia/2026/04/16/inflacion-eurozona-repunta-2-6-marzo-encarecimiento-energia-guerra-iran-129169885.html", "entities": ["European Union", "Eurostat", "Iran", "United States", "Israel", "Russia", "Ukraine"], "impacted_assets": ["Gold", "Silver", "Oil", "USD"], "volatility_implication": "Increase", "llm_tone_score": 3}} +{"id": "b32397d3-13bf-5a0d-9585-a485899b107c", "text": "TSMC Raises Revenue Forecast for 2026 Due to AI Demand. TSMC, a leading semiconductor manufacturer, has raised its revenue forecast for 2026 due to strong demand for AI-related chips. The company expects a 30%+ increase in revenues, driven by the growing demand for advanced chips used in AI systems. This news is bullish for gold and silver prices as it suggests a continued strong demand for technology and innovation, which can support higher precious metal prices.\n\nThe macro transmission mechanism at play here is the increasing demand for AI-related technologies, which drives up demand for semiconductors and other related components. This, in turn, supports the overall tech sector and potentially leads to increased investment and consumption, which can benefit gold and silver prices.", "metadata": {"topic": "macro_geopolitics_risk", "title": "TSMC Raises Revenue Forecast for 2026 Due to AI Demand", "original_title": "TSMC alza le previsioni : nel 2026 i ricavi aumenteranno ancora grazie allIA", "publish_date": "2026-04-16T12:30:54Z", "publish_timestamp": 1776342654, "source": "multiplayer.it", "url": "https://multiplayer.it/notizie/tsmc-alza-previsioni-2026-ricavi-aumenteranno-ia.html", "entities": ["Taiwan Semiconductor Manufacturing Company (TSMC)", "C.C. Wei", "Samsung"], "impacted_assets": ["Equities", "Gold", "USD"], "volatility_implication": "Neutral", "llm_tone_score": 2}} diff --git a/Data/3_Gold_Semantic/News_Qdrant/2026-04-16/qdrant_macro_yields_dollar_processed.jsonl b/Data/3_Gold_Semantic/News_Qdrant/2026-04-16/qdrant_macro_yields_dollar_processed.jsonl new file mode 100644 index 0000000..513a5aa --- /dev/null +++ b/Data/3_Gold_Semantic/News_Qdrant/2026-04-16/qdrant_macro_yields_dollar_processed.jsonl @@ -0,0 +1,8 @@ +{"id": "79815fab-8a22-5468-8836-a9fe35dd4de4", "text": "Indian Stock Market Update: Sensex and Nifty End Marginally Lower Amid Profit-Booking and Geopolitical Uncertainty. The Indian stock market ended marginally lower on Thursday due to profit-booking and lingering uncertainty around US-Iran talks. Despite this, metals emerged as top performers, supported by firm global commodity prices and a softer dollar. IT stocks also showed resilience, while banking, auto, and consumption stocks came under pressure.", "metadata": {"topic": "macro_yields_dollar", "title": "Indian Stock Market Update: Sensex and Nifty End Marginally Lower Amid Profit-Booking and Geopolitical Uncertainty", "original_title": "Sensex , Nifty pare gains to end marginally lower , Adani Enterprises , Hindalco lead gainers", "publish_date": "2026-04-16T12:30:02Z", "publish_timestamp": 1776342602, "source": "thehindubusinessline.com", "url": "https://www.thehindubusinessline.com/markets/stock-markets-close-lower-on-profit-taking-in-financial-shares/article70868922.ece", "entities": ["Adani Enterprises", "Hindalco", "Vinod Nair", "Ponmudi R", "Sudeep Shah", "Hariprasad K"], "impacted_assets": ["Equities", "Metals", "IT Stocks", "Banking", "Auto", "Consumption"], "volatility_implication": "Neutral", "llm_tone_score": 1}} +{"id": "f7aa4839-a32f-50bb-b164-d96f852547c5", "text": "Cable Eyes 1.3696 After Reclaiming Key Moving Averages, Bulls Defend 1.3500. The GBP/USD has broken out of its descending trendline and reclaimed its 100-day and 200-day moving averages, indicating a shift in macro bias from \"sell the rallies\" to \"buy the dips.\" This development suggests that bulls are defending the 1.3500 level and eyeing the next major structural hurdle at 1.3696. The Daily RSI is showing healthy bullish momentum with plenty of runway before hitting the overbought threshold, indicating a potential continuation of the uptrend.", "metadata": {"topic": "macro_yields_dollar", "title": "Cable Eyes 1.3696 After Reclaiming Key Moving Averages, Bulls Defend 1.3500", "original_title": "Cable eyes 1 . 3696 after reclaiming key moving averages , bulls defend 1 . 3500", "publish_date": "2026-04-16T12:30:02Z", "publish_timestamp": 1776342602, "source": "marketpulse.com", "url": "https://www.marketpulse.com/markets/cable-eyes-13696-after-reclaiming-key-moving-averages-bulls-defend-13500/", "entities": ["GBP/USD", "Federal Reserve"], "impacted_assets": ["Equities", "Gold", "USD"], "volatility_implication": "Neutral", "llm_tone_score": 2}} +{"id": "f5356de4-9e9b-5dc9-b691-c8af5f132cae", "text": "3 Absurdly Cheap Stocks to Buy With $1,000 While the Market Is Nervous. The article highlights three undervalued stocks that can thrive in any market environment. Domino's Pizza has a competitive advantage through its delivery model and technology, while Clorox is a consumer staples conglomerate with a discounted stock price due to past struggles. Target, despite its challenges, offers an attractive valuation. These stocks are considered safe and undervalued, making them suitable for investors seeking dividend income and potential growth.\n\nNote: As the article does not explicitly mention macroeconomic or financial market drivers that would directly impact gold or silver prices, I assigned a tone score of 0 (Neutral).", "metadata": {"topic": "macro_yields_dollar", "title": "3 Absurdly Cheap Stocks to Buy With $1,000 While the Market Is Nervous", "original_title": "3 Absurdly Cheap Stocks to Buy With $1 , 000 While the Market Is This Nervous", "publish_date": "2026-04-16T12:30:02Z", "publish_timestamp": 1776342602, "source": "fool.com", "url": "https://www.fool.com/investing/2026/04/16/3-absurdly-cheap-stocks-to-buy-with-1000-while-the/?source=iedfolrf0000001", "entities": ["Domino's Pizza", "Clorox", "Target"], "impacted_assets": ["Equities", "Consumer Discretionary", "Consumer Staples"], "volatility_implication": "Neutral", "llm_tone_score": 0}} +{"id": "720da795-3ef5-508e-a82c-22a3030dc4b3", "text": "Trump Blocks Strait of Hormuz: Mullah Regime Runs Out of Money for Iran War. The US blockade of the Strait of Hormuz will severely impact Iran's economy by cutting off its main oil export route. This could lead to a financial and inflationary crisis in Iran, making it difficult for the regime to pay its soldiers and paramilitary groups. As a result, protests may resume, potentially with fewer people willing to defend the regime. The US strategy aims to weaken Iran's economy and force the regime to negotiate a deal that addresses US concerns about nuclear weapons and long-range missiles.\n\nNote: The tone score is +3 because the event has a clear bullish impact on gold prices due to increased market fear and uncertainty, which tends to drive up gold demand as a safe-haven asset.", "metadata": {"topic": "macro_yields_dollar", "title": "Trump Blocks Strait of Hormuz: Mullah Regime Runs Out of Money for Iran War", "original_title": "Trump blockiert Straße von Hormus : Mullah - Regime igeht das Geld aus", "publish_date": "2026-04-16T12:30:02Z", "publish_timestamp": 1776342602, "source": "kreiszeitung.de", "url": "http://www.kreiszeitung.de/politik/trump-koennte-mit-genialer-strategie-den-krieg-im-iran-gewinnen-zr-94264746.html", "entities": ["Donald Trump", "Iran", "United States", "Israel"], "impacted_assets": ["Gold", "Oil", "USD"], "volatility_implication": "Increase", "llm_tone_score": 3}} +{"id": "7a99f7d9-a721-5abd-affe-fd9c2b4ca187", "text": "Why Gold and Silver Prices are Rising on a Weaker Dollar and Geopolitical Tensions?. The article highlights the rising prices of gold and silver due to a weaker US dollar, geopolitical tensions, and shifting expectations around global interest rates. The macro transmission mechanism is driven by the weakening dollar, which increases demand for safe-haven assets like gold and silver, while the geopolitical tensions surrounding the Iran conflict add to the upward momentum.", "metadata": {"topic": "macro_yields_dollar", "title": "Why Gold and Silver Prices are Rising on a Weaker Dollar and Geopolitical Tensions?", "original_title": "Why gold , silver are rising on weak dollar & geopolitical tensions ? ", "publish_date": "2026-04-16T12:30:02Z", "publish_timestamp": 1776342602, "source": "thehindubusinessline.com", "url": "https://www.thehindubusinessline.com/markets/gold/gold-silver-prices-rise-on-weak-dollar-geopolitical-cues-analysts-see-near-term-volatility/article70868399.ece", "entities": ["Gaurav Garg", "Ponmudi R", "Enrich Money", "Lemonn Markets Desk"], "impacted_assets": ["Equities", "Gold", "Oil", "USD"], "volatility_implication": "Increase", "llm_tone_score": 2}} +{"id": "1d8aca9d-502c-5f6d-be55-ba2f7c0c6387", "text": "Greek Stock Market: Selective Moves and Increased Volatility. The Greek stock market is experiencing selective moves and increased volatility. While some blue chips are rising sharply, others are declining. The overall tone remains neutral, with no clear directional macro drivers. The global markets are also showing mixed signals, with the US and European indices moving in different directions.", "metadata": {"topic": "macro_yields_dollar", "title": "Greek Stock Market: Selective Moves and Increased Volatility", "original_title": "Χρηματιστήριο : Επιλεκτικές κινήσεις και αυξημένη μεταβλητότητα", "publish_date": "2026-04-16T12:30:02Z", "publish_timestamp": 1776342602, "source": "capital.gr", "url": "https://www.capital.gr/agores/3985670/xrimatistirio-epilektikes-kiniseis-kai-auximeni-metablitotita/", "entities": ["Metlen", "ΓΕΚ ΤΕΡΝΑ", "Λάμδα", "Aegean", "Πειραιώς", "Alpha", "ΕΤΕ", "Eurobank", "Credia", "ΔΤΡ", "ΟΛΘ", "Alter Ego", "Qualco", "Intralot"], "impacted_assets": ["Equities", "Gold"], "volatility_implication": "Neutral", "llm_tone_score": 0}} +{"id": "10610233-3552-5d0c-bef0-76cf0686f8ec", "text": "AUD/USD Rally at Risk of Minor Mean Reversion Decline. The Australian dollar has rallied significantly since the US-Iran ceasefire agreement, mirroring risk-off movements in equities. While the RBA's hawkish guidance hasn't deterred the AUD/USD rally, a minor mean reversion decline below 0.7200 could be imminent before a new upleg begins.", "metadata": {"topic": "macro_yields_dollar", "title": "AUD/USD Rally at Risk of Minor Mean Reversion Decline", "original_title": "Chart alert : AUD / USD 360 pips rally at risk of a minor mean reversion decline below 0 . 7200 before new upleg", "publish_date": "2026-04-16T12:30:02Z", "publish_timestamp": 1776342602, "source": "marketpulse.com", "url": "https://www.marketpulse.com/markets/chart-alert-audusd-360-pips-rally-at-risk-of-a-minor-mean-reversion-decline-below-07200-before-new-upleg/", "entities": ["Australian dollar", "US-Iran war", "RBA (Reserve Bank of Australia)", "USD/EUR", "euro"], "impacted_assets": ["Equities", "Gold", "Oil", "AUD/USD"], "volatility_implication": "Neutral", "llm_tone_score": 1}} +{"id": "7ff6d5db-cafe-5769-a577-c74e8bf0d384", "text": "British Legacy: Occident Meets Orient - The Architecture of Jerusalem is Strongly Influenced by the British Mandate Era.. The article discusses various news stories related to Israel, including the strengthening of the Israeli shekel against the US dollar, Germany's alleged arms exports to Israel, and Apple TV's release of a trailer for an Israeli thriller series. Additionally, Time magazine includes Israeli Prime Minister Benjamin Netanjahu in its list of the 100 most influential people. These events do not have a direct impact on Gold/Silver prices but may contribute to market volatility due to their geopolitical implications.\n\nNote: The tone score is neutral because there are no clear directional macro drivers that would significantly affect Gold/Silver prices.", "metadata": {"topic": "macro_yields_dollar", "title": "British Legacy: Occident Meets Orient - The Architecture of Jerusalem is Strongly Influenced by the British Mandate Era.", "original_title": "16 . 04 . 2026 - Israelnetz", "publish_date": "2026-04-16T12:30:02Z", "publish_timestamp": 1776342602, "source": "israelnetz.com", "url": "https://www.israelnetz.com/2026/04/16/", "entities": ["Benjamin Netanjahu", "Israel", "Iran", "Lebanon", "Germany", "Friedrich Merz", "Apple TV", "Talia Lynne Ronn", "Liras Chamami", "Adam Bizanski", "Dana Idisis"], "impacted_assets": [], "volatility_implication": "Neutral", "llm_tone_score": 0}} diff --git a/Data/3_Gold_Semantic/News_Qdrant/2026-04-18/qdrant_asset_precious_metals_spot_processed.jsonl b/Data/3_Gold_Semantic/News_Qdrant/2026-04-18/qdrant_asset_precious_metals_spot_processed.jsonl new file mode 100644 index 0000000..e4ddc52 --- /dev/null +++ b/Data/3_Gold_Semantic/News_Qdrant/2026-04-18/qdrant_asset_precious_metals_spot_processed.jsonl @@ -0,0 +1,6 @@ +{"id": "e7372f0f-783d-5d90-b59d-eeba96e6a72d", "text": "Life jacket worn by a passenger who survived the Titanic auctioned off for over $900,000. This news article reports on the auction of a life jacket worn by Laura Mabel Francatelli, a first-class passenger who survived the Titanic disaster. The item sold for over $1.24 million CAD, setting a record price for a piece of Titanic memorabilia. While this event does not have any direct macro-financial implications, it may contribute to a sense of nostalgia and fascination with the Titanic story, which could indirectly influence market sentiment and volatility.", "metadata": {"topic": "asset_precious_metals_spot", "title": "Life jacket worn by a passenger who survived the Titanic auctioned off for over $900,000", "original_title": "Life jacket worn by a passenger who survived the Titanic auctioned off for over $900 , 000", "publish_date": "2026-04-18T22:04:31Z", "publish_timestamp": 1776549871, "source": "castanetkamloops.net", "url": "https://www.castanetkamloops.net/news/Entertainment/609632/Life-jacket-worn-by-a-passenger-who-survived-the-Titanic-auctioned-off-for-over-900-000", "entities": ["Laura Mabel Francatelli", "Lucy Duff Gordon", "Cosmo Duff Gordon", "RMS Carpathia"], "impacted_assets": [], "volatility_implication": "Neutral", "llm_tone_score": 0}} +{"id": "9f94ca40-5eb0-54cd-a87e-7adf48f44297", "text": "Survivor's Signed Titanic Life Jacket Fetches Record Price. The sale of a life jacket worn by a Titanic survivor for $906,000 is a record-breaking price for a piece of Titanic memorabilia. This event has no direct macro-financial implications and does not affect the prices of Gold or Silver. The story's focus on human interest and historical significance rather than economic drivers keeps the tone neutral.", "metadata": {"topic": "asset_precious_metals_spot", "title": "Survivor's Signed Titanic Life Jacket Fetches Record Price", "original_title": "Survivor signed Titanic life jacket fetches $906 , 000 at united kingdom sale", "publish_date": "2026-04-18T22:04:31Z", "publish_timestamp": 1776549871, "source": "kxlf.com", "url": "https://www.kxlf.com/world/europe/survivors-signed-titanic-life-jacket-fetches-906-000-at-uk-sale", "entities": ["Laura Mabel Francatelli", "Lucy Duff Gordon", "Cosmo Duff Gordon"], "impacted_assets": [], "volatility_implication": "Neutral", "llm_tone_score": 0}} +{"id": "ebbc1c05-5950-54d4-8375-b4e66a16cd10", "text": "Life Jacket Worn by Passenger Who Survived Titanic Auctioned Off for Over $900,000. The auction of a life jacket worn by a passenger who survived the Titanic's sinking has set a new record price. The item sold for over $906,000, with the proceeds likely going to its buyer. This event does not have any direct macro-financial implications or transmission mechanisms that would impact gold or silver prices.", "metadata": {"topic": "asset_precious_metals_spot", "title": "Life Jacket Worn by Passenger Who Survived Titanic Auctioned Off for Over $900,000", "original_title": "Life jacket worn by a passenger who survived the Titanic auctioned off for over $900 , 000", "publish_date": "2026-04-18T22:04:31Z", "publish_timestamp": 1776549871, "source": "pressdemocrat.com", "url": "https://www.pressdemocrat.com/2026/04/18/life-jacket-worn-by-a-passenger-who-survived-the-titanic-auctioned-off-for-over-900000/", "entities": ["Laura Mabel Francatelli", "Lucy Duff Gordon", "Cosmo Duff Gordon"], "impacted_assets": [], "volatility_implication": "Neutral", "llm_tone_score": 0}} +{"id": "1c1d01da-2e7e-51d6-aeb1-9c58dad7e1df", "text": "Cursor Aims to Raise $2 Billion at $50 Billion Valuation, Targeting $6 Billion Revenue Run Rate by 2026. The article highlights Cursor's plans to raise $2 billion at a valuation of $50 billion, driven by its rapid growth and increasing investor confidence. This news is bullish for the market, as it indicates a strong demand for AI-powered coding tools and a potential increase in revenue run rate. The company's focus on building its own models and reducing dependence on third-party providers also reduces risk and increases its chances of long-term success.", "metadata": {"topic": "asset_precious_metals_spot", "title": "Cursor Aims to Raise $2 Billion at $50 Billion Valuation, Targeting $6 Billion Revenue Run Rate by 2026", "original_title": "Cursor Looks to Double Down with $2B Raise at $50B Valuation", "publish_date": "2026-04-18T22:04:31Z", "publish_timestamp": 1776549871, "source": "techstory.in", "url": "https://techstory.in/cursor-looks-to-double-down-with-2b-raise-at-50b-valuation/", "entities": ["Cursor", "Thrive Capital", "Andreessen Horowitz", "Battery Ventures", "NVIDIA", "Anthropic", "OpenAI"], "impacted_assets": ["Equities", "Gold", "USD"], "volatility_implication": "Increase", "llm_tone_score": 3}} +{"id": "735a9a8f-e3e2-5aae-ae6e-9fc43d3a9793", "text": "Taiwan-listed companies' dividend payouts surge to a record high of NT$2.5 trillion, with 118 firms expected to pay out over NT$10 million each.. The surge in dividend payouts by Taiwan-listed companies is expected to reach a record high of NT$2.5 trillion, driven by the strong performance of the Taiwanese economy and the increasing confidence of investors. This trend is likely to boost investor sentiment and drive up demand for equities and gold, leading to increased market volatility.", "metadata": {"topic": "asset_precious_metals_spot", "title": "Taiwan-listed companies' dividend payouts surge to a record high of NT$2.5 trillion, with 118 firms expected to pay out over NT$10 million each.", "original_title": "上市櫃股利發放衝2 . 5兆再創歷史新高 權王5 , 705億元稱冠 | 股市要聞 | 股市", "publish_date": "2026-04-18T22:04:31Z", "publish_timestamp": 1776549871, "source": "udn.com", "url": "https://udn.com/news/story/7251/9450364", "entities": ["Taiwan-listed companies", "National Taiwan Bank (2882)", "First Commercial Bank (2881)", "Taiwan Semiconductor Manufacturing Company (2330)", "Hon Hai Precision Industry Co. Ltd. (2317)", "United Microelectronics Corporation (2303)", "etc."], "impacted_assets": ["Equities", "Gold"], "volatility_implication": "Increase", "llm_tone_score": 3}} +{"id": "7c27b988-5ee6-5c98-b887-1b1c64da9802", "text": "Gold Prices Reach 4-Week High on Global Markets. Gold prices surged to a four-week high as tensions between the US and Iran escalated, driving oil prices above $100 per barrel. The Fed's potential rate decision also contributed to the volatility. As investors seek safe-haven assets amid economic and geopolitical uncertainty, gold demand is expected to remain strong.\n\nThe macro transmission mechanism is that rising tensions in the Middle East and potential interest rate decisions by the Federal Reserve are driving investors towards safe-haven assets like gold, which tends to perform well during times of market stress.", "metadata": {"topic": "asset_precious_metals_spot", "title": "Gold Prices Reach 4-Week High on Global Markets", "original_title": "الذهب يسجل أعلى قمة له خلال 4 أسابيع في البورصة العالمية", "publish_date": "2026-04-18T22:04:31Z", "publish_timestamp": 1776549871, "source": "new-today.co", "url": "https://new-today.co/%D8%A7%D9%84%D8%B0%D9%87%D8%A8-%D9%8A%D8%B3%D8%AC%D9%84-%D8%A3%D8%B9%D9%84%D9%89-%D9%82%D9%85%D8%A9-%D9%84%D9%87-%D8%AE%D9%84%D8%A7%D9%84-4-%D8%A3%D8%B3%D8%A7%D8%A8%D9%8A%D8%B9-%D9%81%D9%8A-%D8%A7/", "entities": ["Iran", "United States", "Federal Reserve"], "impacted_assets": ["Gold", "Oil"], "volatility_implication": "Increase", "llm_tone_score": 2}} diff --git a/Data/3_Gold_Semantic/News_Qdrant/2026-04-18/qdrant_macro_central_banks_processed.jsonl b/Data/3_Gold_Semantic/News_Qdrant/2026-04-18/qdrant_macro_central_banks_processed.jsonl new file mode 100644 index 0000000..8b716eb --- /dev/null +++ b/Data/3_Gold_Semantic/News_Qdrant/2026-04-18/qdrant_macro_central_banks_processed.jsonl @@ -0,0 +1,8 @@ +{"id": "4742d43b-f2f6-5229-b2a6-6c1c87579bd0", "text": "Federal Reserve Probe Intensifies Amid Trump's Threats to Fire Powell. The intensifying Federal Reserve probe into the $2.5 billion headquarters renovation project has sparked concerns about political interference in monetary policy. President Trump's threats to fire Fed Chair Jerome Powell have added fuel to the fire, potentially undermining the central bank's independence and increasing market uncertainty. The macro transmission mechanism is a potential increase in USD volatility, which could negatively impact Gold prices.", "metadata": {"topic": "macro_central_banks", "title": "Federal Reserve Probe Intensifies Amid Trump's Threats to Fire Powell", "original_title": "Fed probe intensifies as Trump threatens to fire Powell", "publish_date": "2026-04-18T22:02:16Z", "publish_timestamp": 1776549736, "source": "hongkongherald.com", "url": "http://www.hongkongherald.com/news/278988532/fed-probe-intensifies-as-trump-threatens-to-fire-powell", "entities": ["Jerome Powell", "Donald Trump", "Jeanine Pirro", "Robert Hur", "Thom Tillis", "Kevin Warsh", "Lisa Cook"], "impacted_assets": ["USD", "Equities", "Gold"], "volatility_implication": "Increase", "llm_tone_score": -2}} +{"id": "5f128886-304d-5a01-9435-f597544b1b33", "text": "Trump Backs Fed Probe as Prosecutors Visit HQ Renovation Site. The ongoing investigation into the Federal Reserve's headquarters renovation project has intensified, with prosecutors seeking access to the construction site. President Trump has backed the probe, framing it as a necessary scrutiny of government spending. However, Fed Chair Jerome Powell has argued that the investigation is a pretext to undermine the central bank's independence, raising broader concerns about political interference in U.S. monetary policy. The situation may lead to increased market uncertainty and potentially impact USD and equity markets.", "metadata": {"topic": "macro_central_banks", "title": "Trump Backs Fed Probe as Prosecutors Visit HQ Renovation Site", "original_title": "Trump backs Fed probe as prosecutors visit HQ renovation site", "publish_date": "2026-04-18T22:02:16Z", "publish_timestamp": 1776549736, "source": "myanmarnews.net", "url": "http://www.myanmarnews.net/news/278988532/trump-backs-fed-probe-as-prosecutors-visit-hq-renovation-site", "entities": ["Jerome Powell", "Donald Trump", "Jeanine Pirro", "Kevin Warsh", "Thom Tillis", "Josh Hawley", "Lisa Cook"], "impacted_assets": ["USD", "Equities"], "volatility_implication": "Neutral", "llm_tone_score": 0}} +{"id": "da136ffa-b8df-5d9a-a4f2-4ed315b17419", "text": "Mark Carney Named to Time's Most Influential People List for 2026. The article reports that Canadian Prime Minister Mark Carney has been named to Time's Most Influential People List for 2026. This recognition is largely based on his speech at the World Economic Forum in Davos, where he emphasized the need for international cooperation and multilateralism. While this event may not have a direct impact on Gold/Silver prices, it could potentially influence market sentiment and macroeconomic conditions, which may indirectly affect precious metals.", "metadata": {"topic": "macro_central_banks", "title": "Mark Carney Named to Time's Most Influential People List for 2026", "original_title": "Carney lands on Time most influential people list for 2026", "publish_date": "2026-04-18T22:02:16Z", "publish_timestamp": 1776549736, "source": "lethbridgeherald.com", "url": "https://lethbridgeherald.com/news/national-news/2026/04/18/carney-lands-on-times-most-influential-people-list-for-2026/", "entities": ["Mark Carney", "Christine Lagarde", "Justin Trudeau", "Donald Trump", "Mette Frederiksen", "Benjamin Netanyahu", "Pope Leo XIV"], "impacted_assets": [], "volatility_implication": "Neutral", "llm_tone_score": 0}} +{"id": "3f193548-4ac6-5f7a-9abc-cc538e35cf46", "text": "Larry Fink's Double Role as WEF Co-President: Swiss Government Supports Him Despite Conflicts of Interest. The Swiss government has given its backing to Larry Fink as WEF co-president despite concerns about his dual role as CEO of Blackrock. This decision may not have a direct impact on gold or silver prices, but it could contribute to a more stable macro environment, which might lead to increased market confidence and potentially stabilize precious metals.", "metadata": {"topic": "macro_central_banks", "title": "Larry Fink's Double Role as WEF Co-President: Swiss Government Supports Him Despite Conflicts of Interest", "original_title": "Doppelrolle von Larry Fink : Bund stärkt dem WEF - Co - Präsidenten den Rücken", "publish_date": "2026-04-18T22:02:16Z", "publish_timestamp": 1776549736, "source": "nzz.ch", "url": "https://www.nzz.ch/wirtschaft/naechster-nackenschlag-fuer-klaus-schwab-der-bund-laesst-larry-fink-als-wef-praesidenten-gewaehren-trotz-doppelrolle-ld.1933724", "entities": ["Klaus Schwab", "Larry Fink", "André Hoffmann", "World Economic Forum (WEF)", "Eidgenössische Stiftungsaufsicht (ESA)"], "impacted_assets": [], "volatility_implication": "Neutral", "llm_tone_score": 0}} +{"id": "c9a8b110-ab13-56fd-a204-cd8aa26600ea", "text": "Banks in New Zealand Offer Loans for Electric Vehicles Amid Growing Demand. New Zealand's major banks are responding to growing demand for electric vehicles by offering specialized loans. This trend could lead to increased investment in sustainable energy and infrastructure, potentially benefiting gold prices as investors seek safe-haven assets. The article highlights the growth in demand for EVs and related financial products, which could have a positive impact on the overall economy.", "metadata": {"topic": "macro_central_banks", "title": "Banks in New Zealand Offer Loans for Electric Vehicles Amid Growing Demand", "original_title": "So you want to buy an EV - here what your bank could offer", "publish_date": "2026-04-18T22:02:16Z", "publish_timestamp": 1776549736, "source": "rnz.co.nz", "url": "https://www.rnz.co.nz/news/business/592773/so-you-want-to-buy-an-ev-here-s-what-your-bank-could-offer", "entities": ["ASB", "BNZ", "ANZ", "Kiwibank", "Meridian"], "impacted_assets": ["Equities", "Gold", "USD"], "volatility_implication": "Neutral", "llm_tone_score": 1}} +{"id": "43bc87ab-054a-5f74-8af0-52be544c57a4", "text": "Former Economy Minister Paulo Guedes Criticizes Lula Government and Rules Out Return to Politics. Former Economy Minister Paulo Guedes criticized the economic policy of President Lula's government, citing increased public spending and fiscal flexibility as contributing to rising debt and pressure on interest rates. This commentary may increase market fear/VIX as it implies a potential for higher inflation and interest rates, which could negatively impact gold prices and strengthen the US dollar.", "metadata": {"topic": "macro_central_banks", "title": "Former Economy Minister Paulo Guedes Criticizes Lula Government and Rules Out Return to Politics", "original_title": "Paulo Guedes critica governo Lula e descarta voltar à política", "publish_date": "2026-04-18T22:02:16Z", "publish_timestamp": 1776549736, "source": "bahianoticias.com.br", "url": "https://www.bahianoticias.com.br/noticia/315961-paulo-guedes-critica-governo-lula-e-descarta-voltar-a-politica", "entities": ["Paulo Guedes", "Luiz Inácio Lula da Silva", "Jair Bolsonaro"], "impacted_assets": ["Gold", "USD"], "volatility_implication": "Increase", "llm_tone_score": -2}} +{"id": "75770ef6-0a35-5d85-b147-a8cfc3d55a63", "text": "Differences in Loans for Electric and Gasoline Vehicles at Expomóvil 2026. The article discusses the loan conditions offered by three major banks in Costa Rica for electric and gasoline vehicles at Expomóvil 2026. The banks offer varying interest rates, down payments, and commissions depending on the type of vehicle. This could lead to a shift towards eco-friendly technologies, which may positively impact gold/silver prices if investors perceive a growing demand for sustainable energy solutions.\n\nNote: The tone score is +2 because while the article does not explicitly mention macroeconomic drivers that would directly impact gold/silver prices, it highlights the increasing importance of eco-friendly technologies, which could contribute to a bullish sentiment in the long term.", "metadata": {"topic": "macro_central_banks", "title": "Differences in Loans for Electric and Gasoline Vehicles at Expomóvil 2026", "original_title": "Expomóvil 2026 : estas son las diferencias en los préstamos para vehículos eléctricos y de combustión", "publish_date": "2026-04-18T22:02:16Z", "publish_timestamp": 1776549736, "source": "elfinancierocr.com", "url": "https://www.elfinancierocr.com/finanzas/expomovil-2026-estas-son-las-diferencias-en-los/PNOTGD3HG5HRFIHR7QT63MQ5PU/story/", "entities": ["Banco Nacional", "Banco Popular y de Desarrollo Comunal", "Banco de Costa Rica"], "impacted_assets": ["Equities", "Gold", "USD"], "volatility_implication": "Neutral", "llm_tone_score": 2}} +{"id": "b6a38d85-dd90-5d74-93c2-d211aad95950", "text": "Pakistan Repays $2 Billion Debt to UAE, Reduces Dependence on Gulf Nation. Pakistan has repaid a $2 billion debt to the UAE, reducing its dependence on the Gulf nation. The repayment was facilitated by taking a new loan from Saudi Arabia. This development is unlikely to have a significant impact on gold or silver prices, but it may contribute to a neutral tone in the market.", "metadata": {"topic": "macro_central_banks", "title": "Pakistan Repays $2 Billion Debt to UAE, Reduces Dependence on Gulf Nation", "original_title": "Pakistan returns $2 billion more to UAE", "publish_date": "2026-04-18T22:02:16Z", "publish_timestamp": 1776549736, "source": "tribune.com.pk", "url": "https://tribune.com.pk/story/2603481/pakistan-returns-2-billion-more-to-uae", "entities": ["Pakistan", "United Arab Emirates (UAE)", "Saudi Arabia", "International Monetary Fund (IMF)", "China", "Standard Chartered"], "impacted_assets": ["Equities", "Gold", "USD"], "volatility_implication": "Neutral", "llm_tone_score": 1}} diff --git a/Data/3_Gold_Semantic/News_Qdrant/2026-04-18/qdrant_macro_geopolitics_risk_processed.jsonl b/Data/3_Gold_Semantic/News_Qdrant/2026-04-18/qdrant_macro_geopolitics_risk_processed.jsonl new file mode 100644 index 0000000..8227c0e --- /dev/null +++ b/Data/3_Gold_Semantic/News_Qdrant/2026-04-18/qdrant_macro_geopolitics_risk_processed.jsonl @@ -0,0 +1,5 @@ +{"id": "b7cc5e15-1274-5f83-ba2a-f1bcf9cf0640", "text": "Israeli Actor Eli Finiush's Comments Spark Controversy and Outrage. Israeli actor Eli Finiush's comments praising the Israeli military and government have sparked widespread outrage and controversy. The article suggests that Finiush's words are not only divisive but also perpetuate a toxic atmosphere in Israel. The macro transmission mechanism is likely to be negative for Gold/Silver prices, as increased market volatility and uncertainty may lead to safe-haven buying.", "metadata": {"topic": "macro_geopolitics_risk", "title": "Israeli Actor Eli Finiush's Comments Spark Controversy and Outrage", "original_title": "עמית סגל מגיב לסערה ועוקץ : זה פשע חמור , אין התיישנות ", "publish_date": "2026-04-18T22:03:55Z", "publish_timestamp": 1776549835, "source": "srugim.co.il", "url": "https://www.srugim.co.il/1302343-%D7%A2%D7%9E%D7%99%D7%AA-%D7%A1%D7%92%D7%9C-%D7%9E%D7%92%D7%99%D7%91-%D7%9C%D7%A1%D7%A2%D7%A8%D7%94-%D7%95%D7%A2%D7%95%D7%A7%D7%A5-%D7%A4%D7%A9%D7%A2-%D7%97%D7%9E%D7%95%D7%A8", "entities": ["Eli Finiush", "Israel", "Iran", "Netanyahu"], "impacted_assets": ["Equities", "Gold", "USD"], "volatility_implication": "Increase", "llm_tone_score": -2}} +{"id": "1be0afb1-8fe5-5c42-b34d-450563b6392b", "text": "Pentagon Says Ukraine Support in Current Form Not Sustainable. The Pentagon's statement suggests that the current form of Ukraine support is not sustainable. This implies a potential decrease in military aid and a shift in responsibility to European allies. As a result, this news may lead to a decrease in market fear/VIX, which could negatively impact gold prices.\n\nThe macro transmission mechanism is as follows: The Pentagon's statement indicates a potential reduction in military aid to Ukraine, which could lead to a decrease in global uncertainty and market fear. This, in turn, may cause investors to become less risk-averse, leading to a decrease in the demand for safe-haven assets like gold. Additionally, the shift in responsibility to European allies may lead to a strengthening of the USD, further pressuring gold prices.", "metadata": {"topic": "macro_geopolitics_risk", "title": "Pentagon Says Ukraine Support in Current Form Not Sustainable", "original_title": "A Pentagon szerint Ukrajna támogatása ebben a formában nem biztosítható", "publish_date": "2026-04-18T22:03:55Z", "publish_timestamp": 1776549835, "source": "magyarnemzet.hu", "url": "https://magyarnemzet.hu/kulfold/2026/04/pentagon-szerint-ukrajna-tamogatasa-nem-biztosithato", "entities": ["Elbridge Colby", "Pentagon", "Ukraine", "Europe", "Donald Trump"], "impacted_assets": ["Gold", "USD"], "volatility_implication": "Decrease", "llm_tone_score": -2}} +{"id": "9f5b7285-3b76-5ba9-8a7b-c65e921f61d2", "text": "Matteo Salvini and European Patriots Rally in Milan's Duomo Square. The rally by European Patriots and Italian politician Matteo Salvini in Milan's Duomo Square highlights growing anti-EU sentiment. Salvini criticized the EU's response to the energy crisis and lockdown measures, echoing concerns about economic sovereignty. This event may increase market fear/VIX as it reinforces the narrative of a weakening EU and potentially boosts gold and silver prices.\n\nNote: The tone score is +2 because while the event does not directly impact monetary policy or inflation, it contributes to a broader narrative of anti-EU sentiment, which can be bullish for precious metals.", "metadata": {"topic": "macro_geopolitics_risk", "title": "Matteo Salvini and European Patriots Rally in Milan's Duomo Square", "original_title": "Salvini e i patrioti in piazza I leader europei sul palco del Duomo", "publish_date": "2026-04-18T22:03:55Z", "publish_timestamp": 1776549835, "source": "zazoom.it", "url": "https://www.zazoom.it/2026-04-18/salvini-e-i-patrioti-in-piazza-i-leader-europei-sul-palco-del-duomo/19027651/", "entities": ["Matteo Salvini", "European Patriots", "Ursula von der Leyen"], "impacted_assets": ["Gold", "Silver", "EURUSD"], "volatility_implication": "Increase", "llm_tone_score": 2}} +{"id": "d6a9d874-6f1d-5116-9a87-d1cc9b05b2ec", "text": "Man kills five people in shooting spree in Kiev, Ukraine. A shooting spree in Kiev, Ukraine resulted in the death of at least five people and injured 10 others. The incident has sparked concerns about potential instability in the region, which may lead to increased demand for safe-haven assets like gold and a strengthening of the USD. The macro transmission mechanism is through increased market fear and uncertainty, driving investors towards perceived safer assets.\n\nNote: The tone score is bearish due to the potential increase in market fear and uncertainty following this violent incident, which may drive investors away from riskier assets and towards safe-haven assets like gold.", "metadata": {"topic": "macro_geopolitics_risk", "title": "Man kills five people in shooting spree in Kiev, Ukraine", "original_title": "Ukraine . Un homme tue cinq personnes lors dune fusillade", "publish_date": "2026-04-18T22:03:55Z", "publish_timestamp": 1776549835, "source": "laseyne.maville.com", "url": "https://laseyne.maville.com/actu/actudet_-ukraine.-un-homme-tue-cinq-personnes-lors-d-une-fusillade-_fil-7285733_actu.Htm", "entities": ["Volodymyr Zelensky", "Igor Klymenko", "Rouslan Kravtchenko"], "impacted_assets": ["Gold", "USD"], "volatility_implication": "Increase", "llm_tone_score": -2}} +{"id": "0c3bb672-7622-59eb-8967-5fe63c9de109", "text": "Unexpected US Decision on Russia Sanctions. The unexpected US decision to ease sanctions on Russian oil has been met with disappointment from EU officials. Despite earlier predictions of increased pressure on Russia, the move is seen as a likely outcome by security expert Mark Episcopos. The relaxation of sanctions may lead to increased market volatility and potentially impact gold prices, while oil prices may stabilize.", "metadata": {"topic": "macro_geopolitics_risk", "title": "Unexpected US Decision on Russia Sanctions", "original_title": "На Западе сделали неожиданное заявление о решении США по России", "publish_date": "2026-04-18T22:03:55Z", "publish_timestamp": 1776549835, "source": "lenta.ru", "url": "https://lenta.ru/news/2026/04/19/na-zapade-sdelali-neozhidannoe-zayavlenie-o-reshenii-ssha-po-rossii/", "entities": ["Mark Episcopos", "European Union (EU)", "United States", "Russian Federation", "Kirill Dmitriev"], "impacted_assets": ["Gold", "Oil", "USD"], "volatility_implication": "Neutral", "llm_tone_score": 0}} diff --git a/Data/3_Gold_Semantic/News_Qdrant/2026-04-19/qdrant_asset_metals_derivatives_processed.jsonl b/Data/3_Gold_Semantic/News_Qdrant/2026-04-19/qdrant_asset_metals_derivatives_processed.jsonl new file mode 100644 index 0000000..7f85281 --- /dev/null +++ b/Data/3_Gold_Semantic/News_Qdrant/2026-04-19/qdrant_asset_metals_derivatives_processed.jsonl @@ -0,0 +1,8 @@ +{"id": "452e0e09-ced0-5a21-9377-ecd1b4a40858", "text": "Spanish Cyclist Paula Blasi Makes History by Winning Amstel Gold Race. Spanish cyclist Paula Blasi made history by becoming the first Spanish woman to win a UCI Women's World Tour event. Her victory in the Amstel Gold Race is a significant achievement for women's cycling in Spain.", "metadata": {"topic": "asset_metals_derivatives", "title": "Spanish Cyclist Paula Blasi Makes History by Winning Amstel Gold Race", "original_title": "CICLISMO FEMENINO | La barcelonesa Paula Blasi gana la Amstel Gold Race y hace historia en el ciclismo español", "publish_date": "2026-04-19T16:33:14Z", "publish_timestamp": 1776616394, "source": "laopiniondezamora.es", "url": "https://www.laopiniondezamora.es/deportes/2026/04/19/barcelonesa-paula-blasi-gana-amstel-gold-race-129279564.html", "entities": ["Paula Blasi", "Mavi García", "Dori Ruano", "Joane Somarriba"], "impacted_assets": [], "volatility_implication": "Neutral", "llm_tone_score": 0}} +{"id": "6039a0a7-64c7-545e-9aad-55ac86f3ae4a", "text": "A Rare Koenigsegg Jesko Absolut Spotted in an Amsterdam Parking Garage. A rare Koenigsegg Jesko Absolut was spotted in an Amsterdam parking garage, showcasing its unique features and luxurious options. The car's owner, Zach Lewis, has a collection of high-end vehicles, including Ferraris and Lamborghinis. This event does not have any direct impact on the macro-financial landscape or the gold/silver market.\n\nNote: As per the critical instructions, I did not translate the original title as it is already in English. The tone score is neutral since there are no significant macro-financial implications from this article.", "metadata": {"topic": "asset_metals_derivatives", "title": "A Rare Koenigsegg Jesko Absolut Spotted in an Amsterdam Parking Garage", "original_title": "Deze Koenigsegg kan een Amsterdamse parkeergarage wél betalen", "publish_date": "2026-04-19T16:33:14Z", "publish_timestamp": 1776616394, "source": "autoblog.nl", "url": "https://www.autoblog.nl:443/nieuws/deze-koenigsegg-kan-een-amsterdamse-parkeergarage-w-l-betalen", "entities": ["Zach Lewis", "Koenigsegg Jesko Absolut", "Ferrari 488 Pista", "Mercedes 300 SL", "Lamborghini 400GT", "Countach 25th Anniversary", "Aventador", "Ferrari 365 GTC/4"], "impacted_assets": [], "volatility_implication": "Neutral", "llm_tone_score": 0}} +{"id": "d9f5cba0-8a4c-52e9-a49b-a198bb04cec2", "text": "Home Wrapping Techniques for Lymphatic Drainage and Skin Toning. The article discusses the benefits of home wrapping techniques for lymphatic drainage and skin toning. Dermatologist Ilya Rudnev shares his expertise on how to perform these procedures correctly, highlighting the importance of regularity and proper preparation. The article also provides recipes for homemade wraps using natural ingredients like coffee, ginger, and menthol.\n\nNote: As this article is not related to macro-financial news or events, it does not have a direct impact on Gold/Silver prices.", "metadata": {"topic": "asset_metals_derivatives", "title": "Home Wrapping Techniques for Lymphatic Drainage and Skin Toning", "original_title": "Дерматокосметолог Илья Руднев о правилах проведения домашних обертываний для лимфодренажа", "publish_date": "2026-04-19T16:33:14Z", "publish_timestamp": 1776616394, "source": "pravda.ru", "url": "https://www.pravda.ru/beauty/2345819-domashnie-obertyvaniya-uhod/", "entities": ["Ilya Rudnev", "Ksenia Anisimova"], "impacted_assets": [], "volatility_implication": "Neutral", "llm_tone_score": 0}} +{"id": "bb29d2c8-352e-5102-9f4e-930b3cbb8582", "text": "Colorado farmers scale back crops amid drought, tariffs, and war. A severe drought in Colorado is forcing farmers to scale back production, change crop priorities, and question their long-term survival. Tariffs and war-related supply chain disruptions are exacerbating the issue, leading to increased costs and uncertainty for agricultural labor. The impact on local food production will likely be felt by grocery shoppers.\n\nThe tone score of -3 reflects the bearish sentiment due to the combination of drought, tariffs, and war-related challenges, which could lead to decreased gold prices as investors seek safer assets. The decrease in volatility implication suggests that market fear may subside temporarily as investors become more risk-averse.", "metadata": {"topic": "asset_metals_derivatives", "title": "Colorado farmers scale back crops amid drought, tariffs, and war", "original_title": "Colorado farmers scale back crops amid drought , tariffs and war", "publish_date": "2026-04-19T16:33:14Z", "publish_timestamp": 1776616394, "source": "denverpost.com", "url": "https://www.denverpost.com/2026/04/19/colorado-farms-crops-drought-water/", "entities": ["Praxie Vigil", "Brian Crites", "Bruce Talbott", "Jared Polis"], "impacted_assets": ["Equities", "Gold", "USD"], "volatility_implication": "Decrease", "llm_tone_score": -3}} +{"id": "c1bff1ec-ecc9-5c70-9f73-9f8e339b864e", "text": "BYDFi Marks 6th Anniversary with Month-Long Celebration, Built for Reliability. BYDFi, a global crypto trading platform, is celebrating its 6th anniversary with a month-long celebration. The company has expanded its product offerings, strengthened user safeguards, and extended access across both centralized and on-chain trading. This event does not have a significant impact on the macroeconomic environment or gold/silver prices, hence a neutral tone score.", "metadata": {"topic": "asset_metals_derivatives", "title": "BYDFi Marks 6th Anniversary with Month-Long Celebration, Built for Reliability", "original_title": "BYDFi Marks 6th Anniversary with Month - Long Celebration , Built for Reliability", "publish_date": "2026-04-19T16:33:14Z", "publish_timestamp": 1776616394, "source": "newsonjapan.com", "url": "http://www.newsonjapan.com/article/148967.php", "entities": ["BYDFi", "Newcastle United", "TradingView"], "impacted_assets": ["Cryptocurrencies", "Equities", "Gold", "Silver"], "volatility_implication": "Neutral", "llm_tone_score": 0}} +{"id": "957deb23-6823-5c84-8ff6-9a3fe5bc3749", "text": "Deportes Tolima Confirms Quarterfinal Spot in Liga BetPlay I of 2026, Cali and Fortaleza Maintain Options. The Liga BetPlay I of 2026 has seen Deportes Tolima confirm its quarterfinal spot after defeating Deportivo Pereira. Meanwhile, Deportivo Cali and Fortaleza maintain their options for qualification. This event does not have a direct impact on the macro-financial landscape or the gold/silver markets.\n\nNote: As this article is about a sports tournament, it has no relevance to the financial market or the trading desk's focus on Gold/Silver Options.", "metadata": {"topic": "asset_metals_derivatives", "title": "Deportes Tolima Confirms Quarterfinal Spot in Liga BetPlay I of 2026, Cali and Fortaleza Maintain Options", "original_title": "Tabla de posiciones de la Liga BetPlay : Tolima clasifica , Cali cede y Fortaleza mantiene opciones", "publish_date": "2026-04-19T16:33:14Z", "publish_timestamp": 1776616394, "source": "vanguardia.com", "url": "https://www.vanguardia.com/deportes/futbol/2026/04/19/tabla-de-posiciones-de-la-liga-betplay-tolima-clasifica-cali-cede-y-fortaleza-mantiene-opciones/", "entities": ["Deportes Tolima", "Deportivo Pereira", "Deportivo Cali", "Fortaleza", "Atlético Nacional", "Deportivo Pasto", "Jaguares"], "impacted_assets": [], "volatility_implication": "Neutral", "llm_tone_score": 0}} +{"id": "90a69068-ae0b-5fce-b4e0-4a7deb4d153c", "text": "German Startup Nevermined Produces Lab-Grown Diamonds in Essen, Germany. Nevermined, a German startup, produces lab-grown diamonds in Essen using the chemical vapor deposition (CVD) process. The company emphasizes transparency, conflict-free, and sustainable practices. While lab-grown diamonds are optically, chemically, and physically identical to mined diamonds, their production requires significant energy consumption. This development may not have a direct impact on gold or silver prices but could influence the jewelry market and consumer preferences.\n\nNote: As this article is primarily focused on the startup's business model and practices, it does not have a significant macro-financial impact. The tone score is neutral as there are no clear directional macro drivers mentioned in the article.", "metadata": {"topic": "asset_metals_derivatives", "title": "German Startup Nevermined Produces Lab-Grown Diamonds in Essen, Germany", "original_title": "Diamanten - Labor : Hier wachsen Einkaräter in 2 Wochen – wie natürlich sind sie ? ", "publish_date": "2026-04-19T16:33:14Z", "publish_timestamp": 1776616394, "source": "morgenpost.de", "url": "https://www.morgenpost.de/wirtschaft/article411610677/nevermined-setzt-auf-labordiamanten-der-markt-ringt-um-bedeutung-und-preis.html", "entities": ["Christine Marhofer", "Dennis Oing", "Joachim Dünkelmann", "Bundesverbands der Juweliere", "Schmuck- und Uhrenfachgeschäfte"], "impacted_assets": ["Equities", "Gold", "USD"], "volatility_implication": "Neutral", "llm_tone_score": 0}} +{"id": "a9b35864-e4a9-560c-9f5b-1f1fbb0174a4", "text": "North Korea Launches Multiple Ballistic Missiles into Offshore Waters. The launch of multiple ballistic missiles by North Korea has heightened tensions in the region and increased market fear. This event is likely to have a negative impact on gold prices as investors seek safe-haven assets amid rising uncertainty. The strengthening of the US dollar may also be a consequence, as investors flock to the currency for its perceived safety.\n\nThe macro transmission mechanism at play here is the increase in global risk aversion and market fear, which can lead to increased demand for safe-haven assets like gold and a stronger USD.", "metadata": {"topic": "asset_metals_derivatives", "title": "North Korea Launches Multiple Ballistic Missiles into Offshore Waters", "original_title": "North Korea Launches Multiple Ballistic Missiles Into Offshore Waters - Jowhar News Leader", "publish_date": "2026-04-19T16:33:14Z", "publish_timestamp": 1776616394, "source": "jowhar.com", "url": "https://jowhar.com/north-korea-launches-multiple-ballistic-missiles-into-offshore-waters/", "entities": ["North Korea", "South Korea", "United States"], "impacted_assets": ["Gold", "USD"], "volatility_implication": "Increase", "llm_tone_score": -2}} diff --git a/Data/3_Gold_Semantic/News_Qdrant/2026-04-19/qdrant_macro_central_banks_processed.jsonl b/Data/3_Gold_Semantic/News_Qdrant/2026-04-19/qdrant_macro_central_banks_processed.jsonl new file mode 100644 index 0000000..a46fc4c --- /dev/null +++ b/Data/3_Gold_Semantic/News_Qdrant/2026-04-19/qdrant_macro_central_banks_processed.jsonl @@ -0,0 +1,8 @@ +{"id": "f62d8939-62c2-5b5b-a122-234d93cf4401", "text": "Dalal Street Week Ahead: Key Factors to Watch for Indian Equity Markets. The Indian equity market is expected to remain positive in the coming week, driven by progress in peace talks, crude oil prices stabilizing below $100, and Q4 earnings. The IMF has raised India's FY27 GDP growth forecast to 6.5%, highlighting the country's macroeconomic resilience. However, global uncertainties may lead to selective market action.", "metadata": {"topic": "macro_central_banks", "title": "Dalal Street Week Ahead: Key Factors to Watch for Indian Equity Markets", "original_title": "Dalal Street Week Ahead : Strait of Hormuz , Iran peace talks progress , Q4 earnings , oil prices , FII flow among 10 key factors to watch", "publish_date": "2026-04-19T16:29:12Z", "publish_timestamp": 1776616152, "source": "moneycontrol.com", "url": "https://www.moneycontrol.com/news/business/markets/dalal-street-week-ahead-strait-of-hormuz-iran-peace-talks-progress-q4-earnings-oil-prices-fii-flow-among-10-key-factors-to-watch-13893301.html", "entities": ["IMF", "India", "Iran", "US"], "impacted_assets": ["Equities (Indian)", "Crude Oil", "USD"], "volatility_implication": "Neutral", "llm_tone_score": 2}} +{"id": "bfd107fa-856a-5f55-b1d2-93b0fc7709ad", "text": "Thousands of Executives Aren't Seeing AI Productivity Boom, Reminding Economists of IT-Era Paradox. The article highlights the disconnect between AI adoption and productivity gains in the workplace. Despite widespread implementation of AI by executives, there is no corresponding increase in productivity or employment growth. This echoes Solow's \"productivity paradox\" from the IT era, where technological advancements did not lead to expected productivity boosts. The lack of tangible benefits from AI investments may lead to decreased expectations and potentially impact market sentiment.\n\nNote: As the tone score is 0 (Neutral), it does not have a significant impact on Gold/Silver prices.", "metadata": {"topic": "macro_central_banks", "title": "Thousands of Executives Aren't Seeing AI Productivity Boom, Reminding Economists of IT-Era Paradox", "original_title": "Thousands of executives arent seeing AI productivity boom , reminding economists of IT - era paradox", "publish_date": "2026-04-19T16:29:12Z", "publish_timestamp": 1776616152, "source": "fortune.com", "url": "https://fortune.com/article/why-do-thousands-of-ceos-believe-ai-not-having-impact-productivity-employment-study/", "entities": ["Robert Solow", "Torsten Slok", "Daron Acemoglu"], "impacted_assets": ["Equities", "Gold", "USD"], "volatility_implication": "Neutral", "llm_tone_score": 0}} +{"id": "450b03ea-4385-589d-b012-bb8f13578405", "text": "Allu Arjun's Unconventional Salary Structure in Indian Cinema. Allu Arjun, a prominent Indian actor, has adopted an unconventional revenue-sharing model for his films. He charges 30 paise per rupee of the movie's revenue, which reduces pressure on producers and lowers overall budgets. This approach has contributed to his significant earnings from recent films like Pushpa: The Rise and Pushpa 2: The Rule.", "metadata": {"topic": "macro_central_banks", "title": "Allu Arjun's Unconventional Salary Structure in Indian Cinema", "original_title": "Not a fixed salary : The 30 paise per rupee deal that makes Allu Arjun one of India highest - paid actors | Telugu News", "publish_date": "2026-04-19T16:29:12Z", "publish_timestamp": 1776616152, "source": "indianexpress.com", "url": "https://indianexpress.com/article/entertainment/telugu/allu-arjun-salary-revenue-sharing-model-explained-by-g-dhananjheyan-10645201/", "entities": ["Allu Arjun", "G Dhananjheyan", "Mythri Movie Makers", "Sukumar Writings", "Sun Pictures"], "impacted_assets": ["Equities", "Gold"], "volatility_implication": "Neutral", "llm_tone_score": 0}} +{"id": "6e7527fd-2f18-5e6f-9832-f055ed0fd6de", "text": "Security Federal Share Price Crosses Above 200-Day Moving Average. Security Federal's share price has crossed above its 200-day moving average, indicating a potential upward trend. The company operates as a bank holding company and provides various banking products and services. This event does not have any significant macro-financial implications for the gold/silver market.", "metadata": {"topic": "macro_central_banks", "title": "Security Federal Share Price Crosses Above 200-Day Moving Average", "original_title": "Security Federal ( OTCMKTS : SFDL ) Share Price Crosses Above 200 - Day Moving Average – Here What Happened", "publish_date": "2026-04-19T16:29:12Z", "publish_timestamp": 1776616152, "source": "themarketsdaily.com", "url": "https://www.themarketsdaily.com/2026/04/19/security-federal-otcmktssfdl-share-price-crosses-above-200-day-moving-average-heres-what-happened.html", "entities": ["Security Federal Corp.", "SFDL", "OTCMKTS"], "impacted_assets": [], "volatility_implication": "Neutral", "llm_tone_score": 0}} +{"id": "63de4f7a-bbde-5344-bc45-dc5fac30c13a", "text": "Argentina's Economy Minister Predicts 18 Best Months Ahead Amid Inflation Concerns and Credit Negotiations. Argentine Economy Minister Luis Caputo predicts a period of 18 best months ahead, citing a slowdown in inflation and an expected increase in economic growth. This comes as the country negotiates with international organizations for a credit line exceeding $3 billion. Meanwhile, concerns about microeconomic issues, such as rising mora and stagnant salaries, persist. The macro transmission mechanism is driven by the government's efforts to stabilize the economy and attract foreign investment.\n\nNote: The tone score of +2 reflects the bullish sentiment expressed by Caputo regarding Argentina's economic prospects, which could positively impact gold and silver prices. However, the overall market volatility implication remains neutral due to the mixed signals from macroeconomic indicators.", "metadata": {"topic": "macro_central_banks", "title": "Argentina's Economy Minister Predicts 18 Best Months Ahead Amid Inflation Concerns and Credit Negotiations", "original_title": "Los 18 mejores meses y una fábrica cerrada que no cierra", "publish_date": "2026-04-19T16:29:12Z", "publish_timestamp": 1776616152, "source": "clarin.com", "url": "https://www.clarin.com/economia/18-mejores-meses-fabrica-cerrada-cierra_0_iEYGHy9mnA.html", "entities": ["Luis Caputo", "Argentina", "Fondo Monetario Internacional (FMI)", "Banco Mundial"], "impacted_assets": ["Equities", "Gold", "USD"], "volatility_implication": "Neutral", "llm_tone_score": 2}} +{"id": "4ddc5d10-d5ac-5074-bceb-cc42ec6204cc", "text": "Underconsumption Becomes a Trend as Americans Cut Back on Spending Amid High Inflation and Cost-of-Living Crisis. The article highlights the growing trend of underconsumption in America, where individuals are intentionally buying less and making items last as long as possible due to high inflation and a persistent cost-of-living crisis. This movement is driven by concerns about waste generation, environmental sustainability, and the impact of consumerism on society. While this trend may not have a direct impact on Gold/Silver prices, it could indirectly influence consumer spending habits, which might affect broader market sentiment.", "metadata": {"topic": "macro_central_banks", "title": "Underconsumption Becomes a Trend as Americans Cut Back on Spending Amid High Inflation and Cost-of-Living Crisis", "original_title": "How underconsumption became the word of the year", "publish_date": "2026-04-19T16:29:12Z", "publish_timestamp": 1776616152, "source": "independent.co.uk", "url": "https://www.independent.co.uk/us/money/underconsumption-tips-consumer-spending-b2956834.html", "entities": ["Resume Now", "Census Bureau", "Environmental Protection Agency", "Ladder", "Kuru"], "impacted_assets": [], "volatility_implication": "Neutral", "llm_tone_score": 0}} +{"id": "5fb38d59-0ede-5558-8706-ace6795958d0", "text": "Meeting between Governor of the National Bank and Deputy General Director of the IMF: Strong Support for Central Banks' Independence. The meeting between the Governor of the National Bank and the Deputy General Director of the IMF emphasizes the importance of central banks' independence in maintaining macroeconomic stability. This highlights the need for careful monitoring of risks and timely policy responses to ensure price stability. The discussion also underscores the significance of stable institutional frameworks, particularly during periods of increased external shocks and rapid changes in the global environment.", "metadata": {"topic": "macro_central_banks", "title": "Meeting between Governor of the National Bank and Deputy General Director of the IMF: Strong Support for Central Banks' Independence", "original_title": "Славески на средба со заменик - генералниот директор на ММФ Бо Ли : Потврдена силна поддршка за независноста на централните банки", "publish_date": "2026-04-19T16:29:12Z", "publish_timestamp": 1776616152, "source": "sitel.com.mk", "url": "https://sitel.com.mk/slaveski-na-sredba-so-zamenik-generalniot-direktor-na-mmf-bo-li-potvrdena-silna-poddrshka-za", "entities": ["Trajko Slaveski (Governor of the National Bank)", "Bo Li (Deputy General Director of the IMF)", "Dimitrievska-Kochoska (Minister of Finance)"], "impacted_assets": ["Equities", "Gold", "USD"], "volatility_implication": "Neutral", "llm_tone_score": 2}} +{"id": "f073686f-09f8-50a3-afb8-08b291d57cec", "text": "Brazilian Minister Wellington Dias Expects Easier Presidential Election in 2026 Compared to 2022. Brazilian Minister of Social Development and Hunger Combat Wellington Dias expects the 2026 presidential election to be less challenging than the 2022 election. He attributes this to the government's stronger political alliances and regional support. However, he also acknowledges communication challenges and the need for better public perception. The minister highlights positive social indicators, such as reduced poverty and job creation, but notes that these gains are being offset by high interest rates and endowment levels.\n\nThe macro transmission mechanism is that a more favorable political environment could lead to increased investor confidence, potentially benefiting gold and silver prices. However, the impact on USD is uncertain, as it depends on the overall market sentiment and the government's economic policies.", "metadata": {"topic": "macro_central_banks", "title": "Brazilian Minister Wellington Dias Expects Easier Presidential Election in 2026 Compared to 2022", "original_title": "Wellington Dias projeta eleies mais fáceis que em 2022 ", "publish_date": "2026-04-19T16:29:12Z", "publish_timestamp": 1776616152, "source": "brasil247.com", "url": "https://www.brasil247.com:443/brasil/wellington-dias-projeta-eleicoes-mais-faceis-que-em-2022-vvb9om4h", "entities": ["Wellington Dias", "Luiz Inácio Lula da Silva", "Rodrigo Pacheco", "Eduardo Paes", "Fernando Haddad", "Flávio Bolsonaro"], "impacted_assets": ["Equities", "Gold", "USD"], "volatility_implication": "Neutral", "llm_tone_score": 1}} diff --git a/Data/3_Gold_Semantic/News_Qdrant/2026-04-19/qdrant_macro_geopolitics_risk_processed.jsonl b/Data/3_Gold_Semantic/News_Qdrant/2026-04-19/qdrant_macro_geopolitics_risk_processed.jsonl new file mode 100644 index 0000000..c8ddc97 --- /dev/null +++ b/Data/3_Gold_Semantic/News_Qdrant/2026-04-19/qdrant_macro_geopolitics_risk_processed.jsonl @@ -0,0 +1,9 @@ +{"id": "6a4136c3-be37-53a8-82cd-c1f4a52c19e7", "text": "Ford-class aircraft carrier deployment breaks record, Iran opens Hormuz Strait to shipping. The deployment of the Ford-class aircraft carrier has broken a record, while Iran has opened the Hormuz Strait to shipping. This development may increase market fear and volatility, as it suggests a potential escalation in tensions between the US and Iran. The increased military presence in the region could lead to higher oil prices and a stronger USD, which may negatively impact gold prices.\n\nThe macro transmission mechanism is as follows: an increase in military tension and deployment in the Middle East can lead to higher oil prices, which can strengthen the USD and negatively impact gold prices. Additionally, the potential for conflict escalation can increase market fear and volatility, leading to increased demand for safe-haven assets like gold.", "metadata": {"topic": "macro_geopolitics_risk", "title": "Ford-class aircraft carrier deployment breaks record, Iran opens Hormuz Strait to shipping", "original_title": " 【 馬克時空 】 霍爾木茲開放 福特號創紀錄 | 伊斯蘭革命衛隊 | 胡塞武裝 | 美國反封鎖", "publish_date": "2026-04-19T16:31:50Z", "publish_timestamp": 1776616310, "source": "ntdtv.com", "url": "https://www.ntdtv.com/b5/2026/04/19/a104088187.html", "entities": ["United States", "Iran", "Islamic Revolutionary Guard Corps", "Houthis", "Hezbollah"], "impacted_assets": ["Gold", "Oil", "USD"], "volatility_implication": "Increase", "llm_tone_score": 2}} +{"id": "304f15a7-e4bf-5e2c-8d49-c8cd57a47cb7", "text": "Ukrainian Police Chief Resigns Amid Officer Abandonment During Shooting Incident in Kiev. The resignation of the Ukrainian Police Chief follows a shooting incident in Kiev where police officers abandoned their posts, leaving a child unattended. Six people were killed and 15 injured in the incident. This event may increase market fear and volatility, potentially benefiting safe-haven assets like gold and weighing on the US dollar.\n\nThe macro transmission mechanism is as follows: The incident highlights concerns about law and order in Ukraine, which could negatively impact investor sentiment and lead to increased demand for safe-haven assets like gold. Additionally, the incident may reinforce existing market fears about the stability of the Ukrainian government, further pressuring the US dollar.", "metadata": {"topic": "macro_geopolitics_risk", "title": "Ukrainian Police Chief Resigns Amid Officer Abandonment During Shooting Incident in Kiev", "original_title": "Начальник патрульной полиции Украины ушел с поста после побега правоохранителей", "publish_date": "2026-04-19T16:31:50Z", "publish_timestamp": 1776616310, "source": "vesti.ru", "url": "https://www.vesti.ru/ns/nachalnik-patrulnoj-policii-ukrainy-ushel-s-posta-posle-pobega-pravookhranitelej", "entities": ["Ukraine", "Kiev", "Ministry of Internal Affairs", "Dmitriy Vasilchenko"], "impacted_assets": ["Gold", "USD"], "volatility_implication": "Increase", "llm_tone_score": -1}} +{"id": "b3d4aed0-2acf-576f-9a0b-daeb26257050", "text": "Russian attacks kill at least 2 as Ukraine strikes a Russian drone factory. The ongoing conflict between Russia and Ukraine has escalated with reports of Russian attacks killing at least two people in Ukraine. In response, Ukraine struck a Russian drone factory, sparking a fire and damaging commercial infrastructure. This development increases market fear and volatility, potentially driving investors towards safe-haven assets like gold and the US dollar.\n\nThe macro transmission mechanism is as follows: The conflict between Russia and Ukraine has led to increased tensions and uncertainty, which can drive investors towards safe-haven assets like gold and the US dollar. The strikes on Russian targets may also lead to a strengthening of the USD, as investors seek refuge in the currency.", "metadata": {"topic": "macro_geopolitics_risk", "title": "Russian attacks kill at least 2 as Ukraine strikes a Russian drone factory", "original_title": "Russian attacks kill at least 2 as Ukraine strikes a Russian drone factory", "publish_date": "2026-04-19T16:31:50Z", "publish_timestamp": 1776616310, "source": "toronto.citynews.ca", "url": "https://toronto.citynews.ca/2026/04/19/russian-attacks-kill-at-least-2-as-ukraine-strikes-a-russian-drone-factory/", "entities": ["Russia", "Ukraine", "Volodymyr Zelenskyy", "Ihor Klymenko"], "impacted_assets": ["Gold", "USD"], "volatility_implication": "Increase", "llm_tone_score": -1}} +{"id": "37713572-6899-5268-996f-486c5c443b33", "text": "\"Year-Long Transformation: Robots Go from Wobbly Steps to Marathon Pace, Outpacing Humans\". The article highlights the rapid progress in robotics, with a robot named \"Flash\" setting a new record for completing a half-marathon in 50 minutes and 26 seconds, surpassing human records. This achievement is attributed to advancements in AI and robotics technology, which have led to increased investment and funding in the sector. However, the industry still faces challenges such as high data collection costs and the need for standardization. The article suggests that the key to success lies in balancing technological innovation with cost control.\n\nThe macro transmission mechanism at play here is the increasing investment in AI and robotics, which could lead to a surge in demand for these technologies, potentially driving up prices of related assets such as equities and gold. However, the neutral tone score reflects the lack of clear directional macro drivers, as the article primarily focuses on the technological advancements rather than any specific policy or economic developments that would impact the market.", "metadata": {"topic": "macro_geopolitics_risk", "title": "\"Year-Long Transformation: Robots Go from Wobbly Steps to Marathon Pace, Outpacing Humans\"", "original_title": "一年蜕变 : 人形机器人从 步履蹒跚 到马拉松赛道 碾压 人类 - 人工智能 - ITBear比尔科技", "publish_date": "2026-04-19T16:31:50Z", "publish_timestamp": 1776616310, "source": "itbear.com.cn", "url": "https://www.itbear.com.cn/html/2026-04/1287794.html", "entities": ["Beijing", "Honor Technology", "USTech", "Shangai City Data Science Key Laboratory"], "impacted_assets": ["Equities", "Gold", "USD"], "volatility_implication": "Neutral", "llm_tone_score": 2}} +{"id": "6196c727-bdcc-5c58-a403-1fda3b93a9d8", "text": "Russia and Ukraine, Night of Drones: Deaths in Chernihiv and Kherson. The ongoing conflict between Russia and Ukraine has escalated with a night of drone attacks, resulting in deaths and injuries on both sides. The Ukrainian military claims to have shot down 203 Russian drones, while Russia reports that 274 Ukrainian drones were destroyed. The tension is fueled by the US decision to extend sanctions relief for Russian oil imports, which Ukraine sees as supporting Moscow's war efforts. This development increases market fear and volatility, potentially benefiting safe-haven assets like gold.\n\nThe macro transmission mechanism at play here is the ongoing conflict between Russia and Ukraine, which continues to drive uncertainty and risk aversion in financial markets. The US decision to extend sanctions relief for Russian oil imports adds to the tension, as it may be seen as supporting Moscow's war efforts and potentially prolonging the conflict. This increases the likelihood of market volatility and a flight to safety, benefiting assets like gold.", "metadata": {"topic": "macro_geopolitics_risk", "title": "Russia and Ukraine, Night of Drones: Deaths in Chernihiv and Kherson", "original_title": "Russia e Ucraina , notte di droni : morti a Chernihiv e Kherson", "publish_date": "2026-04-19T16:31:50Z", "publish_timestamp": 1776616310, "source": "ottopagine.it", "url": "https://www.ottopagine.it/mondo/attualita/425025/russia-e-ucraina-notte-di-droni-morti-a-chernihiv-e-kherson.shtml", "entities": ["Russia", "Ukraine", "Volodymyr Zelensky", "Donald Trump"], "impacted_assets": ["Gold", "USD"], "volatility_implication": "Increase", "llm_tone_score": -2}} +{"id": "bb9cb9d1-0b73-58da-93b3-90c25a2e9f3c", "text": "US Negotiators Prepare for More Peace Talks with Iran Amid Threats from Trump. The ongoing conflict between the US and Iran continues to escalate, with President Trump threatening to take further action if negotiations fail. This rhetoric may lead to increased market fear and volatility, potentially benefiting safe-haven assets like gold and oil. The situation remains uncertain, but a potential breakthrough in peace talks could lead to a decrease in tensions and a subsequent decline in these assets.\n\nNote: The tone score is +2 because while the conflict is ongoing, President Trump's threats are not necessarily a guarantee of immediate action, which keeps the tone slightly bullish for gold and oil.", "metadata": {"topic": "macro_geopolitics_risk", "title": "US Negotiators Prepare for More Peace Talks with Iran Amid Threats from Trump", "original_title": "U . S . negotiators prepare for more peace talks as Trump repeats threats to Iran", "publish_date": "2026-04-19T16:31:50Z", "publish_timestamp": 1776616310, "source": "kunc.org", "url": "https://www.kunc.org/npr-news/2026-04-19/u-s-negotiators-prepare-for-more-peace-talks-as-trump-repeats-threats-to-iran", "entities": ["President Trump", "Vice President Vance", "Steve Witkoff", "Jared Kushner", "Mohammed Bagher Qalibaf"], "impacted_assets": ["Gold", "Oil", "USD"], "volatility_implication": "Increase", "llm_tone_score": 2}} +{"id": "634ae36a-4dfd-57ae-92a4-10a7fb993032", "text": "Pope Calls for Dialogue to End War in Middle East. The Pope's appeal for dialogue to end the war in the Middle East is a neutral macro event that does not have a direct impact on Gold/Silver prices. While the Pope's words may contribute to a sense of hope and stability, they do not alter the fundamental macroeconomic landscape or create new market drivers.", "metadata": {"topic": "macro_geopolitics_risk", "title": "Pope Calls for Dialogue to End War in Middle East", "original_title": "Pope calls for dialogue to end war in Middle East – Shafaqna English | International Shia News & Fatwas", "publish_date": "2026-04-19T16:31:50Z", "publish_timestamp": 1776616310, "source": "en.shafaqna.com", "url": "https://en.shafaqna.com/447164/pope-calls-for-dialogue-to-end-war-in-middle-east/", "entities": ["Pope Leo XIV", "Lebanon", "Middle East"], "impacted_assets": [], "volatility_implication": "Neutral", "llm_tone_score": 0}} +{"id": "25e31e71-77ed-5226-a021-4d1a5be728c6", "text": "Ukrainian Hydrometeorological Center Warns of Possible Ground Frost on April 20. The Ukrainian Hydrometeorological Center has issued a warning about possible ground frost on April 20 in certain regions of Ukraine. This weather forecast may have a neutral to slightly bullish impact on gold and silver prices, as it could lead to increased demand for safe-haven assets amid potential market volatility. The USD may also be affected, potentially strengthening if the event leads to increased risk aversion.", "metadata": {"topic": "macro_geopolitics_risk", "title": "Ukrainian Hydrometeorological Center Warns of Possible Ground Frost on April 20", "original_title": "Укргідрометцентр попередив про можливі заморозки на поверхні ґрунту 20 квітня", "publish_date": "2026-04-19T16:31:50Z", "publish_timestamp": 1776616310, "source": "mig.com.ua", "url": "https://mig.com.ua/ukrhidromettsentr-poperedyv-pro-mozhlyvi-zamorozky-na-poverkhni-gruntu-20-kvitnia/", "entities": ["Ukrainian Hydrometeorological Center", "Ukraine"], "impacted_assets": ["Gold", "Silver", "USD"], "volatility_implication": "Neutral", "llm_tone_score": 1}} +{"id": "b1b6304d-2c82-5afd-bd1b-f481e1e75573", "text": "Over 5% of job openings in Taiwan's Central Science Park offer salaries above NT$400,000; 27 companies release over 1,200 job vacancies.. The Central Science Park in Taiwan has seen significant growth, with 114-year revenue reaching NT$113 billion and a 9.29% year-over-year increase. To meet the growing demand for talent, the park's management bureau is actively recruiting and providing various services to job seekers. This event is bullish for gold prices as it indicates a strong economy and potential inflationary pressures.", "metadata": {"topic": "macro_geopolitics_risk", "title": "Over 5% of job openings in Taiwan's Central Science Park offer salaries above NT$400,000; 27 companies release over 1,200 job vacancies.", "original_title": "逾五成職缺起薪4萬元以上 中科27家廠商徵才釋出逾1200個職缺", "publish_date": "2026-04-19T16:31:50Z", "publish_timestamp": 1776616310, "source": "n.yam.com", "url": "https://n.yam.com/Article/20260419898137", "entities": ["中科管理局 (Taiwan's Central Science Park Management Bureau)", "臺中市政府勞工局 (Taichung City Government Labor Department)", "台積電 (Taiwan Semiconductor Manufacturing Company)", "美光 (Everlight Electronics Co.", "Ltd.)", "友達光電 (Largan Precision Co.", "Ltd.)", "矽品精密 (Siliconware Precision Industries Co.", "Ltd.)", "永勝光學 (Everbright Optoelectronics Technology Co.", "Ltd.)"], "impacted_assets": ["Equities", "Gold"], "volatility_implication": "Neutral", "llm_tone_score": 2}} diff --git a/Data/3_Gold_Semantic/News_Qdrant/2026-04-19/qdrant_macro_inflation_employment_processed.jsonl b/Data/3_Gold_Semantic/News_Qdrant/2026-04-19/qdrant_macro_inflation_employment_processed.jsonl new file mode 100644 index 0000000..e521994 --- /dev/null +++ b/Data/3_Gold_Semantic/News_Qdrant/2026-04-19/qdrant_macro_inflation_employment_processed.jsonl @@ -0,0 +1,9 @@ +{"id": "76147c8c-e7e3-5860-963c-01cfcdb405f5", "text": "Venezuela's INVELECAR Urges Swift Action to Eradicate Aftosa Fever. The Venezuelan Institute of Milk and Meat (INVELECAR) has issued a statement emphasizing the need for swift action to eradicate Aftosa fever in Venezuela. The institute highlights the importance of conducting a national census of livestock units and vaccination efforts to ensure food security and open up international markets. INVELECAR also notes that Venezuela is the only country in Latin America without official recognition as \"free from aftosa with vaccination\" by the World Organization for Animal Health (OMSA), limiting access to international markets.", "metadata": {"topic": "macro_inflation_employment", "title": "Venezuela's INVELECAR Urges Swift Action to Eradicate Aftosa Fever", "original_title": "INVELECAR exige acciones urgentes para erradicar la fiebre aftosa en Venezuela", "publish_date": "2026-04-19T16:30:01Z", "publish_timestamp": 1776616201, "source": "acn.com.ve", "url": "https://acn.com.ve/fiebre-aftosa-en-venezuela/", "entities": ["INVELECAR", "Ministerio de Agricultura Productiva y Tierras", "FUNVESSA", "FEDENAGA", "CONVECAR", "CONFAGAN", "PANAFTOSA", "Organización Mundial de Sanidad Animal (OMSA)", "COSALFA", "PHEFA"], "impacted_assets": [], "volatility_implication": "Neutral", "llm_tone_score": 0}} +{"id": "57507e3b-a4dc-5298-a0a2-25a83f5cd4b2", "text": "Trump's Approval Rating Falls to New Low, According to NBC News Survey. The decline in Trump's approval rating is likely to weigh on market sentiment, particularly for gold and equities. As the president's popularity falls, investors may become more risk-averse, driving demand for safe-haven assets like gold. The weakening of Trump's support also increases the likelihood of a divided government, which could lead to policy gridlock and further uncertainty.\n\nThe macro transmission mechanism is as follows: A decline in presidential approval ratings can lead to increased market volatility, as investors become more cautious and seek safer assets. This, in turn, can drive down equities and boost gold prices. Additionally, the potential for a divided government can create uncertainty around policy decisions, leading to further market volatility.", "metadata": {"topic": "macro_inflation_employment", "title": "Trump's Approval Rating Falls to New Low, According to NBC News Survey", "original_title": "Aprobación de Trump cae a su nivel más bajo , según encuesta – Telemundo Puerto Rico", "publish_date": "2026-04-19T16:30:01Z", "publish_timestamp": 1776616201, "source": "telemundopr.com", "url": "https://www.telemundopr.com/noticias/eeuu/aprobacion-trump-nivel-bajo-segundo-mandato-encuesta/2804256/", "entities": ["Donald Trump", "NBC News Decision Desk", "SurveyMonkey"], "impacted_assets": ["Equities", "Gold", "USD"], "volatility_implication": "Decrease", "llm_tone_score": -3}} +{"id": "340ddb7a-5e12-53bb-b301-4949ddea6331", "text": "Stubborn Inflation is the Root Cause of Sluggish Economy. The article highlights the persistence of high inflation in the UK, averaging 3% since 2010, which has hindered economic growth and competitiveness. The author attributes this to expensive land use, energy consumption, and capital deployment, leading to higher costs for businesses and households. This diagnosis suggests that addressing these upstream causes is crucial to reducing inflation and stimulating economic expansion.\n\nThe tone score of -2 reflects the bearish sentiment towards the UK economy due to persistent high inflation, which may lead to decreased investor confidence and potentially lower gold prices. The article's focus on the root causes of inflation rather than downstream solutions implies a more nuanced approach to addressing the issue, which could have a stabilizing effect on markets.", "metadata": {"topic": "macro_inflation_employment", "title": "Stubborn Inflation is the Root Cause of Sluggish Economy", "original_title": "Stubborn inflation is the root cause of our sluggish economy", "publish_date": "2026-04-19T16:30:01Z", "publish_timestamp": 1776616201, "source": "thetimes.com", "url": "https://www.thetimes.com/business/economics/article/stubborn-inflation-root-cause-uk-sluggish-economy-dslhwqzbq", "entities": ["UK Government", "Labour Party", "Conservative Party", "G7 countries"], "impacted_assets": ["Equities", "Gold", "Oil", "GBP"], "volatility_implication": "Decrease", "llm_tone_score": -2}} +{"id": "05a035bd-09ec-5a31-be26-686f7eb596df", "text": "Morocco: Eid Sacrifice Goat Prices to Increase. The price of goats in Morocco is expected to increase ahead of the Eid al-Adha festival due to a complex balance between rising diesel prices and improved climate conditions. The expert notes that this situation is close to stability, but regional disparities persist due to transportation costs, farm availability, and distance from production to consumption areas. The market reflects broader economic and social dynamics, with energy costs impacting the entire value chain and agriculture helping to mitigate inflation and support purchasing power in both urban and rural areas.\n\nNote: As there are no explicit macro-financial implications or directional drivers for Gold/Silver prices, I assigned a Neutral tone score of 0.", "metadata": {"topic": "macro_inflation_employment", "title": "Morocco: Eid Sacrifice Goat Prices to Increase", "original_title": "Maroc : le mouton de lAïd sera plus cher", "publish_date": "2026-04-19T16:30:01Z", "publish_timestamp": 1776616201, "source": "bladi.net", "url": "https://www.bladi.net/maroc-mouton-aid-sera-cher,120772.html", "entities": ["Amine Sami", "Goud", "Bladi.net"], "impacted_assets": ["Livestock", "Agricultural Products", "Energy (Diesel)", "USD"], "volatility_implication": "Neutral", "llm_tone_score": 0}} +{"id": "2e83108c-4131-54ab-b19c-f2d4f8f95d19", "text": "Trump's Approval Rating Hits New Low in Second Term, Only 37% Approve His Performance. A recent NBC survey shows a significant decline in President Trump's approval rating, with only 37% of Americans approving his performance. This is the lowest level since his second term began. The majority of respondents disapprove of Trump's handling of inflation and war, which could lead to increased market volatility and potentially weigh on gold and silver prices.", "metadata": {"topic": "macro_inflation_employment", "title": "Trump's Approval Rating Hits New Low in Second Term, Only 37% Approve His Performance", "original_title": "Sondaggio , solo 37 % degli americani promuove Trump , minimo in secondo mandato - Ultima ora", "publish_date": "2026-04-19T16:30:01Z", "publish_timestamp": 1776616201, "source": "ansa.it", "url": "https://www.ansa.it/sito/notizie/topnews/2026/04/19/sondaggio-solo-37-degli-americani-promuove-trump-minimo-in-secondo-mandato_85712e13-7341-4322-84a9-fe9a864f7e10.html", "entities": ["Donald Trump", "NBC", "United States"], "impacted_assets": ["Equities", "Gold", "USD"], "volatility_implication": "Increase", "llm_tone_score": -4}} +{"id": "ed746705-ad47-5aa4-b94a-4350d806b885", "text": "Argentine Government Official's Presence at Congress to be a \"Show\" Amidst Scandal. The presence of Argentine Government Official Manuel Adorni at Congress is expected to be a \"show\" amidst scandal surrounding his alleged enrichment. This event may not have a direct impact on Gold/Silver prices, but the tone of the article suggests that it could contribute to market uncertainty and potentially affect asset prices indirectly.", "metadata": {"topic": "macro_inflation_employment", "title": "Argentine Government Official's Presence at Congress to be a \"Show\" Amidst Scandal", "original_title": "Cristian Ritondo , sobre la presencia de Manuel Adorni en el Congreso : Va a ser un show y eso no ayuda para nada ", "publish_date": "2026-04-19T16:30:01Z", "publish_timestamp": 1776616201, "source": "clarin.com", "url": "https://www.clarin.com/politica/cristian-ritondo-presencia-manuel-adorni-congreso-va-show-ayuda_0_cae1nCm1KV.html", "entities": ["Cristian Ritondo", "Manuel Adorni", "Javier Milei", "Martín Menem", "Miguel Ángel Pichetto", "Nicolás Massot", "Emilio Monzó", "Marcos Galperín", "Jorge Brito"], "impacted_assets": [], "volatility_implication": "Neutral", "llm_tone_score": 0}} +{"id": "fedaabac-a51f-5333-b433-fdd1e6dc87bc", "text": "Calabrian Families Spend 1.76 Billion Euros on Durable Goods in 2025; Used Goods Market Supports Local Economy. The article reports that Calabrian families spent approximately 1.76 billion euros on durable goods in 2025, with a slight decrease of 0.1% compared to the previous year. The used goods market played a crucial role in supporting the local economy, which experienced a moderate contraction. This data suggests that Calabria's consumer spending habits are relatively stable and resilient, despite the overall economic slowdown.\n\nNote: As there is no explicit macro-financial or geopolitical content in this article, I did not assign any tone score or volatility implication. The summary focuses on the local economy and consumer spending trends in Calabria.", "metadata": {"topic": "macro_inflation_employment", "title": "Calabrian Families Spend 1.76 Billion Euros on Durable Goods in 2025; Used Goods Market Supports Local Economy", "original_title": "Calabria spesa familiare a 1 , 7 miliardi | lusato salva il mercato", "publish_date": "2026-04-19T16:30:01Z", "publish_timestamp": 1776616201, "source": "zazoom.it", "url": "https://www.zazoom.it/2026-04-19/calabria-spesa-familiare-a-17-miliardi-lusato-salva-il-mercato/19031519/", "entities": ["Calabria", "Italian families", "used goods market"], "impacted_assets": [], "volatility_implication": "Neutral", "llm_tone_score": 0}} +{"id": "f62d8939-62c2-5b5b-a122-234d93cf4401", "text": "Dalal Street Week Ahead: Key Factors to Watch for Indian Equity Markets. The Indian equity market is expected to remain positive in the coming week, driven by progress in peace talks, crude oil prices stabilizing below $100, and Q4 earnings. The IMF has raised India's FY27 GDP growth forecast to 6.5%, highlighting the country's macroeconomic resilience. However, global uncertainties may lead to selective market action.", "metadata": {"topic": "macro_inflation_employment", "title": "Dalal Street Week Ahead: Key Factors to Watch for Indian Equity Markets", "original_title": "Dalal Street Week Ahead : Strait of Hormuz , Iran peace talks progress , Q4 earnings , oil prices , FII flow among 10 key factors to watch", "publish_date": "2026-04-19T16:30:01Z", "publish_timestamp": 1776616201, "source": "moneycontrol.com", "url": "https://www.moneycontrol.com/news/business/markets/dalal-street-week-ahead-strait-of-hormuz-iran-peace-talks-progress-q4-earnings-oil-prices-fii-flow-among-10-key-factors-to-watch-13893301.html", "entities": ["IMF", "India", "Iran", "US"], "impacted_assets": ["Equities (Indian)", "Crude Oil", "USD"], "volatility_implication": "Neutral", "llm_tone_score": 2}} +{"id": "06764251-7044-5ee0-bfe4-d4a217e9de6b", "text": "Is There an Exit in Sight?. The article highlights the escalating conflict between the US and Iran, with Israel playing a significant role in fueling the tensions. The author suggests that Trump's desire to re-open the Strait of Hormuz is crucial for global oil supplies and economic stability. The piece also touches on the potential impact of the conflict on global markets, including inflation concerns in the US and recessionary risks globally. The tone is bearish due to the escalating tensions and the potential for a prolonged conflict.\n\nMacro transmission mechanism: The article suggests that the conflict could lead to increased market volatility, higher oil prices, and potentially even a global recession if the Strait of Hormuz remains blocked. This could have negative implications for gold prices, as investors seek safe-haven assets during times of uncertainty.", "metadata": {"topic": "macro_inflation_employment", "title": "Is There an Exit in Sight?", "original_title": "OPINIÓN DE JORGE DEZCALLAR | ¿ Hay salida a la vista ? ", "publish_date": "2026-04-19T16:30:01Z", "publish_timestamp": 1776616201, "source": "lne.es", "url": "https://www.lne.es/opinion/2026/04/19/hay-salida-vista-eeuu-iran-israel-libano-articulo-jorge-dezcallar-129279620.html", "entities": ["Trump", "Netanyahu", "Iran", "Israel", "Washington", "Pakistan", "United States", "Europe", "Asia", "FMI", "Pope Leo XIV"], "impacted_assets": ["Gold", "Oil", "USD", "Equities"], "volatility_implication": "Increase", "llm_tone_score": -2}} diff --git a/Data/3_Gold_Semantic/News_Qdrant/2026-04-19/qdrant_macro_yields_dollar_processed.jsonl b/Data/3_Gold_Semantic/News_Qdrant/2026-04-19/qdrant_macro_yields_dollar_processed.jsonl new file mode 100644 index 0000000..95db083 --- /dev/null +++ b/Data/3_Gold_Semantic/News_Qdrant/2026-04-19/qdrant_macro_yields_dollar_processed.jsonl @@ -0,0 +1,7 @@ +{"id": "11122531-30db-51dd-979f-7533b3590e11", "text": "15-Year-Old Girl Asks Elon Musk 8 Questions Before Her Death; He Answers Them. A 15-year-old girl named Liv, who was battling cancer, had the opportunity to ask Elon Musk eight questions before her passing. After her death, her mother shared the handwritten list of questions with Glenn Beck, who then posted it online. Musk responded directly to the post, answering each question. This heartwarming story highlights the impact that people can have on one another, even in the face of adversity.\n\nNote: As there is no macro-financial or geopolitical content in this article, the tone score is neutral. The event does not have a direct impact on gold or silver prices.", "metadata": {"topic": "macro_yields_dollar", "title": "15-Year-Old Girl Asks Elon Musk 8 Questions Before Her Death; He Answers Them", "original_title": "15 - Jährige stellte Elon Musk 8 Fragen vor ihrem Tod – der beantwortet sie", "publish_date": "2026-04-19T16:31:05Z", "publish_timestamp": 1776616265, "source": "focus.de", "url": "https://www.focus.de/panorama/welt/15-jaehrige-stellte-elon-musk-8-fragen-vor-ihrem-tod-der-beantwortet-sie_10ab5d50-13c0-427c-8a3e-2ff98404480f.html", "entities": ["Liv Perrotto", "Elon Musk", "Glenn Beck", "Rebecca Perrotto", "Igor Babuschkin"], "impacted_assets": [], "volatility_implication": "Neutral", "llm_tone_score": 0}} +{"id": "2381d3bb-f84f-571f-9f09-7a0eece18490", "text": "Greenhouse Revolution: How Controlled Farming is Transforming Global Produce Markets. The article discusses the growth of greenhouse farming as a sustainable and efficient way to produce fruits and vegetables. While this trend has positive implications for food security, it does not have a direct impact on gold or silver prices. However, the global supply chain disruption alert mentioned at the end may have some indirect effects on commodity prices.\n\nNote: The tone score is neutral because there are no macroeconomic drivers that would directly affect gold or silver prices. The article focuses on the agricultural sector and its growth, which does not have a significant impact on the precious metals market.", "metadata": {"topic": "macro_yields_dollar", "title": "Greenhouse Revolution: How Controlled Farming is Transforming Global Produce Markets", "original_title": "Greenhouse Revolution : How Controlled Farming is Transforming Global Produce Markets", "publish_date": "2026-04-19T16:31:05Z", "publish_timestamp": 1776616265, "source": "briefingwire.com", "url": "https://www.briefingwire.com/pr/greenhouse-revolution-how-controlled-farming-is-transforming-global-produce-markets", "entities": ["None explicitly mentioned"], "impacted_assets": [], "volatility_implication": "Neutral", "llm_tone_score": 0}} +{"id": "f62d8939-62c2-5b5b-a122-234d93cf4401", "text": "Dalal Street Week Ahead: Key Factors to Watch for Indian Equity Markets. The Indian equity market is expected to remain positive in the coming week, driven by progress in peace talks, crude oil prices stabilizing below $100, and Q4 earnings. The IMF has raised India's FY27 GDP growth forecast to 6.5%, highlighting the country's macroeconomic resilience. However, global uncertainties may lead to selective market action.", "metadata": {"topic": "macro_yields_dollar", "title": "Dalal Street Week Ahead: Key Factors to Watch for Indian Equity Markets", "original_title": "Dalal Street Week Ahead : Strait of Hormuz , Iran peace talks progress , Q4 earnings , oil prices , FII flow among 10 key factors to watch", "publish_date": "2026-04-19T16:31:05Z", "publish_timestamp": 1776616265, "source": "moneycontrol.com", "url": "https://www.moneycontrol.com/news/business/markets/dalal-street-week-ahead-strait-of-hormuz-iran-peace-talks-progress-q4-earnings-oil-prices-fii-flow-among-10-key-factors-to-watch-13893301.html", "entities": ["IMF", "India", "Iran", "US"], "impacted_assets": ["Equities (Indian)", "Crude Oil", "USD"], "volatility_implication": "Neutral", "llm_tone_score": 2}} +{"id": "0d18ced9-2f0f-5375-bfa0-87a7dce9ff89", "text": "Creating Sustainable Food Systems for Human and Planetary Health. The article discusses the need for sustainable food systems that prioritize human and planetary health. It highlights the significant environmental impact of agriculture, including greenhouse gas emissions, water usage, and deforestation. The authors emphasize the importance of addressing Scope 3 emissions, which account for a large portion of a company's carbon footprint. While this topic may not have a direct impact on gold or silver prices, it could indirectly influence commodity markets through its focus on sustainable practices and environmental concerns.\n\nNote: As per the instructions, I did not assign a tone score based on the expected impact on Gold/Silver prices since there is no clear directional macro driver in this article.", "metadata": {"topic": "macro_yields_dollar", "title": "Creating Sustainable Food Systems for Human and Planetary Health", "original_title": "We Can Create Food Systems That Enhance Human & Planetary Health", "publish_date": "2026-04-19T16:31:05Z", "publish_timestamp": 1776616265, "source": "cleantechnica.com", "url": "https://cleantechnica.com/2026/04/19/we-can-create-food-systems-that-enhance-human-planetary-health/", "entities": ["World Resources Institute", "Elena Bou", "Forbes", "Advances in Nutrition"], "impacted_assets": [], "volatility_implication": "Neutral", "llm_tone_score": 0}} +{"id": "957deb23-6823-5c84-8ff6-9a3fe5bc3749", "text": "Deportes Tolima Confirms Quarterfinal Spot in Liga BetPlay I of 2026, Cali and Fortaleza Maintain Options. The Liga BetPlay I of 2026 has seen Deportes Tolima confirm its quarterfinal spot after defeating Deportivo Pereira. Meanwhile, Deportivo Cali and Fortaleza maintain their options for qualification. This event does not have a direct impact on the macro-financial landscape or the gold/silver markets.\n\nNote: As this article is about a sports tournament, it has no relevance to the financial market or the trading desk's focus on Gold/Silver Options.", "metadata": {"topic": "macro_yields_dollar", "title": "Deportes Tolima Confirms Quarterfinal Spot in Liga BetPlay I of 2026, Cali and Fortaleza Maintain Options", "original_title": "Tabla de posiciones de la Liga BetPlay : Tolima clasifica , Cali cede y Fortaleza mantiene opciones", "publish_date": "2026-04-19T16:31:05Z", "publish_timestamp": 1776616265, "source": "vanguardia.com", "url": "https://www.vanguardia.com/deportes/futbol/2026/04/19/tabla-de-posiciones-de-la-liga-betplay-tolima-clasifica-cali-cede-y-fortaleza-mantiene-opciones/", "entities": ["Deportes Tolima", "Deportivo Pereira", "Deportivo Cali", "Fortaleza", "Atlético Nacional", "Deportivo Pasto", "Jaguares"], "impacted_assets": [], "volatility_implication": "Neutral", "llm_tone_score": 0}} +{"id": "1ece9a16-9a7f-54a1-a0a0-f96978080a3f", "text": "Warning: This War Will Also Affect Your Portfolio - And Many Won't Realize It Until Too Late. The escalating conflict in the Middle East is driving up energy prices and posing a structural risk to the global economy. Rising energy costs will increase inflationary pressure, threaten rate cuts, and shake equity markets. However, this crisis also presents opportunities for companies that profit from higher energy prices, such as oil and gas producers, utilities, renewable energy providers, and select commodity and agricultural stocks.", "metadata": {"topic": "macro_yields_dollar", "title": "Warning: This War Will Also Affect Your Portfolio - And Many Won't Realize It Until Too Late", "original_title": "Stefan Schrader warnt : Dieser Krieg trifft auch Ihr Depot - und viele merken es zu spät", "publish_date": "2026-04-19T16:31:05Z", "publish_timestamp": 1776616265, "source": "finanznachrichten.de", "url": "https://www.finanznachrichten.de/nachrichten-2026-04/68236172-stefan-schrader-warnt-dieser-krieg-trifft-auch-ihr-depot-und-viele-merken-es-zu-spaet-049.htm", "entities": ["Stefan Schrader", "Iran", "Hormuz Strait", "LNG", "Oil"], "impacted_assets": ["Equities", "Gold", "Oil", "USD"], "volatility_implication": "Increase", "llm_tone_score": 2}} +{"id": "aec76206-9966-5f05-9a99-3cfcb0eb8ab7", "text": "Ponte Mobile for Porto di Livorno Repaired, Fragility Remains. The ponte mobile connecting the Fi-Pi-Li highway to the Porto di Livorno has been repaired after a structural failure on March 6. Although the repair is complete, the structure remains fragile, according to authorities. This event does not have a direct impact on gold or silver prices but may indirectly affect regional economic activity and port operations, which could influence market sentiment.", "metadata": {"topic": "macro_yields_dollar", "title": "Ponte Mobile for Porto di Livorno Repaired, Fragility Remains", "original_title": "Fipili | ponte mobile per il Porto di Livorno ripristinato Autorità Portuale | Resta la fragilità Ma Giani è soddisfatto", "publish_date": "2026-04-19T16:31:05Z", "publish_timestamp": 1776616265, "source": "zazoom.it", "url": "https://www.zazoom.it/2026-04-19/fipili-ponte-mobile-per-il-porto-di-livorno-ripristinato-autorita-portuale-resta-la-fragilita-ma-giani-e-soddisfatto/19031572/", "entities": ["Fipili", "Autorità Portuale", "Città Metropolitana di Firenze", "Regione", "Avr spa"], "impacted_assets": [], "volatility_implication": "Neutral", "llm_tone_score": 0}} diff --git a/Data/3_Gold_Semantic/SEC_Insider_Trades/2026-04-08/qdrant_ready.jsonl b/Data/3_Gold_Semantic/SEC_Insider_Trades/2026-04-08/qdrant_ready.jsonl new file mode 100644 index 0000000..84369a1 --- /dev/null +++ b/Data/3_Gold_Semantic/SEC_Insider_Trades/2026-04-08/qdrant_ready.jsonl @@ -0,0 +1,59 @@ +{"text": "O'Toole Amie Thuener (Vp, Chief Accounting Officer) of GOOG sold 617 shares worth $178,701.71.", "metadata": {"ticker": "GOOG", "form_type": "4", "filed_at": "2026-04-03", "accession_no": "0001193125-26-142372", "url": "https://www.sec.gov/Archives/edgar/data/1652044/000119312526142372/xslF345X06/ownership.xml", "ingested_at": "2026-04-08T12:48:30.190015", "transaction_date": "2026-04-01", "tone_score": -5, "action_direction": "SELL", "topics": ["Insider Trading", "Form 4"], "processed_at": "2026-04-08T17:12:28.348352"}} +{"text": "O'Toole Amie Thuener (Vp, Chief Accounting Officer) of GOOGL sold 617 shares worth $178,701.71.", "metadata": {"ticker": "GOOGL", "form_type": "4", "filed_at": "2026-04-03", "accession_no": "0001193125-26-142372", "url": "https://www.sec.gov/Archives/edgar/data/1652044/000119312526142372/xslF345X06/ownership.xml", "ingested_at": "2026-04-08T12:48:29.315822", "transaction_date": "2026-04-01", "tone_score": -5, "action_direction": "SELL", "topics": ["Insider Trading", "Form 4"], "processed_at": "2026-04-08T17:12:28.347635"}} +{"text": "Lilak Stephanie (Evp And Chief People Officer) of MDLZ acquired (via RSU vesting) 3,218 shares worth $0.00.", "metadata": {"ticker": "MDLZ", "form_type": "4", "filed_at": "2026-04-03", "accession_no": "0001628280-26-023648", "url": "https://www.sec.gov/Archives/edgar/data/1103982/000162828026023648/xslF345X06/wk-form4_1775247097.xml", "ingested_at": "2026-04-08T12:48:53.535143", "transaction_date": "2026-04-01", "tone_score": 0, "action_direction": "ACQUIRE/VEST", "topics": ["Insider Trading", "Form 4"], "processed_at": "2026-04-08T17:12:28.348741"}} +{"text": "Kuhn Volker (Evp And President, Europe) of MDLZ acquired (via RSU vesting) 90 shares worth $0.00.", "metadata": {"ticker": "MDLZ", "form_type": "4", "filed_at": "2026-04-03", "accession_no": "0001628280-26-023646", "url": "https://www.sec.gov/Archives/edgar/data/1103982/000162828026023646/xslF345X06/wk-form4_1775247057.xml", "ingested_at": "2026-04-08T12:48:53.778010", "transaction_date": "2026-04-01", "tone_score": 0, "action_direction": "ACQUIRE/VEST", "topics": ["Insider Trading", "Form 4"], "processed_at": "2026-04-08T17:12:28.348769"}} +{"text": "Sanders Adam (Corp. Controller & Cao) of AMAT acquired (via RSU vesting) 125 shares worth $0.00.", "metadata": {"ticker": "AMAT", "form_type": "4", "filed_at": "2026-04-02", "accession_no": "0001628280-26-023379", "url": "https://www.sec.gov/Archives/edgar/data/6951/000162828026023379/xslF345X06/wk-form4_1775169858.xml", "ingested_at": "2026-04-08T12:48:46.179586", "transaction_date": "2026-04-01", "tone_score": 0, "action_direction": "ACQUIRE/VEST", "topics": ["Insider Trading", "Form 4"], "processed_at": "2026-04-08T17:12:28.348296"}} +{"text": "LEWIS AYLWIN B (Other) of MAR acquired (via RSU vesting) 11 shares worth $0.00.", "metadata": {"ticker": "MAR", "form_type": "4", "filed_at": "2026-04-01", "accession_no": "0001225208-26-004132", "url": "https://www.sec.gov/Archives/edgar/data/1048286/000122520826004132/xslF345X06/doc4.xml", "ingested_at": "2026-04-08T12:49:02.493404", "transaction_date": "2026-03-31", "tone_score": 0, "action_direction": "ACQUIRE/VEST", "topics": ["Insider Trading", "Form 4"], "processed_at": "2026-04-08T17:12:28.347263"}} +{"text": "Broadcom and Google entered into a Long Term Agreement for custom TPUs and Supply Assurance Agreement for networking components. Anthropic will access approximately 3.5 gigawatts of next-generation TPU-based AI compute capacity starting in 2027, dependent on commercial success.", "metadata": {"ticker": "AVGO", "form_type": "8-K", "filed_at": "2026-04-06", "accession_no": "0001193125-26-144028", "url": "https://www.sec.gov/Archives/edgar/data/1730168/000119312526144028/d87999d8k.htm", "ingested_at": "2026-04-08T12:48:32.383033", "transaction_date": "2023-02-14", "tone_score": 0, "action_direction": "NONE", "topics": ["Mergers and Acquisitions", "Partnership", "Technology", "Forward-Looking Statements"], "processed_at": "2026-04-08T17:12:40.429912"}} +{"text": "O'BRIEN DEIRDRE (Senior Vice President) of AAPL sold 128,634 shares worth $7,660,875.04 under a pre-planned 10b5-1 trading plan.", "metadata": {"ticker": "AAPL", "form_type": "4", "filed_at": "2026-04-03", "accession_no": "0001140361-26-013192", "url": "https://www.sec.gov/Archives/edgar/data/320193/000114036126013192/xslF345X06/form4.xml", "ingested_at": "2026-04-08T12:48:26.662928", "transaction_date": "2026-04-01", "tone_score": -1, "action_direction": "SELL", "topics": ["Insider Trading", "Form 4"], "processed_at": "2026-04-08T17:12:40.430018"}} +{"text": "Khan Sabih (Coo) of AAPL acquired (via RSU vesting) 97,634 shares worth $0.00.", "metadata": {"ticker": "AAPL", "form_type": "4", "filed_at": "2026-04-03", "accession_no": "0001140361-26-013191", "url": "https://www.sec.gov/Archives/edgar/data/320193/000114036126013191/xslF345X06/form4.xml", "ingested_at": "2026-04-08T12:48:26.888609", "transaction_date": "2026-04-01", "tone_score": 0, "action_direction": "ACQUIRE/VEST", "topics": ["Insider Trading", "Form 4"], "processed_at": "2026-04-08T17:12:40.430044"}} +{"text": "COOK TIMOTHY D (Chief Executive Officer) of AAPL sold 263,152 shares worth $16,512,197.73 under a pre-planned 10b5-1 trading plan.", "metadata": {"ticker": "AAPL", "form_type": "4", "filed_at": "2026-04-03", "accession_no": "0001140361-26-013190", "url": "https://www.sec.gov/Archives/edgar/data/320193/000114036126013190/xslF345X06/form4.xml", "ingested_at": "2026-04-08T12:48:27.106687", "transaction_date": "2026-04-01", "tone_score": -1, "action_direction": "SELL", "topics": ["Insider Trading", "Form 4"], "processed_at": "2026-04-08T17:12:40.430068"}} +{"text": "Liu Joy (Evp And Chief Legal Officer) of VRTX sold 978 shares worth $439,288.26 under a pre-planned 10b5-1 trading plan.", "metadata": {"ticker": "VRTX", "form_type": "4", "filed_at": "2026-04-03", "accession_no": "0000875320-26-000157", "url": "https://www.sec.gov/Archives/edgar/data/875320/000087532026000157/xslF345X06/wk-form4_1775249628.xml", "ingested_at": "2026-04-08T12:48:51.663358", "transaction_date": "2026-04-01", "tone_score": -1, "action_direction": "SELL", "topics": ["Insider Trading", "Form 4"], "processed_at": "2026-04-08T17:12:40.430084"}} +{"text": "Herrington Douglas J (Ceo Worldwide Amazon Stores) of AMZN sold 1,000 shares worth $210,500.00 under a pre-planned 10b5-1 trading plan.", "metadata": {"ticker": "AMZN", "form_type": "4", "filed_at": "2026-04-03", "accession_no": "0001018724-26-000010", "url": "https://www.sec.gov/Archives/edgar/data/1018724/000101872426000010/xslF345X06/wk-form4_1775248886.xml", "ingested_at": "2026-04-08T12:48:28.351458", "transaction_date": "2026-04-01", "tone_score": -1, "action_direction": "SELL", "topics": ["Insider Trading", "Form 4"], "processed_at": "2026-04-08T17:12:40.430099"}} +{"text": "Broadcom Inc. announces the departure of Chief Financial Officer Kirsten M. Spears and her replacement by Amie Thuener, effective June 12, 2026.", "metadata": {"ticker": "AVGO", "form_type": "8-K", "filed_at": "2026-04-02", "accession_no": "0001193125-26-140574", "url": "https://www.sec.gov/Archives/edgar/data/1730168/000119312526140574/d109450d8k.htm", "ingested_at": "2026-04-08T12:48:32.628969", "transaction_date": "2026-03-30", "tone_score": 0, "action_direction": "NONE", "topics": ["Executive Changes", "Financial Officers", "Compensation"], "processed_at": "2026-04-08T17:12:43.230569"}} +{"text": "Paul Josh D. (Chief Accounting Officer) of PANW sold 2,047 shares worth $177,540.00 under a pre-planned 10b5-1 trading plan.", "metadata": {"ticker": "PANW", "form_type": "4", "filed_at": "2026-04-03", "accession_no": "0001882285-26-000007", "url": "https://www.sec.gov/Archives/edgar/data/1327567/000188228526000007/xslF345X06/ownership.xml", "ingested_at": "2026-04-08T12:48:52.842465", "transaction_date": "2026-04-01", "tone_score": -1, "action_direction": "SELL", "topics": ["Insider Trading", "Form 4"], "processed_at": "2026-04-08T17:12:43.230647"}} +{"text": "Golechha Dipak (Evp, Chief Financial Officer) of PANW sold 5,000 shares worth $802,076.70 under a pre-planned 10b5-1 trading plan.", "metadata": {"ticker": "PANW", "form_type": "4", "filed_at": "2026-04-03", "accession_no": "0001852540-26-000002", "url": "https://www.sec.gov/Archives/edgar/data/1327567/000185254026000002/xslF345X06/ownership.xml", "ingested_at": "2026-04-08T12:48:53.042265", "transaction_date": "2026-04-01", "tone_score": -1, "action_direction": "SELL", "topics": ["Insider Trading", "Form 4"], "processed_at": "2026-04-08T17:12:43.230671"}} +{"text": "ARNZEN APRIL S (Evp And Chief People Officer) of MU sold 40,000 shares worth $13,895,761.74 under a pre-planned 10b5-1 trading plan.", "metadata": {"ticker": "MU", "form_type": "4", "filed_at": "2026-04-03", "accession_no": "0001632063-26-000002", "url": "https://www.sec.gov/Archives/edgar/data/723125/000163206326000002/xslF345X06/primarydocument.xml", "ingested_at": "2026-04-08T12:48:57.862487", "transaction_date": "2026-04-01", "tone_score": -1, "action_direction": "SELL", "topics": ["Insider Trading", "Form 4"], "processed_at": "2026-04-08T17:12:43.230689"}} +{"text": "Liu Teyin M (Director) of MU acquired (via RSU vesting) 97 shares worth $0.00.", "metadata": {"ticker": "MU", "form_type": "4", "filed_at": "2026-04-02", "accession_no": "0002058769-26-000003", "url": "https://www.sec.gov/Archives/edgar/data/723125/000205876926000003/xslF345X06/primarydocument.xml", "ingested_at": "2026-04-08T12:48:58.070656", "transaction_date": "2026-03-31", "tone_score": 0, "action_direction": "ACQUIRE/VEST", "topics": ["Insider Trading", "Form 4"], "processed_at": "2026-04-08T17:12:43.230706"}} +{"text": "Alphabet Inc.'s Vice President, Corporate Controller and Principal Accounting Officer Amie Thuener O'Toole resigned effective April 9, 2026, to pursue another opportunity. The resignation was not due to any disagreement with the company.", "metadata": {"ticker": "GOOG", "form_type": "8-K", "filed_at": "2026-04-02", "accession_no": "0001652044-26-000031", "url": "https://www.sec.gov/Archives/edgar/data/1652044/000165204426000031/goog-20260330.htm", "ingested_at": "2026-04-08T12:48:30.394411", "transaction_date": "2026-03-30", "tone_score": 0, "action_direction": "NONE", "topics": ["Executive Departure", "Accounting"], "processed_at": "2026-04-08T17:12:46.150798"}} +{"text": "Goodarzi Sasan K (Ceo, President And Director) of INTU acquired (via RSU vesting) 4,521 shares worth $0.00.", "metadata": {"ticker": "INTU", "form_type": "4", "filed_at": "2026-04-03", "accession_no": "0001628280-26-023706", "url": "https://www.sec.gov/Archives/edgar/data/896878/000162828026023706/xslF345X06/wk-form4_1775249487.xml", "ingested_at": "2026-04-08T12:48:40.705654", "transaction_date": "2026-04-01", "tone_score": 0, "action_direction": "ACQUIRE/VEST", "topics": ["Insider Trading", "Form 4"], "processed_at": "2026-04-08T17:12:46.151014"}} +{"text": "McLean Kerry J (Evp, Gen. Counsel & Corp. Sec.) of INTU acquired (via RSU vesting) 1,151 shares worth $0.00.", "metadata": {"ticker": "INTU", "form_type": "4", "filed_at": "2026-04-03", "accession_no": "0001628280-26-023704", "url": "https://www.sec.gov/Archives/edgar/data/896878/000162828026023704/xslF345X06/wk-form4_1775249417.xml", "ingested_at": "2026-04-08T12:48:40.933207", "transaction_date": "2026-04-01", "tone_score": 0, "action_direction": "ACQUIRE/VEST", "topics": ["Insider Trading", "Form 4"], "processed_at": "2026-04-08T17:12:46.151034"}} +{"text": "Hotz Lauren D (Svp, Chief Accounting Officer) of INTU acquired (via RSU vesting) 451 shares worth $0.00.", "metadata": {"ticker": "INTU", "form_type": "4", "filed_at": "2026-04-03", "accession_no": "0001628280-26-023701", "url": "https://www.sec.gov/Archives/edgar/data/896878/000162828026023701/xslF345X06/wk-form4_1775249278.xml", "ingested_at": "2026-04-08T12:48:41.133725", "transaction_date": "2026-04-01", "tone_score": 0, "action_direction": "ACQUIRE/VEST", "topics": ["Insider Trading", "Form 4"], "processed_at": "2026-04-08T17:12:46.151053"}} +{"text": "Hilliard Caryl Lyn (Evp, People And Places) of INTU acquired (via RSU vesting) 681 shares worth $0.00.", "metadata": {"ticker": "INTU", "form_type": "4", "filed_at": "2026-04-03", "accession_no": "0001628280-26-023698", "url": "https://www.sec.gov/Archives/edgar/data/896878/000162828026023698/xslF345X06/wk-form4_1775249186.xml", "ingested_at": "2026-04-08T12:48:41.343578", "transaction_date": "2026-04-01", "tone_score": 0, "action_direction": "ACQUIRE/VEST", "topics": ["Insider Trading", "Form 4"], "processed_at": "2026-04-08T17:12:46.151070"}} +{"text": "Hanebrink Anton (Evp, Corp Strategy And Dev) of INTU acquired (via RSU vesting) 1,242 shares worth $0.00.", "metadata": {"ticker": "INTU", "form_type": "4", "filed_at": "2026-04-03", "accession_no": "0001628280-26-023696", "url": "https://www.sec.gov/Archives/edgar/data/896878/000162828026023696/xslF345X06/wk-form4_1775249122.xml", "ingested_at": "2026-04-08T12:48:41.573994", "transaction_date": "2026-04-01", "tone_score": 0, "action_direction": "ACQUIRE/VEST", "topics": ["Insider Trading", "Form 4"], "processed_at": "2026-04-08T17:12:46.151087"}} +{"text": "Aujla Sandeep (Evp And Cfo) of INTU acquired (via RSU vesting) 5,085 shares worth $0.00.", "metadata": {"ticker": "INTU", "form_type": "4", "filed_at": "2026-04-03", "accession_no": "0001628280-26-023690", "url": "https://www.sec.gov/Archives/edgar/data/896878/000162828026023690/xslF345X06/wk-form4_1775248743.xml", "ingested_at": "2026-04-08T12:48:41.795152", "transaction_date": "2026-04-01", "tone_score": 0, "action_direction": "ACQUIRE/VEST", "topics": ["Insider Trading", "Form 4"], "processed_at": "2026-04-08T17:12:46.151102"}} +{"text": "Neumann Spencer Adam (Chief Financial Officer) of NFLX sold 57,260 shares worth $2,805,740.00 under a pre-planned 10b5-1 trading plan.", "metadata": {"ticker": "NFLX", "form_type": "4", "filed_at": "2026-04-03", "accession_no": "0001543133-26-000002", "url": "https://www.sec.gov/Archives/edgar/data/1065280/000154313326000002/xslF345X06/wk-form4_1775246849.xml", "ingested_at": "2026-04-08T12:48:34.271973", "transaction_date": "2026-04-02", "tone_score": -1, "action_direction": "SELL", "topics": ["Insider Trading", "Form 4"], "processed_at": "2026-04-08T17:12:46.151119"}} +{"text": "HASTINGS REED (Other) of NFLX sold 841,100 shares worth $40,156,465.06 under a pre-planned 10b5-1 trading plan.", "metadata": {"ticker": "NFLX", "form_type": "4", "filed_at": "2026-04-02", "accession_no": "0001065280-26-000134", "url": "https://www.sec.gov/Archives/edgar/data/1065280/000106528026000134/xslF345X06/wk-form4_1775167354.xml", "ingested_at": "2026-04-08T12:48:34.906612", "transaction_date": "2026-04-01", "tone_score": -1, "action_direction": "SELL", "topics": ["Insider Trading", "Form 4"], "processed_at": "2026-04-08T17:12:46.151150"}} +{"text": "Frates Caton (Executive Vice President) of COST sold 700 shares worth $695,100.00.", "metadata": {"ticker": "COST", "form_type": "4", "filed_at": "2026-04-01", "accession_no": "0000909832-26-000039", "url": "https://www.sec.gov/Archives/edgar/data/909832/000090983226000039/xslF345X06/form4.xml", "ingested_at": "2026-04-08T12:48:33.357291", "transaction_date": "2026-04-01", "tone_score": -3, "action_direction": "SELL", "topics": ["Insider Trading", "Form 4"], "processed_at": "2026-04-08T17:12:46.151234"}} +{"text": "Alphabet Inc.'s Vice President, Corporate Controller and Principal Accounting Officer Amie Thuener O'Toole resigned effective April 9, 2026, to pursue another opportunity. The resignation was not due to any disagreement with the company.", "metadata": {"ticker": "GOOGL", "form_type": "8-K", "filed_at": "2026-04-02", "accession_no": "0001652044-26-000031", "url": "https://www.sec.gov/Archives/edgar/data/1652044/000165204426000031/goog-20260330.htm", "ingested_at": "2026-04-08T12:48:29.521443", "transaction_date": "2026-03-30", "tone_score": 0, "action_direction": "NONE", "topics": ["Executive Departure", "Accounting Officer"], "processed_at": "2026-04-08T17:12:49.085630"}} +{"text": "Murdock Daniel C. (Evp & Chief Accounting Officer) of CMCSA acquired (via RSU vesting) 7,341 shares worth $0.00.", "metadata": {"ticker": "CMCSA", "form_type": "4", "filed_at": "2026-04-03", "accession_no": "0001225208-26-004342", "url": "https://www.sec.gov/Archives/edgar/data/1166691/000122520826004342/xslF345X06/doc4.xml", "ingested_at": "2026-04-08T12:48:43.821475", "transaction_date": "2026-04-03", "tone_score": 0, "action_direction": "ACQUIRE/VEST", "topics": ["Insider Trading", "Form 4"], "processed_at": "2026-04-08T17:12:49.085719"}} +{"text": "Smith Gordon (Other) of CMCSA acquired (via RSU vesting) 1,176 shares worth $0.00.", "metadata": {"ticker": "CMCSA", "form_type": "4", "filed_at": "2026-04-02", "accession_no": "0001225208-26-004203", "url": "https://www.sec.gov/Archives/edgar/data/1166691/000122520826004203/xslF345X06/doc4.xml", "ingested_at": "2026-04-08T12:48:44.045592", "transaction_date": "2026-03-31", "tone_score": 0, "action_direction": "ACQUIRE/VEST", "topics": ["Insider Trading", "Form 4"], "processed_at": "2026-04-08T17:12:49.085742"}} +{"text": "Honickman Jeffrey A (Other) of CMCSA acquired (via RSU vesting) 1,524 shares worth $0.00.", "metadata": {"ticker": "CMCSA", "form_type": "4", "filed_at": "2026-04-02", "accession_no": "0001225208-26-004202", "url": "https://www.sec.gov/Archives/edgar/data/1166691/000122520826004202/xslF345X06/doc4.xml", "ingested_at": "2026-04-08T12:48:44.268546", "transaction_date": "2026-03-31", "tone_score": 0, "action_direction": "ACQUIRE/VEST", "topics": ["Insider Trading", "Form 4"], "processed_at": "2026-04-08T17:12:49.085761"}} +{"text": "BREEN EDWARD D (Other) of CMCSA acquired (via RSU vesting) 697 shares worth $0.00.", "metadata": {"ticker": "CMCSA", "form_type": "4", "filed_at": "2026-04-02", "accession_no": "0001225208-26-004201", "url": "https://www.sec.gov/Archives/edgar/data/1166691/000122520826004201/xslF345X06/doc4.xml", "ingested_at": "2026-04-08T12:48:44.473523", "transaction_date": "2026-03-31", "tone_score": 0, "action_direction": "ACQUIRE/VEST", "topics": ["Insider Trading", "Form 4"], "processed_at": "2026-04-08T17:12:49.085778"}} +{"text": "Brady Louise F. (Other) of CMCSA acquired (via RSU vesting) 1,176 shares worth $0.00.", "metadata": {"ticker": "CMCSA", "form_type": "4", "filed_at": "2026-04-02", "accession_no": "0001225208-26-004200", "url": "https://www.sec.gov/Archives/edgar/data/1166691/000122520826004200/xslF345X06/doc4.xml", "ingested_at": "2026-04-08T12:48:44.697700", "transaction_date": "2026-03-31", "tone_score": 0, "action_direction": "ACQUIRE/VEST", "topics": ["Insider Trading", "Form 4"], "processed_at": "2026-04-08T17:12:49.085793"}} +{"text": "Baltimore Thomas J Jr (Other) of CMCSA acquired (via RSU vesting) 1,176 shares worth $0.00.", "metadata": {"ticker": "CMCSA", "form_type": "4", "filed_at": "2026-04-02", "accession_no": "0001225208-26-004199", "url": "https://www.sec.gov/Archives/edgar/data/1166691/000122520826004199/xslF345X06/doc4.xml", "ingested_at": "2026-04-08T12:48:44.896983", "transaction_date": "2026-03-31", "tone_score": 0, "action_direction": "ACQUIRE/VEST", "topics": ["Insider Trading", "Form 4"], "processed_at": "2026-04-08T17:12:49.085808"}} +{"text": "Establishment of performance goals under the 2026 Bonus Program and adoption of the 2026 Long Term Retention Program.", "metadata": {"ticker": "MELI", "form_type": "8-K", "filed_at": "2026-04-03", "accession_no": "0001999371-26-007656", "url": "https://www.sec.gov/Archives/edgar/data/1099590/000199937126007656/meli_8k-033126.htm", "ingested_at": "2026-04-08T12:48:59.995354", "transaction_date": "2026-03-31", "tone_score": 0, "action_direction": "NONE", "topics": ["Compensation", "Executive Management", "Performance Goals"], "processed_at": "2026-04-08T17:12:51.679444"}} +{"text": "RYAN ARTHUR F (Other) of REGN sold 100 shares worth $77,727.28 under a pre-planned 10b5-1 trading plan.", "metadata": {"ticker": "REGN", "form_type": "4", "filed_at": "2026-04-03", "accession_no": "0001104659-26-039613", "url": "https://www.sec.gov/Archives/edgar/data/872589/000110465926039613/xslF345X06/tm2611142-1_4seq1.xml", "ingested_at": "2026-04-08T12:48:54.906167", "transaction_date": "2026-04-01", "tone_score": -1, "action_direction": "SELL", "topics": ["Insider Trading", "Form 4"], "processed_at": "2026-04-08T17:12:51.679523"}} +{"text": "Zhu Xiaotong (Svp) of TSLA acquired (via RSU vesting) 20,000 shares worth $0.00.", "metadata": {"ticker": "TSLA", "form_type": "4", "filed_at": "2026-04-02", "accession_no": "0001972928-26-000002", "url": "https://www.sec.gov/Archives/edgar/data/1318605/000197292826000002/xslF345X06/edgardoc.xml", "ingested_at": "2026-04-08T12:48:31.110524", "transaction_date": "2026-03-31", "tone_score": 0, "action_direction": "ACQUIRE/VEST", "topics": ["Insider Trading", "Form 4"], "processed_at": "2026-04-08T17:12:51.679545"}} +{"text": "Micron Technology, Inc. issued press releases announcing the pricing of its cash tender offers for outstanding senior notes and the expiration of those offers.", "metadata": {"ticker": "MU", "form_type": "8-K", "filed_at": "2026-04-01", "accession_no": "0001104659-26-038249", "url": "https://www.sec.gov/Archives/edgar/data/723125/000110465926038249/tm2610810d1_8k.htm", "ingested_at": "2026-04-08T12:48:58.540588", "transaction_date": "2026-04-01", "tone_score": 0, "action_direction": "NONE", "topics": ["Tender Offer", "Financial Statement"], "processed_at": "2026-04-08T17:12:54.131398"}} +{"text": "Wilson-Thompson Kathleen (Other) of TSLA sold 65,809 shares worth $9,273,888.40 under a pre-planned 10b5-1 trading plan.", "metadata": {"ticker": "TSLA", "form_type": "4", "filed_at": "2026-04-01", "accession_no": "0001104659-26-038682", "url": "https://www.sec.gov/Archives/edgar/data/1318605/000110465926038682/xslF345X06/tm2610684-1_4seq1.xml", "ingested_at": "2026-04-08T12:48:31.571595", "transaction_date": "2026-03-30", "tone_score": -1, "action_direction": "SELL", "topics": ["Insider Trading", "Form 4"], "processed_at": "2026-04-08T17:12:54.131501"}} +{"text": "CrowdStrike announces $500 million additional share repurchase authorization, bringing total to $1.5 billion.", "metadata": {"ticker": "CRWD", "form_type": "8-K", "filed_at": "2026-04-06", "accession_no": "0001535527-26-000013", "url": "https://www.sec.gov/Archives/edgar/data/1535527/000153552726000013/crwd-20260406.htm", "ingested_at": "2026-04-08T12:49:01.938568", "transaction_date": "2026-04-06", "tone_score": 0, "action_direction": "NONE", "topics": ["M&A", "Share Repurchase"], "processed_at": "2026-04-08T17:12:56.338764"}} +{"text": "Regeneron Pharmaceuticals, Inc. expects an acquired in-process research and development charge of approximately $102 million on a pre-tax basis for the first quarter 2026, which will negatively impact GAAP and non-GAAP net income per diluted share by approximately $0.81.", "metadata": {"ticker": "REGN", "form_type": "8-K", "filed_at": "2026-04-08", "accession_no": "0001104659-26-040661", "url": "https://www.sec.gov/Archives/edgar/data/872589/000110465926040661/tm2611354d1_8k.htm", "ingested_at": "2026-04-08T12:48:54.660815", "transaction_date": "2023-04-28", "tone_score": 0, "action_direction": "NONE", "topics": ["Financial Results", "Guidance", "Forward-Looking Statements", "Non-GAAP Financial Measures"], "processed_at": "2026-04-08T17:13:00.103784"}} +{"text": "Cunningham Paul (Sr. Vice President) of CDNS sold 1,000 shares worth $280,190.00 under a pre-planned 10b5-1 trading plan.", "metadata": {"ticker": "CDNS", "form_type": "4", "filed_at": "2026-04-03", "accession_no": "0000813672-26-000040", "url": "https://www.sec.gov/Archives/edgar/data/813672/000081367226000040/xslF345X06/wk-form4_1775243708.xml", "ingested_at": "2026-04-08T12:48:59.459023", "transaction_date": "2026-04-01", "tone_score": -1, "action_direction": "SELL", "topics": ["Insider Trading", "Form 4"], "processed_at": "2026-04-08T17:13:00.103886"}} +{"text": "ROCHE VINCENT (Chair & Ceo) of ADI sold 20,000 shares worth $3,181,400.00 under a pre-planned 10b5-1 trading plan.", "metadata": {"ticker": "ADI", "form_type": "4", "filed_at": "2026-04-03", "accession_no": "0001201872-26-000008", "url": "https://www.sec.gov/Archives/edgar/data/6281/000120187226000008/xslF345X06/wk-form4_1775247205.xml", "ingested_at": "2026-04-08T12:48:56.199337", "transaction_date": "2026-04-01", "tone_score": -1, "action_direction": "SELL", "topics": ["Insider Trading", "Form 4"], "processed_at": "2026-04-08T17:13:00.103904"}} +{"text": "Sondel Michael (Cao (Principal Acct. Officer)) of ADI acquired (via RSU vesting) 406 shares worth $0.00.", "metadata": {"ticker": "ADI", "form_type": "4", "filed_at": "2026-04-01", "accession_no": "0001768266-26-000004", "url": "https://www.sec.gov/Archives/edgar/data/6281/000176826626000004/xslF345X06/wk-form4_1775074685.xml", "ingested_at": "2026-04-08T12:48:56.418972", "transaction_date": "2026-03-30", "tone_score": 0, "action_direction": "ACQUIRE/VEST", "topics": ["Insider Trading", "Form 4"], "processed_at": "2026-04-08T17:13:00.103920"}} +{"text": "ROCHE VINCENT (Chair & Ceo) of ADI acquired (via RSU vesting) 27,027 shares worth $0.00.", "metadata": {"ticker": "ADI", "form_type": "4", "filed_at": "2026-04-01", "accession_no": "0001201872-26-000006", "url": "https://www.sec.gov/Archives/edgar/data/6281/000120187226000006/xslF345X06/wk-form4_1775074650.xml", "ingested_at": "2026-04-08T12:48:56.676905", "transaction_date": "2026-03-30", "tone_score": 0, "action_direction": "ACQUIRE/VEST", "topics": ["Insider Trading", "Form 4"], "processed_at": "2026-04-08T17:13:00.103943"}} +{"text": "Nakamura Katsufumi (Svp, Chief Customer Officer) of ADI acquired (via RSU vesting) 121 shares worth $0.00.", "metadata": {"ticker": "ADI", "form_type": "4", "filed_at": "2026-04-01", "accession_no": "0002044259-26-000007", "url": "https://www.sec.gov/Archives/edgar/data/6281/000204425926000007/xslF345X06/wk-form4_1775074599.xml", "ingested_at": "2026-04-08T12:48:56.894938", "transaction_date": "2026-03-30", "tone_score": 0, "action_direction": "ACQUIRE/VEST", "topics": ["Insider Trading", "Form 4"], "processed_at": "2026-04-08T17:13:00.103957"}} +{"text": "Jain Vivek (Evp, Global Operations) of ADI acquired (via RSU vesting) 6,386 shares worth $0.00.", "metadata": {"ticker": "ADI", "form_type": "4", "filed_at": "2026-04-01", "accession_no": "0000006281-26-000037", "url": "https://www.sec.gov/Archives/edgar/data/6281/000000628126000037/xslF345X06/wk-form4_1775074566.xml", "ingested_at": "2026-04-08T12:48:57.102825", "transaction_date": "2026-03-30", "tone_score": 0, "action_direction": "ACQUIRE/VEST", "topics": ["Insider Trading", "Form 4"], "processed_at": "2026-04-08T17:13:00.103972"}} +{"text": "Cotter Martin (Svp, Vertical Business Units) of ADI acquired (via RSU vesting) 3,881 shares worth $0.00.", "metadata": {"ticker": "ADI", "form_type": "4", "filed_at": "2026-04-01", "accession_no": "0001685760-26-000004", "url": "https://www.sec.gov/Archives/edgar/data/6281/000168576026000004/xslF345X06/wk-form4_1775074528.xml", "ingested_at": "2026-04-08T12:48:57.316644", "transaction_date": "2026-03-30", "tone_score": 0, "action_direction": "ACQUIRE/VEST", "topics": ["Insider Trading", "Form 4"], "processed_at": "2026-04-08T17:13:00.103984"}} +{"text": "Shimer Peter A (Other) of CSCO acquired (via RSU vesting) 2,333 shares worth $0.00.", "metadata": {"ticker": "CSCO", "form_type": "4", "filed_at": "2026-04-07", "accession_no": "0000858877-26-000052", "url": "https://www.sec.gov/Archives/edgar/data/858877/000085887726000052/xslF345X06/wk-form4_1775592372.xml", "ingested_at": "2026-04-08T12:48:37.663506", "transaction_date": "2026-04-06", "tone_score": 0, "action_direction": "ACQUIRE/VEST", "topics": ["Insider Trading", "Form 4"], "processed_at": "2026-04-08T17:13:00.103997"}} +{"text": "Tesla publishes press release on April 2, 2026, announcing results of operations and financial condition. No additional information provided.", "metadata": {"ticker": "TSLA", "form_type": "8-K", "filed_at": "2026-04-02", "accession_no": "0001628280-26-022956", "url": "https://www.sec.gov/Archives/edgar/data/1318605/000162828026022956/tsla-20260402.htm", "ingested_at": "2026-04-08T12:48:31.313708", "transaction_date": "2026-04-02", "tone_score": 0, "action_direction": "NONE", "topics": ["financials", "operations"], "processed_at": "2026-04-08T17:13:02.245396"}} +{"text": "Intel's Executive Vice President and Chief Legal Officer, April Miller Boise, will separate from the company effective June 1, 2026, and receive severance benefits in accordance with the Intel Corporation Executive Severance Plan.", "metadata": {"ticker": "INTC", "form_type": "8-K", "filed_at": "2026-04-03", "accession_no": "0000050863-26-000069", "url": "https://www.sec.gov/Archives/edgar/data/50863/000005086326000069/intc-20260330.htm", "ingested_at": "2026-04-08T12:48:45.429994", "transaction_date": "2026-03-30", "tone_score": 0, "action_direction": "NONE", "topics": ["Executive Departure", "Severance Benefits"], "processed_at": "2026-04-08T17:13:05.107708"}} +{"text": "Starbucks completed the transaction to form a joint venture with Boyu Capital, acquiring a 60% interest in its retail operations in China.", "metadata": {"ticker": "SBUX", "form_type": "8-K", "filed_at": "2026-04-02", "accession_no": "0000829224-26-000064", "url": "https://www.sec.gov/Archives/edgar/data/829224/000082922426000064/sbux-20260402.htm", "ingested_at": "2026-04-08T12:48:52.264984", "transaction_date": "2026-04-02", "tone_score": 0, "action_direction": "NONE", "topics": ["Mergers and Acquisitions", "China Operations"], "processed_at": "2026-04-08T17:13:07.495474"}} +{"text": "Cisco Systems, Inc. announces the departure of Director Daniel H. Schulman due to his new role at Verizon Communications Inc., and the appointment of Peter A. Shimer as a member of the Board effective April 6, 2026.", "metadata": {"ticker": "CSCO", "form_type": "8-K", "filed_at": "2026-04-06", "accession_no": "0000858877-26-000048", "url": "https://www.sec.gov/Archives/edgar/data/858877/000085887726000048/csco-20260331.htm", "ingested_at": "2026-04-08T12:48:37.896486", "transaction_date": "2026-04-04", "tone_score": 0, "action_direction": "NONE", "topics": ["Departure of Directors or Certain Officers; Election of Directors; Appointment of Certain Officers; Compensatory Arrangements of Certain Officers", "Indemnity Agreement"], "processed_at": "2026-04-08T17:13:11.452983"}} +{"text": "Grech Patricia Y (Svp, Chief Accounting Officer) of QCOM sold 85 shares worth $10,667.50 under a pre-planned 10b5-1 trading plan.", "metadata": {"ticker": "QCOM", "form_type": "4", "filed_at": "2026-04-02", "accession_no": "0000804328-26-000051", "url": "https://www.sec.gov/Archives/edgar/data/804328/000080432826000051/xslF345X06/edgardoc.xml", "ingested_at": "2026-04-08T12:48:39.267926", "transaction_date": "2026-04-02", "tone_score": -1, "action_direction": "SELL", "topics": ["Insider Trading", "Form 4"], "processed_at": "2026-04-08T17:13:11.453080"}} +{"text": "MCLAUGHLIN MARK D (Other) of QCOM acquired (via RSU vesting) 538 shares worth $0.00.", "metadata": {"ticker": "QCOM", "form_type": "4", "filed_at": "2026-04-02", "accession_no": "0000804328-26-000049", "url": "https://www.sec.gov/Archives/edgar/data/804328/000080432826000049/xslF345X06/edgardoc.xml", "ingested_at": "2026-04-08T12:48:39.472942", "transaction_date": "2026-03-31", "tone_score": 0, "action_direction": "ACQUIRE/VEST", "topics": ["Insider Trading", "Form 4"], "processed_at": "2026-04-08T17:13:11.453107"}} +{"text": "TRICOIRE JEAN-PASCAL (Other) of QCOM acquired (via RSU vesting) 262 shares worth $0.00.", "metadata": {"ticker": "QCOM", "form_type": "4", "filed_at": "2026-04-02", "accession_no": "0000804328-26-000048", "url": "https://www.sec.gov/Archives/edgar/data/804328/000080432826000048/xslF345X06/edgardoc.xml", "ingested_at": "2026-04-08T12:48:39.683945", "transaction_date": "2026-03-31", "tone_score": 0, "action_direction": "ACQUIRE/VEST", "topics": ["Insider Trading", "Form 4"], "processed_at": "2026-04-08T17:13:11.453126"}} +{"text": "Booking Holdings Inc. filed an amendment to its Restated Certificate of Incorporation to effect a 25-for-1 forward stock split and increase authorized common stock from 1B to 25B shares.", "metadata": {"ticker": "BKNG", "form_type": "8-K", "filed_at": "2026-04-02", "accession_no": "0000950157-26-000465", "url": "https://www.sec.gov/Archives/edgar/data/1075531/000095015726000465/form8-k.htm", "ingested_at": "2026-04-08T12:48:50.322210", "transaction_date": "2026-04-02", "tone_score": 0, "action_direction": "NONE", "topics": ["corporate action", "stock split"], "processed_at": "2026-04-08T17:13:14.127822"}} +{"text": "Booking Holdings Inc. appoints Caroline Sullivan as Senior Vice President, Chief Accounting Officer, and Controller.", "metadata": {"ticker": "BKNG", "form_type": "8-K", "filed_at": "2026-04-02", "accession_no": "0001075531-26-000014", "url": "https://www.sec.gov/Archives/edgar/data/1075531/000107553126000014/bkng-20260402.htm", "ingested_at": "2026-04-08T12:48:50.613430", "transaction_date": "2026-04-02", "tone_score": 0, "action_direction": "NONE", "topics": ["Executive Appointments", "Compensation", "Employment Agreements"], "processed_at": "2026-04-08T17:13:16.442511"}} +{"text": "Appointment of Director Kurt Sievers and retirement of Director Lynn Radakovich. Mr. Sievers will be compensated in accordance with the Company's non-employee director compensation program.", "metadata": {"ticker": "BKNG", "form_type": "8-K", "filed_at": "2026-04-01", "accession_no": "0001075531-26-000012", "url": "https://www.sec.gov/Archives/edgar/data/1075531/000107553126000012/bkng-20260401.htm", "ingested_at": "2026-04-08T12:48:50.961407", "transaction_date": "2026-04-01", "tone_score": 0, "action_direction": "NONE", "topics": ["Director Appointment", "Director Retirement"], "processed_at": "2026-04-08T17:13:19.071263"}} diff --git a/Data/3_Gold_Semantic/SEC_Insider_Trades/2026-04-09/qdrant_ready.jsonl b/Data/3_Gold_Semantic/SEC_Insider_Trades/2026-04-09/qdrant_ready.jsonl new file mode 100644 index 0000000..846abaf --- /dev/null +++ b/Data/3_Gold_Semantic/SEC_Insider_Trades/2026-04-09/qdrant_ready.jsonl @@ -0,0 +1,4 @@ +{"text": "Papermaster Mark D (Chief Technology Officer & Evp) of AMD sold 3,293 shares worth $740,925.00 under a pre-planned 10b5-1 trading plan.", "metadata": {"ticker": "AMD", "form_type": "4", "filed_at": "2026-04-08", "accession_no": "0000002488-26-000064", "url": "https://www.sec.gov/Archives/edgar/data/2488/000000248826000064/xslF345X06/wk-form4_1775679123.xml", "ingested_at": "2026-04-09T14:35:22.976531", "transaction_date": "2026-04-06", "tone_score": -1, "action_direction": "SELL", "topics": ["Insider Trading", "Form 4"], "processed_at": "2026-04-09T14:45:22.544421"}} +{"text": "BREWER BRADY (Ceo, International) of SBUX sold 1,641 shares worth $147,690.00 under a pre-planned 10b5-1 trading plan.", "metadata": {"ticker": "SBUX", "form_type": "4", "filed_at": "2026-04-08", "accession_no": "0000829224-26-000066", "url": "https://www.sec.gov/Archives/edgar/data/829224/000082922426000066/xslF345X06/form4.xml", "ingested_at": "2026-04-09T14:35:32.974848", "transaction_date": "2026-04-06", "tone_score": -1, "action_direction": "SELL", "topics": ["Insider Trading", "Form 4"], "processed_at": "2026-04-09T14:45:22.544884"}} +{"text": "Intel repurchased Apollo-managed funds' 49% equity interest in their joint venture related to Intel's Fab 34 in Ireland for $14.2 billion, financed by cash on hand and a bridge loan.", "metadata": {"ticker": "INTC", "form_type": "8-K", "filed_at": "2026-04-08", "accession_no": "0000050863-26-000072", "url": "https://www.sec.gov/Archives/edgar/data/50863/000005086326000072/intc-20260408.htm", "ingested_at": "2026-04-09T14:35:30.225494", "transaction_date": "2026-04-08", "tone_score": 0, "action_direction": "NONE", "topics": ["MergersAndAcquisitions", "FinancialTransactions"], "processed_at": "2026-04-09T14:45:34.974364"}} +{"text": "Amazon.com, Inc. (Registrant) filed a Current Report on Form 8-K with the Securities and Exchange Commission, disclosing Regulation FD Disclosure and Financial Statements and Exhibits.", "metadata": {"ticker": "AMZN", "form_type": "8-K", "filed_at": "2026-04-09", "accession_no": "0001104659-26-041034", "url": "https://www.sec.gov/Archives/edgar/data/1018724/000110465926041034/tm263815d2_8k.htm", "ingested_at": "2026-04-09T14:35:16.491691", "transaction_date": "2026-04-09", "tone_score": 0, "action_direction": "NONE", "topics": ["REGULATION FD DISCLOSURE", "FINANCIAL STATEMENTS AND EXHIBITS"], "processed_at": "2026-04-09T14:45:37.997412"}} diff --git a/Data/3_Gold_Semantic/SEC_Insider_Trades/2026-04-10/qdrant_ready.jsonl b/Data/3_Gold_Semantic/SEC_Insider_Trades/2026-04-10/qdrant_ready.jsonl new file mode 100644 index 0000000..480615d --- /dev/null +++ b/Data/3_Gold_Semantic/SEC_Insider_Trades/2026-04-10/qdrant_ready.jsonl @@ -0,0 +1,6 @@ +{"text": "Sondel Michael (Cao (Principal Acct. Officer)) of ADI acquired (via RSU vesting) 1,341 shares worth $0.00.", "metadata": {"ticker": "ADI", "form_type": "4", "filed_at": "2026-04-09", "accession_no": "0000006281-26-000043", "url": "https://www.sec.gov/Archives/edgar/data/6281/000000628126000043/xslF345X06/wk-form4_1775768645.xml", "ingested_at": "2026-04-10T16:09:14.401049", "transaction_date": "2026-04-07", "tone_score": 0, "action_direction": "ACQUIRE/VEST", "topics": ["Insider Trading", "Form 4"], "processed_at": "2026-04-10T16:11:29.861888"}} +{"text": "ROCHE VINCENT (Chair & Ceo) of ADI acquired (via RSU vesting) 19,712 shares worth $0.00.", "metadata": {"ticker": "ADI", "form_type": "4", "filed_at": "2026-04-09", "accession_no": "0000006281-26-000042", "url": "https://www.sec.gov/Archives/edgar/data/6281/000000628126000042/xslF345X06/wk-form4_1775768622.xml", "ingested_at": "2026-04-10T16:09:14.605836", "transaction_date": "2026-04-07", "tone_score": 0, "action_direction": "ACQUIRE/VEST", "topics": ["Insider Trading", "Form 4"], "processed_at": "2026-04-10T16:11:29.861934"}} +{"text": "Puccio Richard C Jr (Evp And Cfo) of ADI acquired (via RSU vesting) 6,513 shares worth $0.00.", "metadata": {"ticker": "ADI", "form_type": "4", "filed_at": "2026-04-09", "accession_no": "0000006281-26-000041", "url": "https://www.sec.gov/Archives/edgar/data/6281/000000628126000041/xslF345X06/wk-form4_1775768603.xml", "ingested_at": "2026-04-10T16:09:14.817000", "transaction_date": "2026-04-07", "tone_score": 0, "action_direction": "ACQUIRE/VEST", "topics": ["Insider Trading", "Form 4"], "processed_at": "2026-04-10T16:11:29.861954"}} +{"text": "Nakamura Katsufumi (Svp, Chief Customer Officer) of ADI acquired (via RSU vesting) 4,085 shares worth $0.00.", "metadata": {"ticker": "ADI", "form_type": "4", "filed_at": "2026-04-09", "accession_no": "0000006281-26-000040", "url": "https://www.sec.gov/Archives/edgar/data/6281/000000628126000040/xslF345X06/wk-form4_1775768583.xml", "ingested_at": "2026-04-10T16:09:15.042283", "transaction_date": "2026-04-07", "tone_score": 0, "action_direction": "ACQUIRE/VEST", "topics": ["Insider Trading", "Form 4"], "processed_at": "2026-04-10T16:11:29.861968"}} +{"text": "Jain Vivek (Evp, Global Operations) of ADI acquired (via RSU vesting) 6,734 shares worth $0.00.", "metadata": {"ticker": "ADI", "form_type": "4", "filed_at": "2026-04-09", "accession_no": "0000006281-26-000039", "url": "https://www.sec.gov/Archives/edgar/data/6281/000000628126000039/xslF345X06/wk-form4_1775768561.xml", "ingested_at": "2026-04-10T16:09:15.241550", "transaction_date": "2026-04-07", "tone_score": 0, "action_direction": "ACQUIRE/VEST", "topics": ["Insider Trading", "Form 4"], "processed_at": "2026-04-10T16:11:29.861982"}} +{"text": "Cotter Martin (Svp, Vertical Business Units) of ADI acquired (via RSU vesting) 5,807 shares worth $0.00.", "metadata": {"ticker": "ADI", "form_type": "4", "filed_at": "2026-04-09", "accession_no": "0000006281-26-000038", "url": "https://www.sec.gov/Archives/edgar/data/6281/000000628126000038/xslF345X06/wk-form4_1775768544.xml", "ingested_at": "2026-04-10T16:09:15.424624", "transaction_date": "2026-04-07", "tone_score": 0, "action_direction": "ACQUIRE/VEST", "topics": ["Insider Trading", "Form 4"], "processed_at": "2026-04-10T16:11:29.861994"}} From 9616e6ef23d3c7c7f1b1418856d14b50370651a1 Mon Sep 17 00:00:00 2001 From: "Xinxin(Maxine)" Date: Fri, 24 Apr 2026 15:22:42 -0400 Subject: [PATCH 43/50] upload test module --- Scripts/main.py | 13 + Scripts/tests/router_e2e_queries.json | 42 ++ Scripts/tests/test_master_retriever.py | 126 +++++ Scripts/tests/test_router_e2e.py | 670 +++++++++++++++++++++++++ 4 files changed, 851 insertions(+) create mode 100644 Scripts/main.py create mode 100644 Scripts/tests/router_e2e_queries.json create mode 100644 Scripts/tests/test_master_retriever.py create mode 100644 Scripts/tests/test_router_e2e.py diff --git a/Scripts/main.py b/Scripts/main.py new file mode 100644 index 0000000..2d600ae --- /dev/null +++ b/Scripts/main.py @@ -0,0 +1,13 @@ +"""Thin CLI shell — delegates to ``Scripts.orchestration.cli``. + +Kept for backward compatibility with existing shortcuts like +``python Scripts/main.py ingest --dry-run``. New invocations should +prefer ``python -m Scripts ingest --dry-run`` which is exactly +equivalent but stays robust under packaging / PyInstaller. +""" +from __future__ import annotations + +from Scripts.orchestration.cli import main + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/Scripts/tests/router_e2e_queries.json b/Scripts/tests/router_e2e_queries.json new file mode 100644 index 0000000..85365d8 --- /dev/null +++ b/Scripts/tests/router_e2e_queries.json @@ -0,0 +1,42 @@ +{ + "schema_version": "1.0", + "description": "End-to-end router test catalogue. Each case is designed to exercise a distinct slice of the retrieval matrix (Silver options vs Silver macro vs Gold news vs Gold SEC) and a distinct time window. Consumed by Scripts/tests/test_router_e2e.py — do NOT rely on ordering, the harness keys on `name`.", + "last_reviewed": "2026-04-22", + "cases": [ + { + "name": "SEC Gold - Insider Flow Driven", + "query": "Given the recent AAPL Form-4 executive selling activity over the past month, how should I position with options if I still expect short-term momentum?", + "expected_sources": ["sec", "options"], + "expected_time_window": "past_month", + "notes": "Targets SEC Form-4 Qdrant path (action_direction=SELL filter) combined with current options chain. Tests the Critic's insider-vs-IV contradiction backstop when IV happens to be elevated." + }, + { + "name": "News Gold + Commodity ETF - Geopolitics", + "query": "How are escalating Middle East tensions and geopolitical-risk news from the past week moving gold, and what GLD options exposure would you consider?", + "expected_sources": ["news", "options", "macro_history"], + "expected_time_window": "past_week", + "notes": "Targets news topic `macro_geopolitics_risk` + `asset_precious_metals_spot`, plus GPR index from macro, plus GLD options chain. Should route through HyDE expansion and surface GLD via impacted_assets." + }, + { + "name": "Macro Regime - FOMC & Yields", + "query": "How did the most recent FOMC decision and 10-year Treasury yields move over the past week, and what does that imply for SPY 30-DTE put protection?", + "expected_sources": ["news", "macro_history", "options"], + "expected_time_window": "past_week", + "notes": "Targets news topic `macro_central_banks` + macro parquet (^TNX, VIX) + SPY options chain. Tests that MasterRetriever widens news time window for weekly-cadence Gold sources while keeping options Silver on a daily anchor." + }, + { + "name": "Cross-Asset Regime - IV vs VIX Divergence", + "query": "Compare QQQ's current ATM implied volatility against VIX over the past month. Is there a divergence, and if so what index-level hedge would you suggest?", + "expected_sources": ["options", "macro_history"], + "expected_time_window": "past_month", + "notes": "Exercises macro + options cross-join. QQQ has options Silver, VIX is macro Silver; no news/SEC expected. Tests IV-regime pinning in AnalystState across revisions." + }, + { + "name": "Options Silver - Single Name Liquidity", + "query": "What is AAPL's today Put/Call Ratio, IV Skew, and which 30-DTE strikes are most liquid today? Based on this, would you recommend selling near-the-money strangles?", + "expected_sources": ["options"], + "expected_time_window": "today", + "notes": "Exercises Silver options dispatcher for PCR + IV Skew + liquidity scan on a fully-covered Nasdaq-100 single-name. Route should resolve to hybrid_both (PCR primary)." + } + ] +} diff --git a/Scripts/tests/test_master_retriever.py b/Scripts/tests/test_master_retriever.py new file mode 100644 index 0000000..2ba64bc --- /dev/null +++ b/Scripts/tests/test_master_retriever.py @@ -0,0 +1,126 @@ +""" +test_master_retriever.py + +Financial RAG architecture - end-to-end test for the MasterRetriever facade. +Scope: multi-scenario concurrent retrieval tests, failure isolation checks, +and daily-rotating audit log output. +""" + +import asyncio +import logging +import sys +from datetime import datetime +from pathlib import Path + +# Dynamic bootstrap: walk up three levels to resolve project root. +project_root = Path(__file__).parent.parent.parent.resolve() +sys.path.append(str(project_root)) + +# Import retrieval components via package exports. +from Scripts.retrieval import QueryTransformer, MasterRetriever, QueryIntent + +# ========================================== +# 1. Production-style test logging setup +# ========================================== +def setup_test_logger(): + """Configure daily partitioned test logs at logs/test/YYYY-MM-DD/.""" + today = datetime.now().strftime("%Y-%m-%d") + log_dir = project_root / "logs" / "test" / today + log_dir.mkdir(parents=True, exist_ok=True) + + timestamp = datetime.now().strftime("%H%M%S") + log_file = log_dir / f"master_retriever_test_{timestamp}.log" + + logger = logging.getLogger("TestAudit") + logger.setLevel(logging.DEBUG) + + # Avoid duplicate handler registration. + if not logger.handlers: + # 1) File sink. + fh = logging.FileHandler(log_file, encoding='utf-8') + fh.setLevel(logging.DEBUG) + + # 2) Console sink. + ch = logging.StreamHandler(sys.stdout) + ch.setLevel(logging.INFO) + + formatter = logging.Formatter('%(asctime)s | %(levelname)s | %(message)s') + fh.setFormatter(formatter) + ch.setFormatter(formatter) + + logger.addHandler(fh) + logger.addHandler(ch) + + return logger, log_file + +# ========================================== +# 2. Concurrent retrieval E2E orchestration +# ========================================== +async def run_tests(): + logger, log_path = setup_test_logger() + logger.info("==================================================") + logger.info("🚀 Starting MasterRetriever E2E test") + logger.info(f"📁 Audit log file: {log_path}") + logger.info("==================================================") + + try: + # API surface check: verify package exports resolve correctly. + _ = QueryTransformer + _ = QueryIntent + + logger.info("⏳ Initializing MasterRetriever...") + master_retriever = MasterRetriever() + master_retriever.gold_timeout = 6.0 + master_retriever.silver_timeout = 10.0 + logger.info("✅ System components initialized.\n") + except Exception as e: + logger.error(f"❌ Startup failed, please check environment: {e}", exc_info=True) + return + + # Three representative financial queries. + test_queries = [ + # Query 1: Quant-heavy options case (primarily stresses Silver). + "What is the current IV Skew and Put/Call Ratio for AAPL?", + + # Query 2: Qualitative macro/geopolitical case (stresses Gold and cross-modal retrieval). + "How did the recent spike in Geopolitical Risk (GPR) index affect SPY's macro trend?", + + # Query 3: Hybrid complex case (tests SEC filtering and liquidity assessment). + "Did AAPL executives' Form 4 insider selling last week negatively impact the options market liquidity?" + ] + + for idx, query in enumerate(test_queries, 1): + logger.info(f"▶️ [TEST {idx}/3] Query: '{query}'") + + try: + # Step 1: Trigger black-box retrieval through MasterRetriever. + # Intent routing and transformation are handled internally by retrieve(). + logger.info(" [1] Triggering MasterRetriever (Gold & Silver concurrency)...") + results = await master_retriever.retrieve(user_query=query) + + # Step 2: Result assertion and reporting. + gold_count = len(results["gold_context"]) + silver_keys = list(results["silver_context"].get("values", {}).keys()) + + logger.info(" [2] Retrieval result summary:") + logger.info(f" - 🥇 Gold (Qdrant): Retrieved {gold_count} text chunks.") + logger.info(f" - 🥈 Silver (SQL): Computed {len(silver_keys)} metrics: {silver_keys}") + + # Print lineage anchors if present. + anchors = results["silver_context"].get("lineage_anchors", []) + if anchors: + logger.info(f" - 🔗 Data lineage: captured {len(anchors)} underlying anchors.") + + except Exception as e: + logger.error(f"❌ Query execution failed: {str(e)}", exc_info=True) + + logger.info("-" * 60 + "\n") + + logger.info("🎉 All tests completed.") + +if __name__ == "__main__": + # Windows-specific asyncio policy optimization. + if sys.platform == "win32": + asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy()) + + asyncio.run(run_tests()) \ No newline at end of file diff --git a/Scripts/tests/test_router_e2e.py b/Scripts/tests/test_router_e2e.py new file mode 100644 index 0000000..36f98c3 --- /dev/null +++ b/Scripts/tests/test_router_e2e.py @@ -0,0 +1,670 @@ +""" +Output tree (one run): + + logs/router_e2e/ + 2026-04-21/ + 20260421_103015_console.log + 20260421_103015_run_summary.json + 20260421_103015_01_happy_path_trace.jsonl + 20260421_103015_01_happy_path_final_state.json + 20260421_103015_01_happy_path_summary.json + 20260421_103015_02_critic_trap_trace.jsonl + ... +""" + +from __future__ import annotations + +import asyncio +import json +import logging +import os +import re +import sys +import time +import traceback +from datetime import date, datetime +from pathlib import Path +from typing import Any, Dict, List, Optional + +# ----------------------------------------------------------------------------- +# Path bootstrap — this lets the test run standalone (python -m, pytest, or +# `python Scripts/tests/test_router_e2e.py`) without external PYTHONPATH. +# ----------------------------------------------------------------------------- +PROJECT_ROOT = Path(__file__).resolve().parents[2] +if str(PROJECT_ROOT) not in sys.path: + sys.path.insert(0, str(PROJECT_ROOT)) + +from pydantic import BaseModel # noqa: E402 + +from Scripts.agents.router import build_financial_rag_graph # noqa: E402 +from Scripts.agents.state import AgentFeedback # noqa: E402 + + +# ============================================================================= +# 0. Constants & log paths +# ============================================================================= + +_VALID_VERDICTS = {"pass", "fatal", "minor", None} +_VALID_SEVERITIES = {"Fatal", "Minor"} +_REQUIRED_TIMERANGE_KEYS = { + "time_window_label", "window_days", "anchor_date", + "start_date", "end_date", "is_default_window_applied", +} +_REQUIRED_HYDE_KEYS = {"paragraph", "novel_tickers", "whitelisted_tickers"} +_REQUIRED_FINAL_KEYS = {"status", "final_report", "evidence_links", "confidence_score"} +_MIN_DRAFT_LEN = 120 # below this the draft is suspicious + +# Larger than the worst-case path (retrieval + analyst×3 + checker×3 + critic×3 +# + finalizer ≈ 11) so the circuit-breaker fires before the recursion limit. +_RECURSION_LIMIT = 20 + +_DATE_STR = datetime.now().strftime("%Y-%m-%d") +_RUN_TS = datetime.now().strftime("%Y%m%d_%H%M%S") + +LOG_ROOT = PROJECT_ROOT / "logs" / "router_e2e" / _DATE_STR +LOG_ROOT.mkdir(parents=True, exist_ok=True) + + +# ============================================================================= +# 1. Logging — dual sink (console + file) attached to the root logger so every +# agent / retriever INFO line shows up in the audit artefact. +# ============================================================================= + +def _configure_logging() -> Path: + console_log_path = LOG_ROOT / f"{_RUN_TS}_console.log" + fmt = "%(asctime)s | %(levelname)s | %(name)s | %(message)s" + + root = logging.getLogger() + root.setLevel(logging.INFO) + + # Remove any pre-existing handlers (pytest reruns / REPL), then attach ours. + for h in list(root.handlers): + root.removeHandler(h) + + stream_handler = logging.StreamHandler() + stream_handler.setFormatter(logging.Formatter(fmt)) + root.addHandler(stream_handler) + + file_handler = logging.FileHandler(console_log_path, encoding="utf-8") + file_handler.setFormatter(logging.Formatter(fmt)) + root.addHandler(file_handler) + + # Silence over-noisy HTTP stack; we only care about agent/retriever signal. + for noisy in ("httpx", "httpcore", "urllib3"): + logging.getLogger(noisy).setLevel(logging.WARNING) + + return console_log_path + + +logger = logging.getLogger("RouterE2E") + + +# ============================================================================= +# 2. Serialisation helpers (Pydantic-safe) +# ============================================================================= + +def _to_jsonable(obj: Any, max_str: int = 2000) -> Any: + """Recursively convert Pydantic models / dates / sets into JSON-safe data. + + max_str truncates individual string fields to keep trace files readable — + draft_report can be multi-KB and we only need a fingerprint in the trace. + """ + if obj is None or isinstance(obj, (bool, int, float)): + return obj + if isinstance(obj, str): + return obj if len(obj) <= max_str else obj[:max_str] + f"...(+{len(obj) - max_str} chars)" + if isinstance(obj, (datetime, date)): + return obj.isoformat() + if isinstance(obj, BaseModel): + return _to_jsonable(obj.model_dump(), max_str) + if isinstance(obj, dict): + return {str(k): _to_jsonable(v, max_str) for k, v in obj.items()} + if isinstance(obj, (list, tuple, set)): + return [_to_jsonable(x, max_str) for x in obj] + # Fallback: best-effort repr — never raise. + try: + return str(obj)[:max_str] + except Exception: + return f"" + + +def _slugify(text: str, max_len: int = 40) -> str: + """Filesystem-safe slug for the test case name.""" + s = re.sub(r"[^a-zA-Z0-9_-]+", "_", text.strip().lower()) + s = re.sub(r"_+", "_", s).strip("_") + return s[:max_len] or "unnamed" + + +# ============================================================================= +# 3. Per-node audit functions +# ----------------------------------------------------------------------------- +# Each function receives the delta for the node (what LangGraph merged into +# state from THAT node's return) and the cumulative merged state assembled by +# the harness. It returns: +# (audit_dict, assertion_failures) +# where assertion_failures is a list[str] — empty == clean node. +# ============================================================================= + +def _audit_retrieval_master(delta: Dict[str, Any], merged: Dict[str, Any]): + audit: Dict[str, Any] = {} + fails: List[str] = [] + + meta = delta.get("metadata") + tr = delta.get("time_range") or {} + he = delta.get("hyde_anticipation") or {} + silver = delta.get("silver_context") or {} + gold = delta.get("gold_context") or [] + macro = delta.get("macro_context") or "" + + audit["metadata_present"] = meta is not None + audit["gold_chunks"] = len(gold) + audit["silver_values_n"] = len(silver.get("values", {}) or {}) + audit["silver_source_channel"] = silver.get("source_channel") + audit["silver_has_compensation"] = "compensation" in silver + audit["time_range_keys"] = sorted(tr.keys()) + audit["time_range_label"] = tr.get("time_window_label") + audit["time_range_days"] = tr.get("window_days") + audit["time_range_start"] = tr.get("start_date") + audit["time_range_end"] = tr.get("end_date") + audit["default_window_applied"] = tr.get("is_default_window_applied") + audit["hyde_paragraph_len"] = len(he.get("paragraph", "")) if isinstance(he, dict) else 0 + audit["hyde_whitelisted"] = he.get("whitelisted_tickers") if isinstance(he, dict) else None + audit["hyde_novel_tickers"] = he.get("novel_tickers") if isinstance(he, dict) else None + audit["hyde_source_channel"] = he.get("source_channel") if isinstance(he, dict) else None + audit["macro_context_bytes"] = len(macro) + audit["is_fallback"] = bool(delta.get("is_fallback", False)) + audit["revision_count_reset_to_zero"] = delta.get("revision_count") == 0 + + if meta is None: + fails.append("retrieval_master: metadata is None (transformer failed)") + missing_tr = _REQUIRED_TIMERANGE_KEYS - set(tr.keys()) + if missing_tr: + fails.append(f"retrieval_master: time_range missing keys {sorted(missing_tr)}") + if not isinstance(he, dict): + fails.append("retrieval_master: hyde_anticipation is not a dict") + else: + missing_he = _REQUIRED_HYDE_KEYS - set(he.keys()) + if missing_he: + fails.append(f"retrieval_master: hyde_anticipation missing keys {sorted(missing_he)}") + if silver.get("source_channel") not in ("primary", "hyde_expansion", None): + fails.append(f"retrieval_master: unexpected silver source_channel={silver.get('source_channel')}") + if delta.get("revision_count") != 0: + fails.append("retrieval_master: revision_count not initialised to 0") + if delta.get("checker_verdict") is not None: + fails.append("retrieval_master: checker_verdict should be None at graph entry") + if delta.get("critic_verdict") is not None: + fails.append("retrieval_master: critic_verdict should be None at graph entry") + + return audit, fails + + +def _audit_analyst(delta: Dict[str, Any], merged: Dict[str, Any]): + audit: Dict[str, Any] = {} + fails: List[str] = [] + + draft = delta.get("draft_report") or "" + rev = delta.get("revision_count") + + audit["draft_len"] = len(draft) + audit["draft_preview"] = draft[:240] + audit["revision_count_after"] = rev + audit["checker_verdict_reset"] = delta.get("checker_verdict") is None + audit["critic_verdict_reset"] = delta.get("critic_verdict") is None + + if not isinstance(rev, int) or rev < 1: + fails.append(f"analyst: revision_count must be >=1, got {rev!r}") + if len(draft) < _MIN_DRAFT_LEN: + fails.append(f"analyst: draft too short ({len(draft)} chars < {_MIN_DRAFT_LEN})") + if delta.get("checker_verdict") is not None: + fails.append("analyst: must reset checker_verdict to None for the new revision") + if delta.get("critic_verdict") is not None: + fails.append("analyst: must reset critic_verdict to None for the new revision") + + return audit, fails + + +def _audit_checker(delta: Dict[str, Any], merged: Dict[str, Any]): + audit: Dict[str, Any] = {} + fails: List[str] = [] + + verdict = delta.get("checker_verdict") + new_fb = delta.get("critic_feedback", []) or [] + + audit["checker_verdict"] = verdict + audit["new_feedback_items"] = len(new_fb) + audit["silver_context_refreshed"] = "silver_context" in delta + + senders: List[str] = [] + severities: List[str] = [] + rev_indices: List[Any] = [] + for f in new_fb: + if isinstance(f, BaseModel): + d = f.model_dump() + elif isinstance(f, dict): + d = f + else: + fails.append(f"checker: feedback item of unexpected type {type(f).__name__}") + continue + senders.append(d.get("sender")) + severities.append(d.get("error_type")) + rev_indices.append(d.get("revision_index")) + + audit["feedback_senders"] = senders + audit["feedback_severities"] = severities + audit["feedback_revision_indices"] = rev_indices + + if verdict not in _VALID_VERDICTS: + fails.append(f"checker: verdict={verdict!r} not in {_VALID_VERDICTS}") + for sv in severities: + if sv not in _VALID_SEVERITIES: + fails.append(f"checker: feedback severity {sv!r} not in {_VALID_SEVERITIES}") + # Every feedback this node emitted should be stamped by the Checker. + if any(s != "Checker" for s in senders): + fails.append(f"checker: found non-Checker senders in its delta: {senders}") + cur_rev = merged.get("revision_count", 0) + if any(ri is None for ri in rev_indices): + fails.append("checker: at least one feedback item has revision_index=None") + elif any(ri != cur_rev for ri in rev_indices): + fails.append( + f"checker: feedback revision_index {rev_indices} does not match current revision {cur_rev}" + ) + # Sanity: if verdict=="fatal" there MUST be at least one Fatal feedback to + # justify the routing decision. + if verdict == "fatal" and not any(s == "Fatal" for s in severities): + # Fatal verdict without any Fatal entry → router will re-run analyst + # on empty ammo. Architectural smell. + fails.append("checker: verdict=fatal but no Fatal severity in the delta feedback") + + return audit, fails + + +def _audit_critic(delta: Dict[str, Any], merged: Dict[str, Any]): + audit: Dict[str, Any] = {} + fails: List[str] = [] + + verdict = delta.get("critic_verdict") + new_fb = delta.get("critic_feedback", []) or [] + + audit["critic_verdict"] = verdict + audit["new_feedback_items"] = len(new_fb) + + senders: List[str] = [] + severities: List[str] = [] + rev_indices: List[Any] = [] + for f in new_fb: + if isinstance(f, BaseModel): + d = f.model_dump() + elif isinstance(f, dict): + d = f + else: + fails.append(f"critic: feedback item of unexpected type {type(f).__name__}") + continue + senders.append(d.get("sender")) + severities.append(d.get("error_type")) + rev_indices.append(d.get("revision_index")) + + audit["feedback_senders"] = senders + audit["feedback_severities"] = severities + audit["feedback_revision_indices"] = rev_indices + + if verdict not in _VALID_VERDICTS: + fails.append(f"critic: verdict={verdict!r} not in {_VALID_VERDICTS}") + for sv in severities: + if sv not in _VALID_SEVERITIES: + fails.append(f"critic: feedback severity {sv!r} not in {_VALID_SEVERITIES}") + if any(s != "Critic" for s in senders): + fails.append(f"critic: found non-Critic senders in its delta: {senders}") + cur_rev = merged.get("revision_count", 0) + if any(ri is None for ri in rev_indices): + fails.append("critic: at least one feedback item has revision_index=None") + elif any(ri != cur_rev for ri in rev_indices): + fails.append( + f"critic: feedback revision_index {rev_indices} does not match current revision {cur_rev}" + ) + if verdict == "fatal" and not any(s == "Fatal" for s in severities): + fails.append("critic: verdict=fatal but no Fatal severity in the delta feedback") + + return audit, fails + + +def _audit_finalizer(delta: Dict[str, Any], merged: Dict[str, Any]): + audit: Dict[str, Any] = {} + fails: List[str] = [] + + final = delta.get("final_strategy") or {} + audit["final_status"] = final.get("status") + audit["confidence_score"] = final.get("confidence_score") + audit["evidence_links_n"] = len(final.get("evidence_links", []) or []) + audit["has_markdown"] = bool(final.get("markdown")) + audit["final_report_keys"] = sorted((final.get("final_report") or {}).keys()) + + missing = _REQUIRED_FINAL_KEYS - set(final.keys()) + if missing: + fails.append(f"finalizer: final_strategy missing keys {sorted(missing)}") + if final.get("status") not in ("complete", "degraded"): + fails.append(f"finalizer: status={final.get('status')!r} not in {{complete, degraded}}") + cs = final.get("confidence_score") + if not isinstance(cs, (int, float)) or not (0.0 <= float(cs) <= 1.0): + fails.append(f"finalizer: confidence_score={cs!r} out of [0,1]") + return audit, fails + + +NODE_AUDITORS = { + "retrieval_master": _audit_retrieval_master, + "analyst": _audit_analyst, + "checker": _audit_checker, + "critic": _audit_critic, + "finalizer": _audit_finalizer, +} + + +# ============================================================================= +# 4. Merged-state accumulator +# ----------------------------------------------------------------------------- +# LangGraph's stream_mode="updates" yields ONLY the per-node delta. To validate +# assertions that need whole-state context (e.g. revision_count at the moment +# Checker writes its verdict) we maintain our own merged view, honouring the +# AgentState `operator.add` semantics for `critic_feedback`. +# ============================================================================= + +def _merge_delta(merged: Dict[str, Any], delta: Dict[str, Any]) -> None: + for k, v in delta.items(): + if k == "critic_feedback": + prior = merged.get("critic_feedback") or [] + merged["critic_feedback"] = list(prior) + list(v or []) + else: + merged[k] = v + + +# ============================================================================= +# 5. Single-test runner +# ============================================================================= + +async def run_single_test( + graph, + test_idx: int, + test_name: str, + query: str, + case_meta: Optional[Dict[str, Any]] = None, +) -> Dict[str, Any]: + """Execute ONE LangGraph query; write trace/final_state/summary artefacts. + + Returns a compact summary dict that the caller aggregates into the run-level + summary. Exceptions are captured, not re-raised, so a broken test case + cannot abort the rest of the suite. + """ + slug = f"{test_idx:02d}_{_slugify(test_name)}" + trace_path = LOG_ROOT / f"{_RUN_TS}_{slug}_trace.jsonl" + final_state_path = LOG_ROOT / f"{_RUN_TS}_{slug}_final_state.json" + summary_path = LOG_ROOT / f"{_RUN_TS}_{slug}_summary.json" + + banner = f"{'=' * 80}\n🚀 [TEST {test_idx}] {test_name}\n❓ Query: {query}\n{'=' * 80}" + logger.info("\n" + banner) + + t_start = time.time() + merged_state: Dict[str, Any] = {"original_query": query} + node_executions: List[Dict[str, Any]] = [] + step = 0 + total_failures: List[str] = [] + + try: + with open(trace_path, "w", encoding="utf-8") as trace_fp: + # Header line — makes the JSONL self-describing for later replay. + trace_fp.write(json.dumps({ + "_meta": { + "test_idx": test_idx, + "test_name": test_name, + "query": query, + "run_ts": _RUN_TS, + "recursion_limit": _RECURSION_LIMIT, + "started_at": datetime.now().isoformat(), + # Catalogue metadata (expected_sources, expected_time_window, + # notes, …) is propagated verbatim so post-mortem tooling + # can diff actual vs. expected without re-reading the JSON. + "case_meta": case_meta or {}, + }, + }, ensure_ascii=False) + "\n") + trace_fp.flush() + + initial_state = {"original_query": query} + async for output in graph.astream( + initial_state, + config={"recursion_limit": _RECURSION_LIMIT}, + stream_mode="updates", + ): + for node_name, state_update in output.items(): + step += 1 + _merge_delta(merged_state, state_update) + + auditor = NODE_AUDITORS.get(node_name) + if auditor: + audit, fails = auditor(state_update, merged_state) + else: + audit, fails = {"note": "no auditor registered"}, [] + + total_failures.extend(f"[step {step}][{node_name}] {m}" for m in fails) + + # Per-node console line — bounded, no PII leak. + verdict_str = "" + if node_name == "checker": + verdict_str = f" | verdict={audit.get('checker_verdict')}" + elif node_name == "critic": + verdict_str = f" | verdict={audit.get('critic_verdict')}" + elif node_name == "finalizer": + verdict_str = f" | status={audit.get('final_status')}" + elif node_name == "analyst": + verdict_str = f" | rev={audit.get('revision_count_after')}" + elif node_name == "retrieval_master": + verdict_str = ( + f" | gold={audit.get('gold_chunks')}" + f" silver_vals={audit.get('silver_values_n')}" + f" tr={audit.get('time_range_start')}→{audit.get('time_range_end')}" + ) + fail_tag = f" ⚠️ FAILS={len(fails)}" if fails else "" + logger.info( + f"🟢 [Step {step:02d}] Node={node_name.upper()}{verdict_str}{fail_tag}" + ) + if fails: + for m in fails: + logger.warning(f" ↳ {m}") + + record = { + "step": step, + "timestamp": datetime.now().isoformat(), + "elapsed_s": round(time.time() - t_start, 3), + "node": node_name, + "delta_keys": sorted(state_update.keys()), + "audit": _to_jsonable(audit), + "assertion_failures": fails, + "delta_preview": _to_jsonable(state_update), + } + node_executions.append(record) + trace_fp.write(json.dumps(record, ensure_ascii=False) + "\n") + trace_fp.flush() + + elapsed = round(time.time() - t_start, 3) + final_state_json = _to_jsonable(merged_state) + + with open(final_state_path, "w", encoding="utf-8") as fp: + json.dump(final_state_json, fp, ensure_ascii=False, indent=2) + + final_strategy = merged_state.get("final_strategy") or {} + summary = { + "test_idx": test_idx, + "test_name": test_name, + "query": query, + "outcome": "ok", + "steps": step, + "elapsed_s": elapsed, + "revision_count": merged_state.get("revision_count"), + "is_fallback": merged_state.get("is_fallback"), + "final_status": final_strategy.get("status"), + "confidence_score": final_strategy.get("confidence_score"), + "final_report_produced": bool(final_strategy.get("final_report")), + "evidence_links_n": len(final_strategy.get("evidence_links", []) or []), + "total_feedback": len(merged_state.get("critic_feedback", []) or []), + "nodes_executed": [r["node"] for r in node_executions], + "assertion_failures_total": len(total_failures), + "assertion_failures": total_failures, + "artefacts": { + "trace": str(trace_path), + "final_state": str(final_state_path), + }, + } + with open(summary_path, "w", encoding="utf-8") as fp: + json.dump(summary, fp, ensure_ascii=False, indent=2) + + verdict_icon = "✅" if not total_failures and final_strategy.get("final_report") else ( + "⚠️" if final_strategy.get("final_report") else "❌" + ) + logger.info( + f"{verdict_icon} [TEST {test_idx}] Done in {elapsed}s | rev={summary['revision_count']} " + f"| final_status={summary['final_status']} | assertion_fails={len(total_failures)} | " + f"artefacts={summary_path.name}" + ) + return summary + + except Exception as e: + elapsed = round(time.time() - t_start, 3) + tb = traceback.format_exc() + logger.error(f"❌ [TEST {test_idx}] CRASHED after {elapsed}s: {type(e).__name__}: {e}") + crash_summary = { + "test_idx": test_idx, + "test_name": test_name, + "query": query, + "outcome": "crashed", + "steps": step, + "elapsed_s": elapsed, + "error_type": type(e).__name__, + "error_msg": str(e), + "traceback": tb, + "nodes_executed_before_crash": [r["node"] for r in node_executions], + "assertion_failures_before_crash": total_failures, + } + with open(summary_path, "w", encoding="utf-8") as fp: + json.dump(crash_summary, fp, ensure_ascii=False, indent=2) + return crash_summary + + +# ============================================================================= +# 6. Test catalogue & main +# ============================================================================= + +# Default path for the externalised catalogue. Overridable via the +# ROUTER_E2E_QUERIES env var for CI / ad-hoc runs without editing source. +_DEFAULT_QUERY_CATALOGUE = PROJECT_ROOT / "Scripts" / "tests" / "router_e2e_queries.json" + +# Inline fallback — mirrors the externalised file so the harness still +# runs if the JSON is missing or corrupt. Keep this list short; the +# JSON file is the source of truth for day-to-day edits. +_FALLBACK_TEST_CASES: List[Dict[str, str]] = [ + { + "name": "Happy Path - Quant Query", + "query": "What is the current Put/Call Ratio and IV Skew for AAPL?", + }, + { + "name": "Minimal Time Default - Six Months Fallback", + "query": "Show me the options sentiment for SPY.", + }, +] + + +def _load_test_cases(path: Optional[Path] = None) -> List[Dict[str, str]]: + """Load the query catalogue from JSON (source of truth) with a silent + fallback to the inline list. + + Contract expected of the JSON: + {"cases": [{"name": str, "query": str, ...}, ...]} + + Extra metadata (``expected_sources``, ``expected_time_window``, + ``notes``) is passed through untouched so future assertions can key + on it without schema changes here. + """ + path = path or Path(os.environ.get("ROUTER_E2E_QUERIES", _DEFAULT_QUERY_CATALOGUE)) + try: + with open(path, "r", encoding="utf-8") as fp: + payload = json.load(fp) + cases = payload.get("cases") or [] + # Minimal sanity-check — each case must carry at least a name + query. + cleaned = [ + c for c in cases + if isinstance(c, dict) and c.get("name") and c.get("query") + ] + if not cleaned: + logger.warning( + "Catalogue %s parsed but contained no valid cases — " + "falling back to inline defaults.", path, + ) + return _FALLBACK_TEST_CASES + logger.info("📂 Loaded %d query cases from %s", len(cleaned), path) + return cleaned + except FileNotFoundError: + logger.warning("Catalogue %s not found — using inline fallback.", path) + return _FALLBACK_TEST_CASES + except (json.JSONDecodeError, OSError) as exc: + logger.error( + "Catalogue %s is unreadable (%s) — using inline fallback.", + path, exc, + ) + return _FALLBACK_TEST_CASES + + +TEST_CASES: List[Dict[str, str]] = _load_test_cases() + + +async def main(): + console_log = _configure_logging() + logger.info(f"📝 Run log directory: {LOG_ROOT}") + logger.info(f"📝 Console mirror: {console_log}") + logger.info(f"📝 Run timestamp: {_RUN_TS}") + logger.info( + "📂 Query catalogue: %s (%d cases)", + os.environ.get("ROUTER_E2E_QUERIES", str(_DEFAULT_QUERY_CATALOGUE)), + len(TEST_CASES), + ) + + # Build the graph ONCE — singleton agents are already cached inside router. + graph = build_financial_rag_graph() + + run_summaries: List[Dict[str, Any]] = [] + for i, tc in enumerate(TEST_CASES, start=1): + # Strip the two mandatory keys so `case_meta` only carries extras + # (expected_sources, expected_time_window, notes, …) — keeps the + # JSONL trace clean and the diff against the catalogue obvious. + extras = {k: v for k, v in tc.items() if k not in ("name", "query")} + s = await run_single_test( + graph=graph, + test_idx=i, + test_name=tc["name"], + query=tc["query"], + case_meta=extras, + ) + run_summaries.append(s) + + aggregate = { + "run_ts": _RUN_TS, + "date": _DATE_STR, + "n_tests": len(run_summaries), + "n_ok": sum(1 for s in run_summaries if s.get("outcome") == "ok"), + "n_crashed": sum(1 for s in run_summaries if s.get("outcome") == "crashed"), + "n_with_assertion_failures": sum( + 1 for s in run_summaries if s.get("assertion_failures_total", 0) > 0 + ), + "tests": run_summaries, + "log_root": str(LOG_ROOT), + } + aggregate_path = LOG_ROOT / f"{_RUN_TS}_run_summary.json" + with open(aggregate_path, "w", encoding="utf-8") as fp: + json.dump(_to_jsonable(aggregate), fp, ensure_ascii=False, indent=2) + + logger.info("=" * 80) + logger.info( + f"🏁 RUN COMPLETE | ok={aggregate['n_ok']} | crashed={aggregate['n_crashed']} " + f"| with_assertion_failures={aggregate['n_with_assertion_failures']} | " + f"aggregate={aggregate_path.name}" + ) + logger.info("=" * 80) + + +if __name__ == "__main__": + asyncio.run(main()) From 96542a2ae757ad32a40deb474e80416459cba0fd Mon Sep 17 00:00:00 2001 From: "Xinxin(Maxine)" Date: Fri, 24 Apr 2026 15:23:31 -0400 Subject: [PATCH 44/50] update retrieval Scripts --- Scripts/retrieval/macro_parser.py | 317 +++++++++++++++++++++----- Scripts/retrieval/master_retriever.py | 115 +++++++++- Scripts/retrieval/time_adapter.py | 8 - 3 files changed, 360 insertions(+), 80 deletions(-) diff --git a/Scripts/retrieval/macro_parser.py b/Scripts/retrieval/macro_parser.py index e99e9da..f378821 100644 --- a/Scripts/retrieval/macro_parser.py +++ b/Scripts/retrieval/macro_parser.py @@ -1,53 +1,40 @@ """ -Macro-context parsing utilities. - -Background ----------- -The Analyst prompt mandates a "Macro Regime Snapshot" citing VIX / GSPC / -DXY / rates, but the Checker only recognises Silver ``lineage_anchors`` -and Gold ``bronze_ref``. Every macro number the Analyst cites was -therefore flagged *Fatal*, burning all three revisions and forcing -every run into degraded mode with confidence 0.3. - -The fix is architectural: promote the macro snapshot to a first-class -Silver citation source by parsing ``Data/Agent_Context/latest_macro_context.md`` -into ``(values, lineage_anchors)`` and merging them into -``silver_context`` before the Analyst draws its draft. - -Anchor naming uses a stable ``MACRO__`` convention -that the Finalizer already routes to the "Macro Data" UI category -(see ``finalizer.py:_collect_evidence_pool``). - -Why this lives in its own module --------------------------------- -* **Separation of concerns.** ``master_retriever.py`` is the *orchestrator*; - regex tables for a specific markdown format belong next to the data, - not next to the orchestration logic. -* **Testability.** ``Scripts/tests`` can target this module directly - without spinning up the Qdrant / SQL / LLM stack that - ``master_retriever.py`` drags in. -* **Schema evolution.** When the macro snapshot markdown changes shape, - the diff is localised to ~200 lines here — ``MasterRetriever`` is - untouched. - -The ticker-extraction helpers (``TICKER_RE`` / ``TICKER_STOPWORDS``) -share the same "markdown → retrieval metadata" concern and are -colocated for symmetry; the HyDE novel-ticker extractor in -``master_retriever.py`` imports them from here. - -Public surface --------------- -* ``parse_macro_snapshot(markdown) -> (values, snapshot_date)`` -* ``build_macro_silver_patch(macro_md, anchor_date) -> {values, lineage_anchors}`` -* ``TICKER_RE``, ``TICKER_STOPWORDS`` (for HyDE novel-ticker detection) -* ``MACRO_LINE_PATTERNS``, ``MACRO_GENERATED_RE`` (for downstream tests) +Macro-context utilities with Silver-first macro patch generation. + +Design intent +------------- +The macro markdown is an LLM readability layer, not the deterministic source +of truth. The authoritative numeric contract lives in +`Data/2_Silver_Processed/Macro_History/.../macro_snapshot_*.parquet`. + +This module therefore serves two roles: +1. Ticker extraction helpers used by the retrieval stack. +2. A macro patch builder that promotes Silver macro values into + `silver_context` so Checker/Analyst can consume them directly. + +Primary path: + Silver Macro_History parquet -> values + anchors + schema/status snapshot + +Fallback path: + latest_macro_context.md regex parsing (only when parquet is unavailable) + +The status snapshot is intentionally persisted into `silver_context` so the +retriever/checker pipeline can retain a stable view of: + - which parquet schema was used, + - which symbols were materialized, + - which observation date anchored the patch. """ from __future__ import annotations +import hashlib +import logging import re from datetime import date +from pathlib import Path from typing import Any, Dict, List, Optional, Tuple +logger = logging.getLogger(__name__) + __all__ = [ "TICKER_RE", "TICKER_STOPWORDS", @@ -57,6 +44,37 @@ "build_macro_silver_patch", ] +_PROJECT_ROOT = Path(__file__).resolve().parents[2] +_MACRO_HISTORY_ROOT = _PROJECT_ROOT / "Data" / "2_Silver_Processed" / "Macro_History" +_MACRO_HISTORY_GLOB = "macro_snapshot_*.parquet" +_MACRO_NUMERIC_FIELDS: tuple[str, ...] = ( + "value", + "daily_change_pct", + "mom_change_pct", + "yoy_change_pct", +) +_MACRO_REQUIRED_COLUMNS: tuple[str, ...] = ( + "retrieval_date", + "observation_date", + "symbol", + "name", + "asset_class", + "value", + "unit", + "frequency", + "daily_change_pct", + "mom_change_pct", + "yoy_change_pct", +) +_SYMBOL_ALIAS_MAP: Dict[str, str] = { + "^GSPC": "GSPC", + "^IXIC": "IXIC", + "^VIX": "VIX", + "DX-Y.NYB": "DXY", + "GLD": "GLD_SPOT", + "SLV": "SLV_SPOT", +} + # --------------------------------------------------------------------------- # Ticker extraction (used by the HyDE "novel ticker" back-injection path) @@ -141,24 +159,172 @@ ) +def _safe_symbol(symbol: str) -> str: + if not symbol: + return "UNKNOWN" + if symbol in _SYMBOL_ALIAS_MAP: + return _SYMBOL_ALIAS_MAP[symbol] + return symbol.lstrip("^").replace("-", "_").replace(".", "_").replace("/", "_") + + +def _latest_macro_parquet() -> Optional[Path]: + if not _MACRO_HISTORY_ROOT.exists(): + return None + files = sorted(_MACRO_HISTORY_ROOT.rglob(_MACRO_HISTORY_GLOB)) + return files[-1] if files else None + + +def _to_float(v: Any) -> Optional[float]: + if v is None: + return None + if isinstance(v, (int, float)): + return round(float(v), 6) + if isinstance(v, str): + s = v.replace(",", "").rstrip("%").strip() + if not s: + return None + try: + return round(float(s), 6) + except ValueError: + return None + return None + + +def _build_macro_patch_from_parquet(anchor_date: date) -> Dict[str, Any]: + """Build the authoritative macro patch from the latest Silver parquet.""" + fp = _latest_macro_parquet() + if fp is None: + return {"values": {}, "lineage_anchors": [], "status": {}} + + try: + import duckdb + except ImportError as exc: + logger.warning("Macro parquet patch unavailable — duckdb import failed: %s", exc) + return {"values": {}, "lineage_anchors": [], "status": {}} + + sql_path = fp.as_posix() + con = duckdb.connect() + try: + schema_rows = con.execute( + f"DESCRIBE SELECT * FROM read_parquet('{sql_path}')" + ).fetchall() + schema_types = {str(col): str(dtype) for col, dtype, *_ in schema_rows} + present_columns = list(schema_types.keys()) + missing_columns = [c for c in _MACRO_REQUIRED_COLUMNS if c not in schema_types] + + latest_obs_row = con.execute( + f"SELECT MAX(observation_date) FROM read_parquet('{sql_path}')" + ).fetchone() + latest_obs = str(latest_obs_row[0]) if latest_obs_row and latest_obs_row[0] is not None else anchor_date.isoformat() + + rows = con.execute( + f""" + SELECT retrieval_date, observation_date, symbol, name, asset_class, + value, unit, frequency, daily_change_pct, mom_change_pct, yoy_change_pct + FROM read_parquet('{sql_path}') + WHERE observation_date = ? + ORDER BY symbol + """, + [latest_obs], + ).fetchall() + finally: + con.close() + + values: Dict[str, float] = {} + lineage: List[str] = [] + symbol_status: Dict[str, Dict[str, Any]] = {} + + for ( + retrieval_date, + observation_date, + symbol, + name, + asset_class, + value, + unit, + frequency, + daily_change_pct, + mom_change_pct, + yoy_change_pct, + ) in rows: + code = _safe_symbol(str(symbol)) + row_map = { + "value": value, + "daily_change_pct": daily_change_pct, + "mom_change_pct": mom_change_pct, + "yoy_change_pct": yoy_change_pct, + } + + numeric_written = False + for field_name, raw_val in row_map.items(): + fv = _to_float(raw_val) + if fv is None: + continue + values[f"{code}_{field_name}"] = fv + numeric_written = True + + # Backward-compatible alias used by existing prompts/checkers: + # prefer MoM for monthly macro rows, otherwise daily change, then YoY. + compat_change = ( + _to_float(mom_change_pct) + if _to_float(mom_change_pct) is not None + else _to_float(daily_change_pct) + if _to_float(daily_change_pct) is not None + else _to_float(yoy_change_pct) + ) + if compat_change is not None: + values[f"{code}_change_pct"] = compat_change + numeric_written = True + + if numeric_written: + anchor_id = f"MACRO_{code}_{observation_date or latest_obs}" + lineage.append(anchor_id) + + symbol_status[code] = { + "symbol": symbol, + "display_name": name, + "asset_class": asset_class, + "unit": unit, + "frequency": frequency, + "retrieval_date": retrieval_date, + "observation_date": observation_date, + } + + schema_hash = hashlib.sha1( + "|".join(f"{k}:{v}" for k, v in sorted(schema_types.items())).encode("utf-8") + ).hexdigest()[:12] + + status = { + "macro_source": "silver_macro_history", + "macro_schema": { + "source_file": str(fp), + "schema_columns": present_columns, + "schema_types": schema_types, + "missing_required_columns": missing_columns, + "required_columns": list(_MACRO_REQUIRED_COLUMNS), + "schema_hash": schema_hash, + "effective_observation_date": latest_obs, + "requested_anchor_date": anchor_date.isoformat(), + "row_count": len(rows), + }, + "macro_symbols": symbol_status, + } + return {"values": values, "lineage_anchors": sorted(set(lineage)), "status": status} + + def parse_macro_snapshot( markdown: str, ) -> Tuple[Dict[str, float], Optional[str]]: - """Parse ``latest_macro_context.md`` into silver values. + """Parse ``latest_macro_context.md`` into silver-like values. Returns ------- values - ``{metric_key: float}`` mapping. Keys follow the - ``{CODE}_value`` / ``{CODE}_change_pct`` convention so the - Analyst's numeric audit can match a draft that says "VIX at - 18.25" against ``VIX_value=18.25``. Keys missing from the - markdown are omitted — this lets the Checker still reject - fabricated metrics. + Legacy markdown-derived values. This path exists as a fallback only. + The authoritative path is `_build_macro_patch_from_parquet()`. snapshot_date The ISO date from the "Generated on" header or ``None``. - Callers use it as the macro anchor when present (more precise - than the SQL-derived ``options_daily`` anchor). + Used only by the fallback path. """ values: Dict[str, float] = {} if not markdown: @@ -191,22 +357,30 @@ def build_macro_silver_patch( macro_md: Optional[str], anchor_date: date, ) -> Dict[str, Any]: - """Produce the Silver patch dict ``{values, lineage_anchors}`` for macro. + """Produce the Silver macro patch. - Anchors follow the ``MACRO__`` convention — the - Finalizer already maps a ``MACRO_*`` prefix to the "Macro Data" - evidence category. Returns an empty dict when the markdown is - absent or unparseable so :meth:`MasterRetriever.retrieve` can merge - unconditionally. + Primary source: + latest Silver Macro_History parquet + + Fallback source: + `latest_macro_context.md` + + Returned shape: + { + "values": {...}, + "lineage_anchors": [...], + "status": {...} + } """ + parquet_patch = _build_macro_patch_from_parquet(anchor_date) + if parquet_patch.get("values"): + return parquet_patch + values, snapshot_date = parse_macro_snapshot(macro_md or "") if not values: - return {"values": {}, "lineage_anchors": []} + return {"values": {}, "lineage_anchors": [], "status": {}} effective_date = snapshot_date or anchor_date.isoformat() - # Strip the metric-suffix so `VIX_value` / `VIX_change_pct` both map - # to a single `VIX` code. One anchor per code keeps the lineage list - # short and easy for the LLM to cite. distinct_codes: set = set() for k in values.keys(): if k.endswith("_value"): @@ -214,5 +388,22 @@ def build_macro_silver_patch( elif k.endswith("_change_pct"): distinct_codes.add(k[: -len("_change_pct")]) lineage = [f"MACRO_{code}_{effective_date}" for code in sorted(distinct_codes)] - - return {"values": values, "lineage_anchors": lineage} + return { + "values": values, + "lineage_anchors": lineage, + "status": { + "macro_source": "macro_markdown_fallback", + "macro_schema": { + "source_file": str(_PROJECT_ROOT / "Data" / "Agent_Context" / "latest_macro_context.md"), + "schema_columns": ["markdown_fallback"], + "schema_types": {"markdown_fallback": "regex_extracted"}, + "missing_required_columns": list(_MACRO_REQUIRED_COLUMNS), + "required_columns": list(_MACRO_REQUIRED_COLUMNS), + "schema_hash": "fallback", + "effective_observation_date": effective_date, + "requested_anchor_date": anchor_date.isoformat(), + "row_count": len(distinct_codes), + }, + "macro_symbols": {}, + }, + } diff --git a/Scripts/retrieval/master_retriever.py b/Scripts/retrieval/master_retriever.py index 0e53fb7..ef58c59 100644 --- a/Scripts/retrieval/master_retriever.py +++ b/Scripts/retrieval/master_retriever.py @@ -129,8 +129,8 @@ def __init__(self): ) # --- 3. Runtime knobs (env-tunable without code change) --- - self.gold_timeout = float(os.getenv("GOLD_TIMEOUT", 5.0)) - self.silver_timeout = float(os.getenv("SILVER_TIMEOUT", 8.0)) + self.gold_timeout = float(os.getenv("GOLD_TIMEOUT", 10.0)) + self.silver_timeout = float(os.getenv("SILVER_TIMEOUT", 10.0)) logger.info( f"🏛️ MasterRetriever ready | Gold_TO: {self.gold_timeout}s | " @@ -606,12 +606,11 @@ async def retrieve(self, user_query: str) -> Dict[str, Any]: # ================================================================== # 7.5 Macro → Silver anchor injection (Root Cause A fix, 2026-04-22) # ================================================================== - # Parse the daily macro snapshot into silver values + MACRO_* anchors - # so the Analyst's "Macro Regime Snapshot" section has citable - # anchors. Without this, the Analyst cites VIX=18.25 from the prose - # macro block, the Checker has no matching anchor/value, and every - # revision fails — the 4/4 degraded-mode failure mode in - # docs/test/2026-04-22/router_e2e_deep_analysis.md (Root Cause A). + # Promote macro data into Silver context. The primary source is now + # Silver Macro_History parquet (authoritative numeric truth); markdown + # is only a fallback if parquet is unavailable. This gives the Analyst + # citable MACRO_* anchors while preserving schema/status metadata for + # downstream deterministic checking and drift audits. try: macro_md = self._read_macro_snapshot() anchor_for_macro = date.fromisoformat(time_range["anchor_date"]) \ @@ -620,7 +619,15 @@ async def retrieve(self, user_query: str) -> Dict[str, Any]: if macro_patch["values"]: sv = final_context["silver_context"] sv.setdefault("values", {}).update(macro_patch["values"]) - existing_anchors = sv.setdefault("lineage_anchors", []) or [] + existing_anchors = sv.setdefault("lineage_anchors", []) + patch_status = macro_patch.get("status") or {} + if patch_status: + existing_status = sv.setdefault("status", {}) + for k, v in patch_status.items(): + if isinstance(v, dict) and isinstance(existing_status.get(k), dict): + existing_status[k].update(v) + else: + existing_status[k] = v # De-duplicate while preserving ordering of the existing anchors. seen = set(existing_anchors) for a in macro_patch["lineage_anchors"]: @@ -636,6 +643,96 @@ async def retrieve(self, user_query: str) -> Dict[str, Any]: # macro anchors; the Analyst simply loses macro citability. logger.warning(f"MacroSilverPatch failed ({type(e).__name__}): {e}") + # ================================================================== + # 7.6 GPR always-on patch (Root Cause gap-2 fix, 2026-04-23) + # ================================================================== + # Inject the latest GPR row unconditionally — previously this only + # ran when the query routed to _handle_geopolitical_analysis (i.e. + # user explicitly asked about geopolitics). The Analyst prompt's + # MACRO_CHAIN_DIRECTIVE mandates a "GPR index" mention in the Macro + # Regime Snapshot section regardless of query type, so the anchor + # must always be available for citation. + try: + import copy as _copy + gpr_result = self.sql_tool._handle_geopolitical_analysis( + ticker="GPR", meta=metadata + ) + if gpr_result and gpr_result.get("values"): + sv = final_context["silver_context"] + sv.setdefault("values", {}).update(gpr_result["values"]) + existing = set(sv.setdefault("lineage_anchors", [])) + for a in gpr_result.get("lineage_anchors", []): + if a not in existing: + sv["lineage_anchors"].append(a) + existing.add(a) + logger.info( + f"🌍 [GPRPatch] injected {len(gpr_result['values'])} values " + f"+ {len(gpr_result.get('lineage_anchors', []))} GPR anchors." + ) + except Exception as e: + logger.warning(f"GPRPatch failed ({type(e).__name__}): {e}") + + # ================================================================== + # 7.7 Macro Parquet full-scan patch (Root Cause gap-1 fix, 2026-04-23) + # ================================================================== + # Read ALL symbols from Macro_History for the latest observation date + # and inject them into silver_context. This supersedes the markdown + # regex parser for any symbol that parquet already covers (parquet wins + # on precision) and adds long-tail symbols the regex never handled. + try: + macro_glob = self.sql_tool.macro_glob + macro_query = f""" + SELECT symbol, value, daily_change_pct, mom_change_pct, observation_date + FROM read_parquet('{macro_glob}') + WHERE observation_date = ( + SELECT MAX(observation_date) FROM read_parquet('{macro_glob}') + ) + """ + rows = self.sql_tool.conn.execute(macro_query).fetchall() + if rows: + sv = final_context["silver_context"] + pq_values: dict = {} + pq_anchors: list = [] + existing_anchors = set(sv.setdefault("lineage_anchors", [])) + for sym, val, daily_chg, mom_chg, obs_date in rows: + # Sanitise symbol for use as a dict key / anchor name. + safe = sym.lstrip("^").replace("-", "_").replace(".", "_") + if val is not None: + pq_values[f"{safe}_value"] = round(float(val), 4) + chg = mom_chg if mom_chg is not None else daily_chg + if chg is not None: + pq_values[f"{safe}_change_pct"] = round(float(chg), 4) + anchor_id = f"MACRO_{safe}_{obs_date}" + if anchor_id not in existing_anchors: + pq_anchors.append(anchor_id) + existing_anchors.add(anchor_id) + sv["values"].update(pq_values) + sv["lineage_anchors"].extend(pq_anchors) + logger.info( + f"📊 [MacroParquetPatch] injected {len(pq_values)} values " + f"+ {len(pq_anchors)} anchors from {len(rows)} Macro symbols." + ) + except Exception as e: + logger.warning(f"MacroParquetPatch failed ({type(e).__name__}): {e}") + + # ================================================================== + # 7.8 Write immutable silver_context_frozen (P1 fix, 2026-04-23) + # ================================================================== + # After ALL patch steps are complete, snapshot the Silver context so + # CheckerAgent always has a stable, rescue-independent ground truth. + # Rescue passes may still update `silver_context` (used by the NEXT + # analyst revision for additive data), but the Checker's deterministic + # numeric audit uses `silver_context_frozen` exclusively — preventing + # atm_iv oscillation and cross-revision anchor drift. + try: + import copy as _copy + final_context["silver_context_frozen"] = _copy.deepcopy( + final_context["silver_context"] + ) + except Exception as e: + logger.warning(f"silver_context_frozen deepcopy failed ({type(e).__name__}): {e}") + final_context["silver_context_frozen"] = None + final_context["latency_stats"]["total_e2e"] = f"{time.time() - overall_start:.3f}s" logger.info( f"✅ [Master Retriever] route={route} | E2E: {final_context['latency_stats']['total_e2e']} " diff --git a/Scripts/retrieval/time_adapter.py b/Scripts/retrieval/time_adapter.py index 3ae2e4a..56ed520 100644 --- a/Scripts/retrieval/time_adapter.py +++ b/Scripts/retrieval/time_adapter.py @@ -1,12 +1,4 @@ """ -Scripts/retrieval/time_adapter.py - -Per-source Time Alignment Adapter — the single place where a semantic -`TimeWindow` from the LLM (e.g. "yesterday" / "past_week" / "past_month") -is compiled into physical time predicates that each data source can -actually execute against. - -WHY THIS MODULE EXISTS (the Q1/Q2/Q3 fix landed 2026-04-22): Different data sources use different time types and granularities: Gold.News : `unified_timestamp` / `publish_timestamp` (Unix seconds, event-level) From f67e2e41274b8632d227fdc8db20d287e0ae8405 Mon Sep 17 00:00:00 2001 From: "Xinxin(Maxine)" Date: Fri, 24 Apr 2026 15:23:42 -0400 Subject: [PATCH 45/50] Update README.md --- README.md | 202 ++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 158 insertions(+), 44 deletions(-) diff --git a/README.md b/README.md index 8c8cc50..0cc499b 100644 --- a/README.md +++ b/README.md @@ -1,76 +1,190 @@ # Multi-Modal Multi-Agent Financial RAG System -### 1. Strategic Objectives (Goal) +## 1. Strategic Objectives (Goal) The primary objective of this project is to democratize institutional-grade options trading by bridging the gap between quantitative market data and qualitative semantic insights. By leveraging a **Medallion Architecture**, the system automates the identification of cross-asset volatility arbitrage opportunities (e.g., GLD/SLV vs. correlated equities). -**Core Problem Solved:** -* **Eliminating Hallucinations:** Prevents "trading hallucinations" by enforcing a multi-agent checker-critic loop. -* **Unified Intelligence:** Syncs fragmented macro signals (FRED/GPR) with micro-market structures (Option Chains/SEC Filings). -* **Signal Precision:** Converts raw volatility into actionable paper-trading strategies with logical evidence. +**Core outcomes:** +- Reduce trading hallucinations via multi-agent cross-examination (Analyst -> Checker -> Critic -> Finalizer). +- Fuse fragmented data domains (FRED / GPR / SEC / News / options chains) into a single query surface. +- Produce auditable, reproducible recommendation artifacts for paper-trading workflows. --- -### 2. High-Level System Architecture +## 2. High-Level System Architecture The system operates on a **Dual-Track Data Engine** designed to handle the heterogeneity of financial markets: - -* **Quantitative Track (Structured):** Processes high-frequency numeric data (Parquet) via SQL-like tools or Pandas Agents to ensure 100% accuracy in pricing and Greeks. -* **Qualitative Track (Unstructured):** Processes news and SEC filings through a Hybrid RAG pipeline (Dense + Sparse + Metadata filtering) in Qdrant. -* **State Machine Orchestration:** Uses **LangGraph** to govern the transition between data retrieval, analysis, and risk auditing. - ---- - -### 3. Operational Workflow & Multi-Agent Logic -The following workflow defines the lifecycle of a query, from ingestion to the final strategy report: +* **Quantitative Track (Structured):** Processes high-frequency numeric data +(Parquet) via SQL-like tools or Pandas Agents to ensure 100% accuracy in +pricing and Greeks. +* **Qualitative Track (Unstructured):** Processes news and SEC filings +through a Hybrid RAG pipeline (Dense + Sparse + Metadata filtering) in Qdrant. +* **State Machine Orchestration:** Uses **LangGraph** to govern the +transition between data retrieval, analysis, and risk auditing. ```mermaid -graph TD - A[Data Ingestion: FRED/SEC/News/YFinance] --> B[Medallion Processing: Bronze -> Silver -> Gold] +flowchart TD + A[Data Ingestion: FRED / SEC / News / yfinance] --> B[Medallion Processing: Bronze -> Silver -> Gold] B --> C{Query Router} - C -- Qualitative --> D[Qdrant: Hybrid Search + MMR + Metadata Filter] - C -- Quantitative --> E[Parquet: Pandas/Tool Calling Analysis] - D --> F[Analyst Agent: Synthesis & Strategy Generation] + C -->|Qualitative path| D[Qdrant Hybrid Search: Dense + Sparse + Metadata] + C -->|Quantitative path| E[Parquet Analytics: SQL + Pandas] + D --> F[Analyst Agent: Thesis and Trade Construction] E --> F - F --> G[Checker Agent: Real-time Liquidity & IV Validation] - G --> H[Critic Agent: Risk Exposure & Counter-Argument] - H --> I[Final Output: Structured Strategy Report + Evidence Table] + F --> G[Checker Agent: Contract and Liquidity Validation] + G --> H[Critic Agent: Risk and Counter-Argument Review] + H --> I[Finalizer Agent: Structured Strategy Report] ``` --- +## 3. Operational Workflow & Multi-Agent Logic +### Workflow Orchestration (Execution Lifecycle) -### 4. Medallion Data Governance & Schema -Data is partitioned into three logical layers to ensure lineage and high information density: +```mermaid +flowchart TD + A[Source ingestion jobs] --> B[Medallion processing
Bronze -> Silver -> Gold] + B --> C[CLI Orchestration Layer] + C --> D{User command} + + D -->|ingest| E[Run due stages with run-state idempotency] + D -->|warmup| F[Warm LLM pool models in Ollama] + D -->|query| G[LangGraph query execution] + + E --> H[Gold artifacts ready] + H --> I[Qdrant ingestion pipeline] + I --> J[Hybrid index and payload schema reconciliation] + + G --> K{Retriever router} + K -->|quant path| L[Silver SQL/Pandas retrieval] + K -->|semantic path| M[Qdrant dense+sparse retrieval] + L --> N[Analyst synthesis] + M --> N + N --> O[Checker factual validation] + O --> P[Critic risk challenge] + P --> Q[Finalizer report compiler] + Q --> R[Structured recommendation output] +``` -| Layer | Type | Storage | Purpose | +--- +## 4. Medallion Data Governance & Schema +Data is partitioned into three logical layers to ensure lineage and high +information density: +| Layer | Data Profile | Storage | Governance Objective | | :--- | :--- | :--- | :--- | -| **1_Bronze_Raw** | Unstructured | HTML / XML | Raw captures for debugging and regulatory look-back (TTL: 30 days). | -| **2_Silver_Structured** | Structured | Parquet | Time-series for Option Chains, IV, and Macro levels. Direct tool-access only. | -| **3_Gold_Semantic** | Refined | JSONL / MD | LLM-distilled summaries for vectorization (Qdrant) and Global System Prompts. | -| **Agent_Context** | Snapshot | Markdown | Daily "Global Subconscious" (Macro/GPR) injected into every Agent's prompt. | +| `1_Bronze_Raw` | Raw, minimally transformed captures | HTML / XML / JSONL | Traceability, replay, and source-level audits | +| `2_Silver_Processed` | Deterministic structured tables | Parquet | Accurate numeric analytics (prices, IV, macro) | +| `3_Gold_Semantic` | Retrieval-ready semantic records | JSONL / Markdown | Hybrid search relevance and citation grounding | +| `Agent_Context` | Session-level macro memory | Markdown snapshots | Shared context injection across all agent roles | --- -### 5. Quality Assurance & Evaluation Framework (Evaluation) -To maintain an institutional standard, the system is evaluated across three dimensions: +## 5. Quality Assurance & Evaluation Framework (Evaluation) +The evaluation standard is designed to mirror production controls used in institutional research tooling. + +### 1) Retrieval and grounding quality +- **Faithfulness (RAGAS):** verifies the report is supported by retrieved evidence. +- **Context Precision (RAGAS):** checks whether retrieved chunks are topically and temporally relevant. +- **Time-barrier compliance:** validates retrieval respects `unified_timestamp/publish_timestamp` filters. -* **RAGAS Benchmarking:** - * **Faithfulness:** Measures if the strategy is strictly derived from retrieved SEC/News data. - * **Context Precision:** Validates the temporal relevance of recalled signals (Metadata-driven). -* **Fact-Checking (Deterministic Validation):** - * The **Checker Agent** must ping live `yfinance` APIs to verify that any recommended option contract actually exists and has sufficient open interest. -* **The "Golden Dataset":** - * A curated set of 50+ complex historical QA pairs used as a ground-truth baseline to prevent regression during model or prompt updates. +### 2) Deterministic market validation +- **Contract existence checks:** Checker validates recommended option contracts against live `yfinance` chain data. +- **Liquidity guardrails:** enforce minimum open interest / quote sanity checks before contract inclusion. +- **Numeric drift controls:** configurable tolerances (for example, `CHECKER_NUMERIC_TOLERANCE`) to detect unstable conclusions. + +### 3) Regression and model governance +- **Golden dataset replay:** historical complex QA set for non-regression across prompt/model updates. +- **Role-level warmup validation:** ensure both expert and router model tiers are online before live querying. +- **Auditability:** centralized logs and runtime state snapshots support post-mortem investigations. --- -### 6. Implementation Prerequisites -All dependencies are consolidated into a single deployment command. The infrastructure is fully containerized for portability. +## 6. Operational CLI Playbook +All examples below are production-safe with the current CLI entrypoint (`python -m Scripts`). -**One-liner Installation:** +### A. Warmup command ```bash -pip install requests pandas numpy pyarrow yfinance fredapi python-dotenv beautifulsoup4 markdownify langchain-ollama langchain-huggingface langgraph qdrant-client pydantic rich fastembed newspaper3k duckduckgo-search +python -m Scripts warmup +python -m Scripts warmup --roles analyst router +``` + +### B. Data collection (orchestration pipeline) +```bash +python -m Scripts ingest +python -m Scripts ingest --only news_daily options_daily +python -m Scripts ingest --force +python -m Scripts status --json +``` + +### C. Qdrant ingestion +```bash +python Scripts/vector_store/ingestion.py +python Scripts/vector_store/ingestion.py --no-full-refresh +python Scripts/vector_store/ingestion.py --indexes-only +``` + +### D. Query command +```bash +python -m Scripts query "Generate a hedged options idea for AAPL this week." +python -m Scripts query --warmup "Compare GLD and SLV options risk-reward under current macro regime." +``` + +### E. GPU node with single-terminal constraint (no extra terminal allowed) +Use a **single sequential runbook** in one shell session: + +```bash +python -m Scripts warmup --roles analyst router && python -m Scripts ingest && python Scripts/vector_store/ingestion.py --no-full-refresh && python -m Scripts query "What is the best risk-defined setup for QQQ this week?" +``` + +If you need a background scheduler without opening another terminal (PowerShell): +```powershell +$daemon = Start-Job -ScriptBlock { python -m Scripts daemon --poll-seconds 30 --warmup } +Receive-Job -Id $daemon.Id -Keep ``` +--- + +## 7. Compute Topology: CPU vs GPU Model Utilization +### CPU-heavy components +- Data ingestion scripts (FRED/SEC/News/yfinance ETL). +- Parquet processing and SQL/Pandas numeric analysis. +- Most filesystem, scheduling, and orchestration logic. + +### GPU-preferred components +- Ollama expert model (`options-expert-v1:latest`) for analyst/checker/critic/finalizer and query transform. +- Router model (`llama3:latest`) can run on CPU, but lower-latency routing benefits from GPU if available. + +### Configuration controls +- `RETRIEVER_DEVICE=cpu|cuda` controls retriever-side model device preference. +- `EMBEDDING_DEVICE=cpu|cuda` controls embedding model placement. +- `OLLAMA_KEEP_ALIVE=30m` avoids repeated model eviction/cold-start. + +--- + +## 8. Environment Blueprint +Use the sample at `/.env.sample` as the canonical template. Copy it to `.env` and fill secrets before running the pipeline. + +--- + +### 9. Implementation Prerequisites +All dependencies are consolidated into a single deployment command. The +infrastructure is fully containerized for portability. +```bash +pip install requests pandas numpy pyarrow yfinance fredapi python-dotenv beautifulsoup4 markdownify langchain-ollama langchain-huggingface langgraph qdrant-client pydantic rich fastembed newspaper3k duckduckgo-search +``` **Environment Requirements:** * **Local Inference:** Ollama (running `llama3` or `mistral`). * **Vector Store:** Qdrant Cloud or Dockerized Qdrant. -* **Credentials:** `.env` file containing `FRED_API_KEY` and `SEC_USER_AGENT`. \ No newline at end of file +* **Credentials:** `.env` file containing `FRED_API_KEY` and `SEC_USER_AGENT`. +--- + +## 10. Supporting Technical Documentation +- Architecture deep dive: [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) +- Orchestration details: [`docs/Orchestration.md`](docs/Orchestration.md) +- Agent architecture: [`docs/agent/Agent_Architecture.md`](docs/agent/Agent_Architecture.md) +- Observability model: [`docs/Observability.md`](docs/Observability.md) +- Retrieval strategy: [`docs/Query_retrieval_docs/Retrieval_Architecture_and_Strategy.md`](docs/Query_retrieval_docs/Retrieval_Architecture_and_Strategy.md) +- Qdrant ingestion design: [`docs/Vector_store_docs/Vector_Ingestion.md`](docs/Vector_store_docs/Vector_Ingestion.md) +- Qdrant connection setup: [`docs/Vector_store_docs/Qdrant_connection.md`](docs/Vector_store_docs/Qdrant_connection.md) +- Data platform master reference: [`docs/Data_source_docs/Data_source_summary.md`](docs/Data_source_docs/Data_source_summary.md) +- Macro and market data dossier: [`docs/Data_source_docs/macro_market_data.md`](docs/Data_source_docs/macro_market_data.md) +- News ingestion dossier: [`docs/Data_source_docs/market_news_data.md`](docs/Data_source_docs/market_news_data.md) +- SEC filing dossier: [`docs/Data_source_docs/SEC_data.md`](docs/Data_source_docs/SEC_data.md) +- GPR dossier: [`docs/Data_source_docs/GPR_Index.md`](docs/Data_source_docs/GPR_Index.md) +- Time schema and cadence contract: [`docs/Data_source_docs/Time_Schema_Audit.md`](docs/Data_source_docs/Time_Schema_Audit.md) \ No newline at end of file From 7b124ff4666bf30ecb05bb6e9eb26903dbb71972 Mon Sep 17 00:00:00 2001 From: "Xinxin(Maxine)" Date: Fri, 24 Apr 2026 15:23:59 -0400 Subject: [PATCH 46/50] Create Agent_Architecture.md --- docs/agent/Agent_Architecture.md | 286 +++++++++++++++++++++++++++++++ 1 file changed, 286 insertions(+) create mode 100644 docs/agent/Agent_Architecture.md diff --git a/docs/agent/Agent_Architecture.md b/docs/agent/Agent_Architecture.md new file mode 100644 index 0000000..c4db4f7 --- /dev/null +++ b/docs/agent/Agent_Architecture.md @@ -0,0 +1,286 @@ +# Multi-Agent System — Architecture & Workflow + +## 1. Goal + +The agent layer is a **LangGraph-compiled multi-agent pipeline** that transforms a raw user financial question into a structured, fact-checked options strategy report. It orchestrates five specialised agents — Router, Analyst, Checker, Critic, and Finalizer — over an append-only shared state, with deterministic circuit-breakers preventing infinite revision loops. + +--- + +## 2. System Architecture + +### 2.1 Graph Topology + +``` + ┌──────────────────────────────────────┐ + │ AgentState (shared) │ + └──────────────────────────────────────┘ + │ + ┌─────────────────▼──────────────────┐ + │ retrieval_master node │ + │ MasterRetriever.retrieve() │ + │ • Intent classification (router) │ + │ • QueryTransformer (2-stage LLM) │ + │ • Gold: Qdrant hybrid retrieval │ + │ • Silver: DuckDB parquet queries │ + │ • Macro + GPR always-on patches │ + │ • Writes silver_context_frozen │ + └─────────────────┬──────────────────┘ + │ + ┌─────────────────▼──────────────────┐ + │ analyst node │ + │ AnalystAgent.generate_report() │ + │ • Macro → Meso → Micro framework │ + │ • IV regime pinned on first pass │ + │ • Revision-aware (sees feedback) │ + │ • revision_count ++ │ + └─────────────────┬──────────────────┘ + │ + ┌─────────────────▼──────────────────┐ + │ checker node │ + │ CheckerAgent.audit() │ + │ • Layer 1: deterministic regex │ + │ (uses silver_context_frozen) │ + │ • Layer 2: Silver rescue tool-call │ + │ • Layer 3: LLM semantic audit │ + └────────────┬─────────┬─────────────┘ + │ │ + fatal │ │ pass / minor + │ │ + ┌──────────────────▼──┐ ┌──▼──────────────────────┐ + │ analyst node │ │ critic node │ + │ (revision_count++) │ │ CriticAgent.audit() │ + └──────────────────┬──┘ │ • IV regime fit │ + │ │ • Macro contradiction │ + │ │ • Insider signal check │ + │ └──────────┬──────────────┘ + │ │ + │ fatal │ pass / minor + │ │ + └─────────────────┘ + │ + ┌──────────────────────▼─────────────────────┐ + │ finalizer node │ + │ FinalizerAgent.format_and_clean() │ + │ • Markdown → FinalReport Pydantic schema │ + │ • Evidence pool construction │ + │ • confidence_score assignment │ + └────────────────────────────────────────────┘ +``` + +### 2.2 Circuit-Breaker Logic + +`revision_count` is incremented exclusively in `analyst_node`. Both `route_after_checker` and `route_after_critic` short-circuit to `finalizer` when `revision_count >= AGENT_MAX_REVISIONS` (env: `AGENT_MAX_REVISIONS`, default `3`). + +``` +route_after_checker(state) → str: + if revision_count >= MAX_REVISIONS: return "finalizer" + if checker_verdict == "fatal": return "analyst" + else: return "critic" + +route_after_critic(state) → str: + if revision_count >= MAX_REVISIONS: return "finalizer" + if critic_verdict == "fatal": return "analyst" + else: return "finalizer" +``` + +### 2.3 Global Singletons (per process) + +All heavy objects are initialised once at module load in `router.py` and shared across graph invocations: + +| Singleton | Class | Cost | +|:---|:---|:---| +| `_MASTER_RETRIEVER` | `MasterRetriever` | Qdrant client + embedding models + DuckDB | +| `_SILVER_SQL_TOOL` | `SilverSQLTool` | Shared DuckDB connection + schema validation | +| `_ANALYST_AGENT` | `AnalystAgent` | `ChatOllama` client | +| `_CHECKER_AGENT` | `CheckerAgent` | `ChatOllama` + `SilverSQLTool` reference | +| `_CRITIC_AGENT` | `CriticAgent` | `ChatOllama` client | +| `_FINALIZER_AGENT` | `FinalizerAgent` | `ChatOllama` client | + +--- + +## 3. Agent Profiles & Workflow + +### 3.1 Analyst (`Scripts/agents/analyst.py`) + +**Role:** Senior Options Strategist — drafts the Markdown strategy report. + +| Aspect | Detail | +|:---|:---| +| **Framework** | Macro → Meso → Micro (mandatory three-layer structure) | +| **IV regime** | Deterministic pre-compute from `silver_context["values"]["latest_atm_iv"]`; pinned to `iv_regime_pinned` on the first pass so it never flips across revisions | +| **Citation format** | `[Silver: ]` for numeric claims; `[Gold: ]` for qualitative claims | +| **Revision mode** | On re-entry, injects full append-only `critic_feedback` log (both Checker and Critic findings) via `render_revision_block()` | +| **LLM** | `options-expert-v1:latest` (fine-tuned; env: `OLLAMA_ANALYST_MODEL`), temperature `0.1` | + +**Key output sections (mandatory):** + +```markdown +## 1. Macro Regime Snapshot +## 2. Transmission Channel (Meso) +## 3. IV Regime & Structural Choice +## 4. Trade Idea(s) +## 5. Key Catalysts & Invalidation Levels +``` + +### 3.2 Checker (`Scripts/agents/checker.py`) + +**Role:** Blue-Team Data Integrity Auditor — verifies every number and citation against the Silver layer. + +| Aspect | Detail | +|:---|:---| +| **Layer 1: Deterministic** | Regex extracts all numbers and `[Silver: ...]` / `[Gold: ...]` citations from the draft; verifies against `silver_context_frozen` (immutable snapshot, not rescue-modified) | +| **Numeric tolerance** | 2% relative (`CHECKER_NUMERIC_TOLERANCE` env); bridges `0.45` ↔ `45%` encoding | +| **Source-aware pools** | Numbers routed by prefix: `MACRO_*`/VIX → macro pool; `gpr_*` → GPR pool; others → options pool — prevents cross-pool false positives | +| **Sentinel anchors** | `"INSUFFICIENT DATA"`, `"N/A"`, etc. are accepted without verification (Analyst is correct to use them when data is absent) | +| **Layer 2: Rescue** | When an anchor is missing, re-queries `SilverSQLTool` with pinned `TimePredicate`; downgrades Fatal → Minor on hit; merges new values into `silver_context` (not `frozen`) | +| **Layer 3: LLM** | `options-expert-v1:latest` (env: `OLLAMA_CHECKER_MODEL`), structured output → `CheckerResult` Pydantic model; best-effort, non-fatal on error | +| **Verdict** | `"fatal"` (any Fatal finding) → `"minor"` (only Minor findings) → `"pass"` (no findings) | + +### 3.3 Critic (`Scripts/agents/critic.py`) + +**Role:** Red-Team Chief Risk Officer — challenges strategy logic, not numbers. + +| Aspect | Detail | +|:---|:---| +| **Review axes** | (1) IV regime fit, (2) macro contradiction, (3) insider signal weakness, (4) risk/reward imbalance | +| **Hard constraint** | Never challenges numeric values (Checker's domain); never requests more data | +| **LLM** | `options-expert-v1:latest`, structured output → `CriticResult` Pydantic model | +| **Verdict** | Same `"fatal"` / `"minor"` / `"pass"` convention as Checker | + +### 3.4 Finalizer (`Scripts/agents/finalizer.py`) + +**Role:** Convert the fact-checked Markdown draft into the deterministic `FinalReport` Pydantic schema. + +| Aspect | Detail | +|:---|:---| +| **Task** | Copy numbers verbatim; assemble `evidence_pool` from `lineage_anchors` + Gold `bronze_ref`s; assign `confidence_score` | +| **Confidence scoring** | Full Gold + Silver + no revision → ≤ 0.90; partial / revision loop → ≤ 0.60; degraded → ≤ 0.30 | +| **LLM** | `options-expert-v1:latest`, structured output → `FinalReport` Pydantic model | + +### 3.5 Prompts (`Scripts/agents/prompts.py`) + +Single source of truth for all agent prompts. Global guardrails defined once and composed into every agent's system template: + +| Directive | Applied to | +|:---|:---| +| `DATA_LINEAGE_DIRECTIVE` | Analyst, Checker | +| `MACRO_CHAIN_DIRECTIVE` | Analyst | +| `IV_REGIME_DIRECTIVE` | Analyst, Critic | +| `INSIDER_DISCIPLINE_DIRECTIVE` | Analyst, Critic | +| `TEMPORAL_DECAY_DIRECTIVE` | Analyst | +| `REVISION_INJECTION_TEMPLATE` | Analyst (revision passes only) | + +--- + +## 4. AgentState Contract (`Scripts/agents/state.py`) + +`AgentState` is the LangGraph `TypedDict` that every node reads and writes. It is the system's authoritative shared memory. + +| Field | Type | Owner | Description | +|:---|:---|:---|:---| +| `original_query` | `str` | CLI / entrypoint | Raw user question | +| `macro_context` | `str` | `retrieval_master` | Contents of `Data/Agent_Context/latest_macro_context.md` | +| `metadata` | `MetadataExtraction` | `retrieval_master` | LLM-extracted tickers, metrics, time window, intent | +| `gold_context` | `List[Dict]` | `retrieval_master` | Qdrant chunks (`bronze_ref`, `content`, `source_type`, …) | +| `silver_context` | `Dict` | `retrieval_master` (+ rescue) | `{values, lineage_anchors, source_channel, compensation}` — mutable; updated by Checker rescue | +| `silver_context_frozen` | `Dict \| None` | `retrieval_master` | Immutable snapshot written once at retrieval exit; Checker's deterministic audit baseline | +| `time_range` | `Dict \| None` | `retrieval_master` | `{time_window_label, window_days, anchor_date, start_date, end_date, source_predicates}` | +| `hyde_anticipation` | `Dict \| None` | `retrieval_master` | HyDE paragraph, rerank query, novel tickers | +| `iv_regime_pinned` | `Dict \| None` | `analyst` (first pass only) | `{iv_regime, atm_iv, pcr_volume, thresholds}` — never overwritten after first draft | +| `draft_report` | `str` | `analyst` | Current Markdown draft | +| `critic_feedback` | `List[AgentFeedback]` | `checker` + `critic` | **Append-only** (LangGraph `operator.add` reducer); full audit trail across all revisions | +| `checker_verdict` | `str \| None` | `checker` | `"pass"`, `"fatal"`, `"minor"`, or `None` — short-circuit routing signal | +| `critic_verdict` | `str \| None` | `critic` | Same vocabulary as `checker_verdict` | +| `revision_count` | `int` | `analyst` | Number of completed drafts; exclusively incremented by `analyst_node` | +| `is_fallback` | `bool` | `retrieval_master` | True when retrieval degraded gracefully | +| `final_strategy` | `Dict` | `finalizer` | `FinalReport` Pydantic dict | + +### `AgentFeedback` Schema + +| Field | Type | Description | +|:---|:---|:---| +| `sender` | `str` | `"Checker"` or `"Critic"` | +| `error_type` | `str` | `"Fatal"` (must fix) or `"Minor"` (advisory) | +| `comment` | `str` | Specific finding description | +| `missing_lineage_id` | `List[str] \| None` | Anchor(s) that were missing | +| `revision_index` | `int \| None` | Which draft produced this finding | + +--- + +## 5. How to Test + +### End-to-end graph execution + +```bash +# Single query via CLI +python -m Scripts --cmd query --question "What is the current IV skew for AAPL?" + +# With model warm-up +python -m Scripts --cmd query --question "NVDA insider activity last week?" --warmup +``` + +### E2E harness (industrial-grade with per-node assertions) + +```bash +python Scripts/tests/test_router_e2e.py +# Outputs: logs/router_e2e/{YYYY-MM-DD}/ +# {RUN_TS}_console.log +# {RUN_TS}_run_summary.json +# {RUN_TS}_{N}_{test_slug}_trace.jsonl +# {RUN_TS}_{N}_{test_slug}_final_state.json +``` + +### Unit test: Checker deterministic audit + +```python +from Scripts.agents.checker import _deterministic_audit + +silver = {"values": {"latest_atm_iv": 0.38}, "lineage_anchors": ["IV_AAPL_2026-04-22"]} +draft = "AAPL ATM IV is at 38% [Silver: IV_AAPL_2026-04-22]." +feedbacks = _deterministic_audit(draft, silver, [], frozen_context=silver) +assert feedbacks == [] # pass — number matches, anchor known +``` + +### Inspect run artefacts + +```bash +# Latest run summary +cat logs/router_e2e/$(date +%Y-%m-%d)/*_run_summary.json | python -m json.tool + +# Per-node trace for first test +cat logs/router_e2e/$(date +%Y-%m-%d)/*_01_*_trace.jsonl | head -20 +``` + +--- + +## 6. Dependencies + +| Library | Purpose | +|:---|:---| +| `langgraph` | Graph compilation, state management, conditional edges | +| `langchain-ollama` | `ChatOllama` client for all LLM agents | +| `pydantic` | `AgentState`, `AgentFeedback`, `FinalReport` contracts | +| `python-dotenv` | Env variable loading (`AGENT_MAX_REVISIONS`, model names) | + +```bash +pip install langgraph langchain-ollama pydantic python-dotenv +``` + +**Ollama models required:** +- `options-expert-v1:latest` — Analyst, Checker, Critic, Finalizer +- `llama3:latest` — Intent router (lightweight, `num_predict=20`) + +```bash +ollama pull llama3 +# options-expert-v1 is a custom fine-tune — see docs/LLM_Pool.md +``` + +**File dependencies:** + +| File | Required by | +|:---|:---| +| `Data/Agent_Context/latest_macro_context.md` | `retrieval_master` (macro preamble) | +| `config/runtime/collect_data_state.json` | `SilverSQLTool` (dynamic anchors) | +| `Scripts/agents/state.py` | All nodes | +| `Scripts/agents/prompts.py` | All agent LLM prompts | +| `Scripts/retrieval/master_retriever.py` | `retrieval_master` node | From e144b51523ada20a0c8396ab39436441f1948b1c Mon Sep 17 00:00:00 2001 From: "Xinxin(Maxine)" Date: Fri, 24 Apr 2026 15:24:38 -0400 Subject: [PATCH 47/50] update data sources docs --- docs/Data_source_docs/Data_source_summary.md | 292 ++++++++++++++---- docs/Data_source_docs/SEC_data.md | 221 +++++++------ docs/Data_source_docs/Time_Schema_Audit.md | 290 +++++++++++++++++ .../options_historial_data.md | 194 ++++++++---- 4 files changed, 788 insertions(+), 209 deletions(-) create mode 100644 docs/Data_source_docs/Time_Schema_Audit.md diff --git a/docs/Data_source_docs/Data_source_summary.md b/docs/Data_source_docs/Data_source_summary.md index 77948eb..cb4efbf 100644 --- a/docs/Data_source_docs/Data_source_summary.md +++ b/docs/Data_source_docs/Data_source_summary.md @@ -1,75 +1,261 @@ -# Data source summary +# Data Source Architecture and Registry — Institutional Reference -This documentation summarizes the multi-source data ecosystem integrated within the project. +This document is the unified source-of-truth for the project data platform. It consolidates the former storage-layout guide and the source registry into one operational reference covering source origin, cadence, medallion placement, storage contracts, downstream consumers, and retrieval implications. -## Pipelines at a glance +--- -| Source | Script | What it provides for analysis | Scheduler cadence (local time) | -| :--- | :--- | :--- | :--- | -| **GPR Index** | `scrapers/GPR_index.py` | Monthly geopolitical risk level, momentum (MoM/YoY), historical percentile, RAG narratives tied to safe-haven metals context | Monthly, 06:05 | -| **Macro & market** | `scrapers/macro_data_pipeline.py` | Same-day equity/vol/FX/GLD-SLV levels plus FRED macro (Fed funds, CPI, unemployment) with daily vs MoM/YoY changes | Trading days, 06:30 | -| **News** | `scrapers/news_scraper.py` | GDELT-sourced articles by topic; full text; LLM tone (−5…+5), entities, volatility implication for metals/options context | Daily, 07:00 | -| **Options chains** | `scrapers/yfinance_options_history.py` | Per-underlying options snapshots: strikes, IV, liquidity flags, moneyness/spread for SPY/QQQ/IWM/GLD/SLV | Daily, 07:20 | -| **SEC ingestion** | `scrapers/sec_ingestion.py` | Raw parsed Form 4 (insider) and 8-K filings in a rolling 7-day window | Weekly (Sunday), 08:00 | -| **SEC processing** | `processors/sec_processor.py` | Rule-based + LLM summaries and Qdrant-ready payloads; dedup by accession | Weekly (Sunday), 09:00 | +## I. Executive Design Mandate -The scheduler entrypoint is `Scripts/data_collection/collect_data.py` (poll interval 30s; jobs run when due per cadence above). +The data platform is designed around a strict principle: -## Options market data (`yfinance_options_history.py`) +- **Bronze** preserves traceability. +- **Silver** preserves deterministic numeric truth. +- **Gold** preserves retrieval-ready semantic compression. +- **Agent Context** provides stable prompt-time convenience, but never overrides structured truth. -1. **Data source:** Yahoo Finance API. -2. **Data content:** Full options chain snapshots for major market baselines (SPY, QQQ, IWM, GLD, SLV). -3. **Metrics and metadata:** - - **Derived metrics:** `moneyness_pct` (distance from strike), `spread_pct` (liquidity cost), `is_liquid` (Boolean flag based on Vol > 50 and OI > 100). - - **Metadata:** `snapshot_date`, `symbol`, `strike`, `expiration`, `dte` (Days to Expiration), `implied_volatility`. -4. **Storage:** Partitioned `.parquet` files organized by date. +This separation is critical to the architecture because the system serves two fundamentally different workloads: -## Macroeconomic and index data (`macro_data_pipeline.py`) +- **Quantitative path:** exact numeric analytics over Parquet. +- **Qualitative path:** hybrid semantic retrieval over Qdrant. -1. **Data source:** Yahoo Finance (market indices) and FRED (Federal Reserve Economic Data). -2. **Data content:** Daily action of S&P 500, VIX, Gold/Silver, and monthly updates for CPI, Unemployment, and Fed Funds Rate. -3. **Metrics and metadata:** - - **Metrics:** `daily_change_pct`, `mom_change_pct` (Month-over-Month), `yoy_change_pct` (Year-over-Year). - - **Metadata:** `observation_date`, `asset_class` (e.g., Equity Index, Inflation), `unit` (Index vs Percent). -4. **Storage:** Hybrid output (Markdown for RAG context and Parquet for structured history). +--- -## SEC regulatory filings (`sec_ingestion.py` and `sec_processor.py`) +## II. Enterprise Data Architecture -1. **Data source:** SEC EDGAR REST API. -2. **Data content:** Corporate Form 4 (Insider Trading) and Form 8-K (Material Events). -3. **Metrics and metadata:** - - **Enrichment:** LLM-generated summaries (Llama 3) and rule-based "Tone Scores" for insider activity. - - **Metadata:** `ticker`, `accession_no`, `form_type`, `action_direction` (Buy/Sell/Vest), `tone_score` (-5 to +5). -4. **Storage:** Qdrant-ready `.jsonl` files with deterministic UUIDs. +```text +External Sources +├─ Yahoo Finance (options, indices, ETFs) +├─ FRED (macro series) +├─ GDELT / web article capture +├─ SEC EDGAR +└─ GPR academic series + │ + ▼ +Data/1_Bronze_Raw +├─ Raw scrape output, parsed filing artifacts, replay/debug evidence +└─ Objective: lineage, traceability, recoverability + │ + ▼ +Data/2_Silver_Processed +├─ Structured Parquet for options, macro history, GPR history +└─ Objective: deterministic analytics and numeric source-of-truth + │ + ▼ +Data/3_Gold_Semantic +├─ Qdrant-ready JSONL +├─ semantic narratives / summaries +└─ Objective: retrieval-ready artifacts for agent reasoning + │ + ▼ +Data/Agent_Context +└─ stable latest snapshot for prompt injection only +``` + +--- + +## III. Data Production Workflow + +```mermaid +flowchart TD + A[External APIs and files] --> B[Bronze ingestion] + B --> C[Silver normalization and enrichment] + C --> D{Downstream use} + D -->|Deterministic analytics| E[Silver SQL / Pandas / Checker truth-set] + D -->|Semantic retrieval| F[Gold semantic artifacts] + F --> G[Qdrant ingestion] + C --> H[Agent_Context latest snapshot] + H --> I[LLM-readable context injection] +``` + +--- + +## IV. Medallion Storage Topology + +### 1. Canonical storage tree + +```text +Data/ +├── 1_Bronze_Raw/ +│ ├── SEC_Parsed_JSON/ +│ │ └── {YYYY-MM-DD}/ +│ │ ├── {TICKER}.jsonl +│ │ └── _SUMMARY.json +│ ├── News_Scrapes/ +│ │ └── {YYYY-MM-DD}/ +│ │ ├── Raw/raw_gdelt_{topic}.jsonl +│ │ └── Full_text/full_text_{topic}.jsonl +│ └── GPR_index/ +│ └── {YYYY-MM-DD}/gpr_preview.csv +│ +├── 2_Silver_Processed/ +│ ├── Options_Market_Data/ +│ │ └── {YYYY-MM-DD}/{SYMBOL}_options_{YYYY-MM-DD}.parquet +│ ├── Macro_History/ +│ │ └── {YYYY-MM-DD}/macro_snapshot_{YYYY-MM-DD}.parquet +│ └── GPR_index/ +│ └── gpr_monthly_enriched.parquet +│ +├── 3_Gold_Semantic/ +│ ├── SEC_Insider_Trades/ +│ │ └── {YYYY-MM-DD}/qdrant_ready.jsonl +│ ├── News_Qdrant/ +│ │ └── {YYYY-MM-DD}/qdrant_{topic}_processed.jsonl +│ ├── Macro_Narratives/ +│ │ └── {YYYY-MM-DD}/macro_context_{YYYY-MM-DD}.md +│ └── GPR_index/ +│ ├── {YYYY-MM-DD}/gpr_narrative_corpus.md +│ └── {YYYY-MM-DD}/qdrant_gpr_input.jsonl +│ +└── Agent_Context/ + └── latest_macro_context.md +``` + +### 2. Layer responsibilities + +| Layer | Primary purpose | Typical format | Used by | +|:---|:---|:---|:---| +| `1_Bronze_Raw` | Raw evidence retention and replay | JSONL / CSV / parsed source artifacts | Operators, debugging, reprocessing | +| `2_Silver_Processed` | Deterministic analytical truth | Parquet | SQL tools, Checker, quant logic | +| `3_Gold_Semantic` | Retrieval-ready semantic artifacts | JSONL / Markdown | Qdrant ingestion, hybrid RAG | +| `Agent_Context` | Stable prompt-time convenience snapshot | Markdown | LLM prompt assembly | + +--- + +## V. Pipeline Registry + +| Source | Ingestion Script | Provides | Cadence | +|:---|:---|:---|:---| +| **Options chains** | `scrapers/yfinance_options_history.py` | Per-contract IV, volume, OI, moneyness, spreads, liquidity flags for SPY / QQQ / IWM / GLD / SLV | Daily 07:20 | +| **Macro & market** | `scrapers/macro_data_pipeline.py` | Same-day market levels, daily changes, FRED macro series, MoM / YoY macro deltas | Trading days 06:30 | +| **GPR Index** | `scrapers/GPR_index.py` | Monthly geopolitical risk level, momentum, percentile, semantic narratives | Monthly 06:05 | +| **News** | `scrapers/news_scraper.py` | Topic-partitioned article capture, full text, semantic enrichment, tone and volatility implication | Daily 07:00 | +| **SEC ingestion** | `scrapers/sec_ingestion.py` | Bronze-layer Form 4 / 8-K parsed filings | Weekly Sunday 08:00 | +| **SEC processing** | `processors/sec_processor.py` | Gold-layer enriched summaries, tone scores, Qdrant-ready SEC payloads | Weekly Sunday 09:00 | + +Primary scheduler entrypoint: `Scripts/data_collection/collect_data.py` +Current orchestration CLI: `python -m Scripts ingest`, `daemon`, `status` + +--- + +## VI. Source Profiles + +### 1. Options Market Data + +| Item | Detail | +|:---|:---| +| **System of record** | Yahoo Finance via `yfinance` | +| **Primary script** | `Scripts/data_collection/scrapers/yfinance_options_history.py` | +| **Coverage** | SPY, QQQ, IWM, GLD, SLV | +| **Silver contract** | Strike, expiration, call/put, bid, ask, last price, volume, open interest, implied volatility, in-the-money flag | +| **Derived fields** | `dte`, `moneyness_pct`, `spread_pct`, `is_liquid` | +| **Storage layer** | Silver only | +| **Primary consumers** | `sql_tools.py`, Analyst / Checker quantitative validation | + +### 2. Macro and Market Data + +| Item | Detail | +|:---|:---| +| **Systems of record** | Yahoo Finance + FRED | +| **Primary script** | `Scripts/data_collection/scrapers/macro_data_pipeline.py` | +| **Series coverage** | `^GSPC`, `^IXIC`, `^VIX`, `DX-Y.NYB`, `GLD`, `SLV`, `FEDFUNDS`, `CPIAUCSL`, `UNRATE` | +| **Silver contract** | `retrieval_date`, `observation_date`, `symbol`, `asset_class`, `value`, `unit`, `frequency`, `daily_change_pct`, `mom_change_pct`, `yoy_change_pct` | +| **Gold-side derivative** | Markdown macro narrative snapshot | +| **Agent convenience output** | `Data/Agent_Context/latest_macro_context.md` | +| **Architectural rule** | Numeric truth lives in Silver `Macro_History`, not in markdown prompt context | + +### 3. Geopolitical Risk Index + +| Item | Detail | +|:---|:---| +| **System of record** | Iacoviello GPR Index | +| **Primary script** | `Scripts/data_collection/scrapers/GPR_index.py` | +| **Silver contract** | `gpr`, percentile, MoM, YoY, moving averages | +| **Gold contract** | `qdrant_gpr_input.jsonl` + narrative markdown | +| **Cadence** | Monthly | +| **Primary consumers** | Silver geopolitical handlers, Gold retrieval, macro regime synthesis | + +### 4. News and Sentiment + +| Item | Detail | +|:---|:---| +| **Systems of record** | GDELT 2.0 + web full-text extraction | +| **Primary script** | `Scripts/data_collection/scrapers/news_scraper.py` | +| **Bronze contract** | Raw GDELT captures + full-text article fetches | +| **Gold contract** | Topic-partitioned semantic JSONL for Qdrant | +| **Enrichment** | `llm_tone_score`, entities, impacted assets, volatility implication | +| **Primary consumers** | Qdrant retriever, Analyst, Critic | + +### 5. SEC Regulatory Filings + +| Item | Detail | +|:---|:---| +| **System of record** | SEC EDGAR REST API | +| **Primary scripts** | `sec_ingestion.py` -> `sec_processor.py` | +| **Bronze contract** | Parsed Form 4 and 8-K artifacts | +| **Gold contract** | `qdrant_ready.jsonl` | +| **Enrichment** | Rule-based insider tone, action direction, LLM-generated Form 8-K semantic summaries | +| **Primary consumers** | Qdrant retriever, insider-flow analysis, risk challenge | + +--- + +## VII. Processing Status Matrix + +| Data source | Bronze | Silver | Gold | LLM / enrichment mode | Qdrant | +|:---|:---:|:---:|:---:|:---|:---:| +| SEC Form 4 / 8-K | Yes | No | Yes | Form 4 rules; 8-K semantic enrichment | Yes | +| News / GDELT | Yes | No | Yes | LLM refinement and semantic labels | Yes | +| Macro / Market | No | Yes | Yes | Template-built markdown; Silver remains numeric truth | No by default | +| GPR Index | Yes (preview) | Yes | Yes | Rule-generated narrative and deterministic JSONL | Yes | +| Options market data | No | Yes | No | No LLM dependency | No | + +--- + +## VIII. Runtime State and Dynamic Anchors + +`config/runtime/collect_data_state.json` records the last successful ingestion key per source family. Retrieval-time date logic uses these anchors rather than wall-clock `CURRENT_DATE`, which is essential for weekends, holidays, and backfills. + +| State key | Primary downstream consumer | +|:---|:---| +| `options_daily` | Options handlers in `sql_tools.py` | +| `macro_trading_daily` | Macro handlers in `sql_tools.py` | +| `gpr_monthly` | GPR handlers in `sql_tools.py` | +| `news_daily` | News freshness logic and orchestration visibility | +| `sec_daily` | Vector ingestion source-date alignment | + +--- -## Global news and sentiment (`news_scraper.py`) +## IX. Architectural Control Notes -1. **Data source:** GDELT 2.0 (Global Database of Events, Language, and Tone) and DuckDuckGo Search (fallback). -2. **Data content:** Scraped full-text articles filtered by macro topics (Central Banks, Geopolitics) and Metals action. -3. **Metrics and metadata:** - - **Enrichment:** `llm_tone_score`, `volatility_implication` (Increase/Decrease), Entity extraction. - - **Metadata:** `source_domain`, `publish_timestamp`, `impacted_assets`. -4. **Storage:** Daily JSONL files categorized into Raw, Full-text, and Qdrant-processed layers. +- `Data/Agent_Context/latest_macro_context.md` is a **convenience projection**, not the numeric system of record. +- Gold Qdrant ingestion auto-discovers **Gold JSONL** artifacts; Markdown narratives are not ingested by default. +- `Macro_Narratives/*.md` improves prompt readability, but deterministic validation should bind to Silver values. +- For time filtering and cadence alignment, use the time-contract documents together with retrieval docs rather than inferring rules from file names alone. -## Geopolitical Risk Index (`GPR_index.py`) +--- -1. **Data source:** Iacoviello GPR Index (Academic source). -2. **Data content:** Historical monthly geopolitical risk levels. -3. **Metrics and metadata:** - - **Metrics:** `gpr_mom_pct`, `gpr_percentile` (Ranking against historical data). - - **Metadata:** `topic` (macro_geopolitics_risk), `gpr_score`. -4. **Storage:** Narrative Markdown corpus and structured vector input files. +## X. Detailed Technical Dossiers -## Repository data layout +Use this document as the master index, then drill down into the specialized source dossiers: -Medallion-style paths: `Data/1_Bronze_Raw/…`, `Data/2_Silver_Processed/…`, `Data/3_Gold_Semantic/…`, plus `Data/Agent_Context/` for agent-facing copies where applicable. +- Options data details: [`docs/Data_source_docs/options_historial_data.md`](options_historial_data.md) +- Macro / market data details: [`docs/Data_source_docs/macro_market_data.md`](macro_market_data.md) +- News ingestion details: [`docs/Data_source_docs/market_news_data.md`](market_news_data.md) +- SEC filing pipeline details: [`docs/Data_source_docs/SEC_data.md`](SEC_data.md) +- GPR source details: [`docs/Data_source_docs/GPR_Index.md`](GPR_Index.md) +- Time key and cadence contract: [`docs/Data_source_docs/Time_Schema_Audit.md`](Time_Schema_Audit.md) -## Dependencies +--- -**Combined Python dependencies (pip):** +## XI. Consolidated Dependencies ```bash -pip install requests pandas numpy pyarrow xlrd yfinance fredapi python-dotenv beautifulsoup4 markdownify langchain-ollama newspaper3k duckduckgo-search fastembed qdrant-client pydantic rich nltk +pip install requests pandas numpy pyarrow yfinance fredapi python-dotenv \ + beautifulsoup4 markdownify langchain-ollama newspaper3k duckduckgo-search \ + fastembed qdrant-client pydantic rich nltk duckdb ``` -**Services (not pip):** **Ollama** with `llama3` for `news_scraper.py`, `sec_processor.py`; environment variables **FRED_API_KEY**, **SEC_USER_AGENT** (see per-source docs). +**Required services and credentials:** +- **Ollama** for local semantic enrichment and agent inference. +- **Qdrant** for Gold semantic retrieval. +- **FRED API key** via `FRED_API_KEY`. +- **SEC User-Agent** via `SEC_USER_AGENT`. diff --git a/docs/Data_source_docs/SEC_data.md b/docs/Data_source_docs/SEC_data.md index 94b0ec3..de9a5aa 100644 --- a/docs/Data_source_docs/SEC_data.md +++ b/docs/Data_source_docs/SEC_data.md @@ -1,123 +1,164 @@ -# SEC data ingestion and processing +# SEC Regulatory Filings — Ingestion & Processing Pipeline -## 1. What this source provides (for downstream analysis) +## 1. Goal -- **Form 4 (insider activity):** Parsed transactions (codes, shares, prices, 10b5-1 hints) and structured metadata for recent filings. -- **Form 8-K (material events):** HTML → markdown (full doc or per-Item chunks) for event summarization. -- **Processed layer:** Rule-based **tone_score** and narrative for Form 4; **LLM (Llama 3 JSON)** summary and tone for 8-K; deduplication by **accession number** for idempotent Qdrant upserts. +Ingest Form 4 (insider transactions) and Form 8-K (material corporate events) from SEC EDGAR, enrich them with rule-based and LLM-generated signals, and produce idempotent Qdrant-ready payloads for Gold-layer retrieval. The processed output is the exclusive source of insider-activity signals surfaced by the `QdrantRetriever` during agent analysis. --- -## 2. Architecture and strategy workflow +## 2. Architecture -The pipeline runs in two phases: **ingestion (scraping)** and **enrichment (processing)**. +The pipeline runs in two sequential phases: **Bronze ingestion** (raw scraping) and **Gold processing** (enrichment + vector preparation). A shared accession-number registry enforces idempotency across both phases. -### Phase A — Ingestion (`scrapers/sec_ingestion.py`) - -#### Architecture workflow +``` +SEC EDGAR REST API + │ + ▼ +[Phase A] sec_ingestion.py + │ • CIK resolution from config/SEC_Ingestion/ticker_to_cik.json + │ • Form 4 (XML) → structured transaction rows + │ • Form 8-K (HTML) → markdownified, optionally item-chunked + │ • 7-day rolling window; exponential-backoff on HTTP 429 + │ + ▼ Data/1_Bronze_Raw/SEC_Parsed_JSON/{YYYY-MM-DD}/{TICKER}.jsonl + │ _SUMMARY.json + │ + ▼ +[Phase B] sec_processor.py + │ • Dedup via global_processed_registry.json + │ • Form 4 → rule-based tone score + C-suite / 10b5-1 adjustments + │ • Form 8-K → options-expert-v1 / llama3 LLM (JSON mode) summary + │ • ThreadPoolExecutor (max_workers=4) for LLM-bound concurrency + │ + ▼ Data/3_Gold_Semantic/SEC_Insider_Trades/{YYYY-MM-DD}/qdrant_ready.jsonl + config/SEC_Processing/global_processed_registry.json (updated) +``` -1. **Target identification:** Load NASDAQ tickers and map to SEC CIK (Central Index Key) via a local file to limit API calls. -2. **Resilient querying:** SEC EDGAR submissions API for Form 4 and Form 8-K in the **past 7 days**; retries with exponential backoff for rate limits (HTTP 429) and network jitter. -3. **Document retrieval and parsing** - - **Form 4 (XML):** Reporting owner, role, non-derivative transactions (shares, prices, codes, 10b5-1 flags). - - **Form 8-K (HTML):** Strip noise, markdownify, optional chunking by SEC “Item” headers. -4. **Raw archival:** Daily JSONL per ticker plus a cross-ticker summary file. +--- -#### Scraping strategy workflow +## 3. Code Strategy & Workflow -1. Load **`config/SEC_Ingestion/SEC_tickers.json`** (ticker list) and **`config/SEC_Ingestion/ticker_to_cik.json`** (CIK map). -2. For each ticker, call SEC **`data.sec.gov/submissions/CIK{cik}.json`**, filter **Form 4** and **8-K** with `filingDate` in the **last 7 days**. -3. **Form 4:** Fetch XML (normalize URL), parse transactions and owner metadata. -4. **8-K:** Fetch HTML, strip boilerplate, markdownify, optionally split by `Item X.XX` headers. -5. Append one JSON object per filing to **`Data/1_Bronze_Raw/SEC_Parsed_JSON/{date}/{ticker}.jsonl`**; write **`_SUMMARY.json`** across tickers. +### Phase A — Ingestion (`sec_ingestion.py`) -### Phase B — Processing (`processors/sec_processor.py`) +| Step | Strategy | +|:---|:---| +| **Ticker universe** | Loaded from `config/SEC_Ingestion/SEC_tickers.json`; mapped to CIK via `config/SEC_Ingestion/ticker_to_cik.json` | +| **EDGAR query** | `GET data.sec.gov/submissions/CIK{cik}.json` → filter `filingDate` within last 7 days for Form 4 and 8-K | +| **Form 4 parse** | Fetch document XML, extract `reportingOwner`, `role`, `nonDerivativeTransaction[]` (shares, prices, codes, 10b5-1 flags) | +| **8-K parse** | Fetch HTML, `BeautifulSoup` strip → `markdownify` → optional split by `Item X.XX` headers into chunks | +| **Rate resilience** | Exponential backoff on HTTP 429/503; 1 s floor between requests | +| **Output** | Append one JSON object per filing to `{TICKER}.jsonl`; write cross-ticker `_SUMMARY.json` | -#### Architecture workflow +### Phase B — Processing (`sec_processor.py`) -1. **State management:** Global registry of processed accession numbers for idempotency and no duplicate embeddings. -2. **Concurrent execution:** `ThreadPoolExecutor` to overlap LLM-bound work. -3. **Contextual enrichment** - - **Form 4 expert rules:** Tone score from net value, 10b5-1 planned sales (less negative), C-suite multipliers (+2 buys / −2 sells), neutral treatment for zero-dollar vesting-style flows. - - **Form 8-K LLM analysis:** Markdown passed to local LLM (`ChatOllama`, `llama3`); strict JSON with summary, tone (−5 to +5), and topic tags. -4. **Vector DB preparation:** Single append-friendly `qdrant_ready.jsonl` output. +| Step | Strategy | +|:---|:---| +| **Dedup guard** | Load `global_processed_registry.json` as a set; skip any row whose `accession_no` is already present | +| **Form 4 scoring** | Net-value tone (positive = buy signal); 10b5-1 planned-sale discount (−1); C-suite multipliers (+2 buy / −2 sell); zero-dollar vesting → `ACQUIRE/VEST` | +| **8-K LLM** | `ChatOllama(model="options-expert-v1:latest", format="json")` → strict JSON with `summary`, `transaction_date`, `tone_score`, `topics` | +| **Concurrency** | `ThreadPoolExecutor(max_workers=4)` — each future processes one Bronze row | +| **Registry update** | Append `accession_no` to registry file after each successful Gold write | -#### Scraping strategy workflow +--- -1. Read all `*.jsonl` from the same date folder (CLI `--date`, default today). -2. Skip accession numbers present in **`config/SEC_Processing/global_processed_registry.json`**. -3. **Form 4:** Apply net buy/sell rules, C-suite and 10b5-1 adjustments; produce one-line summary and scores. -4. **8-K:** Call **ChatOllama** (`llama3`, JSON mode, `http://localhost:11434`) for summary, `transaction_date`, `tone_score`, `topics`. -5. Append **`text` + merged `metadata`** to **`qdrant_ready.jsonl`**; register accession after each successful write (thread pool, max 4 workers). +## 4. Output Data Schema & Paths + +### Storage Paths + +| Artifact | Path | +|:---|:---| +| **Bronze JSONL** | `Data/1_Bronze_Raw/SEC_Parsed_JSON/{YYYY-MM-DD}/{TICKER}.jsonl` | +| **Bronze summary** | `Data/1_Bronze_Raw/SEC_Parsed_JSON/{YYYY-MM-DD}/_SUMMARY.json` | +| **Gold JSONL** | `Data/3_Gold_Semantic/SEC_Insider_Trades/{YYYY-MM-DD}/qdrant_ready.jsonl` | +| **Registry** | `config/SEC_Processing/global_processed_registry.json` | +| **Ingestion log** | `logs/{YYYY-MM-DD}/SEC_Ingestion/ingestion_progress_{YYYY-MM-DD}.log` | + +### Bronze JSONL Schema (per line) + +| Field | Type | Description | +|:---|:---|:---| +| `metadata.ticker` | `string` | Stock symbol (e.g. `"AAPL"`) | +| `metadata.form_type` | `string` | `"4"` or `"8-K"` | +| `metadata.filed_at` | `string` | SEC filing date `YYYY-MM-DD` | +| `metadata.accession_no` | `string` | Unique SEC identifier | +| `metadata.url` | `string` | Primary document URL on EDGAR | +| `metadata.ingested_at` | `string` | ISO timestamp of ingestion write | +| `parsed_data` | `object` | Form 4: `reporting_owner`, `role`, `transactions[]`. 8-K: `is_chunked`, `item_chunks` or `full_markdown` | +| `raw_text` | `string` | Sentinel string (`"XML_PARSED_SUCCESSFULLY"`, `"8K_PARSED_INTO_MARKDOWN_CHUNKS"`, or error note) | + +### Gold `qdrant_ready.jsonl` Schema (per line) + +| Field | Type | Description | +|:---|:---|:---| +| `text` | `string` | Human-readable summary sentence (Form 4) or LLM-generated summary (8-K) | +| `metadata.ticker` | `string` | Stock symbol | +| `metadata.form_type` | `string` | `"4"` or `"8-K"` | +| `metadata.filed_at` | `string` | SEC filing date | +| `metadata.accession_no` | `string` | Dedup key | +| `metadata.url` | `string` | Source document link | +| `metadata.transaction_date` | `string` | Actual event date (Form 4 trade date; 8-K event date from LLM) | +| `metadata.tone_score` | `int` | −5 … +5 (rule-based for Form 4; LLM for 8-K) | +| `metadata.action_direction` | `string` | `"BUY"`, `"SELL"`, `"ACQUIRE/VEST"`, or `"NONE"` | +| `metadata.topics` | `array[string]` | E.g. `["Insider Trading", "Form 4"]` | +| `metadata.source_type` | `string` | `"sec"` (required by QdrantRetriever filter) | +| `metadata.unified_timestamp` | `float` | Unix-seconds epoch derived from `transaction_date` (enables numeric Qdrant Range filter) | +| `metadata.processed_at` | `string` | ISO 8601 timestamp of Gold write | + +> **Note on `unified_timestamp`**: Added post-2026-04-22 to support the `TimeAdapter` numeric Range binding. Legacy payloads without this field still have `filed_at` / `transaction_date` ISO strings for fallback matching. --- -## 3. Pipeline strategy (inputs, outputs, frequency) +## 5. How to Test -| Script | Inputs | Outputs | Frequency (`collect_data.py`) | -| :--- | :--- | :--- | :--- | -| **sec_ingestion.py** | `config/SEC_Ingestion/SEC_tickers.json`, `ticker_to_cik.json`; env **`SEC_USER_AGENT`** (required by SEC); SEC EDGAR APIs | `Data/1_Bronze_Raw/SEC_Parsed_JSON/{YYYY-MM-DD}/{TICKER}.jsonl`, `_SUMMARY.json`; logs under `logs/{date}/SEC_Ingestion/` | Weekly **Sunday** 08:00 | -| **sec_processor.py** | Same-date Bronze JSONL; Ollama **`llama3`**; registry file | `Data/3_Gold_Semantic/SEC_Insider_Trades/{YYYY-MM-DD}/qdrant_ready.jsonl`; updates `config/SEC_Processing/global_processed_registry.json` | Weekly **Sunday** 09:00 | +### Validate Bronze output -**Ingestion log file:** `logs/{YYYY-MM-DD}/SEC_Ingestion/ingestion_progress_{YYYY-MM-DD}.log` +```bash +python Scripts/data_collection/scrapers/sec_ingestion.py +# Expected: Data/1_Bronze_Raw/SEC_Parsed_JSON/{today}/{TICKER}.jsonl for each ticker +``` ---- +### Validate Gold processing -## 4. Data shapes and metadata - -### Bronze JSONL (one object per line) - -| Field | Description | -| :--- | :--- | -| `metadata` | See below (ingestion) | -| `parsed_data` | Form 4: `reporting_owner`, `role`, `transactions[]`. 8-K: `is_chunked`, `item_chunks` **or** `full_markdown`, etc. | -| `raw_text` | Placeholder string noting parse status | - -#### `metadata` (ingestion — complete tags) - -| Tag | Type | Description | -| :--- | :--- | :--- | -| `ticker` | string | Symbol | -| `form_type` | string | `"4"` or `"8-K"` | -| `filed_at` | string | SEC filing date `YYYY-MM-DD` | -| `accession_no` | string | SEC accession number | -| `url` | string | Primary document URL | -| `ingested_at` | string | ISO timestamp when written | - -### Processed: `qdrant_ready.jsonl` - -| Field | Description | Type | -| :--- | :--- | :--- | -| `text` | The human-readable summary. For Form 4, it's a generated sentence describing the trade. For 8-K, it's the LLM-generated summary. | String | -| `metadata` | A nested dictionary containing all structured data to be used as payload/filters in Qdrant. | Object | - -#### `metadata` (processed — ingestion fields plus enrichment; complete tags) - -| Key | Description | Type | -| :--- | :--- | :--- | -| `ticker` | The stock symbol (e.g., AAPL). | String | -| `form_type` | The SEC filing type ("4" or "8-K"). | String | -| `filed_at` | The date the document was filed with the SEC. | String | -| `accession_no` | The unique SEC document identifier. | String | -| `url` | Direct link to the source document on EDGAR. | String | -| `transaction_date` | The actual date the event or trade occurred. | String | -| `tone_score` | Quantitative sentiment score. Form 4 uses custom rules; 8-K uses LLM evaluation (-5 to +5). | Integer | -| `action_direction` | Categorization of the event (e.g., "BUY", "SELL", "ACQUIRE/VEST", or "NONE"). | String | -| `topics` | Array of relevant tags (e.g., `["Insider Trading", "Form 4"]`). | Array of Strings | -| `processed_at` | Timestamp of when the pipeline finished processing the record. | String (ISO 8601) | +```bash +python Scripts/data_collection/processors/sec_processor.py +# Expected: Data/3_Gold_Semantic/SEC_Insider_Trades/{today}/qdrant_ready.jsonl +``` ---- +### Inspect accession registry -## 5. Dependencies +```python +import json +reg = json.load(open("config/SEC_Processing/global_processed_registry.json")) +print(f"Registry size: {len(reg)} accessions") +``` -**Ingestion:** +### Qdrant retrieval smoke test (post-ingestion) ```bash -pip install requests beautifulsoup4 markdownify python-dotenv +# Run after Qdrant_Ingestion.py has upserted the Gold JSONL +python -m Scripts.tests.test_master_retriever +# Query: "Any recent AAPL insider trades?" +# Expected: gold_chunks > 0, source_type="sec", form_type="4" ``` -**Processor (plus local Ollama with `llama3`):** +--- + +## 6. Dependencies + +| Library | Phase | Purpose | +|:---|:---|:---| +| `requests` | A | EDGAR HTTP calls | +| `beautifulsoup4` | A | HTML stripping for 8-K | +| `markdownify` | A | HTML → Markdown conversion | +| `python-dotenv` | A + B | `.env` loading (`SEC_USER_AGENT`) | +| `langchain-ollama` | B | LLM 8-K summarisation | ```bash +# Phase A +pip install requests beautifulsoup4 markdownify python-dotenv + +# Phase B (plus local Ollama with options-expert-v1 or llama3) pip install langchain-ollama python-dotenv ``` + +**Required environment variable:** `SEC_USER_AGENT` — e.g. `"CompanyName contact@email.com"` (SEC fair-access policy requires a valid identifier in every request header). diff --git a/docs/Data_source_docs/Time_Schema_Audit.md b/docs/Data_source_docs/Time_Schema_Audit.md new file mode 100644 index 0000000..84beef6 --- /dev/null +++ b/docs/Data_source_docs/Time_Schema_Audit.md @@ -0,0 +1,290 @@ +# Time Schema Audit — All Data Sources + +> **Authoritative reference for every time column / payload key in the lake.** +> Updated: 2026-04-24 · Owner: RAG architecture +> Companion module: `Scripts/retrieval/time_adapter.py` +> Companion audit log: `logs/retrieval//retriever_audit_trail.jsonl` (field `source_predicates`) + +--- + +## 0. Why this document exists + +A RAG system that mixes Qdrant (vector) and Parquet (SQL) cannot apply a single +`(start_ts, end_ts)` window to every query: each source stores time differently +and runs on a different cadence. Before this audit a "yesterday" query against +GPR returned `0` rows (monthly source, no daily data exists), and a "past week" +query against legacy SEC returned `0` hits (no numeric timestamp key in payload). + +The fix is a **per-source Time Alignment Adapter** (`time_adapter.py`) that +compiles one `TimePredicate` per source, applying source-specific widening +rules. This document is the source of truth for what keys exist, their units, +and the widening policy applied in production. + +--- + +## 1. Silver Layer (Parquet / DuckDB) + +### 1.1 Options Market Data + +| Attribute | Value | +|-------------------|-------| +| Path (glob) | `Data/2_Silver_Processed/Options_Market_Data//_options_.parquet` | +| Writer | `Scripts/data_collection/scrapers/yfinance_options_history.py` | +| Cadence | **Daily** (trading days only; weekends/holidays missing) | +| Primary time col | `snapshot_date` | +| Other time cols | `expiration` (contract expiry, not snapshot) | +| Physical type | `VARCHAR` (`YYYY-MM-DD`) | +| Timezone | US market close (approx `America/New_York`); stored naive | +| Cast for BETWEEN | `CAST(snapshot_date AS DATE) BETWEEN CAST(? AS DATE) AND CAST(? AS DATE)` | +| Granularity enum | `TimeGranularity.DAILY` | +| Min lookback | `3 days` (survives weekend gap on Monday-anchored "yesterday") | +| `SourceTimeKey` | `silver.options` | + +### 1.2 Macro History + +| Attribute | Value | +|-------------------|-------| +| Path (glob) | `Data/2_Silver_Processed/Macro_History//macro_snapshot_.parquet` | +| Writer | `Scripts/data_collection/scrapers/macro_data_pipeline.py` | +| Cadence | **Mixed** — Daily (Yahoo Finance) + Monthly (FRED) interleaved | +| Primary time col | `observation_date` (authoritative series date) | +| Other time cols | `retrieval_date` (ingestion day) | +| Physical type | `VARCHAR` (`YYYY-MM-DD`) | +| Timezone | UTC (observation) / local ingest (retrieval) — stored naive | +| Cast for BETWEEN | `CAST(observation_date AS DATE) BETWEEN CAST(? AS DATE) AND CAST(? AS DATE)` | +| Granularity enum | `TimeGranularity.DAILY` (predominant; monthly rows survive via `ORDER BY observation_date DESC LIMIT 1`) | +| Min lookback | `3 days` | +| `SourceTimeKey` | `silver.macro` | + +> **Frequency column:** rows also carry a `frequency ∈ {"Daily", "Monthly"}` +> field. Analyst can use it to disambiguate CPI / UNRATE (Monthly) from ^GSPC +> / VIX (Daily) without requiring separate partitions. + +### 1.3 GPR Index (Silver) + +| Attribute | Value | +|-------------------|-------| +| Path | `Data/2_Silver_Processed/GPR_index/gpr_monthly_enriched.parquet` (single file, overwritten in place) | +| Writer | `Scripts/data_collection/scrapers/GPR_index.py` | +| Cadence | **Monthly** (first-of-month rows) | +| Primary time col | `date` | +| Other time cols | `month` (duplicate of `date`) | +| Physical type | `TIMESTAMP_NS` (pandas/arrow nanosecond timestamp) | +| Timezone | UTC, stored naive | +| Cast for BETWEEN | `date BETWEEN ? AND ?` (DuckDB coerces `DATE` → `TIMESTAMP_NS` automatically) | +| Granularity enum | `TimeGranularity.MONTHLY` | +| Min lookback | `35 days` (always widens to the full anchor month) | +| `SourceTimeKey` | `silver.gpr` | + +> **Widening example:** a `"yesterday"` query (2d base) is widened to +> `[first-of-month(anchor), anchor]` (≥28 d) so the latest GPR row for the +> anchor month is always inside the window. Without this, monthly data is +> effectively invisible to short-horizon queries. + +--- + +## 2. Gold Layer (Qdrant vector store) + +All Gold payloads share a **canonical time key**: `unified_timestamp` +(Unix seconds, integer, UTC). Legacy payloads that predate the +2026-04-22 ingestion fix may still be missing this key — the retriever +supports either via a nested `Filter(should=[...])` on `unified_timestamp` +OR `publish_timestamp` (see §4). + +### 2.1 News — `source_type == "news"` + +| Key | Physical type | Unit | Required? | Notes | +|-------------------------|---------------|-------------|-----------|-------| +| `unified_timestamp` | `int` | epoch_s | Post-fix | Mirror of `publish_timestamp` on ingest | +| `publish_timestamp` | `int` | epoch_s | Yes | Event time, written by `news_scraper.py` | +| `publish_date` | `str` | ISO-8601 Z | Yes | Human-readable companion (e.g. `2026-04-19T16:29:12Z`) | + +| Attribute | Value | +|-----------------|-------| +| Cadence | Event (sub-daily) | +| Granularity enum| `TimeGranularity.EVENT` | +| Min lookback | `1 day` | +| `SourceTimeKey` | `gold.news` | + +### 2.2 SEC Insider Trades — `source_type == "sec"` + +| Key | Physical type | Unit | Required? | Notes | +|-------------------------|---------------|----------------|---------------|-------| +| `unified_timestamp` | `int` | epoch_s | Post-fix only | Derived from `transaction_date` (preferred), else `filed_at`, else `ingested_at`. **Absent on pre-2026-04-22 ingests.** | +| `filed_at` | `str` | ISO-8601 + TZ | Yes | e.g. `2026-04-13T18:30:45-04:00` (America/New_York) | +| `transaction_date` | `str` | ISO date | Yes | Actual trade date, no TZ (e.g. `2026-04-13`) | +| `ingested_at` | `str` | ISO datetime | Yes | Bronze-layer ingestion timestamp (naive, local) | +| `processed_at` | `str` | ISO datetime | Yes | Gold-layer processing timestamp | + +| Attribute | Value | +|-----------------|-------| +| Cadence | Event (sub-daily, but bursty around market close) | +| Granularity enum| `TimeGranularity.EVENT` | +| Min lookback | `3 days` (filings often clump on Monday post-weekend; 3-day floor keeps recall non-zero) | +| `SourceTimeKey` | `gold.sec` | + +> **⚠️ Pre-reingest risk.** Because legacy SEC payloads have **neither +> `unified_timestamp` nor `publish_timestamp`**, a Qdrant numeric Range +> filter on these docs matches nothing. The retriever mitigation is +> documented in §4 ("Source-type logic check"), and the permanent fix is +> running `Scripts/vector_store/ingestion.py` to backfill `unified_timestamp`. + +### 2.3 GPR (Gold) — `source_type == "gpr"` + +| Key | Physical type | Unit | Required? | Notes | +|-------------------------|---------------|--------|-----------|-------| +| `unified_timestamp` | `int` | epoch_s| Post-fix | Mirror of `publish_timestamp` | +| `publish_timestamp` | `int` | epoch_s| Yes | First-of-month epoch seconds | +| `publish_date` | `str` | ISO date| Yes | e.g. `2020-01-01` | + +| Attribute | Value | +|-----------------|-------| +| Cadence | **Monthly** (one point per month) | +| Granularity enum| `TimeGranularity.MONTHLY` | +| Min lookback | `35 days` | +| `SourceTimeKey` | `gold.gpr` | + +--- + +## 3. Registry summary (single glance) + +| SourceTimeKey | Layer | Cadence | Time keys (priority order) | Units | Min lookback | +|----------------------|--------|----------|----------------------------------------------------------|----------------------------------------------|--------------| +| `gold.news` | Gold | Event | `unified_timestamp`, `publish_timestamp` | `epoch_s`, `epoch_s` | 1 d | +| `gold.sec` | Gold | Event | `unified_timestamp`, `filed_at`, `transaction_date` | `epoch_s`, `iso_datetime`, `iso_date` | 3 d | +| `gold.gpr` | Gold | Monthly | `unified_timestamp`, `publish_timestamp` | `epoch_s`, `epoch_s` | 35 d | +| `silver.options` | Silver | Daily | `snapshot_date` | `iso_date` | 3 d | +| `silver.macro` | Silver | Daily | `observation_date`, `retrieval_date` | `iso_date`, `iso_date` | 3 d | +| `silver.gpr` | Silver | Monthly | `date`, `month` | `ts_ns`, `ts_ns` | 35 d | + +This table is the machine-readable registry `SOURCE_SPECS` in +`Scripts/retrieval/time_adapter.py`. Keep them in sync. + +--- + +## 4. Source-type logic check: `source_types = ["sec", "news"]` + +**Question:** does simultaneously matching `unified_timestamp` OR +`publish_timestamp` across mixed source types create a logic problem? + +**Answer:** no, provided re-ingestion has run. In detail: + +| Payload family | `unified_timestamp` present? | `publish_timestamp` present? | Behaviour under nested `should` filter | +|----------------------|------------------------------|------------------------------|----------------------------------------| +| News (any vintage) | Yes (post-fix) / No (legacy) | **Yes** | Always matches via `publish_timestamp` | +| GPR (any vintage) | Yes (post-fix) / No (legacy) | **Yes** | Always matches via `publish_timestamp` | +| SEC (post-fix) | **Yes** | No | Matches via `unified_timestamp` | +| SEC (legacy) | No | No | **Does not match — invisible to time filter** | + +The `Filter(should=[...])` clause is satisfied when **at least one** timestamp key lands in range. So mixing `["sec", "news"]`: +- News docs always pass (they carry `publish_timestamp`). +- Post-reingest SEC docs pass via `unified_timestamp`. +- Legacy SEC docs are silently excluded — operationally indistinguishable from "no SEC data exists for this window", which is a **correctness + win** (do not emit false SEC anchors) at the cost of **recall** (missing docs whose timestamp existed only as an ISO string). + +### 4.1 Operational mitigation + +1. **Re-ingest SEC via `Scripts/vector_store/ingestion.py`.** The ingestion enricher (patched 2026-04-22) now parses `transaction_date` → Unix + seconds and writes `unified_timestamp` for every SEC document. This permanently removes the legacy-blind-spot. +2. **Audit visibility.** Every retriever run writes `source_predicates` + `filter_applied` to `logs/retrieval//retriever_audit_trail.jsonl`. Operators can query for `fallback_tier != "strict" AND source_type_contains("sec")` to quantify the legacy SEC gap over time. + +### 4.2 Why this design is still the right one + +Alternatives considered and rejected: + +| Alternative | Why rejected | +|--------------------------------------------|------------------------------------------------------------------------------| +| Require only `unified_timestamp` | Hard breaking change; blanks out ALL legacy news/gpr docs too | +| Add `filed_at` as a string Range condition | Qdrant `Range` is numeric-only; string ranges need `DatetimeRange` (1.8+) | +| Duplicate every doc into multiple keys | Index bloat; cannot backfill without re-vectorising | +| Per-source sub-queries joined at app layer | 3× Qdrant round-trips; breaks RRF fusion because each source has its own topk| + +Nested `should` on `{unified_timestamp, publish_timestamp}` gives us one Qdrant call, backward compat, and a clean migration path. The Gold retriever (`qdrant_retriever._build_smart_filter`) implements it. + +--- + +## 5. Robust time handling — recommendations + +These are the patterns this codebase now uses; keep them as guardrails. + +### 5.1 Compile once, execute everywhere +`MasterRetriever._compute_time_range` calls `time_adapter.compile_all(...)` and publishes the `{SourceTimeKey → TimePredicate}` dict on `self._current_predicate_set`. Both Gold (`qdrant_retriever`) and Silver (`sql_tools`) read from that compiled set — no retriever ever re-derives the window from raw `metadata.time_window`. This is the single invariant that kills off cross-layer drift. + +### 5.2 Anchor = latest successful ingestion, not `date.today()` +Anchor dates come from `config/runtime/collect_data_state.json` +(`SilverSQLTool._get_anchor_date`). Weekends, holidays, and backfills all +land on the last known-good partition. Wall-clock-anchored queries are a +pre-2026-04-04 anti-pattern; see the "Dynamic Time Anchor" note in +`sql_tools.py`. + +### 5.3 Per-source widening is source-spec-driven, not query-spec-driven +Widening rules (monthly → month-wide, daily → 3-day weekend-safe) live +on `SourceTimeSpec.min_lookback_days`. Never embed them in handler +branches — add a spec row instead. + +### 5.4 Always store **both** a numeric epoch **and** a human ISO +Every new ingestion writer must emit `unified_timestamp` (Unix seconds, +integer, UTC) AND a readable ISO date companion (`publish_date` / +`transaction_date` / `observation_date`). The epoch key is what filters +bind to; the ISO string is what humans and audit logs cite. Do not make +operators reverse-engineer epoch offsets during an incident. + +### 5.5 Timezone normalisation at ingest, not at query +The ingestion enricher converts all timestamps to UTC before storing. +Downstream code can treat every Unix epoch as UTC. If a new source +writes local-time ISO strings, fix it at the ingest boundary, not in +the retriever. + +### 5.6 Weekend-safe "end-of-day" bounds +`time_adapter._to_epoch_bounds` pushes `end_date` to `23:59:59 UTC` so +a same-day query (e.g. `today`) still matches events that occurred +during the day. This is the small detail that makes `yesterday` queries +not empty when the anchor is "today". + +### 5.7 Hard filter + soft fallback, never hard filter alone +The Gold retriever has three tiers: strict (per-source aligned window), +soft (180-day + ticker-OR-topic), drop (180-day no ticker). The first +non-empty tier wins, and the tier label is persisted in the audit log +(`fallback_tier`). Monitor "tier != strict" rates as a data-freshness +signal. + +### 5.8 Mandatory audit keys +Every retriever call must emit: +- `source_predicates`: serialised per-source TimePredicates +- `fallback_tier`: `strict | soft_ticker_180d | drop_ticker_180d | error` +- `filter_applied`: the Qdrant Filter object (Pydantic dump) +- `window_days`, `start_date`, `end_date` + +Any retriever that omits these is a regression. + +--- + +## 6. Implementation cross-reference + +| Concern | File | Anchor | +|-----------------------------|-----------------------------------------------|---------------------------------| +| Semantic `TimeWindow` enum | `Scripts/retrieval/schema.py` | `class TimeWindow` + `TIME_WINDOW_DAYS` | +| Per-source compiler | `Scripts/retrieval/time_adapter.py` | `compile_predicate`, `compile_all`, `SOURCE_SPECS` | +| Orchestration / wiring | `Scripts/retrieval/master_retriever.py` | `_compute_time_range`, `_current_predicate_set` | +| Gold retriever binding | `Scripts/retrieval/qdrant_retriever.py` | `_build_smart_filter`, `_select_gold_predicates`, `retrieve_async(time_predicates=...)` | +| Silver retriever binding | `Scripts/retrieval/sql_tools.py` | `query_parquet_by_metadata(time_predicates=...)`, `_predicate_for`, `_handle_put_call_ratio` | +| Ingestion-side guarantees | `Scripts/vector_store/ingestion.py` | `QdrantHybridIngestor.process_and_upsert_file` (normalizes source payloads and timestamps before upsert) | +| Anchor (calendar truth) | `config/runtime/collect_data_state.json` | `last_run_keys.{options_daily, macro_trading_daily, gpr_monthly, news_daily}` | + +--- + +## 7. Document Boundary and Folder Policy + +### 7.1 Functional difference between the two documents + +| Document | Scope | Primary audience | Update trigger | +|---|---|---|---| +| `Time_Adapter.md` | Time-window compilation logic (`TimeWindow -> TimePredicate`) and widening behavior | Retrieval/orchestration engineers | Any change to `compile_predicate`, widening policy, or source predicate wiring | +| `Time_Schema_Audit.md` | Physical source-of-truth for time columns/keys/units across Silver and Gold datasets | Data platform and retrieval engineers | Any schema/cadence/time-key change in ingestion or storage layers | + +### 7.2 Should they live in different docs folders? + +Recommended operating model: +- Keep `Time_Adapter.md` in `docs/Query_retrieval_docs/` because it documents retrieval-time query compilation behavior. +- Move `Time_Schema_Audit.md` to `docs/Data_source_docs/` when you want clear ownership separation between retrieval logic and physical data contracts. +- If you do not want to move files right now, keep both in the current folder but add explicit cross-links and owner notes (this document now includes that boundary). diff --git a/docs/Data_source_docs/options_historial_data.md b/docs/Data_source_docs/options_historial_data.md index 0ea2a71..9a58141 100644 --- a/docs/Data_source_docs/options_historial_data.md +++ b/docs/Data_source_docs/options_historial_data.md @@ -1,90 +1,152 @@ -# Options data — `yfinance_options_history.py` +# Options Market Data — `yfinance_options_history.py` -This documentation covers the `yfinance_options_history.py` script, designed for automated financial data ingestion and processing. +## 1. Goal + +Produce a daily, date-partitioned Silver-layer Parquet snapshot of the full options chains for a fixed universe of liquid equity-index and metals ETFs. The snapshot feeds two downstream consumers: + +1. **`SilverSQLTool`** (`Scripts/retrieval/sql_tools.py`) — queried at agent runtime via DuckDB for IV skew, put/call ratio, liquidity analysis, and options pricing spread. +2. **`MasterRetriever` always-on GPR patch** (`Scripts/retrieval/master_retriever.py`) — colocated ingestion ensures the IV-regime classifier always has a same-day anchor. --- -## 1. What this source provides (for downstream analysis) +## 2. Architecture -- **Cross-sectional options snapshots** for liquid equity-index and metals ETFs: SPY, QQQ, IWM, GLD, SLV. -- **Per-contract fields** from Yahoo Finance: quotes, volume, open interest, implied volatility, ITM flag. -- **Derived features** for screening and LLM reasoning: days to expiration, moneyness %, bid–ask spread %, and a boolean **liquidity** flag. +``` +yfinance API + │ + ▼ +[1] Underlying price fetch (per symbol) + │ + ▼ +[2] Expiration discovery → nearest 10 expirations + │ + ▼ +[3] Call + Put chain extraction (1 s delay between API calls) + │ + ▼ +[4] Vectorised enrichment (pandas) + │ • dte = expiration − snapshot_date + │ • moneyness_pct = |strike − underlying_price| / underlying_price × 100 + │ • spread_pct = (ask − bid) / ask × 100 [0.0 when ask ≤ 0] + │ • is_liquid = volume ≥ 50 AND open_interest ≥ 100 AND bid > 0 + │ + ▼ +[5] Persist → Parquet (date-partitioned, per symbol) +``` --- -## 2. Architecture and strategy workflow - -### High-level sequence +## 3. Code Strategy & Workflow -1. **Initialization:** Resolve absolute paths for storage and configure a 1-second request delay. -2. **Market baseline fetching:** Current underlying price for the predefined symbol list (e.g., SPY, QQQ). -3. **Expiration discovery:** List all option expirations; process the nearest **10**. -4. **Chain extraction:** For each expiration, extract Call and Put dataframes. -5. **Vectorized enrichment:** `pandas` for moneyness, spreads, and liquidity across all contracts. -6. **Archival:** Save enriched data in a date-partitioned directory as Parquet. +| Step | Implementation | Notes | +|:---|:---|:---| +| **Path resolution** | `UniverseLoader` (`Scripts/core/universe.py`) provides symbol list and resolves absolute output path via `universe.paths.options_parquet_path(symbol, date)` | Path contract: `Data/2_Silver_Processed/Options_Market_Data/{YYYY-MM-DD}/{SYMBOL}_options_{YYYY-MM-DD}.parquet` | +| **Rate limiting** | `time.sleep(1)` between every `yf.Ticker.option_chain()` call | Prevents Yahoo Finance throttle | +| **Expiration cap** | `[:10]` slice on sorted expiration list | Covers ≈ 7–60 DTE range; further expirations are illiquid | +| **Moneyness filter** | No server-side filter; all strikes retained | SilverSQLTool applies `dte BETWEEN 7 AND 45` and `is_liquid = true` filters at query time | +| **Parquet engine** | `pyarrow` (`df.to_parquet(..., engine="pyarrow")`) | Columnar compression; DuckDB reads natively | +| **Schema validation** | `SilverSQLTool._validate_parquet_contract()` checks required columns on every process startup | Emits `SCHEMA_CHECK` audit line; fails loudly on column drift | -### Implementation notes +--- -1. **Paths and logging:** Under `Data/2_Silver_Processed/Options_Market_Data/` and `logs/{date}/`. -2. **Per symbol:** Fetch underlying quote → list expirations → for up to **10 nearest** expirations, pull full call/put chains (1 s delay between API calls). -3. **Normalize:** Flatten each contract to one row with `snapshot_date`, `underlying_price`, `option_type`, `dte`, etc. -4. **Vectorized metrics:** `moneyness_pct`, `spread_pct` (safe when `ask > 0`), `is_liquid` = volume ≥ 50, OI ≥ 100, and bid > 0. -5. **Persist:** One Parquet per symbol per day under a date subfolder. +## 4. Output Data Schema & Paths + +### Storage Paths + +| Artifact | Path | +|:---|:---| +| **Silver Parquet** | `Data/2_Silver_Processed/Options_Market_Data/{YYYY-MM-DD}/{SYMBOL}_options_{YYYY-MM-DD}.parquet` | +| **DuckDB glob** | `Data/2_Silver_Processed/Options_Market_Data/*/*.parquet` (used by `SilverSQLTool`) | +| **Run log** | `logs/{YYYY-MM-DD}/options_scraper_{YYYY-MM-DD}.log` | + +### Parquet Schema + +| Column | Type | Description | +|:---|:---|:---| +| `snapshot_date` | `string` (ISO date) | Trading day the snapshot was taken | +| `symbol` | `string` | Underlying ETF ticker (SPY, QQQ, IWM, GLD, SLV) | +| `underlying_price` | `float64` | Spot price used for moneyness calculation | +| `contract_symbol` | `string` | OCC-style full contract code | +| `option_type` | `string` | `"call"` or `"put"` | +| `strike` | `float64` | Strike price | +| `expiration` | `string` (ISO date) | Expiration date | +| `dte` | `int64` | Calendar days to expiration at snapshot time | +| `moneyness_pct` | `float64` | `abs(strike − underlying_price) / underlying_price × 100` | +| `last_price` | `float64` | Last traded price | +| `bid` | `float64` | Best bid | +| `ask` | `float64` | Best ask | +| `spread_pct` | `float64` | `(ask − bid) / ask × 100`; `0.0` when `ask ≤ 0` | +| `volume` | `int64` | Daily volume | +| `open_interest` | `int64` | Open interest | +| `implied_volatility` | `float64` | Annualised IV from Yahoo (decimal, e.g. `0.38` = 38%) | +| `in_the_money` | `bool` | Intrinsic value flag from Yahoo | +| `is_liquid` | `bool` | `volume ≥ 50 AND open_interest ≥ 100 AND bid > 0` | + +**Required columns verified at startup by `SilverSQLTool._validate_parquet_contract()`:** +`snapshot_date`, `symbol`, `option_type`, `volume`, `open_interest`, `implied_volatility`, `moneyness_pct`, `spread_pct`, `dte`, `is_liquid`, `contract_symbol` + +### SQL Handlers that consume this schema + +| Handler | Key filters | Output keys | +|:---|:---|:---| +| `_handle_options_analysis` | `is_liquid = true`, `dte BETWEEN 7 AND 45` | `latest_atm_iv`, `{TICKER}_iv_skew_{DTE}d`, `{TICKER}_skew_direction` | +| `_handle_put_call_ratio` | `symbol = ?`, date window | `pcr_volume`, `pcr_open_interest`, `pcr_status` | +| `_handle_liquidity_analysis` | `is_liquid = true` | `total_liquid_calls`, `total_liquid_puts`, `top_volume_strike_call/put` | +| `_handle_pricing_spread` | `is_liquid = true`, `dte BETWEEN 7 AND 45` | `{TICKER}_underlying_price`, `{TICKER}_avg_bid/ask/spread_pct` | --- -## 3. Pipeline strategy (inputs, outputs, frequency) +## 5. How to Test -| Item | Detail | -| :--- | :--- | -| **Inputs** | **In-script symbol list:** `["SPY", "QQQ", "IWM", "GLD", "SLV"]`. No external config file. **API:** `yfinance`. | -| **Outputs** | `Data/2_Silver_Processed/Options_Market_Data/{YYYY-MM-DD}/{SYMBOL}_options_{YYYY-MM-DD}.parquet` | -| **Logs** | `logs/{YYYY-MM-DD}/options_scraper_{YYYY-MM-DD}.log` | -| **Update frequency** | **Daily** per `collect_data.py` (07:20). | +### Schema contract check (runs on every process start) ---- +```bash +python -c "from Scripts.retrieval.sql_tools import SilverSQLTool; SilverSQLTool()" +# Look for: SCHEMA_CHECK | dataset=options | status=OK +``` + +### Manual single-symbol snapshot -## 4. Derived metrics and Parquet schema - -### Derived metrics (logic reference) - -| Metric | Calculation / logic | Purpose | -| :--- | :--- | :--- | -| **DTE** | `Expiration Date - Snapshot Date` | Measures time decay risk. | -| **Moneyness %** | `(abs(Strike - Price) / Price) * 100` | How far the strike is from the current price. | -| **Spread %** | `((Ask - Bid) / Ask) * 100` | Transaction cost and slippage risk. | -| **Is liquid** | `(Volume >= 50) & (OI >= 100) & (Bid > 0)` | Contracts realistically tradeable for LLM agents. | -| **In the money** | Boolean flag | Intrinsic value status. | - -### Parquet columns (complete) - -| Column | Type (logical) | Description | -| :--- | :--- | :--- | -| `snapshot_date` | string | `YYYY-MM-DD` | -| `symbol` | string | Underlying ticker | -| `underlying_price` | float | Spot/last used for moneyness | -| `contract_symbol` | string | OCC-style contract symbol | -| `option_type` | string | `call` or `put` | -| `strike` | float | Strike price | -| `expiration` | string | Expiration date string from Yahoo | -| `dte` | int | Calendar days to expiration | -| `moneyness_pct` | float | `abs(strike - underlying_price) / underlying_price * 100` | -| `last_price` | float | | -| `bid` | float | | -| `ask` | float | | -| `spread_pct` | float | `(ask - bid) / ask * 100` when `ask` is positive, else `0.0` | -| `volume` | int | | -| `open_interest` | int | | -| `implied_volatility` | float | | -| `in_the_money` | bool | From Yahoo | -| `is_liquid` | bool | See rule above | - -There is **no separate metadata JSON**; filters use columns above. +```bash +python Scripts/data_collection/scrapers/yfinance_options_history.py +# Writes Data/2_Silver_Processed/Options_Market_Data/{today}/{SYMBOL}_options_{today}.parquet +``` + +### DuckDB spot query + +```python +import duckdb +con = duckdb.connect() +df = con.execute(""" + SELECT snapshot_date, symbol, COUNT(*) as contracts, + AVG(implied_volatility) as avg_iv + FROM read_parquet('Data/2_Silver_Processed/Options_Market_Data/*/*.parquet') + WHERE is_liquid = true AND dte BETWEEN 7 AND 45 + GROUP BY 1, 2 ORDER BY 1 DESC, 2 +""").df() +print(df) +``` + +### End-to-end retrieval test + +```bash +python -m Scripts.tests.test_master_retriever +# Test case: "What is the current IV skew for SPY?" +``` --- -## 5. Dependencies +## 6. Dependencies + +| Library | Purpose | +|:---|:---| +| `yfinance` | Options chain API | +| `pandas` | Vectorised enrichment | +| `numpy` | Numerical operations | +| `pyarrow` | Parquet serialisation | ```bash pip install yfinance pandas numpy pyarrow ``` + +**Runtime prerequisite:** `collect_data_state.json` must have a valid `options_daily` key so `SilverSQLTool._get_anchor_date("options")` returns a current business day. From a9dcb59eb18078a0cf97c382c09d10333b740400 Mon Sep 17 00:00:00 2001 From: "Xinxin(Maxine)" Date: Fri, 24 Apr 2026 15:25:14 -0400 Subject: [PATCH 48/50] update vectorDB-related docs --- .../Qdrant_retriever_docs.md | 39 +- docs/Query_retrieval_docs/Silver_SQL_Tools.md | 209 ++++++++ docs/Query_retrieval_docs/Time_Adapter.md | 256 +++++++++ ..._Chunking_and_Retrieval_Fusion_Strategy.md | 504 ++++++++++++++++++ 4 files changed, 980 insertions(+), 28 deletions(-) create mode 100644 docs/Query_retrieval_docs/Silver_SQL_Tools.md create mode 100644 docs/Query_retrieval_docs/Time_Adapter.md create mode 100644 docs/Strategy_choices_docs/Embedding_Chunking_and_Retrieval_Fusion_Strategy.md diff --git a/docs/Query_retrieval_docs/Qdrant_retriever_docs.md b/docs/Query_retrieval_docs/Qdrant_retriever_docs.md index c82dc1d..0cc3ca8 100644 --- a/docs/Query_retrieval_docs/Qdrant_retriever_docs.md +++ b/docs/Query_retrieval_docs/Qdrant_retriever_docs.md @@ -2,8 +2,7 @@ _Scope: `Scripts/retrieval/qdrant_retriever.py`._ -This document specifies the Gold-layer retrieval engine that turns a -`FullTransformationResult` into a ranked list of `RetrievedChunk`s. +This document specifies the Gold-layer retrieval engine that turns a `FullTransformationResult` into a ranked list of `RetrievedChunk`s. --- @@ -12,14 +11,9 @@ This document specifies the Gold-layer retrieval engine that turns a Bridge the LLM's transformation payload (HyDE + metadata) and Qdrant Cloud with three guarantees: -- **Temporal alignment** — all filters are built from - `TimePredicate` objects produced upstream by `time_adapter`, not from - wall-clock time. One anchor, one window, all sources. -- **Lexical precision** — SPLADE sparse retrieval against the raw - query (or `rerank_query`) preserves rare tickers and acronyms that - dense embeddings blur. -- **Post-fusion sharpness** — a cross-encoder reranker rescues the - handful of true positives that RRF mixes with noise. +- **Temporal alignment** — all filters are built from `TimePredicate` objects produced upstream by `time_adapter`, not from wall-clock time. One anchor, one window, all sources. +- **Lexical precision** — SPLADE sparse retrieval against the raw query (or `rerank_query`) preserves rare tickers and acronyms that dense embeddings blur. +- **Post-fusion sharpness** — a cross-encoder reranker rescues the handful of true positives that RRF mixes with noise. --- @@ -87,27 +81,16 @@ Cloud with three guarantees: ## 4. Temporal Alignment Contract `retrieve_async` accepts an explicit -`time_predicates: Dict[SourceTimeKey, TimePredicate]` argument. If -present it is used directly; if absent the retriever falls back to the -single `time_window` value inside `FullTransformationResult`. +`time_predicates: Dict[SourceTimeKey, TimePredicate]` argument. If present it is used directly; if absent the retriever falls back to the single `time_window` value inside `FullTransformationResult`. Two non-negotiable rules: -1. **OR over `unified_timestamp` and `publish_timestamp`.** Some - collections only populate one of the two keys; the retriever - must accept a hit on either. Without this, SEC/News filings - written by the legacy ingestor are invisible. -2. **Business-day snapping.** Daily-grain predicates (for - `source_type=options`) are computed by `trading_calendar.py` so - that `"yesterday"` on a Monday resolves to the previous Friday — - not an empty Sunday. - -> **Ops note on Qdrant indexing.** `publish_timestamp` must be -> indexed on the collection, otherwise Qdrant raises -> `400 Index required but not found for "publish_timestamp"`. This -> is a one-time schema fix on the Qdrant side; see -> `Scripts/vector_store/ingestion.py` for the canonical index -> payload. +1. **OR over `unified_timestamp` and `publish_timestamp`.** Some collections only populate one of the two keys; the retriever must accept a hit on either. Without this, SEC/News filings written by the legacy ingestor are invisible. +2. **Business-day snapping.** Daily-grain predicates (for `source_type=options`) are computed by `trading_calendar.py` so that `"yesterday"` on a Monday resolves to the previous Friday — not an empty Sunday. + +> **Ops note on Qdrant indexing.** `publish_timestamp` must be indexed on the collection, otherwise Qdrant raises +> `400 Index required but not found for "publish_timestamp"`. This is a one-time schema fix on the Qdrant side; see +> `Scripts/vector_store/ingestion.py` for the canonical index payload. --- diff --git a/docs/Query_retrieval_docs/Silver_SQL_Tools.md b/docs/Query_retrieval_docs/Silver_SQL_Tools.md new file mode 100644 index 0000000..2311201 --- /dev/null +++ b/docs/Query_retrieval_docs/Silver_SQL_Tools.md @@ -0,0 +1,209 @@ +# Silver SQL Tool — `sql_tools.py` + +## 1. Goal + +`SilverSQLTool` is the institutional-grade DuckDB interface for the Silver layer. It translates LLM-extracted `MetadataExtraction` objects (tickers + metrics + time window) into parameterised SQL queries across three physical Parquet datasets — Options, Macro, and GPR — and returns structured `{values, lineage_anchors}` payloads that the Analyst agent can cite with full data lineage. + +--- + +## 2. Architecture + +``` +MetadataExtraction + TimePredicate set + │ + ▼ + query_parquet_by_metadata() + │ + ├─ Ticker cap guard (max 5 tickers, env: SILVER_MAX_TICKERS) + ├─ Fuzzy metric → canonical key (difflib, ontology whitelist) + │ + ▼ for each ticker × each canonical metric: + metric_dispatcher[canonical_key](ticker, metadata) + │ + ├─► _handle_options_analysis → Options_Market_Data parquet + ├─► _handle_put_call_ratio → Options_Market_Data parquet + ├─► _handle_liquidity_analysis → Options_Market_Data parquet + ├─► _handle_pricing_spread → Options_Market_Data parquet + ├─► _handle_macro_analysis → Macro_History parquet + ├─► _handle_geopolitical_analysis → GPR_index parquet + │ + ▼ + Aggregate: {values: {...}, lineage_anchors: [...]} + │ + ▼ + Structured audit log → logs/Parquet_Query/{YYYY-MM-DD}/sql_retrieval_audit.log +``` + +--- + +## 3. Code Strategy & Workflow + +### 3.1 Initialisation Sequence + +``` +SilverSQLTool.__init__() + │ + ├─ Path resolution + │ options_glob = Data/2_Silver_Processed/Options_Market_Data/*/*.parquet + │ macro_glob = Data/2_Silver_Processed/Macro_History/*/*.parquet + │ gpr_path = Data/2_Silver_Processed/GPR_index/*.parquet + │ + ├─ Runtime state load → config/runtime/collect_data_state.json + │ Populates _get_anchor_date("options" | "macro" | "gpr" | "news") + │ + ├─ Audit logger setup → logs/Parquet_Query/{YYYY-MM-DD}/sql_retrieval_audit.log + │ + ├─ DuckDB in-memory connection + │ SET threads = 4; SET memory_limit = '2GB'; + │ + └─ _validate_parquet_contract() + For each dataset: resolve glob → confirm ≥1 file → DuckDB DESCRIBE + → assert required columns present → emit SCHEMA_CHECK audit line +``` + +### 3.2 Dynamic Time Anchor + +`_get_anchor_date(dataset)` reads `collect_data_state.json` and returns the last successfully ingested date. This replaces `CURRENT_DATE` everywhere so backfills, weekends, and holidays are handled correctly. + +| Dataset | State key | Anchor fallback | +|:---|:---|:---| +| Options | `options_daily` | `date.today()` | +| Macro | `macro_trading_daily` | `date.today()` | +| GPR | `gpr_monthly` | first of current month | + +### 3.3 Metric Dispatch & Fuzzy Matching + +When `query_parquet_by_metadata` receives a metric string from the LLM (e.g. `"IV"`, `"implied vol"`), it calls `_fuzzy_match_metric()`: + +1. Exact match against `metric_dispatcher` keys → use directly. +2. `difflib.get_close_matches(metric, dispatcher_keys, n=1, cutoff=0.6)` → use best match, log `FUZZY_MATCH` event. +3. No match → log `UNAUTHORIZED_METRIC`, skip. + +### 3.4 Per-Source Time Alignment + +When `MasterRetriever` supplies a `time_predicates` dict (compiled by `time_adapter.compile_all`), each handler reads its source's `TimePredicate` via `_predicate_for(SourceTimeKey.SILVER_*)`. This ensures the SQL `WHERE` clause uses exactly the same (start_date, end_date) window that was logged in the time-range audit — eliminating the 3d-vs-2d drift that produced inconsistent PCR / IV-skew windows on the same report. + +### 3.5 Handler Reference + +| Handler | Parquet | Key SQL Logic | Output Keys | +|:---|:---|:---|:---| +| `_handle_options_analysis` | Options | ATM IV from nearest-to-ATM liquid calls; skew from OTM puts; `dte BETWEEN 7 AND 45`, `is_liquid = true`, `mode = latest_only` | `latest_atm_iv`, `{T}_iv_skew_{D}d`, `{T}_skew_direction` | +| `_handle_put_call_ratio` | Options | Aggregate `put/call` volume + OI by snapshot date, window or latest | `pcr_volume`, `pcr_open_interest`, `pcr_status` | +| `_handle_liquidity_analysis` | Options | Count liquid call/put contracts; top volume strike | `total_liquid_calls`, `total_liquid_puts`, `top_volume_strike_call/put` | +| `_handle_pricing_spread` | Options | AVG bid/ask/spread for liquid, near-term options | `{T}_underlying_price`, `{T}_avg_bid`, `{T}_avg_ask`, `{T}_avg_spread_pct` | +| `_handle_macro_analysis` | Macro | Latest value + change for a given symbol (ETF→index alias applied) | `{T}_last_value`, `{T}_mom_change` or `{T}_daily_change` | +| `_handle_geopolitical_analysis` | GPR | Latest monthly GPR level, percentile, trend | `gpr_index_level`, `gpr_percentile`, `gpr_trend` | + +**ETF → Macro alias:** `SPY → ^GSPC`, `QQQ → ^IXIC`, `IWM → ^RUT`, etc. (defined in `Scripts/core/financial_ontology.py::ETF_TO_MACRO_ALIAS`). Applied only in `_handle_macro_analysis`. + +--- + +## 4. Output Data Schema + +### Return Payload + +```python +{ + "values": { + "latest_atm_iv": 0.384, + "AAPL_iv_skew_30d": -0.04, + "AAPL_skew_direction": "put_skew", + "pcr_volume": 1.23, + "gpr_index_level": 148.2, + "gpr_percentile": "72%", + ... + }, + "lineage_anchors": [ + "IV_AAPL_2026-04-22", + "GPR_202604", + "MACRO_VIX_2026-04-22", + ... + ] +} +``` + +### Lineage Anchor Naming Convention + +| Source | Format | Example | +|:---|:---|:---| +| Options IV/skew | `IV_{TICKER}_{date}` | `IV_AAPL_2026-04-22` | +| Options PCR | `PCR_{TICKER}_{date}` | `PCR_SPY_2026-04-22` | +| Options liquidity | `LIQ_{TICKER}_{date}` | `LIQ_SPY_2026-04-22` | +| Options pricing | `PX_{TICKER}_{date}` | `PX_SPY_2026-04-22` | +| Macro series | `MACRO_{TICKER}[_AS_{ALIAS}]_{date}` | `MACRO_SPY_AS_GSPC_2026-04-22` | +| GPR | `GPR_{YYYYMM}` | `GPR_202604` | + +### Audit Log Structure + +File: `logs/Parquet_Query/{YYYY-MM-DD}/sql_retrieval_audit.log` + +``` +SCHEMA_CHECK | dataset=options | glob=... | files=108 | columns=18 | missing=[] | status=OK +START_QUERY | Tickers: ['AAPL'] | Requested: ['Implied Volatility (IV)', 'IV Skew'] +SQL_RANGE | handler=options_analysis | ticker=AAPL | mode=latest_only | time_window=yesterday | ... +FINISH_QUERY | Latency: 0.071s | Anchors_Found: 4 +UNAUTHORIZED_METRIC: Insider Trading +FUZZY_MATCH | 'implied vol' -> 'Implied Volatility (IV)' +``` + +--- + +## 5. How to Test + +### Contract validation (startup) + +```bash +python -c "from Scripts.retrieval.sql_tools import SilverSQLTool; t = SilverSQLTool(); print('OK')" +# Expected: three SCHEMA_CHECK | status=OK lines in audit log +``` + +### Direct handler call + +```python +import asyncio +from Scripts.retrieval.sql_tools import SilverSQLTool +from Scripts.retrieval.schema import MetadataExtraction, TimeWindow + +tool = SilverSQLTool() +meta = MetadataExtraction( + tickers=["AAPL"], + metrics=["Implied Volatility (IV)", "IV Skew"], + time_window=TimeWindow.YESTERDAY, +) +result = asyncio.run(tool.query_parquet_by_metadata(meta)) +print(result["values"]) +print(result["lineage_anchors"]) +``` + +### Master Retriever integration test + +```bash +python -m Scripts.tests.test_master_retriever +# Runs all retriever test cases including sql_only route +``` + +### Audit log inspection + +```bash +cat logs/Parquet_Query/$(date +%Y-%m-%d)/sql_retrieval_audit.log +``` + +--- + +## 6. Dependencies + +| Library | Purpose | +|:---|:---| +| `duckdb` | In-memory SQL engine for Parquet queries | +| `python-dotenv` | `.env` loading for `DATA_LAKE_ROOT` | +| `pydantic` | `MetadataExtraction` contract validation | + +```bash +pip install duckdb python-dotenv pydantic +``` + +**Internal dependencies:** +- `Scripts/core/financial_ontology.py` — `ALLOWED_METRICS`, `METRIC_TO_COLUMN_MAPPING`, `ETF_TO_MACRO_ALIAS` +- `Scripts/retrieval/schema.py` — `MetadataExtraction`, `TimeWindow`, `time_window_to_days` +- `Scripts/retrieval/time_adapter.py` — `SourceTimeKey`, `TimePredicate` +- `config/runtime/collect_data_state.json` — dynamic anchor dates diff --git a/docs/Query_retrieval_docs/Time_Adapter.md b/docs/Query_retrieval_docs/Time_Adapter.md new file mode 100644 index 0000000..a7d1a2f --- /dev/null +++ b/docs/Query_retrieval_docs/Time_Adapter.md @@ -0,0 +1,256 @@ +# Time Alignment Adapter — `time_adapter.py` + +## 1. Goal + +`time_adapter.py` is the single location where a semantic `TimeWindow` from the LLM (e.g. `"yesterday"`, `"past_week"`, `"past_month"`) is compiled into physically-executable time predicates that each data source can actually apply. It eliminates per-handler date arithmetic scattered across the codebase and guarantees that every retriever — Gold (Qdrant) and Silver (DuckDB) — applies the same window for the same source type. + +**Core problem solved:** different sources have fundamentally different temporal granularities. A naive uniform `(start_ts, end_ts)` filter causes: +- `"yesterday"` against a MONTHLY source (GPR) → 0 rows (correct answer is the current month's row) +- `"yesterday"` on a Monday against a DAILY source (Options) → 0 rows (last trading day was Friday) +- SEC event-level sources returning 0 because legacy payloads only carry ISO-8601 strings, not Unix epoch integers + +The adapter pre-compiles per-source widening so every downstream retriever receives semantically correct, physically valid windows without branching logic. + +--- + +## 2. Architecture + +``` +TimeWindow (semantic, from LLM) + anchor date (from SilverSQLTool._get_anchor_date) + │ + ▼ + compile_all(time_window, anchor, label) + │ + ├─ compile_predicate(time_window, GOLD_NEWS, anchor) + ├─ compile_predicate(time_window, GOLD_SEC, anchor) + ├─ compile_predicate(time_window, GOLD_GPR, anchor) + ├─ compile_predicate(time_window, SILVER_OPTIONS, anchor) + ├─ compile_predicate(time_window, SILVER_MACRO, anchor) + └─ compile_predicate(time_window, SILVER_GPR, anchor) + │ + ▼ per source: + SOURCE_SPECS[source] → granularity + min_lookback_days + │ + ▼ + Apply widening policy + │ EVENT → no widening; use raw window_days + │ DAILY → business-day safe: if label in {"today","yesterday"}, step back to prev_business_day + │ apply min_lookback_days floor (3d) for weekend gaps + │ MONTHLY → widen to first-of-month (GPR); apply 35-day floor + │ + ▼ + TimePredicate(source, label, start_date, end_date, + start_epoch_s, end_epoch_s, window_days, + widened, widen_reason, time_keys, key_units) + │ + ▼ + Dict[SourceTimeKey, TimePredicate] → MasterRetriever + (also serialised to state["time_range"]["source_predicates"]) +``` + +--- + +## 3. Code Strategy & Workflow + +### 3.1 Source Registry (`SOURCE_SPECS`) + +Every data source is described by a `SourceTimeSpec` dataclass: + +| Source Key | Granularity | Physical Time Keys | Key Units | Min Lookback | +|:---|:---|:---|:---|:---| +| `gold.news` | EVENT | `unified_timestamp`, `publish_timestamp` | `epoch_s`, `epoch_s` | 1 day | +| `gold.sec` | EVENT | `unified_timestamp`, `filed_at`, `transaction_date` | `epoch_s`, `iso_datetime`, `iso_date` | 3 days | +| `gold.gpr` | MONTHLY | `unified_timestamp`, `publish_timestamp` | `epoch_s`, `epoch_s` | 35 days | +| `silver.options` | DAILY | `snapshot_date` | `iso_date` | 3 days | +| `silver.macro` | DAILY | `observation_date`, `retrieval_date` | `iso_date`, `iso_date` | 3 days | +| `silver.gpr` | MONTHLY | `date`, `month` | `ts_ns`, `ts_ns` | 35 days | + +### 3.2 Widening Policy by Granularity + +``` +EVENT granularity + → use raw window_days from semantic TimeWindow + → min floor = max(min_lookback_days, window_days) + → [SEC special] if window_days < 3 → widen to 3d (event_min_3d) + +DAILY granularity + → if label in {"today", "yesterday"}: + end = anchor (or previous_business_day(anchor) if anchor is not a business day) + today -> start = end + yesterday -> start = previous_business_day(end) + reason = "daily_today_busday (...)" / "daily_yesterday_busday (...)" + → else: use raw window_days with min floor = 3d + +MONTHLY granularity + → if window_days < 35: + start = first_of_month(anchor) + reason = "monthly_widen_to_d" # N is computed from anchor day + → this guarantees monthly rows are query-visible for short semantic windows +``` + +### 3.3 `TimePredicate` — the Compiled Artefact + +`TimePredicate` is a frozen dataclass. Once compiled, it is never re-derived. Retrievers consume it directly: + +- **Qdrant Range filter:** use `start_epoch_s` / `end_epoch_s` for numeric `Range` payload filter +- **DuckDB WHERE clause:** use `start_date` / `end_date` as ISO strings in `BETWEEN` filter + +### 3.4 Serialisation & Round-Trip + +`TimePredicate.to_dict()` produces a JSON-safe dict stored in `state["time_range"]["source_predicates"]`. `TimePredicate.from_dict()` / `predicates_from_serialised()` reconstruct exact live objects — this is the mechanism that allows the Checker's rescue path to reuse the exact same window as the initial retrieval, eliminating the 3d/2d drift documented in `docs/test/2026-04-22/router_e2e_deep_analysis.md`. + +--- + +## 4. Output Data Schema + +### `TimePredicate` Fields + +| Field | Type | Description | +|:---|:---|:---| +| `source` | `SourceTimeKey` | Logical source identifier | +| `label` | `str` | Human-readable semantic label (e.g. `"yesterday"`) | +| `granularity` | `TimeGranularity` | `event`, `daily`, or `monthly` | +| `start_date` | `date` | Physical start of the window | +| `end_date` | `date` | Physical end of the window (anchor) | +| `start_epoch_s` | `int` | Unix seconds (UTC midnight of start_date) | +| `end_epoch_s` | `int` | Unix seconds (23:59:59 UTC of end_date, end-inclusive) | +| `window_days` | `int` | `(end_date − start_date).days` | +| `widened` | `bool` | True if the semantic window was widened for source alignment | +| `widen_reason` | `str \| None` | E.g. `"daily_yesterday_busday (...)"`, `"monthly_widen_to_22d (...)"`, `"event_min_3d (...)"` | +| `time_keys` | `tuple[str, ...]` | Physical key names to build filters on (copied from `SourceTimeSpec`) | +| `key_units` | `tuple[str, ...]` | Physical type for each key (`epoch_s`, `iso_date`, `ts_ns`, …) | + +### Serialised Form in `state["time_range"]` + +```json +{ + "time_window_label": "yesterday", + "window_days": 1, + "anchor_date": "2026-04-22", + "start_date": "2026-04-21", + "end_date": "2026-04-22", + "is_default_window_applied": false, + "source_predicates": { + "gold.sec": { + "source": "gold.sec", + "label": "yesterday", + "granularity": "event", + "start_date": "2026-04-20", + "end_date": "2026-04-23", + "start_epoch_s": 1745107200, + "end_epoch_s": 1745452799, + "window_days": 3, + "widened": true, + "widen_reason": "event_min_3d", + "time_keys": ["unified_timestamp", "filed_at", "transaction_date"], + "key_units": ["epoch_s", "iso_datetime", "iso_date"] + }, + "silver.options": { + "source": "silver.options", + "label": "yesterday", + "granularity": "daily", + "start_date": "2026-04-22", + "end_date": "2026-04-22", + "window_days": 1, + "widened": true, + "widen_reason": "daily_yesterday_busday", + "time_keys": ["snapshot_date"], + "key_units": ["iso_date"] + }, + "silver.gpr": { + "source": "silver.gpr", + "label": "yesterday", + "granularity": "monthly", + "start_date": "2026-04-01", + "end_date": "2026-04-22", + "window_days": 22, + "widened": true, + "widen_reason": "monthly_widen_to_22d" + } + } +} +``` + +### Audit Log Lines (emitted by `MasterRetriever`) + +``` +🕒 [TimeAdapter] gold.sec: widened → 2026-04-20..2026-04-23 (3d) | reason=event_min_3d +🕒 [TimeAdapter] silver.options: widened → 2026-04-22..2026-04-23 (1d) | reason=daily_yesterday_busday +🕒 [TimeAdapter] silver.gpr: widened → 2026-04-01..2026-04-23 (22d) | reason=monthly_widen_to_22d (base=2d < min=35d) +``` + +--- + +## 5. How to Test + +### Compile a single predicate + +```python +from datetime import date +from Scripts.retrieval.time_adapter import compile_predicate, SourceTimeKey +from Scripts.retrieval.schema import TimeWindow + +pred = compile_predicate(TimeWindow.YESTERDAY, SourceTimeKey.SILVER_OPTIONS, anchor=date(2026, 4, 23)) +print(pred.start_date, pred.end_date, pred.widened, pred.widen_reason) +# → 2026-04-22 2026-04-22 True daily_yesterday_busday +``` + +### Compile full predicate set + +```python +from datetime import date +from Scripts.retrieval.time_adapter import compile_all, SourceTimeKey +from Scripts.retrieval.schema import TimeWindow + +preds = compile_all(TimeWindow.PAST_WEEK, date(2026, 4, 23)) +for key, p in preds.items(): + print(f"{key.value}: {p.start_date} → {p.end_date} | widened={p.widened}") +``` + +### Serialisation round-trip + +```python +from Scripts.retrieval.time_adapter import predicates_from_serialised, compile_all +from datetime import date +from Scripts.retrieval.schema import TimeWindow + +preds = compile_all(TimeWindow.YESTERDAY, date(2026, 4, 23)) +serialised = {k.value: v.to_dict() for k, v in preds.items()} +restored = predicates_from_serialised(serialised) +assert list(preds.keys()) == list(restored.keys()) +``` + +### Monday / weekend edge-case test + +```python +from datetime import date +from Scripts.retrieval.time_adapter import compile_predicate, SourceTimeKey +from Scripts.retrieval.schema import TimeWindow + +# Monday anchor — yesterday should resolve to Friday +pred = compile_predicate(TimeWindow.YESTERDAY, SourceTimeKey.SILVER_OPTIONS, anchor=date(2026, 4, 27)) +assert pred.start_date == date(2026, 4, 24) # Friday +``` + +--- + +## 6. Dependencies + +| Library | Purpose | +|:---|:---| +| `Scripts/core/trading_calendar.py` | `is_business_day`, `previous_business_day` — dependency-free business-day arithmetic | +| `Scripts/retrieval/schema.py` | `TimeWindow`, `TIME_WINDOW_DAYS`, `time_window_to_days` | + +No external pip packages required. The module is stateless and has zero database/network dependencies, making it independently unit-testable. + +```bash +# Run from repository root +python -c " +from datetime import date +from Scripts.retrieval.time_adapter import compile_all +from Scripts.retrieval.schema import TimeWindow +preds = compile_all(TimeWindow.YESTERDAY, date.today()) +for k, p in preds.items(): + print(k.value, p.start_date, p.end_date, p.widen_reason) +" +``` diff --git a/docs/Strategy_choices_docs/Embedding_Chunking_and_Retrieval_Fusion_Strategy.md b/docs/Strategy_choices_docs/Embedding_Chunking_and_Retrieval_Fusion_Strategy.md new file mode 100644 index 0000000..22713ae --- /dev/null +++ b/docs/Strategy_choices_docs/Embedding_Chunking_and_Retrieval_Fusion_Strategy.md @@ -0,0 +1,504 @@ +# Embedding, Chunking, and Retrieval Fusion Strategy + +_Scope: `Scripts/vector_store/`, `Scripts/retrieval/qdrant_retriever.py`, `Scripts/vector_store/ingestion.py`_ + +_This document is the authoritative rationale for every model, chunking decision, and fusion parameter in the retrieval pipeline. For the operational model registry (WHAT is deployed WHERE), see `docs/ARCHITECTURE.md §5`. For GPU warmup and Ollama keep-alive, see `docs/LLM_Pool.md`._ + +--- + +## I. Strategic Objective + +The retrieval layer must resolve two fundamentally different information types in a single query: + +| Information Type | Example | Signal | Failure Mode if Missed | +|---|---|---|---| +| **Lexical-exact** | `NVDA Form 4`, `action_direction=SELL`, `CPIAUCSL` | Ticker symbols, SEC codes, acronyms | Wrong ticker retrieved; hallucinated data | +| **Semantic-abstract** | "flight to safety", "IV crush regime", "geopolitical risk premium" | Conceptual proximity | Relevant macro context not retrieved | + +A single retrieval channel — dense or sparse alone — cannot serve both. The strategy documented here combines three complementary models (dense encoder, sparse encoder, cross-encoder reranker) with Reciprocal Rank Fusion (RRF), preceded by source-specific chunking that maximises per-vector information density. + +--- + +## II. Architecture + +``` +┌─────────────────────────────────────────────────────────────────────────────────┐ +│ RETRIEVAL STACK — LAYER OVERVIEW │ +├─────────────────────┬───────────────────────────────────────────────────────────┤ +│ Layer │ Components │ +├─────────────────────┼───────────────────────────────────────────────────────────┤ +│ Chunking │ Per-source strategy: Zero-chunk (SEC), LLM-distilled │ +│ │ summary unit (News/GPR), No-chunk (Options/Macro Silver) │ +├─────────────────────┼───────────────────────────────────────────────────────────┤ +│ Encoding │ Dense: BAAI/bge-base-en-v1.5 (768-dim, cosine, CPU) │ +│ │ Sparse: prithivida/Splade_PP_en_v1 (SPLADE, ONNX, CPU) │ +├─────────────────────┼───────────────────────────────────────────────────────────┤ +│ Asymmetric Input │ Dense ← HyDE long paragraph (abstract intent) │ +│ │ Sparse ← rerank_query short factual phrase (lexical) │ +├─────────────────────┼───────────────────────────────────────────────────────────┤ +│ Fusion │ Qdrant server-side Reciprocal Rank Fusion (RRF, k=60) │ +├─────────────────────┼───────────────────────────────────────────────────────────┤ +│ Reranking │ BAAI/bge-reranker-v2-m3 CrossEncoder (top-K, CPU) │ +├─────────────────────┼───────────────────────────────────────────────────────────┤ +│ Pre-filter │ Qdrant payload filter: ticker, source_type, │ +│ │ action_direction, time window OR (unified_timestamp / │ +│ │ publish_timestamp) │ +├─────────────────────┼───────────────────────────────────────────────────────────┤ +│ Score gate │ Drop candidates with score ≤ 1e-5 (noise floor) │ +└─────────────────────┴───────────────────────────────────────────────────────────┘ +``` + +``` +Gold-layer JSONL / MD artefacts + │ + ├─── SEC (Form 4, 8-K) + │ │ Zero-chunking: 1 filing entry → 1 vector + │ └── atomic self-contained sentence per record + │ + ├─── News / GPR narratives + │ │ LLM-distilled summary unit: ~150–300 tokens + │ └── one coherent narrative block per Qdrant point + │ + └─── Options / Macro (Silver Parquet) + │ NOT indexed in Qdrant — queried via DuckDB / SilverSQLTool + └── No chunking applies; time-windowed Parquet scan + │ + ▼ + ┌───────────────────────────────┐ + │ QdrantHybridIngestor │ + │ • Dense embed (bge-base) │ + │ • Sparse embed (SPLADE) │ + │ • Deterministic UUID │ + │ • Batch upsert (size=100) │ + └───────────────┬───────────────┘ + │ + ▼ + ┌──────────────────┐ + │ Qdrant Cloud │ + │ financial_rag_ │ + │ gold │ + │ named vectors: │ + │ dense + sparse │ + └─────────┬────────┘ + │ + ┌──────────────▼──────────────────────┐ + │ FinancialHybridRetriever │ + │ │ + │ Input A (dense): HyDE paragraph │ + │ Input B (sparse): rerank_query │ + │ │ + │ 1. Prefetch dense (top-50) │ + │ 2. Prefetch sparse (top-50) │ + │ 3. Payload filter (metadata gate) │ + │ 4. Qdrant RRF fusion (k=60) │ + │ 5. CrossEncoder rerank (bge-m3) │ + │ 6. Drop score ≤ 1e-5 │ + └──────────────┬──────────────────────┘ + │ + ▼ + MasterRetrievalResult → LangGraph AgentState +``` + +--- + +## III. Chunking Strategy — Per Data Source + +Chunking is the most consequential upstream decision in any RAG system. The wrong strategy destroys vector quality before a single embedding is computed. Each data source in this system has a fundamentally different information structure, and is therefore treated with a distinct chunking policy. + +### A. SEC Filings (Form 4 / Form 8-K) — Zero-Chunking + +**Policy: one filing record → one Qdrant point** + +``` +Bronze JSONL (structured XML extract) + ↓ +sec_processor.py (semantic rewrite + tone scoring) + ↓ +Gold JSONL (one natural-language sentence per transaction): +"ROCHE VINCENT (Chair & CEO) of ADI acquired (via RSU vesting) + 19,712 shares worth $0.00." [metadata: ticker=ADI, action_direction=ACQUIRE/VEST, ...] + ↓ +One vector point — no further splitting +``` + +**Justification:** + +| Design question | Answer | +|---|---| +| Why no chunking? | Each SEC record is already a **pre-summarised atomic fact** — self-contained, with no inter-sentence dependencies. Splitting a one-sentence record would destroy, not preserve, its meaning. | +| Why not parent-child? | The "parent" would be the raw XML/JSON source — machine code, not natural language. Injecting it into the LLM context degrades attention quality and wastes tokens. Traceability is handled via `accession_no` and `url` in metadata, not via parent expansion. | +| Why not token-based chunking (e.g. 512 tokens)? | Token-based chunking solves the problem of long noisy documents. SEC records after `sec_processor.py` are already 100% information-dense, 20–50 tokens each. Cutting them further produces fragments that destroy the signal. | + +**Vector SNR benefit:** An atomic-fact chunk produces a very tight embedding vector. Cosine similarity queries resolve to the correct entity almost exclusively — the retrieval signal-to-noise ratio is maximised. + +--- + +### B. News Articles and GPR Narratives — LLM-Distilled Summary Units + +**Policy: one scraper-summarised narrative block → one Qdrant point** + +``` +Raw article HTML (Bronze) + ↓ +news_scraper.py / GPR_index.py (LLM-summarise + sentiment score) + ↓ +Gold JSONL (one coherent narrative per article or monthly GPR block): +"Escalating Middle East tensions drove gold prices 2.4% higher this week + as investors rotated into safe-haven assets, with ETF inflows hitting + a 6-month high." [metadata: topics=[macro_geopolitics_risk], tone_score=+0.7, ...] + ↓ +One vector point — no further splitting +``` + +**Justification:** + +| Design question | Answer | +|---|---| +| Why not chunk news articles by sentence? | Individual sentences stripped of narrative context score weakly on semantic queries. A chunk like "Gold rose." loses the causal chain. The scraper-produced summary already is the ideal chunk: dense, causal, self-contained. | +| Why not chunk by 512 tokens? | The summaries are already within 150–300 tokens. Additional chunking would create sub-summary fragments with overlapping but incomplete signals, flooding the retrieval pool with near-duplicate low-precision chunks. | +| Why LLM distillation at ingestion time? | Front-loading the LLM work in `news_scraper.py` means retrieval hits pre-curated vectors instead of raw noisy article text. This is the "pre-RAG" approach used by high-quality financial data providers. | + +--- + +### C. Options Chains and Macro Data — Not Chunked (Silver SQL Path) + +**Policy: structured numeric data is NEVER ingested into Qdrant** + +Parquet files in `Data/2_Silver_Processed/Options_Market_Data/` and `Data/2_Silver_Processed/Macro_History/` are queried exclusively via `SilverSQLTool` (DuckDB). They are not embedded, not chunked, and not stored in Qdrant. + +**Justification:** + +| Design question | Answer | +|---|---| +| Why not embed numeric time-series? | Embedding `{ATM_IV: 0.34, PCR: 1.2, ...}` produces a vector that encodes the *serialisation* of the number, not its financial meaning. Semantic similarity on numeric data is unreliable — "VIX=19" and "VIX=35" would score similarly. | +| Why DuckDB instead? | Structured queries on Parquet give **exact, reproducible answers** to numeric questions. DuckDB resolves `SELECT avg(atm_iv) WHERE snapshot_date >= '2026-03-24'` in ~70ms with deterministic results — no vector approximation. | +| What is the Silver anchor mechanism? | `SilverSQLTool` writes its results into `silver_context["values"]` with explicit `MACRO_*` and `LIQ_*` lineage anchors. The Analyst cites these anchors; the Checker validates against the same in-memory dict — no vector recall needed. | + +--- + +## IV. Embedding Model Selection + +### A. Dense Encoder — `BAAI/bge-base-en-v1.5` + +| Attribute | Value | +|---|---| +| **Vector dimension** | 768 | +| **Distance metric** | Cosine (L2-normalised) | +| **Inference device** | CPU (env: `EMBEDDING_DEVICE=cpu`) | +| **HuggingFace ID** | `BAAI/bge-base-en-v1.5` | +| **Env var** | `EMBEDDING_MODEL_NAME` | +| **Singleton** | `@lru_cache` in `connection.py` | + +**Selection rationale:** + +| Criterion | Assessment | +|---|---| +| **Financial domain performance** | BGE ("Beijing Academy of AI General Embedding") achieves strong MTEB benchmark scores on information retrieval tasks. The `base` variant performs within 2–3% of `bge-large` on financial text while using 40% less memory. | +| **CPU feasibility** | 768-dim BERT-architecture encoder runs at ~50–200ms per query on CPU — well within the retrieval budget. No GPU required, which aligns with the design constraint that GPU resources are reserved exclusively for the 70B Ollama LLM. | +| **Normalisation** | `encode_kwargs={"normalize_embeddings": True}` produces unit vectors, enabling cosine similarity that is numerically equivalent to Qdrant's `Distance.COSINE` index — no post-hoc score rescaling needed. | +| **LangChain integration** | Native `langchain-huggingface` adapter; drop-in compatible with Qdrant's `VectorStore.from_documents()` API. | +| **Alternatives rejected** | `text-embedding-ada-002` (API cost, data privacy constraints), `bge-large-en-v1.5` (1024-dim, ~50% higher memory, marginal quality gain on short financial sentences), `e5-mistral-7b` (GPU-only, too large for CPU embedding path). | + +--- + +### B. Sparse Encoder — `prithivida/Splade_PP_en_v1` + +| Attribute | Value | +|---|---| +| **Architecture** | SPLADE (Sparse Lexical and Expansion) | +| **Runtime** | ONNX via `fastembed` | +| **Inference device** | CPU only (`FASTEMBED_THREADS` controls parallelism) | +| **Env var** | `SPARSE_MODEL_NAME` | +| **Qdrant vector name** | `sparse` (Dot product distance) | + +**Selection rationale:** + +| Criterion | Assessment | +|---|---| +| **Lexical expansion** | SPLADE learns to expand query and document terms into related vocabulary. "IV" expands toward "implied volatility", "VIX", "volatility index". "NVDA" expands toward "NVIDIA", "Form 4", "insider". This makes exact-match recall robust to abbreviation mismatches. | +| **Financial precision** | Ticker symbols, SEC form codes (`Form-4`, `10-K`), and macro acronyms (`CPI`, `FEDFUNDS`, `DXY`) are high-value exact tokens. SPLADE preserves these at high term-weight while BM25 would dilute them with IDF across a corpus that uses them frequently. | +| **ONNX deployment** | `fastembed` loads the SPLADE ONNX graph — no Python ML framework at inference time. Startup is fast; no GPU required; thread count is tunable via `FASTEMBED_THREADS`. | +| **Qdrant-native** | fastembed is maintained by Qdrant; the sparse vector format directly populates `NamedSparseVector` without marshaling overhead. | +| **Alternatives rejected** | BM25 (no expansion — abbreviation mismatches are fatal in financial queries), `naver/splade-v3` (larger, slower, no ONNX release at current evaluation date). | + +--- + +### C. Cross-Encoder Reranker — `BAAI/bge-reranker-v2-m3` + +| Attribute | Value | +|---|---| +| **Architecture** | Cross-encoder (full self-attention over query ⊕ document) | +| **Library** | `sentence-transformers` `CrossEncoder` | +| **Inference device** | CPU (env: `RETRIEVER_DEVICE=cpu`) | +| **Env var** | `RERANKER_MODEL_NAME` | +| **Applied to** | Top-K RRF-fused candidates before score gate | + +**Selection rationale:** + +| Criterion | Assessment | +|---|---| +| **Joint encoding** | The cross-encoder sees the query and the candidate chunk jointly in a single forward pass. This allows full attention across the pair — catching semantic nuances that bi-encoders approximate with a dot product. Example: "insider selling activity" vs "RSU vesting (no open-market sale)" are textually similar but directionally opposite; the cross-encoder resolves this correctly. | +| **Reranking position** | Applied after RRF narrows candidates to top-20. CPU reranking 20 pairs in ~100–200ms is acceptable. Reranking the full prefetch pool (100 candidates) would be prohibitive. | +| **m3 variant** | The `-m3` (Multilingual-3) variant handles English-primary with minor multilingual capability. Financial data often contains mixed content (foreign-language SEC registrants, international macro data); the `m3` architecture is more robust than an English-only model on these edge cases. | +| **Alternatives rejected** | `cross-encoder/ms-marco-MiniLM-L-6-v2` (trained on web Q&A; lower precision on financial domain), `Cohere Rerank` (API cost, data egress), `bge-reranker-large` (2× slower, no quality gain over `v2-m3` on financial retrieval). | + +--- + +## V. Retrieval Fusion — Reciprocal Rank Fusion (RRF) + +### A. Why RRF over Score Averaging + +Dense and sparse models produce scores on incompatible numerical scales: +- Dense cosine similarity: typically in `[0.5, 1.0]` for positive results +- SPLADE sparse dot product: typically in `[0.001, 5.0]`, scale depends on term frequency + +Simple score averaging would allow one channel to dominate based on scale artifacts, not quality. RRF converts both to rank lists and fuses on rank position: + +``` +RRF_score(doc) = Σᵢ 1 / (k + rankᵢ(doc)) +``` + +Where `k = 60` (Qdrant default). This is rank-based, monotonic, and immune to outlier scores. A document ranked #1 by dense but #50 by sparse still outscores a document ranked #10 by both — the fusion correctly rewards dominant-channel wins. + +### B. Asymmetric Input Design + +| Channel | Input text | Purpose | +|---|---|---| +| **Dense** | `HyDE paragraph` (~200 tokens, LLM-generated) | Captures abstract intent: "flight to safety", "IV regime", conceptual framing | +| **Sparse** | `rerank_query` (~8–15 tokens, factual phrase) | Enforces exact lexical match: "NVDA Form 4 insider selling past month" | + +This asymmetry is deliberate. Feeding the HyDE paragraph to the sparse channel would dilute SPLADE's term weights with narrative filler. Feeding the short factual query to the dense channel would under-activate semantic proximity. The two channels are calibrated to their respective strengths. + +### C. RRF Workflow + +```mermaid +flowchart TD + Q["User Query"] --> QT["QueryTransformer\n(options-expert-v1:latest, 70B)"] + QT --> |HyDE paragraph| DE["Dense Prefetch\nbge-base-en-v1.5\nTop-50 candidates"] + QT --> |rerank_query| SP["Sparse Prefetch\nSPLADE PP en v1\nTop-50 candidates"] + + DE --> |100 candidates| MF["Metadata Pre-filter\nticker / source_type / time window\nPayload filter before vector math"] + SP --> MF + + MF --> RRF["Qdrant Server-side RRF\nFusion.RRF k=60\nMerge dense + sparse rank lists"] + + RRF --> |Top-20 fused| CE["CrossEncoder Rerank\nbge-reranker-v2-m3\nFull query⊕doc attention"] + + CE --> SG["Score Gate\nDrop score ≤ 1e-5\nNoise floor cutoff"] + + SG --> OUT["Gold Context Chunks\nList[RetrievedChunk]\n→ AgentState.gold_context"] +``` + +### D. Deterministic Pre-Filtering + +Payload filtering is applied **before** vector math (pushed down to the Qdrant index scan), which ensures vector distance computation is only performed on semantically eligible candidates: + +| Filter dimension | Applied for | Implementation | +|---|---|---| +| `ticker` | All queries with extracted tickers | `FieldCondition(key="ticker", match=MatchAny(...))` | +| `source_type` | Metadata-extracted `source_types` | Strips Silver-only types (`options`, `macro`) before Gold search | +| `action_direction` | SEC insider queries | `SELL`, `BUY`, `ACQUIRE/VEST` | +| `form_type` | SEC form queries | `Form-4`, `10-K`, `8-K` | +| `tone_score` | Sentiment-filtered news | `>0` (bullish), `<0` (bearish) | +| `unified_timestamp` OR `publish_timestamp` | All time-windowed queries | OR condition: dual time-key for backwards compatibility with legacy filings | + +The OR over `unified_timestamp` and `publish_timestamp` is critical: early SEC filings only carry `publish_timestamp`; newer ones carry `unified_timestamp`. A single-key filter would silently miss one subset. + +--- + +## VI. Hardware Placement — CPU vs GPU + +The system is designed with a **strict hardware tier separation**: GPU is reserved exclusively for LLM inference; all retrieval-side models run on CPU. + +``` +┌────────────────────────────────────────────────────────────────┐ +│ GPU (Ollama VRAM) │ +│ │ +│ options-expert-v1:latest (Llama-3.3-70B Q4_K_M) │ +│ ├─ Analyst / Checker / Critic / Finalizer │ +│ └─ QueryTransformer (Extractor + HyDE) │ +│ │ +│ llama3:latest (Llama-3 8B vanilla) │ +│ ├─ MasterRetriever.router_llm │ +│ └─ news_scraper sentiment / sec_processor form parser │ +│ │ +│ Note: 70B + 8B cannot coexist in one GPU slot → │ +│ llm_pool pins 70B at KEEP_ALIVE=30m; 8B uses idle slots. │ +└────────────────────────────────────────────────────────────────┘ + +┌────────────────────────────────────────────────────────────────┐ +│ CPU (Host RAM) │ +│ │ +│ BAAI/bge-base-en-v1.5 (Dense encoder, 768-dim) │ +│ • Latency: ~50–200ms / query (CPU) │ +│ • Env: EMBEDDING_DEVICE=cpu │ +│ • Singleton: @lru_cache in connection.py │ +│ │ +│ prithivida/Splade_PP_en_v1 (SPLADE sparse, ONNX) │ +│ • ONNX runtime: no Python ML framework at inference │ +│ • Env: FASTEMBED_THREADS=6 │ +│ │ +│ BAAI/bge-reranker-v2-m3 (CrossEncoder, top-K only) │ +│ • Applied to ≤ 20 candidates → ~100–200ms CPU │ +│ • Env: RETRIEVER_DEVICE=cpu │ +│ │ +│ DuckDB in-process (Silver Parquet queries) │ +│ • Embedded, zero-latency startup │ +│ • ~50–100ms per Parquet scan │ +└────────────────────────────────────────────────────────────────┘ +``` + +**Design rationale for CPU retrieval models:** + +| Constraint | Implication | +|---|---| +| **Single GPU budget** | The 70B fine-tuned LLM saturates available VRAM (Q4_K_M quantised ≈ 40GB+). Placing any retrieval model on the same GPU would force model-swapping, incurring 30–60s cold starts per query. | +| **Retrieval latency budget** | Dense + sparse encoding + reranking ≤ 500ms on CPU is acceptable within the overall pipeline budget (dominated by the ~200s LLM inference). CPU retrieval is not the bottleneck. | +| **ONNX for sparse** | `fastembed` ONNX runtime eliminates Python ML framework overhead at sparse inference — CPU latency for SPLADE is ~30ms per query. | +| **Upgrade path** | `EMBEDDING_DEVICE` and `RETRIEVER_DEVICE` are env-var controlled. Setting either to `cuda` enables GPU acceleration without code changes — useful on multi-GPU machines where a retrieval-only GPU is available. | + +--- + +## VII. Where Does Model and Hardware Information Live? + +This is a common documentation friction point. The answer is a three-document triangle: + +``` +┌───────────────────────────────────────────────────────────────────┐ +│ Documentation Navigation │ +│ │ +│ Q: "WHY was this model chosen? What are the trade-offs?" │ +│ A: docs/Strategy_choices_docs/ │ +│ └── Embedding_Chunking_and_Retrieval_Fusion_Strategy.md ← THIS│ +│ SEC_ingestion_retrived_strategy.md │ +│ │ +│ Q: "WHAT model is deployed WHERE? What are the env vars?" │ +│ A: docs/ARCHITECTURE.md §5 (Model Registry — single source of │ +│ truth for tag names, env vars, and consumers) │ +│ │ +│ Q: "HOW do I keep the 70B LLM warm? How do I manage GPU?" │ +│ A: docs/LLM_Pool.md (warmup runbook, VRAM tiering, keep-alive) │ +│ │ +│ Q: "HOW does the retrieval pipeline call these models?" │ +│ A: docs/Query_retrieval_docs/ │ +│ └── Retrieval_Architecture_and_Strategy.md (execution path) │ +│ │ +│ Q: "HOW are embeddings computed at ingestion time?" │ +│ A: docs/Vector_store_docs/ │ +│ └── Vector_Ingestion.md (batch upsert + HWM state) │ +│ └── Qdrant_connection.md (embedding factory, provider switch) │ +└───────────────────────────────────────────────────────────────────┘ +``` + +**Decision rule:** New model-related information should land in: +- `Strategy_choices_docs/` if it answers "why was this design chosen?" +- `ARCHITECTURE.md §5` if it is a new entry in the canonical model registry +- `LLM_Pool.md` if it affects Ollama GPU memory management +- `Query_retrieval_docs/` if it changes the runtime retrieval execution path + +--- + +## VIII. Configuration Matrix (`.env`) + +| Variable | Default | Purpose | Tier | +|---|---|---|---| +| `EMBEDDING_MODEL_NAME` | `BAAI/bge-base-en-v1.5` | Dense encoder HuggingFace ID | Retrieval (CPU) | +| `EMBEDDING_DEVICE` | `cpu` | Dense encoder device (`cpu`, `cuda`, `mps`) | Retrieval (CPU) | +| `SPARSE_MODEL_NAME` | `prithivida/Splade_PP_en_v1` | SPLADE model via fastembed | Retrieval (CPU) | +| `FASTEMBED_THREADS` | `6` | ONNX SPLADE thread count | Retrieval (CPU) | +| `RERANKER_MODEL_NAME` | `BAAI/bge-reranker-v2-m3` | CrossEncoder reranker | Retrieval (CPU) | +| `RETRIEVER_DEVICE` | `cpu` | CrossEncoder device | Retrieval (CPU) | +| `QDRANT_HOST` | required | Qdrant Cloud REST endpoint | Infrastructure | +| `QDRANT_API_KEY` | required | Qdrant authentication | Infrastructure | +| `OLLAMA_CUSTOM_MODEL_NAME` | `options-expert-v1:latest` | 70B fine-tuned (agents + QueryTransformer) | LLM (GPU) | +| `OLLAMA_ROUTER_MODEL` | `llama3:latest` | 8B router + ingestion helpers | LLM (GPU) | +| `OLLAMA_KEEP_ALIVE` | `30m` | VRAM pin duration for 70B | LLM (GPU) | + +--- + +## IX. How to Test + +### Retrieval sanity check + +```python +from Scripts.retrieval.qdrant_retriever import FinancialHybridRetriever +from Scripts.retrieval.schema import QueryIntent + +retriever = FinancialHybridRetriever() +chunks = retriever.retrieve( + query_intent=QueryIntent( + hyde_paragraph="NVDA insider selling executive Form 4 past month momentum", + rerank_query="NVDA Form-4 insider selling", + tickers=["NVDA"], + source_types=["sec"], + ) +) +print(f"Retrieved {len(chunks)} chunks") +for c in chunks[:3]: + print(f" score={c.score:.4f} | ticker={c.metadata.get('ticker')} | {c.content[:80]}") +``` + +Expected: ≥1 SEC chunk with `ticker=NVDA`, score > 1e-5. + +### Dense encoder smoke test + +```python +from Scripts.vector_store.connection import get_embedding_model + +model = get_embedding_model() +vec = model.embed_query("gold ETF implied volatility geopolitical risk") +assert len(vec) == 768, f"Expected 768-dim, got {len(vec)}" +print(f"Dense vector dim: {len(vec)} ✅") +``` + +### Sparse encoder smoke test + +```python +from fastembed import SparseTextEmbedding + +sparse = SparseTextEmbedding("prithivida/Splade_PP_en_v1") +result = list(sparse.query_embed("NVDA Form 4 insider selling"))[0] +top_terms = sorted(zip(result.indices, result.values), key=lambda x: -x[1])[:5] +print("Top SPLADE terms:", top_terms) +``` + +Expected: indices mapping to tokens related to "nvda", "form", "insider", "selling". + +### RRF + rerank end-to-end (integration) + +```bash +python -m Scripts query --warmup "Given recent NVDA Form-4 executive selling, how should I position with options?" +# Check logs/retrieval//retriever_audit_trail.jsonl for: +# - gold_chunks_returned ≥ 3 +# - all chunks with score > 1e-5 +# - at least one chunk with source_type=sec +``` + +--- + +## X. Dependencies + +| Library | Purpose | Tier | +|---|---|---| +| `langchain-huggingface` | Dense HuggingFace embedding wrapper | Retrieval | +| `sentence-transformers` | CrossEncoder reranker | Retrieval | +| `fastembed` | SPLADE ONNX sparse encoder | Retrieval | +| `qdrant-client` | Qdrant Cloud REST client + RRF fusion | Retrieval | +| `langchain-ollama` | Ollama LLM client (agents + QueryTransformer) | LLM | +| `langchain-core` | `Embeddings` base class | Retrieval | +| `python-dotenv` | `.env` variable loading | Config | +| `duckdb` | In-process Parquet SQL for Silver layer | Silver SQL | +| `pyarrow` | Parquet read/write | Silver SQL | + +```bash +pip install langchain-huggingface sentence-transformers fastembed qdrant-client \ + langchain-ollama langchain-core python-dotenv duckdb pyarrow +``` + +--- + +## XI. Change Log + +| Date | Change | Rationale | +|---|---|---| +| 2026-04-23 | Document created | Consolidates all model-selection rationale, chunking strategy, and hardware placement into a single Strategy reference. Prior knowledge was implicit in code and scattered across Retrieval_Architecture_and_Strategy.md. | From ea99250f9eb20a34fd4d763ae7b2b2a5ffcff1ef Mon Sep 17 00:00:00 2001 From: "Xinxin(Maxine)" Date: Fri, 24 Apr 2026 15:26:15 -0400 Subject: [PATCH 49/50] update core Scripts --- Scripts/__init__.py | 6 ++ Scripts/__main__.py | 5 + Scripts/core/yfinance_bootstrap.py | 164 +++++++++++++++++++++++++++++ 3 files changed, 175 insertions(+) create mode 100644 Scripts/__init__.py create mode 100644 Scripts/__main__.py create mode 100644 Scripts/core/yfinance_bootstrap.py diff --git a/Scripts/__init__.py b/Scripts/__init__.py new file mode 100644 index 0000000..220e736 --- /dev/null +++ b/Scripts/__init__.py @@ -0,0 +1,6 @@ +"""Top-level `Scripts` package. + +Explicit package marker so the project stops relying on PEP 420 implicit +namespace packages. This makes tooling (mypy, pyinstaller, wheel builds) +and test collection behave deterministically. +""" diff --git a/Scripts/__main__.py b/Scripts/__main__.py new file mode 100644 index 0000000..3323f10 --- /dev/null +++ b/Scripts/__main__.py @@ -0,0 +1,5 @@ +"""Enable ``python -m Scripts ...`` as a synonym for ``Scripts.orchestration.cli``.""" +from Scripts.orchestration.cli import main + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/Scripts/core/yfinance_bootstrap.py b/Scripts/core/yfinance_bootstrap.py new file mode 100644 index 0000000..4ac85de --- /dev/null +++ b/Scripts/core/yfinance_bootstrap.py @@ -0,0 +1,164 @@ +""" +``Scripts.core.yfinance_bootstrap`` — cluster-safe yfinance initialisation. + +Why this module exists +---------------------- +``yfinance`` persists a per-ticker timezone lookup into a SQLite file +(``tkr-tz.db``). SQLite requires POSIX advisory locks (``fcntl``) that +most shared cluster filesystems (NFSv3, GPFS, BeeGFS, Lustre) either +drop or mis-implement, producing ``sqlite3.OperationalError('locking +protocol')`` — the exact failure captured on 2026-04-22 in both +``logs/2026-04-22/options_scraper_2026-04-22.log`` and +``logs/2026-04-22/macro_pipeline.log``. + +The fix is environment-independent: at import time, redirect the +yfinance cache to a path that *does* support file locks. This module +encapsulates the resolution logic so callers don't have to remember +``export TMPDIR=…`` on every new SGE / SCC node. + +Resolution order +---------------- +1. ``$YFINANCE_CACHE_DIR`` — explicit operator override +2. ``/scratch/$USER/yfinance-cache`` — BU SCC local scratch (preferred) +3. ``$TMPDIR/yfinance-cache`` — SGE-allocated scratch +4. ``tempfile.gettempdir()/yfinance-cache`` — last-resort portable + fallback (usually ``/tmp`` on Linux, ``%TEMP%`` on Windows) + +Design notes +------------ +* **Idempotent.** Calling :func:`configure_yfinance_cache` more than + once is a no-op after the first successful call — scrapers that + import each other transitively won't double-configure. +* **Silent on success, single log on activation.** The scrapers still + own their own logging; this module emits exactly one INFO line so + ops can verify *which* path actually won. +* **No side-effects at import time.** The helper is callable but + nothing runs until a scraper explicitly invokes it. This keeps + ``Scripts.core`` import-safe on environments without ``yfinance`` + (docs builds, CI smoke tests). + +Usage +----- +Add these two lines at the TOP of any yfinance-dependent scraper, before +any ``import yfinance`` or ``yf.*`` call that would touch the tz cache:: + + from Scripts.core.yfinance_bootstrap import configure_yfinance_cache + configure_yfinance_cache() +""" +from __future__ import annotations + +import logging +import os +import tempfile +from pathlib import Path +from typing import List, Optional + +log = logging.getLogger(__name__) + +__all__ = ["configure_yfinance_cache", "resolved_cache_dir"] + +_STATE: dict = {"configured": False, "path": None} + + +def _repo_root() -> Path: + """``Scripts/core/yfinance_bootstrap.py`` → repository root.""" + return Path(__file__).resolve().parents[2] + + +def _candidate_paths() -> List[Path]: + """Build the ordered list of candidate cache directories. + + Empty / ``None`` entries are skipped so the first truthy candidate + wins. This keeps the resolution table declarative — adding a fifth + fallback (e.g. a Docker volume) is a single list entry. + """ + user = os.getenv("USER") or os.getenv("USERNAME") or "app" + candidates: List[Path] = [ + os.getenv("YFINANCE_CACHE_DIR"), + os.getenv("XDG_CACHE_HOME"), + f"/tmp/{user}_yfinance_cache", + f"/scratch/{user}/yfinance-cache", + (os.getenv("TMPDIR") or "").rstrip("/") + "/yfinance-cache" if os.getenv("TMPDIR") else None, + os.path.join(tempfile.gettempdir(), f"{user}_yfinance_cache") + ] + return [Path(c) for c in candidates if c] + + +def _first_writable(paths: List[Path]) -> Path: + """Return the first path we can ``mkdir -p`` successfully. + + We only check write-ability (``os.access(..., os.W_OK)``) *after* + the directory exists; some clusters require the directory to be + created before permission bits are even queryable. Hard failure + (``PermissionError`` / ``OSError`` on every candidate) is a + deployment error — we surface it explicitly instead of silently + falling through to a read-only path. + """ + last_error: Optional[Exception] = None + for candidate in paths: + try: + candidate.mkdir(parents=True, exist_ok=True) + if os.access(candidate, os.W_OK): + return candidate + except OSError as exc: # permission, read-only FS, path too long, … + last_error = exc + continue + raise RuntimeError( + f"yfinance_bootstrap: no writable cache candidate succeeded. " + f"Tried: {[str(p) for p in paths]}. Last error: {last_error!r}" + ) + + +def configure_yfinance_cache(force: bool = False) -> Path: + """Point yfinance's SQLite tz cache at a lock-safe directory. + + Parameters + ---------- + force + Re-resolve even if a previous call already succeeded. Useful + in tests and long-running daemons that want to re-check after + a filesystem mount change. + + Returns + ------- + pathlib.Path + The directory yfinance will now write its cache into. + + Raises + ------ + RuntimeError + If *every* candidate path is unwritable. This is a deployment + error that should fail-fast at scraper startup rather than + producing silent "locking protocol" errors hours later. + """ + if _STATE["configured"] and not force: + return _STATE["path"] + + chosen = _first_writable(_candidate_paths()) + + try: + import yfinance as yf + except ImportError as exc: # pragma: no cover — hit only on docs builds + raise RuntimeError( + "yfinance_bootstrap.configure_yfinance_cache called but " + "`yfinance` is not installed. Install it or guard the call " + "with `if TYPE_CHECKING:`." + ) from exc + + yf.set_tz_cache_location(str(chosen)) + + _STATE["configured"] = True + _STATE["path"] = chosen + log.info( + "yfinance_bootstrap: tz cache → %s (candidates tried in order: %s)", + chosen, + [str(p) for p in _candidate_paths()], + ) + return chosen + + +def resolved_cache_dir() -> Optional[Path]: + """Return the cache directory picked by the most recent successful + :func:`configure_yfinance_cache` call, or ``None`` if the helper + has never run. Cheap enough to call from health-check endpoints.""" + return _STATE["path"] From 825d5241ad4c5607e0a21538617b0a52921db8a1 Mon Sep 17 00:00:00 2001 From: "Xinxin(Maxine)" Date: Fri, 24 Apr 2026 15:28:00 -0400 Subject: [PATCH 50/50] update the docs --- docs/Tools_patch_docs/SEC_patch_tooling.md | 227 ++++++++++-------- docs/User_Query_Guide.md | 254 +++++++++++++++++++++ 2 files changed, 383 insertions(+), 98 deletions(-) create mode 100644 docs/User_Query_Guide.md diff --git a/docs/Tools_patch_docs/SEC_patch_tooling.md b/docs/Tools_patch_docs/SEC_patch_tooling.md index ddd1cb3..68d4a06 100644 --- a/docs/Tools_patch_docs/SEC_patch_tooling.md +++ b/docs/Tools_patch_docs/SEC_patch_tooling.md @@ -1,147 +1,178 @@ # SEC Patch & Maintenance Tooling -This document describes three **ad hoc** utilities under `Scripts/tools/` used to refresh SEC-related configuration, enrich Bronze JSONL with structured filing parses, and align Bronze files with the global processing registry. They are **not** substitutes for the scheduled `sec_ingestion` / `sec_processor` pipelines; they support recovery, backfills, and operational hygiene. +Three **ad hoc** utilities under `Scripts/tools/` support recovery, backfills, and operational hygiene for the SEC pipeline. They are **not** substitutes for the scheduled `sec_ingestion` / `sec_processor` pipelines; they operate on existing Bronze artefacts without re-scraping EDGAR. --- -## 1 — Scope and Role of Each Utility +## 1. Goal | Utility | Primary role | -| :--- | :--- | -| **`SEC_generate_cik_map.py`** | Refresh the **ticker → CIK** map from SEC’s public `company_tickers.json` into the repo config tree. | -| **`SEC_parsed_form4_8-k.py`** | **Sidecar patch:** for a given calendar folder under Bronze, re-fetch and parse **Form 4 (XML)** and **8-K (HTML)** into `parsed_data`, writing **`patched_{TICKER}.jsonl`** without mutating originals. | -| **`SEC_accession_no_depulicated.py`** | **In-place hygiene:** for each `{TICKER}.jsonl` on a target date, drop rows whose **accession** is already in the global registry or duplicated within the file, then rewrite the same file. | +|:---|:---| +| `SEC_generate_cik_map.py` | Refresh the **ticker → CIK** map from SEC's public bulk endpoint into `config/SEC_Ingestion/ticker_to_cik.json` | +| `SEC_parsed_form4_8-k.py` | Re-fetch and re-parse Form 4 (XML) and 8-K (HTML) into `parsed_data` for Bronze rows that lack usable structured content; writes sidecar `patched_{TICKER}.jsonl` without mutating originals | +| `SEC_accession_no_depulicated.py` | Drop rows from Bronze JSONL whose `accession_no` already appears in `global_processed_registry.json` or is duplicated within the same file; rewrites in place | --- -## 2 — `SEC_generate_cik_map.py` +## 2. Architecture -### 2.1 — Purpose - -Ensures `sec_ingestion` can resolve **NASDAQ-style tickers** to **10-digit zero-padded CIKs** using a local JSON file, avoiding repeated calls to SEC bulk endpoints during routine ingestion. - -### 2.2 — Workflow strategy - -1. **HTTP GET** `https://www.sec.gov/files/company_tickers.json` with a compliant `User-Agent` (replace placeholder email with your own per SEC guidance). -2. **Normalize** each `cik_str` to a 10-digit string. -3. **Persist** the full mapping as pretty-printed JSON next to the curated ticker list used by ingestion. - -### 2.3 — Inputs and outputs - -| Item | Path / detail | -| :--- | :--- | -| **Input** | SEC-hosted JSON (network). | -| **Output file** | `config/SEC_Ingestion/ticker_to_cik.json` — object mapping `{ "TICKER": "0001234567", ... }`. | -| **Related config** | `config/SEC_Ingestion/SEC_tickers.json` — curated universe (not written by this script; presence is logged only). | - -**Suggested run cadence:** after SEC bulk schema changes, or periodically (e.g. weekly) if you rely on newly listed symbols. +``` +[1] SEC_generate_cik_map.py + │ GET https://www.sec.gov/files/company_tickers.json + │ Normalise CIK to 10-digit zero-padded string + └─► config/SEC_Ingestion/ticker_to_cik.json + +[2] SEC_parsed_form4_8-k.py + │ Read Data/1_Bronze_Raw/SEC_Parsed_JSON/{date}/{TICKER}.jsonl + │ Re-fetch Form 4 XML or 8-K HTML via original URL + │ Parse via sec_ingestion parsers + └─► Data/1_Bronze_Raw/SEC_Parsed_JSON/{date}/patched_{TICKER}.jsonl (new file, originals unchanged) + +[3] SEC_accession_no_depulicated.py + │ Load config/SEC_Processing/global_processed_registry.json + │ Scan Data/1_Bronze_Raw/SEC_Parsed_JSON/{date}/{TICKER}.jsonl + │ Drop rows: missing accession | in registry | within-file duplicate + └─► Data/1_Bronze_Raw/SEC_Parsed_JSON/{date}/{TICKER}.jsonl (destructive rewrite) +``` --- -## 3 — `SEC_parsed_form4_8-k.py` +## 3. Code Strategy & Workflow -### 3.1 — Purpose +### 3.1 `SEC_generate_cik_map.py` -Some Bronze rows may still lack usable **`parsed_data`** after the initial crawl (Form 4 often needs a second-pass **XML** parse; 8-K benefits from **HTML cleanup** and **item-level markdown chunks**). This script reuses **`Scripts.data_collection.scrapers.sec_ingestion`** parsers to fill that gap and emit **parallel** patch files. +1. HTTP GET `https://www.sec.gov/files/company_tickers.json` with SEC-compliant `User-Agent` header. +2. For each entry: normalise `cik_str` → 10-digit zero-padded string. +3. Persist full mapping as pretty-printed JSON. -### 3.2 — Workflow strategy +**When to run:** after SEC bulk schema changes, or weekly if you rely on newly-listed symbols. -1. Resolve **`Data/1_Bronze_Raw/SEC_Parsed_JSON/{target_date}/`**. -2. Enumerate source files: **`{TICKER}.jsonl`**, excluding `patched_*`, `_*` prefixes, and `*SUMMARY*` names. -3. For each source file, if **`patched_{TICKER}.jsonl`** does not already exist: +### 3.2 `SEC_parsed_form4_8-k.py` + +1. Resolve `Data/1_Bronze_Raw/SEC_Parsed_JSON/{target_date}/`. +2. Enumerate source files: `{TICKER}.jsonl`, excluding `patched_*`, `_*`, and `*SUMMARY*` names. +3. For each source file, if `patched_{TICKER}.jsonl` does not already exist: - Stream JSON lines. - - For **Form 4** (`form_type == "4"`) with URL and empty `parsed_data`: fetch and parse XML; set `raw_text` sentinel to `XML_PARSED_SUCCESSFULLY` on success. - - For **8-K** (`form_type == "8-K"`) with URL: re-parse when `parsed_data` is missing or `raw_text` is not yet `8K_PARSED_INTO_MARKDOWN_CHUNKS`. + - **Form 4** (`form_type == "4"`) with URL and empty `parsed_data`: fetch XML, parse transactions; set `raw_text = "XML_PARSED_SUCCESSFULLY"` on success. + - **8-K** (`form_type == "8-K"`) with URL: re-parse when `parsed_data` is missing or `raw_text` is not yet `"8K_PARSED_INTO_MARKDOWN_CHUNKS"`. - Always ensure `parsed_data` key exists (empty dict if parse fails). -4. Write output to **`patched_{TICKER}.jsonl`** in the **same** date directory. +4. Write output to `patched_{TICKER}.jsonl` in the same date directory. -### 3.3 — Inputs, outputs, and logs +### 3.3 `SEC_accession_no_depulicated.py` -| Item | Path / detail | -| :--- | :--- | -| **Input directory** | `Data/1_Bronze_Raw/SEC_Parsed_JSON/{YYYY-MM-DD}/` | -| **Input files** | `{TICKER}.jsonl` (per-ticker Bronze). | -| **Output files** | `patched_{TICKER}.jsonl` (same folder; originals unchanged). | -| **Log directory** | `logs/{YYYY-MM-DD}/SEC_Ingestion/` (aligned with ingestion / processor). | -| **Log file** | `patch_form4_8k_{YYYY-MM-DD}.log` | +1. Load `config/SEC_Processing/global_processed_registry.json` as a set (missing file → empty set + warning). +2. Resolve `Data/1_Bronze_Raw/SEC_Parsed_JSON/{TARGET_DATE}/`. +3. For each `{TICKER}.jsonl`: classify each row: + - **Drop** if `accession_no` is missing. + - **Drop** if `accession_no` ∈ global registry. + - **Drop** if `accession_no` already seen earlier in the same file. + - **Keep** otherwise (first-occurrence ordering preserved). +4. Rewrite the same `{TICKER}.jsonl` in place with kept rows only. --- -## 4 — `SEC_accession_no_depulicated.py` +## 4. Output Data Schema & Paths -### 4.1 — Purpose +### Artifact Locations -Keeps per-ticker Bronze JSONL consistent with **downstream idempotency**: rows whose **`metadata.accession_no`** already appears in **`global_processed_registry.json`** should not be re-sent to Gold processing. The script also removes **within-file** duplicate accessions (first occurrence wins). +``` +config/SEC_Ingestion/ + ├── SEC_tickers.json # Curated ticker list (not written by these tools) + └── ticker_to_cik.json # Written by SEC_generate_cik_map.py -### 4.2 — Workflow strategy +config/SEC_Processing/ + └── global_processed_registry.json # Read (not written) by SEC_accession_no_depulicated.py + # Written by sec_processor.py after Gold writes -1. Load **`config/SEC_Processing/global_processed_registry.json`** as a **set** of accession strings (if missing, treat as empty and log a warning). -2. Resolve **`Data/1_Bronze_Raw/SEC_Parsed_JSON/{TARGET_DATE}/`** (module-level date constant in script). -3. For each `{TICKER}.jsonl` candidate, scan all non-empty lines and classify each row: - - **Drop** if `accession_no` is missing. - - **Drop** if `accession_no` ∈ global registry. - - **Drop** if `accession_no` already seen earlier in the same file. - - **Keep** otherwise, preserving order of first occurrence. -4. **Rewrite** the same `{TICKER}.jsonl` in place with the kept rows only. +Data/1_Bronze_Raw/SEC_Parsed_JSON/{YYYY-MM-DD}/ + ├── {TICKER}.jsonl # Source; rewritten in-place by accession dedupe + ├── patched_{TICKER}.jsonl # Written by SEC_parsed_form4_8-k.py (sidecar) + └── _SUMMARY.json # Cross-ticker summary (not modified by patch tools) -### 4.3 — Inputs, outputs, and logs +logs/{YYYY-MM-DD}/ + ├── SEC_bronze_accession_dedupe_{YYYY-MM-DD}.log + └── SEC_Ingestion/ + ├── ingestion_progress_{YYYY-MM-DD}.log + └── patch_form4_8k_{YYYY-MM-DD}.log +``` + +### `patched_{TICKER}.jsonl` Schema + +Identical to the Bronze JSONL schema in `docs/Data_source_docs/SEC_data.md`. Fields that were absent or empty in the original (`parsed_data`, `raw_text`) are populated; all other fields are copied verbatim. -| Item | Path / detail | -| :--- | :--- | -| **Input / output** | Same path: `Data/1_Bronze_Raw/SEC_Parsed_JSON/{YYYY-MM-DD}/{TICKER}.jsonl` (**destructive** rewrite). | -| **Registry input** | `config/SEC_Processing/global_processed_registry.json` (JSON array of accession strings). | -| **Log directory** | `logs/{YYYY-MM-DD}/` | -| **Log file** | `SEC_bronze_accession_dedupe_{YYYY-MM-DD}.log` | +### Dedupe Log Structure (per ticker file) -The log records, **per ticker file**: input line count, output line count, counts for each removal reason, and **sample lists** (capped) of accessions removed for registry hits and within-file duplicates, plus a run header (paths, registry size, candidate file count). +``` +[TICKER.jsonl] input=47 output=32 kept=32 dropped_no_accession=0 + dropped_registry_hit=10 dropped_within_file_dup=5 + sample_registry_hits: [0001234567-26-000001, ...] + sample_within_file_dups: [0001234567-26-000002, ...] +``` --- -## 5 — Recommended sequencing (operational view) +## 5. How to Test -Use this order when repairing a **single** Bronze date after ingestion issues or registry updates: +### CIK map refresh -```text -[1] SEC_generate_cik_map.py - │ - ▼ Refreshes ticker_to_cik.json (ingestion prerequisite) -[2] SEC_parsed_form4_8-k.py (optional, if parsed_data / 8-K chunks missing) - │ - ▼ Produces patched_{TICKER}.jsonl alongside originals -[3] SEC_accession_no_depulicated.py (optional hygiene before Gold) - │ - ▼ Trims rows already in global_processed_registry.json +```bash +python Scripts/tools/SEC_generate_cik_map.py +# Expected: config/SEC_Ingestion/ticker_to_cik.json updated; AAPL → "0000320193" +python -c "import json; d=json.load(open('config/SEC_Ingestion/ticker_to_cik.json')); print(d.get('AAPL'))" ``` -**Caution:** Step **3** mutates `{TICKER}.jsonl` in place. Step **2** does not overwrite originals but adds patch files; promote or merge patched content through your own pipeline rules before relying on Bronze alone. - ---- +### Patch validation + +```bash +# Run on a specific date +python Scripts/tools/SEC_parsed_form4_8-k.py --date 2026-04-23 +# Check output +ls Data/1_Bronze_Raw/SEC_Parsed_JSON/2026-04-23/patched_*.jsonl +# Verify parsed_data populated +python -c " +import json +for line in open('Data/1_Bronze_Raw/SEC_Parsed_JSON/2026-04-23/patched_AAPL.jsonl'): + r = json.loads(line) + print(r['metadata']['form_type'], bool(r.get('parsed_data'))) +" +``` -## 6 — Quick reference — artifact locations +### Dedupe smoke check -```text -config/SEC_Ingestion/ - ├── SEC_tickers.json # Curated ticker list (ingestion) - └── ticker_to_cik.json # Written by SEC_generate_cik_map.py +```bash +python Scripts/tools/SEC_accession_no_depulicated.py +# Check log +cat logs/$(date +%Y-%m-%d)/SEC_bronze_accession_dedupe_$(date +%Y-%m-%d).log +``` -config/SEC_Processing/ - └── global_processed_registry.json # Read by SEC_accession_no_depulicated.py +--- -Data/1_Bronze_Raw/SEC_Parsed_JSON/{YYYY-MM-DD}/ - ├── {TICKER}.jsonl # Source; rewritten by accession dedupe - └── patched_{TICKER}.jsonl # Written by SEC_parsed_form4_8-k.py +## 6. Recommended Sequencing & Governance -logs/{YYYY-MM-DD}/ - ├── SEC_bronze_accession_dedupe_{YYYY-MM-DD}.log - └── SEC_Ingestion/ - ├── ingestion_progress_{YYYY-MM-DD}.log # sec_ingestion (reference) - └── patch_form4_8k_{YYYY-MM-DD}.log # SEC_parsed_form4_8-k.py ``` +[1] SEC_generate_cik_map.py + │ Refreshes ticker_to_cik.json (ingestion prerequisite) + ▼ +[2] SEC_parsed_form4_8-k.py (optional — only if parsed_data / 8-K chunks missing) + │ Produces patched_{TICKER}.jsonl alongside originals + ▼ +[3] SEC_accession_no_depulicated.py (optional hygiene before Gold) + │ Trims rows already in global_processed_registry.json + ▼ + sec_processor.py → Gold JSONL → Qdrant upsert +``` + +**Governance notes:** +- Step 3 is **destructive**: rewrites `{TICKER}.jsonl` in place. Back up the date folder before running if in doubt. +- Step 2 does **not** overwrite originals; promote or merge `patched_*` content through your own pipeline rules before relying on Bronze alone. +- `global_processed_registry.json` is the authoritative "already processed" source of truth, written by `sec_processor.py`. Do not edit manually. --- -## 7 — Governance notes +## 7. Dependencies + +```bash +pip install requests beautifulsoup4 markdownify python-dotenv +``` -- **SEC fair access:** set a real contact in `User-Agent` for both CIK download and filing fetches (see `.env` / `SEC_USER_AGENT` where applicable). -- **Auditability:** retain dedupe and patch logs under `logs/{date}/` for traceability of what was removed or enriched. -- **Registry authority:** `global_processed_registry.json` is updated by **`sec_processor`** after successful Gold processing; dedupe tooling assumes it is the source of truth for “already processed” accessions. +**Required env variable:** `SEC_USER_AGENT` — e.g. `"CompanyName contact@email.com"` (SEC EDGAR fair-access policy). diff --git a/docs/User_Query_Guide.md b/docs/User_Query_Guide.md new file mode 100644 index 0000000..78f2ab5 --- /dev/null +++ b/docs/User_Query_Guide.md @@ -0,0 +1,254 @@ +# User Query Guide + +> **Audience.** End-users and analysts who want to ask the +> Options-Recommendation RAG meaningful questions. +> **Goal.** Show what this system *can* answer, what data it has behind +> each answer, and how to phrase a query so the router, retriever and +> analyst agents can do their job cleanly. +> +> If your query runs through the router and you see `route=vector_only`, +> `fallback_tier=drop_ticker_180d`, or the final report says +> *"INSUFFICIENT DATA"*, re-read §2 and §4 of this document before +> opening a bug — 90 % of the time the query was under-specified. + +--- + +## 1. What this system is (and is not) for + +The bot is a **multi-agent retrieval stack** that answers **options-trading +and cross-asset macro questions** grounded in four live data layers: + +| Layer | Storage | Updated | Typical questions it answers | +|---------------|-------------------------------|------------------|------------------------------| +| Options chain | Parquet (Silver) | Daily (trading) | IV, skew, Put/Call Ratio, OI, liquidity | +| Macro history | Parquet + Markdown (Silver/Gold) | Daily | VIX, DXY, yields, GPR index, Fed tone | +| News | Qdrant vectors (Gold) | 1–3× per week | Event-driven narrative (Fed, CPI, geopolitics, metals) | +| SEC filings | Qdrant vectors + JSONL (Bronze) | Weekly | Insider (Form-4), 8-K, 10-K/Q risk language | + +It is **not** built for: +- Real-time intraday quotes (we're end-of-day). +- Stocks outside the tracked universe (§2). +- Fundamental valuation (DCF, multiples). +- Crypto, FX majors, or single-name bonds. + +--- + +## 2. Tickers the system actually knows about + +Only tickers listed in `config/universe/` are in our options & SEC pipelines. +Anything else will either fall back to a macro-only reading or return no +Silver evidence at all. + +### 2.1 Single-name equities (options + SEC Form-4/8-K/10-K) + +Current coverage: **48 Nasdaq-100 constituents** + +``` +AAPL MSFT NVDA AMZN META GOOGL TSLA AVGO COST PEP +NFLX AMD CSCO TMUS ADBE QCOM TXN INTU AMGN ISRG +HON CMCSA INTC AMAT IBM BKNG VRTX SBUX PANW MDLZ +GILD REGN LRCX ADP ADI MU SNPS CDNS MELI CSX +KLAC PYPL CRWD MAR ASML CTAS MNST NXPI +``` + +### 2.2 ETFs (options only, no SEC) + +| Role | Tickers | Use for | +|------------------|----------------|---------| +| Broad-market | `SPY QQQ IWM` | Index sentiment, beta, regime | +| Commodity / hedge| `GLD SLV` | Precious-metals exposure, inflation hedge | + +> **Tip.** If you ask about "the market" without a ticker, the router +> will usually anchor on SPY/QQQ. If you want a commodity angle, say +> *gold*, *silver*, *GLD*, or *SLV* explicitly. + +--- + +## 3. Data sources and the metadata they expose + +### 3.1 Options chain (Silver / Parquet) + +Path: `Data/2_Silver_Processed/Options_Market_Data//_options_.parquet` + +Per-contract fields the router can filter on: + +| Field | Meaning | +|---------------------|-----------------------------------------------| +| `ticker` | Underlying symbol | +| `expiration`, `dte` | Expiry date & days-to-expiry | +| `option_type` | `call` / `put` | +| `strike`, `moneyness_pct`, `in_the_money` | Position on the chain | +| `implied_volatility`| Per-contract IV | +| `volume`, `open_interest` | Liquidity primitives | +| `spread_pct` | (ask − bid) / mid | +| `is_liquid` | Derived boolean (volume & OI thresholds) | +| `last_price`, `bid`, `ask`, `underlying_price` | Pricing quad | + +Derived metrics the system can compute on the fly: **IV Skew**, **Put/Call +Ratio** (volume *and* open-interest flavours), **latest ATM IV**, +**liquidity scan**, **OTM/ITM** filters. + +### 3.2 Macro history (Silver parquet + Gold markdown) + +Paths: +- `Data/2_Silver_Processed/Macro_History//macro_snapshot_.parquet` +- `Data/3_Gold_Semantic/Macro_Narratives//macro_context_.md` +- `Data/Agent_Context/latest_macro_context.md` (always-current mirror) + +Indicators ingested daily (subset): + +| Symbol | Name | +|-----------|------------------------------------| +| `^VIX` | Volatility index | +| `^GSPC`, `^IXIC`, `^RUT` | S&P 500, Nasdaq, Russell 2000 | +| `^TNX` | 10-Year Treasury Yield | +| `DX-Y.NYB`| US Dollar Index | +| `GC=F`, `SI=F` | Gold / Silver futures | +| `GPR` | Caldara-Iacoviello geopolitical-risk index | + +Available macro metrics: `Price`, `Price Change (%)`, `Daily/Monthly/Yearly +Change (%)`, `Macro Trend`, `GPR Index` (+ `GPR Threats / Acts / Components`). + +### 3.3 News (Qdrant Gold layer) + +Pre-curated GDELT topic buckets (see `news_scraper.py`): + +| Topic | Typical triggers | +|------------------------------------|------------------| +| `macro_central_banks` | Fed/FOMC, Powell, ECB, BOJ, rate decisions | +| `macro_inflation_employment` | CPI, PCE, payrolls, wage growth | +| `macro_yields_dollar` | 10Y yields, DXY, Treasuries | +| `macro_geopolitics_risk` | Middle East, Ukraine, Taiwan, sanctions | +| `asset_precious_metals_spot` | Gold, silver spot / bullion / safe haven | +| `asset_metals_derivatives` | COMEX, metals options, metals ETF flows | + +Metadata per chunk: `unified_timestamp`, `publish_timestamp`, `impacted_assets`, +`tone`, `topic`. + +### 3.4 SEC filings (Qdrant Gold + JSONL Bronze) + +Form coverage: **Form 4 (insider)**, **8-K (material events)**, **10-K / 10-Q** +for the 48 single-names in §2.1. + +Metadata: `ticker`, `form_type`, `accession_no`, `filed_at`, +`transaction_date`, `action_direction` (BUY / SELL / ACQUIRE/VEST / NONE), +`tone_score`, `url`. + +--- + +## 4. How to phrase a query so the router does the right thing + +The router runs two LLM stages — a **Metadata Extractor** and a **HyDE +Writer** (see `docs/Query_retrieval_docs/Query_intent_docs.md`). They look +for specific signals. Give them those signals. + +### 4.1 The five ingredients of a well-formed query + +| Ingredient | Why it matters | Examples | +|--------------------|-------------------------------------------------------|----------| +| **Ticker(s)** | Pins Silver filters; prevents `vector_only` fallback | `AAPL`, `NVDA`, `SPY`, `GLD` | +| **Metric(s)** | Drives the SQL dispatcher in `sql_tools.py` | *Put/Call Ratio*, *IV Skew*, *liquidity*, *VIX*, *GPR* | +| **Time window** | Picks `today / yesterday / past_week / past_month / past_six_months` | *today*, *yesterday*, *past week*, *6-month* | +| **Source signal** | Nudges the router toward SEC / News / Macro | *Form 4*, *insider*, *Fed minutes*, *CPI print*, *geopolitics* | +| **Trade intent** | Lets the Analyst compose an options view | *should I buy puts*, *sell covered calls*, *position for an IV crush* | + +### 4.2 Good vs. weak queries + +```text +# ✅ GOOD — has ticker + metric + time + intent +"What is AAPL's Put/Call Ratio and IV Skew today, and should I sell + front-month strangles given current liquidity?" + +# ✅ GOOD — macro-only, but explicit on topic + time +"How did the latest FOMC decision move 10-year yields and DXY over the + past week, and what does that imply for SPY 30-DTE puts?" + +# ⚠️ WEAK — no ticker, no time, vague metric +"Is the market bullish?" # router will default to past_six_months, + # no Silver anchors, Analyst returns generic. + +# ⚠️ WEAK — ticker outside universe +"What is the IV skew on F (Ford)?" +# Ford is not in config/universe; options Silver layer will be empty. +``` + +### 4.3 Time-phrasing cheat sheet + +| You write... | Router picks | Window on Silver | +|----------------------------------|-------------------------|------------------| +| "today", "right now", "current" | `TimeWindow.TODAY` | 1 business day | +| "yesterday", "last session" | `TimeWindow.YESTERDAY` | 2 business days (weekend-safe) | +| "past week", "this week" | `TimeWindow.PAST_WEEK` | 7 days | +| "last month", "over the month" | `TimeWindow.PAST_MONTH` | 30 days | +| "last 6 months", "YTD-ish" | `TimeWindow.PAST_SIX_MONTHS` | 180 days | +| nothing explicit | `PAST_SIX_MONTHS` (default) | 180 days | + +> Because the Silver layer snaps to **business days**, "yesterday" on +> a Monday means *last Friday* automatically — you do not need to +> hedge for weekends yourself. + +### 4.4 What to say if you want a specific data source + +- **Options Silver only:** name metrics (`Put/Call Ratio`, `IV Skew`, + `liquidity`, `open interest`) plus a ticker. +- **Macro Silver only:** name the indicator (`VIX`, `DXY`, `yields`, + `gold`, `GPR index`) plus a time phrase. +- **News Gold:** mention an event (`FOMC`, `CPI print`, *"headlines about"*, + *"market reaction to"*). +- **SEC Gold:** mention *"Form 4"*, *"insider selling/buying"*, *"10-K risk + factors"*, *"recent 8-K"*. + +--- + +## 5. Reference query taxonomy + +| Intent family | Template | +|----------------------------------|-----------------------------------------------------------------------------------| +| Single-name options posture | *"What is {TICKER}'s {metric} today and what options strategy fits?"* | +| Relative-value options | *"Compare {TICKER_A} vs {TICKER_B} IV skew over the past week."* | +| Event-driven | *"How did the {event} affect {TICKER or macro} and what exposure would you take?"*| +| Insider-flow driven | *"Given the recent {TICKER} Form-4 {direction}, should I {strategy}?"* | +| Macro regime | *"With {macro indicator} at {level/trend}, what does that imply for {TICKER/ETF}?"*| +| Geopolitical / commodity | *"How would rising Middle-East risk move precious metals and GLD options?"* | +| Liquidity screen | *"Which {TICKER} expirations are most liquid for a {strategy} right now?"* | + +--- + +## 6. Things that will make the system fall back or refuse + +1. **Ticker not in universe** → no Silver evidence → Analyst can only + reason off Macro/News. +2. **No ticker + no event + no macro indicator** → router runs + `vector_only` and may return *"INSUFFICIENT DATA"* on purpose. +3. **Asking for Greeks (Δ/Γ/Θ/ν)** → we list them in the ontology but + have not ingested them; you will get an honest "not available" note. +4. **Asking for real-time or intraday** → everything is end-of-day. +5. **Time signal that contradicts the data you request** — e.g. asking + for *"yesterday's 10-K filing"*. 10-Ks are quarterly; the Checker + will flag time-mismatch in the audit trail. + +--- + +## 7. Where the audit trail lives + +Every query writes a per-day JSONL trail: + +```text +logs/router_e2e//___trace.jsonl +logs/router_e2e//_run_summary.json +``` + +Use this when a report looks wrong: the JSONL captures router decisions, +retrieval filters (including the exact `start_date`/`end_date` the Silver +SQL used), Critic and Checker verdicts, and the final Finalizer output. + +--- + +## 8. TL;DR — the three rules + +1. **Put a ticker in.** If you can't, put a macro indicator or a named + event in. +2. **Put a time phrase in.** Implicit defaults to 6 months, which is + almost never what you want for an options question. +3. **State your trade intent.** The Analyst tunes its answer to what you + asked for (scan / score / position / hedge).

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 literal 0 HcmV?d00001 diff --git a/Data/2_Silver_Processed/Options_Market_Data/2026-04-09/GLD_options_2026-04-09.parquet b/Data/2_Silver_Processed/Options_Market_Data/2026-04-09/GLD_options_2026-04-09.parquet new file mode 100644 index 0000000000000000000000000000000000000000..ff83766bc75c985abb777aa57839e11fd47f9955 GIT binary patch literal 99203 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⩔-zA0b{S%V)D@EYY?ZK8!GjQa6B{B18l|ooa{TVnZh4FsV=Dkx{!kgvm zD%A~gcsHv;w&lG!)MP3y4m~Ub-!G%ur|+_aqgHnv0wc{~!5_F=w5R%7$JH|Em>}`n zcuNSf_l_0I8$=L}*rxN}#$f+Kj=v<>aQ-@V##{Uc2$jHLg9s*q;;G~8n)aE(lp2QN zEa0+1E;Iwt3 zx}hIx;N`e|&&TcafdT}x^16FMID&TXdiy|@VVT134{YuWy9_vaHz+V5qyFGp%UN?M zApn?eO8^aTl0Wyn;7mhzLw(U87v%|@EPH@sr^*bsA7D{Iazlb}H!~Ro6;hR$2(>6D zse<01kQSPdePE*Kg(=Z$S0l$wnPq%+Ec7;vFN2_;sK&%;cpSVmz>PT2a)~&Mff~2b z4DQ1?#)n`$h|XAx8%yG0n&`2q)6`f%z{t`4YqTQV47cA^nGyZoH7NT)*@p>;l!Uy} zb1w%AwaP$P!XSI`U=c2JY6U7AWFGrUVhtQQo@XMGe(Gvx}@Uy@(jz!zye=KU$>8oa&}6eKPct98%pZ{7E8S`c0rUgE8m)W>k(ahuY1nUj4N|0(k;+ zM3>|Wxfvm~sFG6iC2(A-F;UCFZp$S>iFgkFIxR+$7mt}UTgq)CBM4d*7yATg%pSb~cMT<^HkDD@o*ZQIQUI?Pic zRtDiRsAacIj$3LCvxc+sPfW9b;nHS_nh!Rc1JclYL$uO<|nwN-Cg%EkNIsKQ-ODEK_;p>fDy zW9W18=B>8FCg8KP>FMe@6gYm|*dtq#X+ z?IE*HKbGoc|7R(Y2iJFnwD$RF3#+GXyp%QE7Ftet&MUcQ1G37w+^-TFDE{UwiT1FD zx+nIdyS|b`!6V;Ak9;lRuju)`f4Z8(FT29jlcfm7Uo3T$o{&Oxe9`8$IYO8}xvKn> z83lKfCNGS&CSkF~Cf{GX@BQz_K7>u0323PD$7(tLX+2?d8! z&JJ53hEj9;cS%w+s4C$86&T5dhjX;+JDA8)lxYp-aLa&!ao~N+EaF@c3w{@FNPa9~ z!;hh&-J<5*KWWwt-S7q8EclXX=c?MthSQG6`aEC6fvld%qpL%V;TkTyOt@tXlOhMl z+*!>Bca!-c={O(vXuY#A<-HU}`6=?lwxPn^^~J_1*ZFYk%d78G=L#UNd>*H7Cu4A9 zlukTNYnNxzsY50S8ye4WgZ2wy)ylC}H;u&r3kN@cA0dIhV=n2`-NbN-lIN3R5tKDQ zyl8gX49vQGNsBSH1dXV_B(1+0^j`L8_XffY)}Ow6X3;ho$bwhYZyjU?%KajhFkA|I zCQM_Uz08BgL0jghe&NFesm3mx2asCA>NATE`_IRY?C5O-nWgm@$~icBnr;sTdV{8B z3PYqCVKK@;MdmiA3#4E-H7442B4WHt1>`SmxI4mc9|61QjU&u1V%2dSAVnPR0$*3~Tlx*_0C$_W9Y4PZ zmlZ=vTwmxW{U}m*0O8LuZ)zrW1j`&TctF72J)&)WJ>com>81&fJuT!4%E=AZNe9?Z z@CLIb7e*e4cZVm{9-ALLL6l=wS?;Vd1UTMgR*_Da>tc?ZRAJsNX`ECCw8kDJaRv?7P@f z9GRyUK~^d39pS2kwNkBIDS-p^UgsCriX$sr8b6lcg{xMPZWdIXnD(7HU$g+Y|fbTnZa4jz)oY%7-W$4Bygeo%UMs` z#PIkJ`utu$@NeHzOQ^O#-^riCMawT*o0?)Vd}74GGgA1K>TtQK1+|RZ3YYwA=5WGx zjmuVR351y)cvjLNfYN(!l;){YFp)7ZuMF0nS!uHTA5-vfH4a%gTLO(a?H&AZ*4kwN z+(a#uN+!*G(x5 zy5-QczrKw=)zZ!Z$yK49>0m%{`cP(ICCYQlys^<-B? z8XHFJV`r)A+0Zp%WRhYq7t*w$L;tcefi4dsoF7CO0ZGoZ)Ru6;Y}%~>y=;vju-9Xo zxl_2X&9L~)frVq%{F8Nr2PXB=d(sL?m^_-3Ea}9Dqqu;3jo&z7+94I{~3eMu)%=Jhqc7YAmro zewWrURwkPrz#2^Eq<_g?<^TcKUpD1`cfm8GUT78CQB%Ov!22JkKm0iD1&PuM3$hFJ z$We!Mfe^#4sIKs2?CNh;rGwBCt(7t!ZZRXqwRnqi3z7&03$R7CfE02s#-oW`ZM;RH zg?scMkS|QczdkTqs-&C-fQ8GWkPCjbydo2UCXkl~wlT>-R zU@sT^R(9&0E=9K^QMR+kpW`ZC+P7q}S>RfFKW@+mHcVCYkD5G62rI^}=y}=O1QK?S zP`r-#LT^1hpr%gWN)ui?8=lE11o->yUzzfS4t*SP+amiLUBvp-diB6J`ujYS7vTYI z^t&-%9WG63qy2I%>aTz0!1PhRPxA-1&{M*{MBYA4fKO@kuGo%0=Z=; zVSJ?R#*SU9lye|;{$4k~qa27g@(B6o#&7ypuOHif-X!38qtS&8k6+LpKZ7j`XTGC7 zKCWH2B;^CW%{fU?>EBFmIVBhq(Y2W#|EzFbr|Zr1_q2BXlSvRnlPtts%^Cfxn*Gw=5?_g$~(-{7;dU)kXuP^lb zpSg4U4#9nmS2j&aZE2zX7JCHD9gUlGtnQwwD%o{u6&qNUo!AeR14j5*xY~2 zrdIm%*IPbAQ8)%x2TxTp7i#w$Q*P??m5wRDJbJ)>F0_Td&d`xYFs#IBuk?fo9AZYq z?_7AiYnFP*j4!lVxbutAk`MHZy{m_~mA2AU-lKaT`+uQr7s$RI?%PT?nZ({TiTz5) z*>e^xftG<9^cj#y#8he&$!Y%D*&08Z3t5T@#1v*0$5> zLodC47ygY_n!Vg~e61MfM4efpSpJiaGVG`PPVa9&F)X{&FS-wVJ%5x70Zq#e(aO=S z^de16*xPAs^y7vF{RUk6LO+~Qoy{8CPT!uj|5i?)Z}i$sFLyZ`3WZg?Q5?hpbNrPA zOmSCxE+x4Nxpf})s^IY>qf1Rd;l1F@XFCFdy(g#FMH@p8^Owi-wH(;BH;oJSB^_~W zn<|YraTi1IsEW8s+=t-3S~N>VS;2=NB?M&;6(DjoNS2xQRJtQPmWn&zG1O);9y=`H z+ju~H{Ht9#YZPK<@fjcJ&?r(!$WA~>t!xk+xVK0&Q$qM#G^@C%u!0NG3&#a+II8&q z=06_Mj8JGDh;WNyYi@OKMX@u{&q8VI)G-Dcs98Rvt6H#cxZjb)exX+jMMh7O`$ z6nPHulp}Uz%Z?C5p_mGR!S5C`gN;<}0{(Ede;x*O2KIWH zS3yKqi+EeHGr*=tq7qvapU0=*h7k|QmKI9XYWOER>`_~S6ZB(6QMY9%aaTE@B$U-OTJhcF*DdMy@hxjnt zD48VTr?k!yyV$x?Ji`w|t`S5OE2BAmARp$=eY1PgFe69^4t;HJ#R1XAbPwq*+;aDA zMc&R4KWTwMA!w)PFMn9_?gIF)Y&SwQIoSAZD+y~{N8~!&m_g)c z)3&y#L$c{Uqeiu@r5+WDK$I3yuXp=fatd-ea#?aqyrvf&)-I zW}19-$6vHr7Hj((lx*@dXEfFNbD-I3y=dlY7C_6FU)pb||IP^;sx%_tNRJOQZ_NHh z4}7uXgnij>`W&;%Sn!Ruo~Jr@+Wsf)_s?)irCmEcCV%C#p+mpZ%dBg!uYL)1Zq8rTMLwW;BZ7yg~Ak!ezs-E`fc{ zW!NEqS@fUyu?b`K5*2%3i&RUs=FP!uI8z&A;?@J@CBrrb{vTAC4eOqGOwX= zTLD!@pti5_bPr>Lf2Y*x=~@!nN0dyxooNC$qdF+Ysvj}C0j+lw4z0vq9h2r%r7Qq+BQ&LE~FRG@H(Y(=cf=KKv^|x0m!NHhx zeLr3WCl%!$@+4-bZmX-J+!eQ!ZLZ6lNeooT1*9*$k*e)*{dQxPsKS}(i~|TY0K6$t z3Lm%Rj>LToM`BVma62A)uX2ej@{5JP>nC*Ha1AX$h>3V`A0?Ws5{l6o3mR1D1%6VJ zPsPLdzM^zHZ47*V(%)%gEylW@{I&c`G;BMKYrKP_Es~WX%esQ*d5qWd7+)BO8w3s( z_%2GDp!0^tm>rw4J2^tzt_8Y{TO7dI0ISEzz8ZNG*l| znn#y==E}jTv^kuDBEvd_1f2REd-%B0910X#?2C$Gb6CCix+xBrUUFM_=3yE&(~Q7}m(nuVhk9FodivBQ-MR!r}#V=#}?YFHNNt zso-@!SdyQbw$1v{H=h4l)w1-0Z8p#GAa!lYvT5bpY+s~Z>fRtRoq09e?o0Wl9?dIE z=e|8>+WzvAvi+l}4(mcolK-h8rItt?DXxO&P>>~eGT8B!J;}+@IAKxq=;I9q|K|be z70Y!_P7YT5h~6Vtt_o*6yAG)C&76up$#wBwQQbE=+HAxBZCTsK$TecX<>re=%t7!NOK^RjUf=Aj|exGkMJ;fu<9sKcdUHamrjZc*wy8f5D>JHs%*Ndj@PTKTF z+oAitdeMyIPd9zgbqIK3Wjgb6(&o>_9eTVTY&!ei)6HN1w;$*4Pq+NWjcF`tjgE{} za%{;!esoQi{Fc(V2N@(;S+hVLt77bVTh-Pq^uMJteb*4I6x>vW`27!S)rYG>y|z;S z@#CCYely=C%aJZl^z3?h$+GF&jm|f#sS)Df0F={+-@TvHR}?AD{HH)8@@#>w*-u%OSd zPtoS5xjXQzec1mvDjc)nL5qw3g@}Grw#IBi+r9zMBKpsM60@bfr2`oCj>>k3WsF^i zI16kTW7nf@s(bYiM6XzRYrA@&YoB3)nDw={cKF}^<0txdS@^(?F`EPfcSYac9e=xH z+$q7J11oRuNgn8y@K6wUtoHVQ9krF-DbE||o@8q>xH|gI!NS{n;{J2KHgxZ}!Q+K@ zhj5M@EZv)$K3+Kf<=Ufn$`?-Bn<#7;a!!FqZ96SpGW40x-D5RtJg4nlGVI;tyC)jV zy=GopGF-I#UuVp(`iRjP^O^Q9UOJ<`S`J4R^XI57Kc?=i{EjBK2Q^Z%s_r~YD_VCrwUfF}Mj_T}Nbo=UUv>Y%%RyaEJQPlv`Op1F z-|lod^HZ3XY4)IjjPpO2)0mcL7X1W$EuYV9RF2aQeY%><>xN^{GS0at`f`8gd=@3s z67y3SKKe6gqfL5!+Cuk$Wuk&5HbG8Z)>RMWr>*{L<1^2l##cx8o3i2Q&=&z;yLQ)k zPTgv4`|8P8Ww|HsIsJEU$?E@DM^5ybeeb^A*W)iveaQ5h^TgV|?ef^upG&;vzD}_Jaqq=x z#+dM@4fa1@k3I9F(QE$q`}V)Tzc|CVMJ|&x5d3)H*oiawu?=jiIxy}j&XTNd;JU^K zGM^HKFXix{*qW54L_J&MmxLBAQWk&hC42 zZXSE2ILAN4!Qy6KuaJ?_H5DN)oo_DczhJ9=tNKFuo-vCfibtC7eYw+Zr1z2`4;(B{ zyu9F*<-K&Ijic3-u1wYMU8bnAxyG zIrF4rpv6)D9`DnaYrh%W|0wH~jjaT1j(k~*sis*%aT}B5|4z6#d7c|y1-ZW8(pB@@ zv#bcK@IcYZf*ijll_X_dNXN-5mQL92XwR<>?>%|t>XsO1kNT2F=`U9nP7QQPEv}B7 zd~j9Xr=|{pR=o!-Te;f*fA|(|8QRu6{$lj1gBzVa#;06Kc;d6}_ycFJ*{`mQVEY!H zwQ=!Yl5#c4!FT=Tp)S4~UR@pQV^nl=^>e>ngCoZeH``Eu>v`v6^^ue2nQi>zTX@Q5 zvrVsJUv#Ul?}r?)`Qz#r0j~!4pZ&;eOWUm%J=^O0&;Mms%(|Te#=UE@6fMPMWLc19 zH`T)4#U-M>Rz|B@qw>OHx0;nEhgy!lxnwcA+Pzj5*5&feWwTng%~uL{h4<=RyV8@- z2o%~s42)9Bh`zIGJ^Y+ZXE!<8pU~B=-aXa9ZFEYXVc(+*FUIchElr6`?Y(xx6Th9i zZ@wBg{qjGXzqjlJ;qIv1-nRs$;+>(xRu5Rd_}2E0({}Yu-5s+ex(&WE?#`jDo%W6!=9X~(^_`<A1 zwtwdBH^bZR#hv+OUY=?GR?AO_KWArgV9~(0BdzY&b@FdLP>{c8REIwGmxr_-EWEa7 zOqVP5*JrgJDi-cd?$zgBZBgsrWs!Tw#a+2~=XmSk^8CFM#`d{??_TSXifel(PC1aU zruoRx(?31ZvfUmuN{?1tyj_((X{xinEALox`1@6>PYiwDc}CjxH4p5Xq2jE$r|^c6 zbm}&@hkiB_kB9mUEm$1#&}HC^h)`rStiEo#%HzzG&D7+16jbEd^gip{Y&rKtV&25* zrrRDWL*rDr^`44~4W&)jz0)41E}d}(eOoM^ak9yI(oBz_uAetso{IaPFza@AEB8G| zg+&Rjv+uuolz-Cl^p++2=e+3ic=EbZV@$>zWoTiVtKYb)kyZqI4j#%p5uiEdB$g)vw2^hOH)re?NOZ{FaD?qJGrpao8JdFD00&3+Dd zO5ufoF+S_+uZ|6yQgr*|n9jbX*Cx(8bf@8Jk-uf{>roqhH@#^Wc7JSjW9FSHCtCZ4 z^!!?XWBzGzF~{R&pxN=7g}kjhMENg6+-BY6>=-$9o2`)9&%zv@u5mVBVAj|C9@lVm z`lXc1CipDEh;PhAlZ7O~LL!m)NE{>{k}(ovMUWDb5*GTp;-kG!60L%fX!MpOBuI=U zP{w|77!qT^mofG1g;XUhF@&Q}UE(O}eQ6lRSh7?I4`5t5F-cfW^bxi(wg=HH;Ua=D z!r57f7J&^qA`tE#67Fa=KM{?DDv7-wfy6YvC6`FV3s;O)jwx)wC-))MATg;kHiFZU zjv|>OF|MZ>qu(MV#*nuqk~@+DiLuv-#wm$RB*uKT3h6bHTv$Ooz#MckTpO&g5!3NH z9EtIU-OWQu{Dph8JLB~T%$Nzr4Majyk;ELN@fbD^?+0NRW8^vn!v-L|MN%SZkp>|p zAu*1)rXp=cOOBx!-vzI`A=x7hM|v&Ppuuv3A5BaT;T)s`LN$>eiKff2{Dt^EJJR1^ z7L6@@iEZdlti&)q#`%uVJ&i2HI*_A@Z#mXH5CbJqc*VG#?vJtNBQfr$HzFNC`Uj~L zV{O6vIe48VOh%4SVmqSsQT%=bKZEh!CcK`EB*1$%_}v<>*C8=A(gP_9$sdWatalg5 z5h(zPF-*S8BLnTeiqWt#TF)x>^$a)vO0+V(Y8%45FNPh2Ov6yP2{voY@2Gb`-{K#}h1c7WW+O?lRsAr`6LZ@YKPO?>Wu%8l3y>JgclVHNFkUB* zW&=O%!tYEex+2X$8i)5%|6DJ^&t6D-gyoE>T(lJ|M_-bRQBgJ8)g+Nav}kltX?V5; z-`UMj3plpyZ6uO0JO<-fW5I0p;!!C4RO0hIOn(`E{>Jzs#107xn{GD-G-G7Io4P)I)cLy`=vD#cwwxh@|19vE0FQX zGI3?l0u#AUa-F^;JJ(bhlqV0|x?qu+I=U>ra%;{KOU=lW1>V_VLX*xD>+~zmEnH?B zK&bO-&Rx>kvvgdEgElu`6(ZgvPvhv(u0D^F>j*Ys6iQNZEmx1_S*DE0(h`Jq@3rmm z%}JG6MudfXyhh7kWz?gHifVAW#Nzay42yg~fTHHa*aMS|mJmFe{kCfBXcLxa=i?a% z4s5MlXRSR;gzJ@gg@Pn@!Oh~QmFsNmF1Kh_HBd!<$U+i zTUzSQ?OeXak^PHmcF+=;tnL(7E^f%nXR!%NE>6_1!<~^tOiyKTwiS; z@5Jh^einsCcb9Q`;kj!(PsnD+b&Tj%;D}tuyBuG%V07-XKBk(v5y6e%0{zMDDy=pU z+mw>W6Izyzve zs&`?Hb`UqnG6`Kj9$OYpRO)pc9zjM$xgaZYcod=4>R24kvW)LsJ?K~hVoqE7Ib6Ri z=Gm}np7s&5O~jOj$gH#^+%U3ucUC5gV?+6iN9hU1u6$lpW0;7Lg#6@78}x<7tPHM1 z@2poxmwHBc8xgF`7~_Hv2c2UT!C_a)h%`daHsbLJIf3&5hj}}p#a1DR2XYMr;sx@S zrU6%GMi7KQ&S3={0jU&=xz#!roBLL-1!A|C03C(ayaFAEji*^5Ft8&jRE9(i46N!n zNV9bHxHY?T{)#IfSzQ!*CE6n)VdCEP3rr$Chn>jyB6v3bikG%>RIGSVBU+0%H<=WR z0dqie#Xm+CU(#7~7PE+gFg?M!D91jo)qAr!TzNT*$zc#y88q~9?#>Yrc?;eW1Y4q{ zs?wG91UqoG$A-#mw$6rAXv7k8^*ZG>EQMIBUq^Cyv2vvr7AQHqrua0cUiPeBYyGoh zF9x#M93FbMBy>8T8@~c{t*hv!=&sxm$}Dw5V9i^woabox;@qUDDm**T#jWwn=R=CPhF;4ypbSyzv2&t z>GcZa3Q8SZys;}GWcmYun8V{yWbHXU!Nm(gtkh%m5^@dk3NLWHq2y4ER|Ex0qCuC5 z&4XM<=vGbPWD(G%0lH1&+!0oIYxO9@O(e8;uiIjOnnN6fWi-a)W=kYT)F z4UR%lS?-8$46v8nLZ$waa^)0D*>A%4J7 zKI3nX=}InLltvIe8Ez9x6R|iXuPH`D0G3M}AjS(Fnjz-q;TnK^E{7-nw?A>Xgj`GL zv4_Y!$Z|cNbn};DR<*1g95CFgc*qk3hiFo3FsnX4c1d(UxmoETIM1PAJ>A8MNhz5B{H$X2|2kHOM%6qNG((0yg^1UReDT3 zNH8?rF(;5sOtDe>1ECce@dP%-I&H7@{bYmdlrvp~E9WY)G&(j~Xc=l? z1t}A`;R?p#z5I4ld6r|;%}ySWrztthGFc~YbI|H^JY#GxT@s<=1bPb98m*2)a49N2 z>%&FXydWM`tkLUPTn-NhWIZ-K4-?da9@~eYGz@RyRh_0e6ssPyAy3m{0AazEE5RP? z?l?h|s84gZbeWtaH>DDYgv5@2um}h)y1WzeX!=yQEFG>;~)xf_(uC%tPbuV~$3^BS-_bXR z#hO6K#jki-hLOG)-z6|Ml!7q4g24L8W(RY)A?kvs_*PzL1+pZ;WfANLOpnh*uIG|k zWfrm~kBWjs9p+I)h;h`+V(|nraj|v@%LpA;Gc1*bJf3EQHMP7ihle8QuB6>F?JVam zW%)E2tr!rtGQix06`(SwNL`v1%ed%3#WG=!8d;;o@vINFS2Gy1v3znu z$qY`Ei98Qi|`;|@WN8nxJ<7cttkP?(Oo1mmlNaYuzZvxF2LLm3#&H{dr$FZD&4 zn9(V14Kd`X4edf*vzi#^!9v*{Gc7D5O7OEc-e=AWAHuk6glcZ47&QhSs#2XWFvg%x zs4=5ysIKH0)DA{nxqy+uV=$56v4Wc<;%fF{+E`HknUziI;d$B-9i0 zFf$6go{10i!U)m$im{k`54?W+=YeL_gBWd^(XqDRy(O6Wd8jKgI6-&3X6||6+Zl`? z6vO&qJVvwUkBfhySrtt&cI2TKF9{D9fJ02VI1eVDJV~xbO+`)U%7&Z%2A@gg9XjG^x@cSFg1q0#?#8esOJp{{h z0xgV7F-#*&%fHJ--5L)?A;T~jL>y8YQUX?E5H=Ijj>GU3lQ5}xe8d&M7a=V`ZL zN4&>RMmJ^}ok1}Iu|%QxX@SY+VyQU7Z^RLd^9AV*IyS>((=m7qUSgk_h_M+DW3BiE zQ;_pW(MU|j)kq9Gc_58LVh}0@JBdJ=ixhx#4XI4nfSDE>ayJye55n{k@pCHDetgXh zE`n!b97O66@9-3_XA;!T* ziIp9X5Qmr;5P1M$5;buJYvz<9!UXju4KgvJoCv^F;^=eBqXEZcF%EfU#5v57QW41X z+%yC{!ja!_lbZ)>D+(4LD>Bb80QbhEhhi#=BL|}o7bSui$;jVIw7uVzLRMh7OpVFq z87j91%kdN4>K)DFM-T@hlZkZf5r_8j(b7MkB0lH45=Gb2unEfz{dO^eEE$-&dmdsO zF4GKv;ho5M^nBxrz>J2-;^%T14kIq%m+$ya28aE3_CWN-Lv26_S7IUzCbkOW{m8e% zYSSYY=8q$NyaBtDVZoX(oAr3#1rbJOz@Lcsrec~h3@=PA!$C$%$UI&m;-tp@t0QKn z=3&2$A}(F4$ByHV3?{x=;;|E7FonMYxiyUl@+c(6GtC}?(bcI9+(GfL^Mc_V}+$BM>jig_p<+ob_Za~(M+ zS8-D$L{|T)$lxRYt`}kd@W)xxpYTw$iHN(3t^(pt>Pwsy8nE=(N{VJ7P6)+BF{btw z6R5(#vq(jXk0yrsDiQ1KBr@$Me2R-@?}OztLZypv?AO4S@S(;`> zG^M85&Xgn}WJ^f*w2>?oNeD^E9zyoXl1h?np%UVW2TurDpClwLvsKeR?MYGzN%-B3 z=kxnspX>Y2*L96)_H*9nec$(MxzBk|?n|lDXKPSBu`V<;ph7V zMN@pd6F=8i5Bt>Gc)Z=mn=OtFF8hP!0T*S$VJX6?_ctc_of~*s-8~q$wXbsLqGrAj zhpI29J;81Gjo;~pBb|izeWl3@KOce5-@#ko$Q{QC-?#5e@Us+LRtT7M;?77jtnw&y z2<{BPXtu&Zz~wk_a4Jw5jmDj8!w-+c!RSl8QvBN+Z=3K-@^HZ6RxrjN9sztU2|xGm zhIkyHK4IP;(}WGeGalBqU?K|dpW!VTUo*$gAI85^@OBk%I{3LOc<+9UN6fg@hhgtblyH&pBo#9%O{`!xKxc8LmDOiy)&9mZ^ztvvF}D!RG$NzFSsA9fsEZW9`J` zV``#vwwhi%hV_WJn{S7!i-q;0@BYH#5hDa|`{5#d9ePBUAeBu#6nOO`+;0UDy9CP( ziN(j>Vi^b}HVcAT7=y_O*ldU$f(#}uTtncr>$6GPu`|l6KOPG=;v;TeOMWPEe53?j zo<4Qk480&kts~7a6L1jC`C^UZ;rd8C%*^q`3f3q3f3mg>mMJStj+sQqEkc`4`bv?{ z$Yjim5=;STIpibA5=`ok58N<+*btj$2NT0bb|aJs#vqeub7G&8d`hshKaO(H$iL_q z))Jg$5*%DLAs?BBv(gi1E&357`!?N;xFvWy0FQ(n@p7amG4rF8F!-pZ4=_X{V1;0q zK9RbChs($~8e$~iAPUY6#2Agoq4p={3NGmr?Ad=Dh*`4M01|L#$Ht{7q5IO2b4&%3|;dDH*ap8xM>wc2x=ao5NH z(Vp2e2|7ng&^Tri3WMpNNnu(f6BIfC|u3Q^HwqY@WoqzioxodBEh>OlN(EUc!ar zr03{jFinJ)YU-Gt7l%RY zr)Zzzne`nuiG)Je3zia^c7r*T+URjHM6FRKF^PL>MU1$qJ8aJA_o-L1Cby>7%^C42 zkm_OI>ACf_eV1y5zTG#?ycrJq&G$T}E)r!Ow>&dTb{u}&%LvLq4u0)E7qbC&`|Gbr ziQgfdSUXw>k#D!!C0L4*r@2g`$FZ30sPCUC(P4}saws&?;>Zx=Uau&l72ec-PR}e- zWKJs8OHXHiyYYq29Ey>Fkm#TChStO3ydaoN{C*0m4R-XtQSamHF13=a5`vgT?@#F4 zw-c^J{gvsipY<$`xtbh1Xkf?ReDJmDioh%KY0_Zt6At7y4qm3Q`D7-YnBec>EUm9O zGF@7K!cmvlOIJ+Q>s?Ve?Q2l7#}v~s?bF=|%GhbP=Eu6Gi>19MjyteoLkuL|1QB81 z-;6Vdp!tOuP)+h{JaqLe+K*2+9YT0gHQjZ1{(h-46D;^C$ESXacZ!)&XJhti#uq6) zY?#&66vKgEZe}YCRq6D&ne3-VuclEwEfh4{wgAD*^g>0TWl-+*IR84FjQ+s0kA=K6i^;th|!aQ!yFonW$LTj{Gf-5oWj z&o15FQFM0MehS0O|3Lp~zRSbOaNmHak*|GM#7sTI4fM${I2U+wq0_>Z^L@ATS4}*( z0b{U^x z;P$cavdud)zKQpAyq##e_e<%H zw|l!ACMNFt(NS`7|GHjX|4HULRvM|Tf!*}5#$fNbAq=O_QYs;eNTx7EvG^YboDPGB zhm|eBDa+tsAaWT5t)Ia2@Sm_8j$ui~a3wT)gy9U5nK|$vHTjb36#egSaIr>pN%BE` zcCds_HL}5shyhN}?1^K;boKCyFau#!am?n-vYUzlP3&>O97_1J4vqOaF27d!ByjlvGsg(Q2K9o-NZ2PSKk24bFj>~bgB8aqXJX%VGgh^RnW zv;9bDkOxQM{kg_%YY1_9$Ye^0foM>aUBH3h;*>CaSZj6cuMy8 zSVxamb-|!=NzP#1sXalt$17$HX3V%zG|pCZYo@emv-D`#8*zCG=@oN*Wb=PGF{`cqW(lt#X$?v=bVGnLAw5I;WU;-y_eKv z!#DjfW@w-z>2hf~g&JhUd13cEVz7ix;87sxB8h~+4D?@K{mtaW5t?SqpE@EbUWMB% z*oz{I@Ag`-{F%Xv;Z{Q;-vIs4yk%2ZyKPMz7 z@TBdeHE&PG`STd_v3pE4RXju!?jYRk>~-q5be_K3-0eF~Y&4x=H-|Eh?X+@quyk;Y z;kO`jx6?k1*yB^joG2Q!bV0!Pfir)F7#)(NI&PJm;p2Jh1TAQ%)Q;e!t#t4^-+jbx z^q}BOM7WYnGs4Kz!*qYmdb)HvCEFr~O5wacODfkTQ@Uc+DY`@w6s7b!Uy;f;qq4ly8Yvd8?bBUJJ-fNO z>#4~Sf^u`K{LC-kSa*k=p3VjmqgUC4$N7xF1Jh-_6sBw6!||r1#*51Kj`NsBaq%Rm zHH4>>7&9zZA3;YT4sUuO&T4w!)JENO)?DvqgYo)=8R3RkQIj0mtD?nH=;}HTFOQ6Xe%&fMS&!OjPq0}G=oxVo1Yspr5LA(@AbL|4|E~mI!5WX*v~8S|c655M z7lCJBB8kmDh3=ROk%-VAFQ)4zkCEE_@-%Xz58v?Z_*$ZDDeJ^$U+#|h=UE(&GGlCydjQ&B zT^~+ctgO{fdtqzVn)ZRS_~xBA<`-_>eHS(6H6_p1W;WH&zSF~w#Voy_FxB zrb4MffkVHM@!wqfS<)14Q$`-tyJ5t?U$kiV$OolspNxE1x$DQsjGCw^qaHP!-`!^2 zeC_YH$E^=Ov@QFTCEOIyxxHw%`14q^;{*eB{687gmO+?~F_2`Qv2)z&HT_CTvEvZ7 zmA{-q)A5&2HDx916Vwo5&MaM7Mt)S++^tE|hn9XmVz-qsOI&yJ@?Q6&$?)|{nU6OwJ4h5ZTjZ(xk>VNekqg4BD*fsA2o0jnv=DjQK zp*G_Qp`V1yXb--?5xu`dX+dA0Y=g;p8ubgzJ;7ct7r-U&C4mIu*~c7kF->?(R(C!8P7J58r|!ho04v*{rnaQU;~2|cz0 zPSwqMPp5T&;gosJbVdifY&RIAW7Q6m^Uj(O6`#O;Y2peZ=o3`kKZKC}6IhR!?M`8~ z!O-N$G|Kvq@ZiyysT5Hgd`;+jPVxB&=GOv*O_C#x`2kE;+UC&H zoBwQY<9lE(i=U;_(gbUWO<{Di_s|lWC(-F`0yp9Gn>xNt@XO7B&$!zNNm9!!Mp^?* z+0|RcIMe_Miyjo~vg^VB{@5Dbo;t|1IX9dcRR?p5Q;#rvYau3XK@)RrEy(6DrnA&F zAepfAG0Un30{S@)V5e$enRIUmTTcVwdt~=mV{2fRee!xXPXh_RTBox;HPGc)xXReK z8dgZY?lQ5i0E-0fQ=U^9j2|Up@(W5qc5mSqexMq-N5=gtuqgqf+tX_Vy~U6@X|TJ{ zuNXWS)87iu7lH9bs=p{*1uwihTSOWqFn>LaBQ*-hx#m|x1}UI*4@?j@%OT-$=R$Fs z9J1EDI4Ta5!vo_V@5EF&1Q$do#N9Gzgp_J=y$lpTUYCg5Wsn(LbW3a_2lr_OSz?YH zEQ3F66vxVedY&m1a}+?Ir70#u6_6fz@&_qVK-J43Z^&2$ggEYfC*r8U&-#7Vib^#W3#sstZC*5sdOt`3o{jz&92b;^e4729Q6U&YLtKrcx zMmv|Ngpw=4Q`!C+AgZV=cA5r8@J_2(L=9}oUbKfzXuyBrnz?MeE@kHFRy9*v3;UxV ztz#wEKwliP%xZw?bXUrf*1(*$9ae0q1{8f?B&mhOe_4ldnOM+Yy>Egp(EwwoE|1ie z)Wx=sTz_jcHI*vqE*m$KN_>aLO-_TT((nKM ze$SunmiEBiQ5&yNh#&uLPcN)Jkotole*W1W;y2)^U!)S3|Ms{2zvn;v*?vhg_}Ovdbfisxwm-8O;&#^SGcp??=W)g{2GIz+-dm1gO6%a) zkLZ57k_PY@=u)Xm)I-NO44~vXi1y|!W=iTH{LW!BU9$!V!eM7-*1?RK4Ii2QwQy$f zqW&zKTKHO=>BGvb0n2STvo*Eg(llW^E4BvG^N+n}X*5uRFLV8?z-R8zWENghocrTl z8%wQ$4Gy>a8*8dz$06kb6SE4iQTH$BnpMKxVGBY{Y$||LpL~eVDTP^)7Q6UnrLeYd zprvK7;%sV_fGB}gGo1226ON0rOu%_&^PT}Q(wc5?sa#knPo#~ zP+i3R?s^BE9+xC~a|i63`%y`;{Rp4)Z6`7gHNw+Xo%xKU2Jj#Dj-zYW0K-F;uF!p4 z4~4c9ujzW%gW2H^Ud%al+W2Sn)PU0f_js0H4Gh|TO~zu>K;L0y-_bw~<_q>B4fGfh zb*vT*m>a+5vM*?Wb5^v2&D20&oiyH94P{$Ky)w?Jf{2nY{kVQru*fj^8aKESUXK3q zncGtVbKD&tn#jt*Y-!189eU$L!QCSq(ssJM#D6vcq8E+Iv#B1f?jR#2VAP1iFB)Pap2HiJKvrJQD zz{NCW8YhEMuja2b<;g%VXXz)0?m~E~gPAt75L}-? z{y-PfR|z-2xH<`giec@K1wH~<2@JdEXvt45)gC_+&kCqtS7?pA4nlWbwWfJ~h2#HB zy+=>&0QR&Y+o+OOxHi8T(aM98EH{HJ(qys)T=nzft^xpPz z9ZnOp#$KplNE@Jii$OK3T?2+Qy2i4D@wlcp__1v?@V+lF%rxNk*X=#rv`XyryfV)u zr~;xdB?OtcRe)ty_+KW??q=)+zy~1PqH7(}X$2@Z5jmdZAS@oUy!`EL0c4SKMhTLR6?tTY0?G{L^b=bt zAlvEI8gaZF4jQg16SvBMI{Q$6($gq zzk>lwJgc3)zQwD131&Haz6GDtdl$H5yn(kk;au$BKt|RRKbN#O+WhMp{~DZQ4;oH0 zdIf9yfSxo97EPZ&ke>4%QtFE)F{F)<=`lAfd6wmX z;k|`-uMF%SRbS$*EraBr2+%T1weyRArWE>cFTYj|>DP9?;onee>#TsQ*48b-*Alon z+OSNZTLMAN7d3*P#nAd8bCPgdF}S?4+b`@_tgSo3nj)xbFn=!m8}saYXA{xjB8Z4L zoFOVvfy_nSE-F!Kx0{Sqf?2-rcrqA|-&~h)^0NYNp4)SeysdyOUER;fBn9+b?@*BY z6yWxFRVO(|0cKck#bXs5DZjFk&0vYCm=0 z?3L_6S9ijyIcHzdgF8SA!`eTA$$&$F6wOCiyE1FEj&(cSD5c#Zy4wKJoejmN4Iau7 zcqM-TmGk(=G|v`zfCZV}j<{mSXK!6uJqR{tHtDw4!Kv#9yjVFkkotP&L{@tZ++I_) zna$C_nltoNmP-vxmfv<_`)c6voWUcF)2dc8IDvl>EO+y6C|RcUzy z*9~#P#lLUye9ORkCBK%(EQ8w*0`~KHrEmy&06#|!i?A^8L)CC{0!FBr8oDCwX9(&` zfG%=6EeI}w(DcpO0;>|(QGU2l&{YgQI!~4h?TX>qk(n{Vt|EAPds&(=vj|##iyDO+ zi{N(HEkn`pA~?zsZxAJ`;Hrz^Gm)hV`d|r}poB9HA&#V<5~5z7TSksj!pZ0ayeOLj z9CJNxkWUrRp-U?y4=G@M?2KvR0y(f(^m7y!%Ykuc++p!XIc&$eE*>U_-7{9Ci!J4V zv*EWmT?TieCXO{-B?JGQ79Z15GB|(gz(!NH3~G<%4Te;#ALnm+K|mpRhgh72?gH2` z_;U{2EC8p|=ch_~@_~f}Kw^{++ap_UIp(|rEa&GP8{dIN+np{)zjs>P=fXqWar5_9 zBIy_Sy^T3Wc>aP1pMR=|?LQ&OV#zp)PcKMEl-{AJdbHz9Dd+(!xc-$w?SZApzo-Yg zVgEzP0jh5|SlXJFQ0ISxm~`(dDtv=IcwlIMe}T2E@5!`}U2rI@sfuRP1+K%RN75yq z;rYOOOX)W{p>3+)7W&3c$oPlWL}w$9eH}#V1hzv_YnTtQ=M!w%@~<<+unhul_%> zd_81hpy)2ChZbiOmF@ss!sczxLZ(w4oFs)|Ohz39xvbg598?FJk+3uO)B+wJeb&fY z7}VlGuv}^(;M&J!th+U!y7<$LRa65kVbW4odJWtdaj}8bsDZx3!RpdLKIOn9_9_kZ z!3B1V28Q8yv+^|H(=n}))u4f@Yw&~hN&`>*vUjj`@qNXW_Qvtm;NCSh%GkUb*oh@- z;~Q0AA%ADZwW)%3;j-P_yOm)5qBfYDRS7K*|Dl=GR)F0l4#lLg0$N41yC&*#D6*W> zX0oRoHchu1$rF_WW~q(5M`d8sUa^~(QU+*1QGz!*s|DB^>BEGl>jR0+y)&a+nfA_di`gPF6ya z?vB-@xe^YYd$6DUses`Vb|;hX6!0`U;1PLM0fz9pg50ElUC(~hk%0=BfB{4Qij$XTs)KkK<*Q2~h7bT20u(c-xmC!`I5Rs>p zaISskPf@lKUJkFy5gDm~xIQ~U%(3ImNJ`5DANa5k#4;XcIISLw8>QN!7rXcIXKtYS@_65-V&kf=$bG z3;4-uFmdzjnHrFGbnx0sVf)JmuKeIq_`G>T zD$loq! zg`^U;EnRVzSzimakG=)7;%guZWe;|&1_oSP-p%x^h1Wpq!(<%gMebTfQE%0@I?nW7H|P=9>| zTSwJiLi!8J{;C^8lYISy`(i(XH3C6e+Sflinxym3`y`+K@O^0;#3!X?(wRNQ70A}L8XBvs!FN!@P~(hhXstB;WE@ci z{s_0Yk}60+8OKCj0SC@6dcgIq1Sg~!CYlO(P(EtBNj&m%%%eQta>%L;ZZwG~2V@h8 zCf((5;HdEg9;X~0?|ZS4mr(}0w#88R>Qay#sC~n;DT8Ru{t^86QaID}qLLqhd8H~Q zSddx*Z?`|cDDW?VvYLP13d~9%5rsWLMKKukZW*f~qSi*l6^gF-KPMhPML^%qD5=7*heA>;rh_($rVBC8aj|K@Q9c})R>#@?(Y zS1BNFuIwW@Ujg;^?DfUw3h0x;#5@JuEqMZBwH#bVU-1>+m4ky$W~ew!4hV;$#H-|h zs!oa+2Kbx}+tP7#>UB5I?6hPZ4Os??-P?EIJP-0)8 z)rBRQ`Jh2yC$TL6gk7g4A^EW6@~(A~^nBRZCj?9Kp%oK^q%#k=hzlL<@*pd7>nF#+ zcaYh1#K6f0@kH&mpH4Y%q4D;Rdgq`VK-Bxh#q162xqyPKBnvQ%BY3f8uslZmuSs?} z7%e!x*Tkv<#@+dz!S$|$v$6WSxapNJYhkz@msbVvG*&x}?W@5i(_yl4LN%Pe=>5Z} zw;E7xUCJJ%0oBSecUZPHFmLCSES9JS{JV@(Snf5jc2oOdR%i`uYsp>Bx>f^WE3eLA zscK-{e4F7cdMyk^;gD%mr=6F&opsP3g=XEndbpcS%VnfA00ZehBee04es0tZH=pdh zK?`aDr%CeL)aDQHd_clDYDz17eIJ@fzIKlJAvFyiakO4|4?xLvvZ z5{2;to?dr5%-1i4+ej3I3B_=&bNeA7tr*l_`fV5Ti^2Nz!@(j>5j2J@oF!5quI%se zk7$YtFgnMPTa=K6IzG8g2?*oD$Q}g*1bp618Y2JQb1$C^SAf6AlwJ}P(0iaVjl8P> zTaRryWQ+nBAAXC({S`3zSh}}3Lk`G3lEiLu2t9kWTl`!G%pI#giVI~h0QFMSu@7rNd#IzlR`zOd; zZ01Pew!x^_6e zn#J^~1J7+a`OFiwFns5>7}mNPsM0mN&$6k30b}3huncRUFO9MvX&}^!-Nlk=paNwU z_7V*sjb6nz*TCyvcXzWX8n8u~j(uDMzevjz?{RlPLM ztpYn7C*zk@&?nDwgQ{Q|CKRq-6?Col*~|T>5~7VK#B;+d!3zapll2v_-BhaL4zC1$ zt*?nmb_H|?zujyyxdQqNdWP~W${~KE;X&THGRVk#f0yT32CK&0`Od2^g)YvqHr|&~ zNI*Que_09z=x6XZmf{6G`<>+Xs3G>-jnn+EYFPSshMvGt4Z*)GjRX_a(2V+v;6Vul zbVtMs)|G%CbBm{-v;^3C3o8ZG5|H>e$OOhEpn911UhoO^6D+5~zfn&)PooRp6vN98 zJvzedVpvtwv{pF07|!oVxGXFx0<;~Hgylt$y!u{?aCH%U&N0;!jV}T#m&`$;fp}k6 zy;_v2(&`tY7b8ymFx@T)iQVFZdew`-E(MQppdVy3bU~I{n z6!Mh<2$kwC`Hup0hUBG_Hx+>P*gG;3bsf|h$&>i{k7gCQTLFibwKS1S6>y^|atrE1^H)}r>lE;u zzOj_A*6 zpDQ5tUfN$|rUD*eLL(~_VEJs*9+Ikr?Bip0kZdKOE$2^KD`7DLIdYZ~Y>}3d@k(&l z#Q@Dz!c0wZrKn2@+XQQ_i(FK|_bL;LL`CouZ6;xIv37n7GD^S{bz5G2nbsG>6ZHY% zegl_N33K`_?J|~DL3qvJ0JfC|R@Pg$vMMwX11u;uWM zN6fTZFvJ1X;WdMU%atk2;5wLy1|e+^`XH|>?$c$>Am*-}P5asc;+k}g4zmf+r3s>X zx5CKtID`Eg;hQfKFS91_3chohp=khCHcmKABc$~KaI@w=c&Yt8;8ly~(bQky{>1Jq zdT0lf4Y~1L26^&2ljw4w(YJQ-T1&ypsCgj&X(?Pp{>qOog-Nc{ zxA3h?;R5bB-=Y*|A`s=bs^R;`51IUQHP~R;7g(vad`n=V2FLSvf&}R$aQud4gy2vK z9GSL*BTO%b{s@GH*2Pe>WK^v%qzL-#AknlUz+o{L85RM$88byH6|gO=_KCvrex`l0 zXs!xMrvG(YWUtcdDp{)@5U>Q6p1ZO0y zu)YweXk<#+|`C80L-ObEHB~*P#Jk zAwSbyR1ZthCS<;@1DqzWnF+N(?|8hAb+87Oj;fu)dS3(fXq*`Rs)mDGr=8+PS8DZg zlO+{kzwY4@o}vuUzBl1ND21e%o9FX=OQH95NfN(V4M0v4A>HVHl#!{zje-Gb6$n1%pB_!r_O z)ax&V7Xw=n?J8V>`oY>72vSn5IL)$$~z@1fmFd66e2`F zl)y$oR@8+0?eLUd(JQ5PJVbAmz}*xmPCSA9V9bt@iMx~#_i+!9%aq!2OGMtju`+)i zDN%yqv*>_C)E!U`*+uH0K7m4h;wJ?Z_n2QIbFuzxnfZ6(V~pqH-)@jk6d;qq3-X)- z&Sc(tl6Xl0QIYv?$m0sFk4_#{!2N*zrDTW#6mByc$N;P}2d~tVD-=*WWy}Y1p#owk zr5{LN)T6)6t0Pw`z&G5knB1v=!TsVh$@9oRkk^raD_~Ukmdj+00>TZlu8^-4a80)J z7}=}z>>v%C??3h}Grkt?(3+x|UA3UP zd;d8zwH9*!-m1sUr~?Mt?#!GzsNk-&Wrkw@zkh9~ZhSq|?lQWq>sAljrk(oA@NWRq z-Oql|THgcr-N;)ESp(oB3HtN(p^7H<_q}{*k+_$vsMlm>DyL zT&V<bA&0*x*ydOaHr*=&q}A4@8xXR0rQ zjmUc)+6%QhB~%sy!cQakw-8!<3TMDZe0%}}&#VwGFFAY)dJDk1b3D4K+;u2{-%t@&DBx%Wm%iFvsI7;(?5%|vzutFW)p)SiY^&Q0h zAfuc@bKxt+ZG%%vE;tUN4sd*$2Zz+>oJ?oS;0fxrPN#CUxXU&8H6VSN>yr5f{9Br4 zyGmX|3F=L*{;whY=Eg4~8R7xPvUt%_6)2JC^7GX281-nAta5m5mbQiP`UKf1h|}l3 zhjU*7taObUVBci%IOg6utv|xdss)S4rPElY7=LNM3R$`}5P$27D|?k?EKgZr@NuYz*Kvk0Vx zx6$W5@~@>Zt{CzVI0>H@L%sR)fx>@^K@SCVVRsQ^*m_3`zZC(ti(R`=Pz19ufG^xH zg1euhG#9oPY5P$w>_#2ugx@dWj3TXXm0*kh4H7!hAbdRajDx621)sQXo}xSzpl$9f z(je}7dSa*Om{<(8tmw80fe(gY|*mx9Ank(2R{@y1WL6 zypIa6<`d+i@k!ydY2!;bvmQ3q*6-7eMZKd!v6g972gJweQOxdIm~!L189Q2|^eu^3hG|~mk65zkuGE=yy7{()! z6&2(7VE~I3ATKQTDiTqUFTPZcAonV@dLnrc#})g>$aPA%?7MLdX{v->-`?ydX-dGd z^@@yBz*>}5#gi1U5&J_Dy%eC=-D{K7CWpR0O!0f{-#|k|oG*t??0XS6$YB-!6DP{y zwo|T0(!X+ud86koek6y-$O5caAj53Use z(%RF|Q=skRkTmDPXOG}JPWHJlD`v`7=bRikgyo5^DAo4wQIom>Wh5ol{~Msa3=ZWlyP9DAJ3?SyjSp5@ZwUw`IHMhEmm zgGu`1C)8q}9|4~L+g8mfE^Uy34S|$9A0h5cZaHQ6M_4#Id<)g36$A*pX)!I}^L2>< z{oQ-;L?A~0(G0=ZK&mqk`^d1+=qzi3zY*si{Lls2m>?L%jnMOK_I?Jp5!z6|V;pG& zGvpy4w}2mC?+&!}#IiC8yuMGbIMv?%aMMm+@K0oVOi z4@h&@=%&>}95!Y;>i58Vw^6?-&EG+67Jo(8w;tw&SeVo%eFtoBT9X~o3A3)Tr)BAX zhx*>xRuRYQUHV>+Z#7yR%*v|K`qq&bYe4bZU>)mH4MbnNcapWD z1_ZaR++ay+wE2>iuK|}^YpPfs8f_mct3ade`-obp0p8XUL-r*N^vV6~41A1!WfX~h zk=P(*TwMjhSQok9D*)R~lT5y1f57sw^Lf=}V1)#N*AI1pYv#u1$Eg8jl>6r$N}viG z&V>7lA$U>y1cf0%R0&`^br0W94O72~NAXW#U+#q{ zZ=R+M1|u=%Ayq8?Jt@y5tsM3>AL!w>SHNcG{I%S?N}Tb9k@)xf_`i66{aweWb%)a9(S8p!#6!ISA(2N&bN1Te?f zY5A?LRRi=+4lZEE*8ahXtD0dYHqJ0q4dBuTcqR4l`t8pFIIP(3hdh0kb3QV>01j3i{G$}Y5?7q5$ru0 zKv`ry+g=0MwpMMNT!m}5DF<>rtH2x!4>zY0`eUBsCRf60j2n|v6+nM=e2fWF?Oo^} zm_$^-RK!~*E)`IA#~{LlR{@FRE~lHQ%E9pJvlk|r<=Xyilh|_Tz0Le(5?Bs1{@qLR z#+O4FHe&KB$^hlrg*hla;{&6qtF@Wq@6_nLPV4Z9f4|RHmI@{5hq7@<=qF zUJBTzbd6u3283TSeu5h84~GBZ`=}w}vA#smSpw$}9|}W?VQz-_u#j2|8f>Q(NwB`7 zkS98TJk87cp=h)UF2_x#kk6Ice3kf30lE9#{v{I>5X5sZ7we!t*rAx6lqH8{_ygkg za^Tv8EjAr01EY*>6CtV)&Y*7y8w#PXjaK4a0Nm>~4s0k}@(Y;Jd@c7NG^8fe4DAl9f_Fp#Vrs5`y^WIA6)(kwp!(xIIA z(b%tr`kb(`2t+8v3qA234V?tkZMUObBQhxh&OaYaMCRD9g8gd==x^;q0wStZK>@~7 z!YdW%{T%2gdW<;8WmcqUn@Za+o3K&^cm8cn5_zit+tywtpq~3rBO1?U2$|nbEEjbv zwf%1i=!ebmt)-C9kbfX;Pduvxw7G_m;YzLUpXjI5@*i>@`s`D()+CCR;JRn%D$+s; z)d>by$!z4EPNC_EsORFtXNgJZkD-4{zQF!1<$(R$tgC(8Q||S0JHE@{xl%b-<-0XE_i@JghGj+a_B}u zK53{N5C#+`^~#`a$T4}+cNv5itZPj|D%0n$n*J@*_P<;_B!le@_v}r5uwRwsIq%{) znYKP&0zeshkE2l@;K}H@qm5Pndo7s%IjM%n{GWE@z6+uL-_L4K zMsG0bs_#d`6MYH>Q~Eg)Oew*TNU1yx!E}>SxtUUiorc1RkkTzBVb};p<>lboDw$ye zLNzoqW*Bpt z$edThbaOjkcqa3ZrCklnGva{JHOb-O<6p2BWIA!v({x6Kyy&-#aOP$ISqo;h#95$9 zW7wv@=)XzoEULHBovd;kuswq&?o2*1wK+_GZ~IGAywsPY-T}^Go9scH6HHg@0|v)} zvj>|QL{4@KFg*3&S}p$O1J9>AleTwQvjeFE&m_}_POgdcaH%yo=1aHYERXQibK+d) zWm~y1J8h0GlwIaNNPRgnxF+1M znQHPx<2rgzM?ZhMGw-F@v@y|}^#U!N`S1LvjZ5gz3vzK5D3hm6xVgFi`aoyl`Z8jF zxgCAt0802-i$dT!ilTU3m>07NZ*m^Vs3sS(lf=J`-my9nH%mC=rUMX%9uX6 z_P-Te-n#jD9bKpnv)GyDJY$dS;MDkf3#%EC?mh?lok`CgV!e|!E5Q8ZIa!LO?IYHl zEtgLww!5&VcCZHSi_=S{yIMI9a`%c3ICaHr$T0VX?0M&FPyHnsGJNhi_Wblq{WkG2EB&uk9Mg zOs=5@ZZzbdcUv{~6yN#(EZd?tdh!)o;U32LO9uHtZu11n1jdBxUioW%mFJ5y8YiSh z9)}h^F#{b)5E`*hYD&T~%1Cwck ztgvIBb5Ky9tm|myWO$x)czEEYe#@<#1!bHglj|?(hgrFp3k)LN11}G}WaTDLlx^R#P-&EXldRX0GzQT6Jw{=F8cEp#u}<8V;TGarvB(+?S%3z`v$cvOI?EoP0QG+P$F;U*38Q z{;qT*R-Tshck;Z#GrGiHnd-cm?j?0o4Kn%?;X3AqSIjPN(ro?_w?R~cNaCOW9otVQn z11C&d_%6WbUcwjaAlI3Tl$U+(-`qBG{mPk(%WHieKK(K>`0z}>I`ajO^0ti%xjJH4 z%OaB}WevA?JnOe~JVs@QBHXrq!srb_2bX@iyC5Nb^XNSdGnbWR$eyQX{j=};hh;=R z^$5DH%>m;)|1!IH+w?G-4HmPOm&smd@vi*|gCKnNzlaF_@6WpBoTKsCmJI8t`FQ~* zFMVH+e=sIyTiy!y9$t=<<=qn}ZU$OT;pfi1cK7t1n=41nRKN4*jysnhy=uabv-umt z$IWe+wR%e3!ood`2QR*-1UU{YlSTN9zjC-a$Zh6%#ThR5+JyWy9tRhxQf%*E_qw&# z=ZT>B?zQ{3Hs4ye^oKy5W%=OFiCgPeO%awUu06Pa=hlXeyM-0CwkBq8^CxY+vbeH! z`^2XWvo|fUQB=ibKYTvq?WTP{7FQETEG%{A1m_Fb?3gX5?^XOW>d2!pxL(T!yP`(Bl1YW{Teoh_;5R!BeJno_!?`-H^1bKT z$zG`&w+&vNIDgT@$G?2rs+@mJ5C4!wgo2d%OP85-`1o7 z@Xe94)?XfY(aOTiaZHqRT&>ad?v&w+#`If|ZT|Ic>Z_5XB9HE$*<2git>~yi;F@pE?#8WRe?q1ULK2d z&p$Is^D5Sr%MFswod5jiJLml8|NnD_`p=@4Bd^_m_27X=ZhX7AJ^Ad~I8nunwCzij zOXu7#(;XDwKYZykv(Dzsc(3Brrr1T#%{qQ=)b)xUVp-MFuCrrp;zN~tdX~NLfdLop zl*v8Eo+snJ{Kevqbz`3pbge!A;dq&*a^}m!mv5T&*IdoXO4Xjr%eQr|pVTP(P}_TX z#f~HE^Iv*%`ePTjzp&@#INq;B`MP1xuiRI3j=ywOm2qqHsw32f!rx3NF-c~=_{q8r zfx&2bRQQIk+Hx)FcJGAwYOQD2cWW+nZk+lz*~hKD-@Sb8$i_#m9{PB}jqiTLNqM~l zy%T0@&nw3s8ZW+Y^U=Rf>UuTB{rA%BpVvO~sd4RyH(oFAIWc9zoDr`*IAO)fW2*wdPDCgYm497Jm*5je;(+qdSt^} zTjyW6S2uF@Nu{Ct-B&N%?fvV|?}VWz^3W?fxFK?fh`j#qRgtDgS4F%jt!Sil0*b;Y)ZYOi$ZmS2n12 ze`B<@eg0p+zPk6bacef^O+Pa`^ZG}hO};XE=KQa8^{Y<(?2p%v|6{@R=}T|jxcW!V zux+_>PR@c;f;PwHZ+qh2&M)F7w!DW@nT+4Ua{k(T!xr#5e1%UXZdC1sMZV*$Cvq({ zYC6}+MGXG5C*_`Ibh-aO_^Wj(ww3RX{@+Va6Qjtq#VbG9nulH*Lyp~`-gkU9AJ?2Z zle_cUzFC#rPW_}Wf6>#@S-W=LbCzG~TdhM6Ok16|Qn^w;`X4I~Jef~Y7W4SAq zFEu`C(#%G0mDzpM$a`9IM2|aH_5AXP;pI&9(u9L?>6bA2;3`gfLOPt;jA0oV2dV@5 zCtVM$iy6gM1AS>2mMVb*C~l>VN$%_Gdpv&(C+=n+yiasY{(YQeC>btc>1mi!!HLH> z?P+6E&~dmmh;v$eHuQ_T)+d18LnJxqs+1RmXF(my9S)-qhDOGci6Z9xFPU2LFRE9Kr<0W^^W@x80Nt z9TE?xTD%)S1jEWoI3)-BPWOIx54_>H6i!Lcf+Mku5;$#%*&V5+U->>xmCwb7Cqn;t zU1H)F(0zPI>fFTaI5_Tv(>^o}TbepPyCYMa<`{})#Uy6K!5Ig$OX8<2W(# z$)mA&H=GGSdN_99h{Pj(r%O`f(}!lKa^f!a)u$vEfoS?*1UTUf{-noc-n>u9$w+YO zO-73@eJm$Ed0b3JiqopIJ54rMy+P+Pj^k9pdEiV-g41UqZIqvs1k9;!tHJ1?d}eE7 zz1?Bf8yU`f^){=^q0_tSL%SgP_t@+%v&~xX^4SB@k*EZx%VBP21tb|;>}H1!G5X=+ zfG5`A0tUpLVzF6`KC98`thei33@wS$IbD7=5K}B^HZV=GI%hM>GzrZouV!^g!mQ%$vh;&ZzX{Od%&BH8ae&=`p~=-HLI$F}w^<997I2pCsT3it~6y zc|1`@&^64F%t>&X1t&cQO{i4(F_qhSHYPJ66NeHS1}GSX9VbS72gdEh@behH2SWg{ z(yFoy^c7X)*G-`klUThYhMAGQ7vmnr@EbAsVR$n}B04RhwWSSS2J62<4*>kv{nTj4 z6QUXt9!3o6w*3j*?p_T4dLxE+#UZ1HgFS*`o=_mD;qi*5@Zgid(u(-JQXWrGCGFr!oBSUl?cF-L8x{y^f-yihgl^sARu4*+^%E_D<)n zD8~0+#_$tgVBkd#Mq_>ny^_>$EKHLGgblOMIu0!J#^HV!*q|IRdo8c7{IYS8+^K%P2|aW5~y@U!p5 z;#bZfQ1ma34GA6qZKDIfg9eSH4jvS(VXRxbG47RC{M4Q}{M>i3{!p2Vz*xVw2SO!; z`Xj(#nPk9r?EtVg{ML?my!T?9AFL}XSO|6SU`hQeF@t&j$r$d9D;WOwtwZpSzK-{U zhP+8SU||ULhe7>O%C7bd;EOZ3C#K>TFAu>Fo*n{lg(Tz1fJ5m(jie49E_6R(P>=l@ z<8GUSpF5I>zp^?JU?UIgL{>&pe;C$3KcZ||4EB}pG48@!7~Xy$2|s!rfk!@|Mc|Rt z9|q@Sj!WQVhVF_CYF9k>4>97$R?xSh3FQe zO9x4q4%n@3ikd$uD+ry=#iGCl=yw(`Jkg6pj>ZwDLjz^gxr&P-Z4PR1~= zR0t}`QEM1DX|qv?9O`>N^>(fg6!uXt{Wbqj21FT%&IQjwNVkj5KH6Z<&(XsJ3zy9S zSwLG3WhNauhYuwXcAw7Suz3-v$LMgvqY^|F6z22t`8lW`YkP2GeqnxL&U{WrGNDk+ zP(8>z`N`;fpa6Y*gq$FVTKJ1T(+Q%85H}JMf@ma48)=$Y9MbMZ#PUFUS#2eA58t#D zx?M&PUIO~TPg+QIDYU^oLDYDGCY~&_P;RYMS)>-oJ!FN_MOv%PGt6RAJ=5DLv#>Nu zWG5{O$|zN~%9?DADn8FCE3IrI1ucA1C1hxYPBUqdxU@56#n9FY*IvEA!One6LX{;u+Oq3gOBuBD2n-Y%-M6 zcDb~m53*B({3Hb%q%ESVQZx?zJ^`7{T6Lw6q3 z5{;jate{|w3=R5wx0Ks_<#R_v%8qkW^KANJf67z60~#tugoLD-?E8AoRx;inl0w zio6CXt$}bzu1&;ov z9*ntT;4u$rkLEWEDHWLvWg2!aM9!74I2cr1YSkvMPF)GH0Ddvk@f^i($|Aj#^1-|V z9~TW6hyNGzMqA-u8zR@4KwGpigf;MXzS60LKXN|sJ)}h`guks2D_;NDM_FH75Qmge zC8YF)@&>(>UAv;{7&b2><1B2<2etk=VU2}3EA~MQ54c8?u;#%!9=s0SwV2absOEw8 zjzHVp^Os34aMCdyWh?`2cWvFZ%3(~DCfE;d7h|okCs444|9`}nfXNY2Uad;lfbd~2hWW{?-*-bt9pn(C zl%il(r?g!hz<&ZTaus+_0m)QYTe5kSdW|t8N}>o#X5^_dnpriAt91^QP< z_b1&yWUl~ICQoGahq3g_t7ZB#TG66t{ZI@LkOSzvVpV~M_J1i++QjxRFQbhX)BHj9 zqoEL+b*fsT!Nc0yD6VDui&_8c5kQdtq3$J!kbDEgIs*MmiLn02vf%!xh9;Qx2Wls^ z9BMUjlK~NDR0ZsH1?*+~9Ugy-y$T-q8l2-LU}%AbhC-4UOJ@Y^moWCz^>&c`HpEI9 zE5vraMZ!b#6wMc;zoZ80eLDUbe@l_ni1B7~e6XK{J~V%$m_UyTkYKTb?iB97Dnx}n zj>co_RH6#u31H4K@yh5M5w9qg#ZX@hq4tn8LB7|@*1m)q^%n;EGvm!Xl<2pY9z-$J z=xASU5yBj_`twQ<3???B=NXKt5PgKaDO4Xi$b;vP2I&*f0p>sAuSMPm)j^J)KnoNa z{D2a*b#xG-2O+`!q?euwxm%+ax9X%Ko?3wF**e4oT|p$eVm=RZGP3MC$2_;um8ZAc i^XP{>S?oicEaveJ{8|b8R?ffiALoDImqls_1^-_K9MvHJ literal 0 HcmV?d00001 diff --git a/Data/2_Silver_Processed/Options_Market_Data/2026-04-09/IWM_options_2026-04-09.parquet b/Data/2_Silver_Processed/Options_Market_Data/2026-04-09/IWM_options_2026-04-09.parquet new file mode 100644 index 0000000000000000000000000000000000000000..026697421dbc8228a2e685bc016d6e2d6c38321c GIT binary patch literal 54992 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 Pr(0#&( zv!A)=ZY>G-n7FfIrpKh+yTeaR`t*zTAKtF6mu{YX;Owx?d0)0|*gWN{hZi@$^AC4x zGlucOpnCUNp6{OU9@Ci@@$}s_{pZ~KeCfM$yT%O-{5I&)2h+~PcK>kt_i4jFoN+08 zHH1Nd4IR!4r<-m)g74AGJ@& zA6I57v~n<&4_WavHp?h@HbK$D)~7s6VRz?w^Fr~pOO=Zp^|Gzr&V!TM@?A$3crS6E zRI_!q=gf|+zC9PpuKD_;2m6%xZ7T3trrJ~Evs`_+%V$N#qj)nga5$2W z=G=Y1*7EG0iM&1nr?xqK!dVb1(TGDV*AreN7DOY;7ZQ)X%Y8q4U*a}%U<%2a$$ zE}L$#fEEe{TEM5m7xbQRIy|rdd^pX*H$6CBE)FP zSaC=vz_*-XA{JHENSCRBC&i8-%r{-FQp@mt9N)zy)rfqn zX=5)$3EuD(ih9De>H)XSg*gp!HzPc5j9}-4BDkjtBEVVw%BUbO)t!hmvwH)uxUP$R zE(TJi^A0rM4^aq@>uR#Agf-s)AYvCpq<}Is^h+HAg<73o7foxzK;L1;vyxQ$gD(3W z7rRT>b*jv4XL1kIKa!NfH>rl>F*TZ7hM=t(9}^XDENY39x|DX~MX6wjg1D=-#0w$0 zLJc$nzb$A64}JigQGzkA(F_XA>tmW}hBFK%Av6LGzE)K$?8o!tCoptLN`FaI71Buq zfy>14qGl2YKYKinFhd8|?PRnHcVNsHNH9y3q?1I#MPl*4S%^WWGhrgc)uEty@I)!S z8w5XCqZR@-k^)I7rJa3^3JbUaU#%C=En^`~^bu)DeqIYr^8z7Q%(|K(8=2j}JSm)5 z0s3lr>@LXX#&Y_-F5Zzw|FE*0v;xApVKf2Q&;Zyd zQj(`mS;Q(&3HCPA?aGNlTw76f(a$p=tX+C=b84(1U-($Z$5+yh0qP_IT?NvUM6a8* z5>4AJpoWrm2JOb@J$CKrN{XDd zM%~Q7PtWU){zE7)x}MhskfRyb9=ga=bq&BSc44HGIDo=FrwQV{YI-GFor~>s z-7luUYY`WO-U{-3WPIV6<`GNDN>M5 zwUEkts|skQ9~17p7DO(&RIk8-^1akj;-OZM?j`s>?E)X(Nt7#8I`9Um`9eDf+58Pn zp5?XTrh>+)3m1pF$T?#sKQX1V;`B2VcGc8O%VmGiNCDqdx;U-UGk^q6_J-sRjl8CKX}z z+*DX4ZK_H}3mCxBm15xOf@GD6S|!0&7sP{&=G%y<gP zmb%AaH_=#={{V=mcYg%_y`ms0k;Wt_ArIU(iz*pzs|_;{e3^#mYC=@NcJs0j)QO7e zXblWuT_9xMP7N*T3pLAO;CESXRVls1&~NsYd4>NDugp!fNG58b73`jf z+)A?RTu{QBP|H?G`{}$=as{c?qgY7Vja9e=Q9~YJ z?&rwA#CBfg)evhaW{wS3l`q0^v0aRQ&T5!j12Dku>MpVek(;9ju0O}G5`V9xfak`ac>{ZZ=5bz~~;kIE&OqnAX4OrZt%Rt#ELnnEA zZz+ycRU!GGmF2V_`~I&<##SdVMqaX@942Zqfuq{{S~@mVl8bveU|BGN<<%ZlLYmkQ zqEOY>0K1?P0f9H=l2+%F#jcDWi$c=};7jIt-Yr?4(w zg}9eN1l2s2JtrDFE*M~_r7Li2gqGo=8`+{RrdzZn00JVw%`d_szNfBWYjLi zP(XTl6g$wAAk2u1L;3V&ASTOJLrwasTIpRCOjHQ40S1ERlR$Z~82D#7alxGq`nI%c+F4<`si;UfkD`$9Y-gA^3kE zoi2Is>`G6m5HP5c+(zlW(;CtV6p1{>P+h09$nSU)Nf+)02~}0XL=o?%bYxfu0__^& zJP~l4vkF&6L4@j zH`a=WSP84 ziU5J2l!o3ktQAsiLK7pi~*yOQ0P$mGEK)%#MOs61@l4c@R%b@4DPon07 zWPn6?(jEPBdVoh>DDH_BxqBOM%=)M+gUU}6WmO+IgmAv6m{E}$7uV{)q9UhH;qS_S zq9XrYYDPsquzO-<_5UhVq~0xadfWdF5IMTgb6RuSQm8k5Xm3cJq}1Bekyn@(Y6(bI7Hqo zpXLyC8z4yk`!&{${X36OTQMN?RLCL=?1BK$41%x#p5VbIV*6x>1)FW1ZSv$Bz6s>f6jy*Ky6ULcbl&`m36M;~yDo;=3ch_db>Txl^JScikyE z$UC7k-F%1eUbnWR^x8EXx_x0bCUO z^k&8RRBu6CMp^=Q?o3*e-_G;tDPcFy4^18A{D1edN89?1qu+aYVdGo#Ik)nxMNY%Y zvzK~rC?B&t=-E)*^Ke_6+Vk}GrS`|KENBFT^e;4oVN3C!`37Y=AM?W_PAqT~%Ycp; zj?&|Vs}lojD)5#(dCbj{#-+#uo5wDd$6m-jqbWVBC>!7%?_c4$E^XN5A-|Xahpc_-KLKrrhmohHaYoF}L9FE_M9qcj)%P9`Ahp;#rUUqoN4UsQ^SWLz?_P zzVhy=pUwjTxlBey&uBSd>oxbv(3GUJvop%3uQWdIHsitw-0ZkK@k_5+Kh1vbRnS%v zA)kG-VwQZ)o*l1mcD&bF4?rZQdH6@~KX2Rk(Y#-8*1a`Yfnz8Wc;?RtqbDPr~gF^nT5V-XuFM#IB zpLKcZXn>nDSV2P8a#(_^3Ib zp3`lbC@phTe6O38T(d5@=6l_+iqh!~hV#0u#-K@EKc3eOH_d+h&e99I9HXKpCG4W^ znA?yk4{u!5J$$;iaM{F2BqFtBq-8kL#=36@P!;gP!(caQ+e|FY= zLD5~^k}<}O^JI5*cc!3$M^5q#v@P9t!%`akj{T{*ZG5_IyjJYBdS1Q?`ly~DEo?U!I$_LFjpO)w) z;IFyUFXj)n;&&IkSEL+E`0Gg%`ufUW=(>%JDEIm3scxY6^R7K!k98%JOt$WyKhjO> z(<|Grqf=*0`0~-Drw??`zcSoCfBm*DKXAre|6gwDg5Nvx?AX9|-AtL)cBQyometg3k6rN3RPV-|LPK?pvRh zdr3EShJ5nnxJ$Y@8bzGfrXO_cYCm_4x;(y?4jKYr6kM z-Ft^M@obO7n-CxYqM?Tn0tzB3C@3m6&Qe7bMQqq9f}nsXsMv#`qJpBLVn=MKsMy6C z6zL`OA|h3~0)irm7x zd$;WR+TV3BN@YX&ff;phAxrkD%dL7akSThxHmC{C%s5M9$TfkJa;+2js~J9dQ@=L2 zQt$6`x$_I8JpFO$h*3LieRS;3Z{1EX&+eVjakIgpQA?2T!&90Or)pVV}PA z!M4D4g1Wo?P^p%f!%+AG$;oY}pZ%tjbIaD8aF`@b2FCwEH{^B*GQK@O`SLfgLr2XK zj~XCKf-fELK!OLo5LIh-q}EJ^Of*(_XRM%1%1H1*gS;uZuS1TWbzE=Oal^rDV=`Ql zU!Ppunmo5PSwMbtTxGS5txCp9@^c3BE0AfD@}$VZDGlcXa(=>u=Z&$4$96*OQUOl=457wJEX zYQKO~(k{ji#a1{tZJnIVh6b487e;GxZU(J&D|bu`X@tPSyn~#C22hdIvj&X!Fa7*w zRy9bP1ONKTeOH!$t^oPP`(ocGmVmc=0sr-Vy<+MW5 z)N)uqNw+%bc`4j`Hq|eqp%NxwoXHmlKEjumPkZ!osvs`y-5mRK)sWDB@OkMcq(?W_ zeiakdz*fO>co{9~tkc^zzWS>4{J{~3I|*W{f(+5o$LZIsL0*#b-1BR8)Ww19F3 z_g1BA8$9=%Uo}4KE0{(2{9>nm1@gH{h-YvI*#0_QXXV`uQ=hN3%B1%|X0pc-ZR79g zhBlv$AhacF>PO{Hp=M){W|0H#R_5&*r|VyW3#cwGT@cf9-_S zL43F?!9N;VdGJE%!3#{1_aG7}9c>U#GzRIH${?L`B>VcQp8+|5uX5zNZzg8iAyVXO zq_(F#euAdmhz1YEe)uYN%YB1y4+Io$ozy(71>SkfJigJ@4t;hM{4yBope z$%3#~x9MuF5Pg+H92x^1Qx`|OGj?FMZi_BVesTHQQ zTAtR?_zIOz=Sc0m)CHOne$xT>SByQKS>Fl%2dLi<(3~2gIyIyl+V;MV8Q1s=4yW5M zesH`SD!-jf@mu&4uGChpI5zz!tT~*wrt)zQklG>Ga{Z8>Cft5~({G5OEGN(Wga}D_ zvV-lcO%7bE5Ap|VQeQIur<3C(<6=BHUo!5;lIJDkok#KpU99P<6#n+Y06pl2VWW68 zN06hscddUz(fr_XcXtzHH1*u*-!R|zGHv$upRhXZUgBfqf9=uU`^!FmhTF&K zcNRP=gYq=1<;z1qfPCdyZM9J!K+jUy=kT>EIQa7LOi^+b*c1wu(2}Yk?cLNd!=6rnm=LLnL`a{i#kB# zIvC7d&{D3#jB8MZ3I|u35_d$I81?dG;ecQpTe1^|1O@cJo zu)W}1C4)>N_20{{=>(0J=l7moK#(@-D+BXvrVY~BNu;5q-G`GmB=sIW*gqr50eY%5 zNQZ}zQzh~P2B8U7s`P4BAm2zrEA-$veYL&2xd_f&Y>as!^#SQnum6!bb&x(i_uKT` zT6mq)XS(u8HDs&IxFSleg5}8@c6e|64DXt@ZK!|R02_~YM7AToYJ{hrbB=6;{n@j0 z#um0hpO^NwBi}o~+4fk)$bc{K_8KKvwSkdW+>dds9dPq-=5lRTJDAM5?K14{H#m@H zsrDf98!VaUmjB^I4~!T;V!`+k$d?A`!}$vLNEvcpcfZ5w$uGcy-mjP) z@Dc*1X1Yd=7QvGJ(+uv0iGXwK_qg_;B$(&0FEC9n70ioeRK1?O1E(40xd}tx!!noP zy?TORAv?A=a(MVz#Id7*p1&H9jjL_>?whaLlhk;g%dL?6t^aSgeUSdI-9nX zgWc_wGPd+GnCjsezBHr?p2}*z4bZKItG@Hr?GLYnJh|muqsCA0NN!}D&6O&stvpes zu@LVco$h+`Y%O%@M{Wr^SqD${yp+C8uY)OO8@PU)dI-8uJVG?)GpJQ8yEJTb1NBzm+YvPV3+$%z+q&!!-z4%u2ds}+t$6+GS9qBpeeUCg zuV8rBX75?K4u}o=9B@>pZd|s z9rAB@%1w&o+SSx==-@b2A-}s&^hSPg9McE+9)sLXp>at&R2NW)N|3V19adTW9OS3J z!7za1-}0~tm=e0&2RRpF_f630f-_g&T)gf49k?YM`xyl&H!gX*EGViQE^xD$$17>% z{QJt&?koR-I=YdVZqx%&Uq-)YeC&ps{!TyY?{~x6+#$i5nLRL7Ve7iOIF#$Z7wSxs zLB1`aJMC~`kbW@+$A8ObZUeWW5l&PdOcQQy0-2~Uc2|Bkz-Wnl@EOEq%XlmI)dQOx z-oA269o*cf_#{}e&3vM(Xegmz4&RxiQRs+9J&dLAgSqD+a_wvrA)xx!Q+Qq^lwZNq1{cILA z!O_GCvR8sXgRFIX%`)8v=qUdWkj15rmZx8qezq@Ik&jPz)fWCJ@OkCiaT(S$&m1Y~>PwoUGiTw3zP_8r` zpi83hgYu5?Ae|aT{*uT&y5#M6O0G~MHFzyn?z^}Hcp_3Fw}*`CTsoOUrc3ZliEQWJ zx9lx^jq=XMt0xoQf!6YrWAd!`AZ2>Gal1nX1l*oqHGfeCIPp%_dFJGRwA;f&k1TWH z`k~D;KSt%l2bY`6RqYBud$yeYqvz!ivE)cqTuC|H@t=PD#hOZ3Trhv`%qbtCM|eTr z!lxQ~^)9~1FRubm_n{AkJF6k_PEE~2lTUC?Qm-nYuiZG7{~VX3O`cBGRmJvx%Xc)m zQ4PPO#{|lZse>QI`JYa%t%YT?FGIR>9cV74^!R!h^SEG|U*cz|DyvSI@x1|3B=SuQ zM1G{?fEFMn^tcIbTRa&S(}VJSo0V_WMbxKbMlsG>qP+LwcckdUS6JF(NV~eK6U2@B zx3X7tz`k^otfstnXiZYIUN){Bnj+(S4lb>O)sGdl5KyzxW2;)p85w z55dqy62{R3hew!Ho3wt1=kj;`l-Krx=SNk8E)^QN1GSeE4u4=kPwE4bVjD#aQqZ1W zJ-$kc9MHRD$<^!cJT6`)MNY}HR(3E|9ON(3gL13}xlJP1DwEZy#Xs>KG02yOksl@3 z6Um;Xl-{jMnoHy4#Pyrh4BLoO%&O7^cVNXtJqLux+CXWjFDFX-=rixl~o_6;6L_-Z!McIymnu+8}tVG=p8>7wfNp|uwl|6@z%>9sR8##BlqRzS3}gV8yeMaRp54a$JmBHB~UwbY#yunEreb1 zG52>%gAFf^SqCo30PCy+ef01wxVUZJ!@D_RnA7t1kZ4>UlqF{P&5kLA)JwW6TPK&m z5EmHd$f|}b1>8~oKR&{~iB&%y9;pH~@owJ8-cJBm*Sz@sv>GClu76!zSOwPU@iS6} zRRe7vZKTgKC^h4vevVM&2C;CFcV*JsP>po5A~^r{YW9v@h- zSfLK+tJt&0)zrZ-O0BN1hb{ibS3g#N26C5Ev36(!jHz^LoHzb6(Df`Av@L0Xu*u!K z+=Cl|zG1Ch)`up@yg>=7Ex?f3SQ=r`3i}SsyXPj;2JTx=^{-jd3Th>99X`0W!y>`s zPg~U5A-nlS-zl38_~U)-@v!l@4^!D+u*#` z54byNPJnt}H<&+;m-7Ab9kRFF99jGH8_X)uYJFPX1Ir|Qx(6C}%?e$Z*$XPW<2~nf z{)Xcc`LquT2lat?tE7_^7yBWmJ}p=EVIM>;F;{$;$RJ-2ley|XN(w`=TH?r-BVP{6 zeFJjdQ1XOi9s)z2$uC98l1HMFCz+?nyOHy$WY|js|%j!bcz-|`UZl*cG){l)AZ+q4meXp$#=D2 z)Tf?3d0jV57^zitHsw2fNkOq=<2TqYq4S;aR!90=|Fdu4({wxZ{?c~1Et+2uKkp0Z zj?$?fson{XCG$?mcT~@Nq<#4gn?j$@)!*6;gd{dm2l&r=E~v_GhhKYFrMC!b0j+>j zR8+-(U+)?ahL`@E74UziO4hrs$aM{u{{PQ<7i9ok=$fh(^!N3yzgYqQrvdQ)mBVwa z^xtfMH_4ApYYwzTLWT7u|kWRpHd4slN$L+_)Cm)|- zq*yCEW9%!&f;r=}trs{<`WQNB%4`0cvCz?yZG+2LuL4w@W{rBRvcO?j$UFrTet-h{ z$@=Hc7@sB_YCi7#)dTX|8f&Ap2ArAOEGQe_lTqWHJ+2ikUa`5pXo<_deFy&+kLLe* zk*hfRFZ0~RXFN{3o;u@sZe#IZ3sHC0gd9aPU_xRBjGy`sV{(&Z;Vgw{>QB)>uuq-`ZLorM3MTsmi`mR-oiOsO%dQXj0ohZ2@B;^YmnBPDGu+QmhQ1#iD|gAR8Zh*oXW=1$hPGhJ+BbET_L!wb z7k7M3QopqGTi!nww>nBFkL73fXu)fT>so>^7xY+elnP-_?a>KUv^N{J?=O?xVF$Ff z_Y4ag);kQnj>{L+EY!c)qcYy$v&p+z<3(s1Ectp#Y=KmMK$iTEw02ALQI{8n<4o zWtML@dd;kLGTCdOOQMVNvWNixo?{V{J;U6OO#PDP?lGgcM|UeJQ+DKEoRx7kOK;=c zb)9-q^X;dMIJs!qwh^cP>8C7N&GIDnFs|N~+fPuKUNY94)3b9X4F7dh_auy>{N$PAqG_ z9DZ8vfx`7O>zRuwz@J%-K_gf+^cIn2pl=S7h(~yVa2(+@!gYk52zwC%5#}LKW?9|{_YtTN$afKf z5RM|0BHTov>{iDjEJUD8jn*S@5h!mhO9UQ*8M}jUK--rScwWV3G8l9gi#UuIrtB$< zb2rcwsau3*AGw+Mw`4c|Sy5IXU-|gwAcueM3^ZMuN!5G>KD3g}RHU&tFwkmGkqr!q zX(b!e-DpP)Zl+ko6o-^>dXIQzz4nmBOZ9oJg=whAT7=t=ksV3gF(Qbq zcszwwzk>OGu#FuKFwmaJi%4fPjV3b)G2SW1JCtRe83Gk_+nVhd@q@>n1t@|Rer~=F{XT-%IJ_I2&5@Td;7m2~%QcO3( z^D@k{9M5TJBt*GsQ$F<}cx{J(Hd8F9ae~(rDpQ#dI`J7zWNXDSB%-TcH860CFNt2RQ(6Nhgp@qn>`O}3iI(tJ|Dx;mB z35SL3XY;29_4w1QnToo0QN|c;SWb0}^CSO`;rLQxw=}|7iiqG%BE-)WrDhJ{PYyJF zhAa0%t?Ao)@D`~+&~_&iO4ezd;WpuXi{sYmO8O4xr*9+bQ;!%ptt*YTymsj17-O$w zf}<c1U8o@7U&R!hDm!Jjbk+wYv$F8wMb=~^E`>hkbQ?Qfr(Ekp%RwDwg_Q* zht=GOyle$mb?mQtDPFNXBCt55=dENvwPaSO%zb??LzF9Ti z`GIHNEsqwpyDOe=>1b9Jm9Tk}T?nSJE^$QTjaP+e*a%TL^QBPw1WhM{%{T2OIFrJi zO=u}chRrUXSvKA?`}~X$HHUK3bw%+j->Kodc+=dH!xVMx6$oR(ZWe|M7HYidTXXnw zt@@Es6Bpjee-g2L@`i=4gXM47R}3Lch%Bs_Y=jm;uZULEP1(QEWlQ7q%zDxOf+5tlcx4>6 zadNBH%b-2-b(fo;NXdkAr}<@Fc`8M)iEg6w11)B*!dTjqgX;p+l?DxNbP4E5`@ZCMZ{0O ziN847wLOMy)Kz0+(Rl0P=}>i*l;un*GKovLiLe_8f@k8!h@mnQ#xACGL?DblPpBwx z-1n;ygdfqU6jCiiI6Y!;LZuO<%(r_m3&ks?HxJRa3^&*~{QV)dac)_08?Trgxm&Z; z_<;KgS>ET}G)}0ltx%KZWnDcS_j3p}@k}PvuDB~`5uQYh623yy1pE7euB{3|th-u% zSz4INl`(%yTdI3Cjnv)18Ln}y?zN%5;zjE-PWASuj8?ubl$mgS&h81`#gDcrubq2g z+P2~eYlgbs(~|dZeWtii<_MSY>tb+pY!wIsk%Q1dhgZTyL=aLk3f%c#*eq6#LL(EW zk3IF@QnW)q8uayO?3*36n%M1Cc6o$IX3?anl~T=8G6dJu58WRJeys#S%CiX}Ug7v8 zh*y5h-fJE*r(=TYb7)o;!Hz~hI73D(Q`tLz^h^_l%)JXOod{Ddosc6$5gOw?#e~ou zQGD+(kM=LfSBYhAr7^))=Lz+(QDbA~yU&ifHaU86bx~o{f;euhed1H;@WPu5U+BfJ z>u$ccXF_PTh*o8*GulMXZQp%&8FZ&5L_)=orXvO;Ox#30`&v(9+j+G{yACCU8U&Fn zQe=_}qbPfy7>|r0Mw7R+#(Ydq~H2rwkdreCtb>xcc`)HMHEi%3?>zELmlS z?Ghs`8nSR2ni2U^_&1)wk9XN0p|L#0sIj>yrG!iKt4P}j(g-Neq3|{!_c8HENl+9U8-<{XFdBj4AF&8lC=pRYG{xyxAibv? z>TD1mv(qW(3Y5BTqUkZ(lH>g>b~Q4yYGR#)cihK_f%h3QEY?P3+)YF>GK_Gx8N*(I zr6Z96P9XElz?_q?R7!;5qEy3Up-dx-MV-Y&ij93hu*FRC@MwzZ;V7(7obM@Ke?e|b z$(@vA(seuzMfT;5c@8L2oWCErYU^;83DQ*#%3@~3DkB}@fDxBbs)MZl2(q@D$hKr1 z6j3n2zy%oK6u%oiw2UygGx9=;$BEg_66y1fkv|dZ5R9yy^56=S@X8Wo>4rmCUZ`W~N~YzYbe5`0Ls>|U5@^^c%&ftDBo?{^VFm)l+_xc|MmTR|C)t3d z0$)&p`8tgZB#gEQ?+pdn zqXE_GDZX?Mra!`C8*3{Ar5;L(=P;}pEEXeAo5ds&u_$GuM2W~N#z!$yGQJDNVyY`C zY2h6{n}&~}%;=EHz`9bssYA&wh*U1bHX{`7e4DThs9vE$bz|6@p{O;CW4kb7R-w4v z%qAJPt?}eN_Dxy@4L$wRh_?>yjD}^{Y4MmXaU}}lm#L5g=|*D4oYk1uJfaFwK*%WI zvoKhJQ9Gk?E~e@uj^#U`)xU2Tc9;R9ToFr{ja}M~xWmL2)y21$s$pUW)>;Oo`1x3+ zTMo_y$3aNMpd_n}>C3Qbn^`j%60|*m-$7}P-Uz5kvM&*Y(L5wWOE9`3KI@K2D5BlP z2A~>}l1CRK7~?ys;Yn!#Yw;c>9KXWGk7RE{UkfhA4Ixn2W)chVlTR5{VJA_TK{ciw zzKw$dw;i@12bCrvDotDzyg7)f19||Z9N8mK$`qx)PC&SX`Ilp!Ie1RJlhPBYVNV4f z?ZsXTV@DJBu)36h>V)@?8(l`FO9v%gNx&E4E2eQ!Noc|2bi{Hg#P%VG2Wf7sVL0y1 zB(&fb7Nl)N5|l`P3DaU7s6bU5?Cv;;Mnz%VE7ocTrMyVg4-CtL_`<;+V4^h7B;F$K zKEpyf@SGYe*Ae9KnsSUCjXIJa=1;ftlizB;~_80e+qFA>F)*vyCx42ih90drGN zEX2-M#4g;#Ho^AOAr@h^C~_DgIffA_Sjsj`Ka6Q?Ed48Qbitl>#k|8%vB3|ZXlxKBQ}VVQ0!3@R@R3FMF;v89f4ufXSc8u*z`TbM zE+bHiU^0RZf-c^t^!PK_HoLL;s8BdmlkLSc{Mb7<3IUU;_MjBC<(Rw^&*$R#LDatR zTTxHS#?ek;7{v%SBT$(82?sz79xotZPNXYLVjqGbf&f3g6ORPDov=45C3LdI_`Sxc zXau23orV>skVFS7Ma>{^iSHOa2xAF3Bh5h}{C`^sgc&K%;N!!Tm6?-bOto$;&9 zPvcrL5fQZ$D2!b9`Mlr+{qab3LuLe>{eEl>lq5?64XTc(7@zR-$5G8aN+x-~bl6({K z?rnAu+Oe|(U1w(u;55Lb9ic}A%bw$fGJK_(+b2X7eiEaV9v z2PVTV7}JmQ(piKFRe9f=#0OszaUX*~ImDqN&mk1BD>mXeC0M*b+VAbaB_6jW;iyFK zIc!LZmgch>7!o(;U98g#O8qxdr{+y`uqC<3`pt+F4qiyEIFfmyLf<%~KE{%H6%m_b z^b~`=V>Wa-#`ne{-Wnh;WKwwPi|Cw$6yHi2)$px^GD;Cl@O~fWx5YkM zf;E@JG);s)g!1f09P7ZhP5ZsWo3Giw=o)|6L?xe1c|5g+sRHV5}6eV+eb4RbLltN0 z91B&NZJZaXJdae|r?S9t{yx#Jr0l|*;yaU>M2&FKc5ROyWumd{B!-gL= z&JWW)N-7=HJK^Yba4@QmfBwOdmxM}(46Z~v9U3KPfZpIYV)E?<;u$;qOK6|}w!9ah zFh1SjMDqA7)7q>FVr$)O)53-B*%M259%B>b97hq2X3UWxWOT6ht_(bLr2K;^kp4qiTC&L$EHCc3ph$|h#~E)dQGnvJca z@@2h+=4uKa?D?jus#Gu@4+kgvGY=PPD*Pk#uoM-M$Ccphr%AP{;Dio0=ER~!k^nu@ zk5!jU+PwMDlGRJ;7^R11qPBF8#~IakOXU?fLK=f9EM|D$e5|(IH?do7#m4lB>MJ*w zElOV*RDVs~)^0F7F?Yy3X&Dsh5KRavLJ#++Q?TVOAED~WB@YaHqP+5;>$Ot1@Qp>$ z?p0xzl^L>xf4)0iNIOHwTc<><(Q}ZIl8y>?TI5mcEVIbq^aW`t&l4y0oISCLYzY|! zLPStCm;bM289_0(*YtEO-+I{a(wp43%4 zzPuVabf+QZsx}zA=fE{EagBPQiuojh<`X>O$fToXr6he#f=B+8$@}*y zA2}KP-c7RLcl5MH-9O#e>J%jIYio?C=){M51{eHFE4t^MT%57lgZ9TbL2A-!mu)BK zO6{y>6Cc-jN1j@~djfADV(~v$0+p{~$R3|3O`p$Ep@+{07ANk#u(f8X+r{Zki8r`@ zDvPBq$#ET>+06KB_^}xwOmKQy)2V`EjexTd^ zfakLm=u-LL;Ue8-x|Gg$aIT?wNL}p)jluxH=zt7fH%IzVJJjty5KAz>!uDxzy=kRwQ1@z`2i>_9=90>; zQl;q3lU@&u&?a~l?v^NR-2maL6QgC?>!GV&x>S}~2Vt?~C1z<2{24RGLC&rUh+mC` zstJ{_LTdR4uE7U5k~j4h&#?qnY^oTgB`g3-)&yTL%Z1C|crUDVQi1%w{l`q>w-9W8 zY~(B#5j?2KUuP#w0=>|gnlpv(Adz-S+m?6_BK`G+R>Cw$nLYWS1(5|Ewx5pykqgZk zYqtr6d2q|hZ@(r{3_ax&X445esaIUH09}lrh%x^M&K3awzS<=^(F5))D{Q5R@34Qu zo3m0xH{4>yevu-&pvoQ_Uf2npkJp}J5S_pnwp7Frc7R&AeKUjT0D~XXRHTLNASqY) z6=uf2zd;aR;fV9$c{Jk7;CtEz-_ttyo|eJ#n+MBn8YoZL2vgjQ%%zD&5DxiPFHJN+ z+Vf`-GQ?*Xx_0+OS)v{mOAx9Kwm0dUFww~O!W-5;lxU!CeXb#ksDUwD#0+#&+LXL( zryNlQbH8jgkQ1Ww((33rs=`mOshYG?BPxNInsr*8sDO1Z15a>;<0`8U1l`v5*Bbc0=mdy^EW3&P&$uV;jIf=q$&PKIMA93MHWgfX=P`m_$wrJuCJ zv}qcAX|Hy0UFbBDNd5}Xt-FhfXJ5b^D@IFegS$IVHPE=|EEu6%OpkAYyHOrtQsHf&wnhM46RQJ3ZU#|#^SFaLk_2q;6mt~fM!aNWjh$Xch#o%N0 z-VDNWVd^#XRPxF}BTl6dGBO+5_oXkiaLfX;@kjeC95X>cJt)e68{CEsmN6M%obxHv zQkVg;n-@;B5N3g&sqiUDW`hbfz=b)G<1b|n!d%c%nEpc`5<^N?=m-Ik4}0w1?9w6% z!0i0bB0fPcm zNTGxbaur3mgi_>&5z{8og>(|hqYDZURz=LHvdXWBsnsh+pt|gXJ)~ z@aMod6*j{PGtO~oAv(Rza6Kq1tb;KVcf_a?pI|1E0aV!F$nhl&T%sI`%(aec5M@9n zy+6bgmcV{rq}0M<$kCWzt|=@698K|jvJhNVH>?rF=qbi%# z7GxIKT@dP9ax&rL(id%(Rq60GIbPi=CLQj+*mlcGlm^GA(j2VQQenD^bg#821?r}m zwAeVlhusdvaWmuI!k6I1E_RVg5ZdllYnLX1jL9D=qD4=@-s0(LMqdZ?yj^pP==%cv zO%p1JgfEcsdx#B<^F>lF!@mi5>O(>q{3dwqG554|5Yk<@#B0)S4Ui-7l9myFhSyMe zTPD9A5?a(-W&Ggh*@1# z5cYg1DYv2uKKTT=%js9af>XnesPaF-M&_b*YFQs)(SZsD^}-4;GYZO6kNW_boYd!B z>v9O)DSoJtRtolMvNJUOi(yIbtgo6bMeyA9Lo9!8A=oWaw$^ek0HZtmleN$Y{&~!6 z55dJecwPCsLy#thPVM{++DtK&ZnbF#{~WL>C`%{xvH^Q%r-e!uP99%d`y;D_G?+ypnoAnQEy);f-JU8L|JK4(;F=G=ZcU~_{;?H*tjIK& zym8YTtC%#P8DF%pa!Chdx78$(JxF)aXg%^=wT!SH=E|??QWc`}VT4S(8u1aF=ZAQ6 zMdgrOFvdfJECV@VhXRi*g+TgQrlzPEUfx}upeZVXs!&S?xl(pqZBh&?(vL)t!fg276qH5kWJ~Ceg?}dOMuK4Jm;sqz z(%)I?WWZEi`yE!ybTCEsWNnrPwSAO8kp_+?IiIW>Q^4W6oUP5A6o|!so@wwFu-i7% z!heCCV;@(_wgtv6Z#m51G{JD6pzYFE8(_=id7GKsTKHZpTFeqvqm$D4H!PiM2)JOo zOwP0l7H?qts5*Xvw@3)p%qqdQyI7=V_YoAc@@mz?KS1AI<{$MnAE30o%U;8)41zOy zerULq!nkoFb6!^oL^gV;Xx=Rbg^lrtHG7I+`p8!s_~#4Zz`kV#e2kCw6+cUBSph5@ zV)Q^OAsz;v5)~sNqK@WP>NR zp@n~zL{73u%LIR0?*ShA=ToD82n;*sdYj@kHCg>dgPk;K=*cy9AMoB34* z@Vw13K#NlVkq;AYXo>QneXM$imSa9p!(AZGgZy79C4zP_jNfWBOj{_1MGlB*7n-szljIb@1r%YdhwOS}0GiGGNKnfa~~0 z#&UsG@Y@MC$f=++^KjJ^HS!}Emtp}rAK}7;*hlJxAHdr5c?dVU99m8Doixx{f4S!9 z6pi>&7`wR8g(oV3L)z|Nc#Xv{bB6U5&B7v3y+n86KPrRTVs zC`I{|?_UT*+}6rzB@}?)$Ls}KWB~-#4V4jKaEp1jc1;yj<-weuYr6$Oc`)R%eYSwe zgPTdF3feJZ;0Fh-1jk%S{lFy`F61Zmf=dn*D4z-WW)1AWW^ zH4SvO-T5#(LIa)nQj$N{@_LHl_tWEAnlZ&NXW<4me|!;OF0bnfC!gx_ zIYr=BeE2fou@EZXjY!ps%!fnsXvTu}Jh(feE=1s;2cpQLI|Ac8u=A~{6I6)dd*014 z+Wul#x2|lNwt*NH2I`%Lo*X#576*7t4w!wrjgd8SpdR%R(j^;icH}!)7G}U+l#gwk z--Ann<`dcxX|nW;WdqHPLAuFX450@~k>u0Uru0K}@<^(}LV5;`91w^5!Ipj9l_>rL znrCMIA$s~iW?ZivJ^3f>c}ni3JNLl&DCIV~(hpE;-R~=Ps2fUOK&909EH)Cr4T9^1xn?t}+#S}!s_cR=s%buSs=9q{P)m@(2A z9D!m3v^ihk6Dn}@mo2bB?)fW5awCNOVU3kJ{u$aeSMQMFe+HFKi(HxW_0S+)I#af; z4rWbIbC9j51Meln>SeoXA>(#{0`pld{6uk_=~)ZUuN6fyztq6%S{2-zrUt$sA!CiL zfdte~S$nG?t$A@Si&+iRZk^SU3$Fs(C*OXn^n8Lt3Dr%ik(JQkv|^E3>qpS2aaLDP zu7Kw#mvf($!_oCt@42Ssa7Z@FL1RrB*pApt=Q)-_Hf`?|USA1}LdMV2D*?s64I?z8 ziop>-Of#nlu6}wwgl}8~bC2IW!(UMdO%I|=`F#Ztt?r_&6B7Mmf{GH5X9&yb5(W@cMh!aWW`d(qCj@7P$HhOS6c{gx5pP zPq6IE03phYmKfy5bLbv7T6 z5yJ~Z{Yly`Vz8HO>F0|IfIRTClTQ4Az_e_CDPcE6BfpRmb^)axF@)d1I?m~#ELjIG zOTC@s$SOFda?DlLZE zM>z9Eh0s_Q-^))cfVAr?s62t&Ht45b$hU~hgqg`vc9sxr08N?h+sMgq93ab?Atu@ya10~k;&5(X2 zzJ0+rD1@=Yw7dBE1wc%E?4!ji0A2ZLk=EIK$hVtaujQ5x4td8`2;%cV=Kh3z0>3=) zG(4Ll_#=k7D}Nel`-#z+aEP0>mKcs_?y&>^Trft(lbo6ZEM!ciN;cr<=xK!&z}Wqp zVztup!E>9SLd!oNT6e-kL1P~1`?vTBBJ?|s2rGs?3y&lfl6NKXp6`!utoug-uoSxJ9l%X1KI(*Z2@EUyO|6OK7+&8Q~GTKTomfRl}V__;06n(GB?%2UYy5ZF>B!b zpVpajj#Z%KS^h`WzY<2H`mA>3Blzq(CRQ{42xA=VE!0CRptN+vE%iF&dukq&xI;cb zB93!zXgO5GX31!X%b@0X?OYAFGAQscxv!B`3PdHH#j`C1C4c53UVaG}UhTWeb1s3l z5fOPj6?7{9pg31^aWQB=K6pa2wFnG$hbL-2D1rw+pH1R_D}?f&yVvor7Q)E~3LE)n z3t{)mC3pDdh4A#AR0IEW0WccE4Yc+a0II|8S_TDxYI2fRbUxUha1v|n&4_z*#W-puj5+rY~rGDbUCR+o_PGlJ9FV-+LqVwGDk8`Mylk%ufXY^dx(3y~$ce9Ajgx?-N z>MQ~?VdEct6-&cRxQ6p?mOdGf7=j$Z1)cM!cgk8lONTBhFtvXMEMsnRv=nDRU%0%i zC7B83BW^vF5!HhiPOmUUwG#YiR-qFiB~a*8fyfWc}O zpN-lp*p!DVPFTL6M+`xy5BCUOBi)GA+)7X)B1K^~LZWSd#;GIG;p1XTuW| z6D;Dg06*8&VtN*APWY2+5tRw+&Tc(#xgrB}(kxh3PtqX_=dY|v(@pqe+C zi2n*}M}}Nsv^GKlD*DnjpCxjn3Vaxhu*6ryskxt!3~M`Ig4rGT8F&iH(Lo z>Q$N-S83Rn!LloYSdH3J&`Qox;hB~~bAy8ouek&skFP$>^C^J>?wu>VWhF3u=$9NG zw?r~dd6mVmvopa_)2SGatc=~RsZgD8gd)J{#8l1mMR0b8SdKrb2rfSUFqYqs zathAx@h=y`l+E=I`KE=?_kD8}zr6qiW2b!Ke<*;w+8>j&drwavt^8z+>(E*Ika1ES%34xl(u2YYiQ{XpWrbUJ$S(WHMi zQ1c;VX%_518aB$}cou}C0&Ag{1%f|k<1I2WffDmA4KjgJdo1fP_#4inSO#UlvEk$6 zEv+*ErM^sw&q(i>bwrQ5_89+?~F@#O<=NAqPvL3=0a+fp7TG$hgGt@EF zP;v#g_j9R|%vW$Z<$&ttMopb!81pjIhF?(##eOfud}bl+?L9R`%c}qs5{}N*vMYer z_L4PP`UQZ~b$hjX@?p}v&1qT~1StAS>Q^nNd{BFuhdTnJ{#Wj3BKVRAO&vSV3FhPh zmp|g3U~C?4EBNWPKrIh$pVes=6pG;s^MU7KBL<~U2bXG(7K7PZYj15O zv4qY;MK0j1ay*pg0ME2*9$A@uh141;&;^ zk1Sqi0*cc^EKM`PEiZ73<*5wtN;>@7(jWsW>xaL#icJF)*A`npPX!%>~PPW=C2 zpIn`H3jeY1%U=t_w)|jgC40jpYvsAqX*McOb1ZCB7q1AmQCsGdWTQU1uu7V}TBx|6 zS_$5-;Ti3^Uqi{0&|MpIY(MY+xEgHvzie#l()pf>Ysz9%OTu!ofv!^OS0ZC=aEn_f z>CyAA#%7F;f3!CQBb>&*8#1GZgM0Pz6%Q*tFf%!<5=SjwFA{G$H0p6FwN@N>Idkmg z_8J@X2Ys79PQ=j7GEP>(IHPHLSHd+$dlGvjyV?HFexBi$gL}OE%SN_YR`X_jFC17A z&Q+Y#t}Hz|&e7EdcL$y?ZS?zm%{;Yh(M~vi2o=s)I=fKXLi(nQ*y3eSu%qScz*w>6 zsecJ&x`t}F`BXg9Mx~>)uu(fT`*RPU3dc5hNd|B^S3fT%Npmd)&>Z0^EG%bLEaVB6P=OKc1+)_FJ}kmZxMX_q_k6 zsBt~@Cs#Z6mKh&1TIzyLYSZ8Ozq{Q-+F`u*J;`D_Kps_=CpUqsAoDMo;QmJHe(5$^?UrVebTDS%yRc} z2Udi=1_zIUCoxWN7DthGIo&O6MVOh}ynpO5dq@(5R4&QDK0Gkp%zdRK66vk#|6!xq ze?}r*;I#DG$t7-QuAN%GsqEV6)q6FrN4p`QVuIR47 z;wDGqEi%dq4nsbcsa)JvSu$&tEuS(DF}>WNyrc7=oN!m~%@b;S)Z%7anA3QTQ}$+< zNw$(Th>aV8tFbJTj8#YCCmxEr(l#BJWY5l;>OCEoWRG4uO)bfu+q7=*OF5pzhzr|$ zN5x$}L@mai-9Gx(&0Eh$-@fy_cXa&yjHzSpJTBip=5Av1^D*~c_4bZQNRpdoc>g_b zhv9?t(V3MGvL>~(J`~%IX?t{L{_;CJi&wQcE-&?*t^DMi_xexkKa9-_y;xzH*QQdr zdxsr3pQL{=TeN@7muJlVHW)y zJfEiVDL(|h?~tsP1k)c2uHbAP`!YX~N^_hSN$#zw~gqNl%Kajc3E!^_BG5)RWk4N%3!W@%EIW;~Rth2$sdrx*#=CWiihs*S`e0&9cMP5q58 zFvYsbQiW7C_xBGaq-hH6{rwCYizKQbde4 z!7zTyA_&?zh3@|T(X9F04Zgqo`=w|!)$@*W1dl4zzi%s5?*pChX5baZdnbtVBS;}Z ztm5pm!An(!MxXLTf-4i??&aa@s;Wn*DvY3W*#Um8{sCSa0#~nb4fGg6%)!?W+>r^` z=Ige>=dUC=%*@&Bx5i_W&o*zrwX6L%dAoZIcDOO|0ta*N+uw1llS_;0^~e`{Jl51QW^hx9Ru@7tqH^oRBpEK20xE&ejWhMc#=u^@s_^JvT6A2lP#=o_#DjoBv-KD8Lq3K)eGx?JU1G(|W<0lyzn;IEU;r`1x zVzY)JI*AafbjrGogNNyAr4MNuG8+1b-q=C^`j)|d8Yn)LrWQ`qZ>8zKrcp1Dnzh7% zOa1-VBD*I3y+paedjCf^50w3urj|j|@1^T!(D_^@YAK$ctNby1#$RWYeFjRZ-iZI6?9 zwfwyH#BDn>p0T5Gw;RFI-L}W}w10N|(_=@GBE$jS4LTJT-s`uLM?tbmbWHSs_rsJ;nUVT;ds_Ip>JmZ&_QKgTAHu1}1 zQjG10VnW2%ibGo$Q)y9*rH~c|8~OR`OMZ=~JLUCK2K$f2$oq@JFZ;qb`_z!V;b3Li z)GaHN@q;h;`A#kAcsXPF_W8)W9~J(3OSnA*`@t^4S4556KR@!-FQNT-Y8YO){X9{` z0N*(i`O}i{!*4AL@4i6Y!SS)=MKSj1{)>QRx>J z{2#jHsSj6aYCnJ6yJmcIMfly17KQJ87g3-5#iw5Q>?f~-A-BH%nQ#2~rB}a*hUBTo zNA+YD2Kk^7c_kzK`!|ciZ(l{oPv93RJpDC*oPJq3Lh{t(Lt^e?ST9#24f_2yg#kNx1(S#x(zB4~WH6kB{}?S^i~^@9jr!Tf&`R zoe{qGcZ6gvbF9C@!{tPO7)<@s$?y#BH7WAu1>yVu1h_w*0XY6QmQh2V`fv@WaQ-vI zQL-DkeNFh+&z6O^UR(xL{&UBO%2OYXIt`4FQ;I>~w15`iX^e{$r3~zP}WCWl6a6#@T1Ns_fj;aDd@C_N;%i9A>iv)aCTvlJNU`$K({b zfA2{+RD};k?)>^JoS7?6^z=?u@2~vlV>hEss8tT1Gx50Z^rO$Le)%gGR-^0|j(ixa z1*r7)X0)TXYcM_PD~zJBw%)8+)#v68GiX}q;PPRoX?CkMT-X`5dt-N?YqVVJhv}W6W!<{4>OrT)R|u?2KUutBWyd3j%?QX)x4Qb^@;a}xXW%HM19c=XL&$`H z2#;xYPqoUU2L?|TnbpHQ=!_n~^VrnyV4i`aj6JKlc~JjY0QfOY4CMn4=nw-)P??8$ zlS@8IJzvMb19HOwXpa#;kacIx36Jd`J7HibBzQ!Jc*0OnNAOS%@r0pfWdx7tA3I@S z)-Lj(GkO5fbxyzAxa6aJ*4K{mnB4FQLi1fOj~_lKAjIPaj2FN}IQaz(xvTAa9l52JMl$hAhrSmN# zei$>9B%>wzO{1L|Xg6|~VQd2LZ8P2&RWqsmidwRAP2{KbH05w#jVBw1vI{t*X~KIm zTj&~zQeBfXBCJQ=c120Txrb{D)H35 zBlobX#Ozu*CDv5QLfl+C)zsVNRy9ra8fYL7>RCZM$)JOLnA%L^KFn+aJohy<->)gK zH?fp$g5D1Qwyu=>S|&BDC^5#rQ^x%p8(9nXs9HC(d5~w9>Juif);=6n)MC8Al^WmSZEa~4?`)76{Xau%Gb~@VE$ph4!%(v=VvmYpL9y&3fNvv6q1IL9~q24FYo-h zr?uxJGh6Bz@#NIE(BDGjOxac08X1`A!+=fP1vHi0w2f*k(;@UJ+l5m;^v zv6*i?%x=Ee<9)toblkJ-SUJo{NEYODSXZ*Zb`$4Z4#{IFTT_yC#D}vO;*;g?(~wbz z8p4n*3-%T5gZZ|vtEJ?;I5=|t>BUA5&q`e`*9|2#)YScXaS}Q&%&wJoYFbBx)G1J7 zICb0cY7}dt#t(a@TJC9cYZGoxSe}D=G1X^#!Jn%hnM3`N)zulXigjA248BF{?JHPQ zLA^cJl#FO3a#(9YO?U`%@(r`I&uZnY1@H5t>X@Fraq!ED4z{LsW-B+@Y?0yCjXczo zP*=OPs%Dv;0zHed-rj1i!@R9#opl;AwgS_+@b(7YH^>%r7JD1;HV5qkiDCP2y_kl6 zLBuwqg!jaT`;A@fHM-b_WQ)*NNIAUE;QcmoO7G)U$IAuCg^cZ%@~g zLrSIcdDc_?=fx99ra0@ak4)q1p=o*~0IArf! zVftfx2e0lU)!KcOLV?Rf7}YGsVhZNA36H&NkwP9MpV2d=)%-a-Fk`j$kn zH5kVxu(dFSLLn!n>9(tXhUriHZIAw4oNCpwQqOE>M2u667nDD<1N}bre`aqPxpMpM z)cByk0c+^|J&E9>0%R8@w{%^ph3^rf39L645->R}RMursYIfibAKhtD&Zs^ER3(DKVeo!lEg z6_m%70pcI$7t#74I`A zzGJV?FRZNg^n>SzwZTQR*Skm`@~k=!aaP&m9rzpxd<^FU{9E|*`GtiYQi}Z-0MgGT literal 0 HcmV?d00001 diff --git a/Data/2_Silver_Processed/Options_Market_Data/2026-04-09/QQQ_options_2026-04-09.parquet b/Data/2_Silver_Processed/Options_Market_Data/2026-04-09/QQQ_options_2026-04-09.parquet new file mode 100644 index 0000000000000000000000000000000000000000..7ec0eb656b4b9c690f179b31f498ad08c58800cf GIT binary patch literal 91487 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%0Dq5>pJ)`qdyhq$|v!NAL57~Zqo5=5o!#370l zcI;p@{f2>dkK+J)O&3*4Vihv>*hN_Ev%}a$d%1NoAvFZNMa|40d!iZ$W@3Sgb5Iat_uT6z6`;dvqQ1m z{vb$AW3b3U7@^^ulx$~>!jd#kAnb3!3RiY;Fc8ZM0-TNm)6S_yxh$u~>BaV6jYBMJc=28NBKabXvLsZGj_b zZJ(neaz#D6K?d;-4Bt9u!{5+qInMNZI>-eAN^Ur{>gG$DhOMb)uHBjVVy7|icV!LLM$>e!-K$iuI3 z+G4gXPMgM#O-^-Xg@d&YY~N^62D>{La6yApW61NGN_J{EaEieiHv+-!>zV~=?BaoV z-)*i5W50_457+u3TQdN<)D|ErCTd{kJ3yPnMucfI*bqNaI-92fQki{FyA_1phXjLl zs$gv^`%Vo!W(0xIs1W&tW)cEI?x(URD`@`zo@P$eDjVdH6cNI}VM2vkP^}RvEZ~H`XFzpSjnKx)`;Dw{)^#VdR zo~bdcvoe(lux;h-pBS9TVavi2Q8 z3K_UK))qF{+ge;mti)NwJhhok6M=n(3L)#-5>-GhMAeZ>sC!j_ApJ4Hfo%wo7MhY9Fv_=pZ_@-Px;Y(83 z7c4xRkv5H(JSijbFt&Y%0I^x|ps#N%&S@M4{7*;VoE^e&h`XVf(>Vlvb?T@j65yUh zI0eW48VdN9-ii#;NgifKoTJLv6#<~AwOnaN{Ay%uf}bdi?3Bld*yI7=T7s`4i_Pl~ z!u{4)luL}QWH1kvtd$BxE%wQ&Bz?dg6L0X)HL96yRw`PFnLJFyu2e#!7dk_C?z>Y7 z=()p{C}7AG3K=`rSqn?+l+DRS0PN@A-> zV)GmzFfHMrO`lMZsRw$znKK^F-yums7>U}N68 zr;zF#8EJ6OBDdV@$X$@?eh$9bpzlddE39nUdtefz>Ford z`F=dGe>GlF$qpG0iq(o?Fu%arC#9w)v8z)+FrySGMoB7|+J7wATQeF)V%Hd)G8ux< zoUCYIXN|=PnK58O+GpBawrwO>eeZKjy*vs#tQrZPOiP9$9vhmP#!8b!>EvrGj*P%A zLq{w~XAcdBR`wW%VlWk(KtYrX&owxB6j?S2ZyDT7;SJG@=F=z%mPV05%|Z#JOx)h`TEZ zR>(-B7!TV)IN!uzEGdU#ku?|65E84{uhp>C25KnC%0QU#0Fdd+08trPQj^X)28c?C zO0E;L*P+d!Uc!Fv1KMQ!EReA&-ZjO<3nXmv)W)#H z6XO1@5^{3c12lJsVC?LPePerofu*kK&vX$NAgI7Gx@(JtXS#9{&Ya!g2!(VIyV|!{ z*cY0U4nXUL6t?rejY7tnSV8hFAl4#x6+Rr45TgZzwJ}hnv(s90N?`g5gpC0^%}Z?9 zotNcl7NkC>o?MsL3CT@)vnjck(@Gxhuq4mKO2~U1q`iT>+7U)tsUdp{NqZ+(iO2^) z5O_{X2I~>?q1GVYwk3qobHyWZv zh69BjVZhBqo@7HZ7 zJygK+lV8P_po;@(s8O;{M}gs|K2LREH;jgMYQ|_=+3*xlrq5(3O2b!BJoB%h`wm+8 zr1F9A9+C1aOLjvr4rv$YUS=O=L;5S~S#KW@>6s_wXn;HP-P;*b)kVaS%l5_A#2CW% zqE+r-249#$p30N(4O{MjuS`H|gNc}WVih}L0_^C3F+hC&2&}L_5t94+NbEmOx1f?O z7z(LfI}C>YLIN4Cx;9iyn)bIcqF#b z8v;%pQmYbT*Hn|j+9_eImUxI$h=-zuebIA^C3~g^q86fvQpuAftcQy@Or9bkOD<%< z52diBj;TuWr9Ec~N-Np1oyAF{lOm1mv`?23JA~1frCJBp)i$aS7u_s2R1Ezw5obZM zN{DfkkQgX3*x?KsZ{;#Ec~irYXK@g%Ns- zc`r}5AY?%Uo5mVQ z#Az3biKTlp^qC{p3$lofeXf+)V1li<5SkrEWKd@r20OZQq_a33DNL@iB0F=^*rASK zkB1|6=_*o^V*50qyg|xlbQe{U3-Syx+tOW}VXv|vE~zTEgF;)zdiTQdlY5E^h%86Q zdb?=}J0F(=L`=fY#AC7whS-6ev4^4V4cS)7RpzW&A4L`!Xdh;WKf_Sr$|__l{D56F zbag}wcv%)FDq-W|;05X*%GkBKs5H6Ij4erovYr2YODlVIj3SFwCU0?I<40*r*`h?S zD}6Z5|Cz`YL32q*5?NEp{xAd;BtXU6_H6tdZ4D72;P>p33sm}=`}L8$`|yzAWy+#i@ef?O;Nck5&yQx zGdd9~d73?&(L2?Z-R2D<_Vk9m;k=-}*WF+}1)k^&QDVJsDT@}m0h1*#)2u}gIBK|* zGcGV8na;SK#X14OGmZ*soU<(1CP#%5JA|3AOS))Cy%SUAb(UVQLB6$nMC60H?#iHIo6m ziy^lu!~y{UvC2h&*9tj>(55O`dm9)z8*vFD)fi%8RgWut47~xU2A6)=DzX-V%=(Vi{5jafWU>!$>!|h)T(BIcLwR+%UZ-7R(O8 zxe}Bj9r2Zy;E~1)j>RJq$YumZSyH}lhy|bi2ogKUIU$?k3v<(rV{A=)2?jukjZ|{Nv`dxdHT<|37>AXZ{A8=OdZ+zcMhj z`+xCwLCSTas1yV1RduX$?{y-}C?beVqRqLq8I_{8UWFeIq3Rb!3?pe%KO&1FPPAE2 zh70U0QDoX|>opB?o%|gCzxtKYdf{d+q{rahCh^=l+nq7xk~Jl)iwc+}{f%?yS}W6* zcfi&)ip->^#80W5DF}}|>*97o6p>ag$-_jqKv6i>$S-7_Tu<1BrelgUy;0x8jX9Gtx^=oKGwxTFy!h+FZk_MxjQd}0Ts*a`oBh)Q z;{o@QmrQTy)}^i9IH0X@$xPDS!NBnZCycY4(}{Hy#a60i7cJ-ev0bf}&i!Bgl*x-- zmUpVVOJF(AL9jV8&A@sMbJs0d6cIC9vX(4zaSdedrd#K=%#HUuVLLD_v*++9?9kG# zB5g{DB#{xga*W9?=IQfNV=F;?;b_}Ex{&a=^^zgm=Q_DhKI=ZxV0l61Xy@Kr7DO#f zvtDyM*rk7?cHs92eRN3A zi}fZ$58t%S_+H><@W1q%9%97a7}}7oa&UK z)+_t#PPe;<_M4Gl{`IO`Ywot*cFtLv*)y+ju9GW%ln1gWE`=>|G|^_v9yM|nn^#uu zRSf(qzDcTt}yJumYiR)1V>26hZvd$`#tr;cV zqcW4kPcHbedX$srti|DGdnG@*H90LzT`*gEOR_?>$+J{frlD*T-bKedB0m+bu|b)pEY??R6HjT!XvHtrmojUT?k5HKa$P)uP1P>+MdsYP?oi z<$N)EL&rwfP~WRoOQzl4(1lTispXQT3rBD4=BUtyCrXyDy1mgQP!S%tO7i2@(M3Iz zwH*^KUd%83&8gQ9qR3>)uLYHZoxOh&MWx35x~l#+=f1~8(f>!k2^&?CAL6++cJVZu zja{9#Xk)j=uri z2ZEuMMUt7}I#{C;7+4sl^w~WV8yChyJ7dx-dXBWp)HyhM#wH1RuFvfe?+_?;4K$GC zI+&hvXj0A(tnM+E`6+>OaZ)UZ{$~A#g{NG{I)#>mY#qG6VDR>P(u=WmpX(~N3OX=e zhf{`ZbH3H1Dy%W^Si0@@QBK`0B>mU!u~^uV5?9TO&R8+M~jT3YV3bMn${ z!<&5V4qq(V`R(p)BOXn&J9^V;*LN4TjeL37?)cN9T|Ye8_SyS3yD|gkl37;UlZ^Vy z%GJx2neN%i;;-vZI!HYiL}ib%-CJKF+h`Jhs;fyXch)VQ>72N|`;hEeqSI5BdgfgD z;`2_Xk!So~dgf+Ej_%ei;cVm-ue_qjF+D#|I5+&IS3yPOSnmx9HRGpvuelRBuK%y` z_UV_re|~3{5@>z3E-SwGhR)(t?Vzg{3oiBEJV5+K?DDI>70374HbVTRGAr=XKIzgO zlXrYM@{K&LOzN{cCujT^?`uW1^A7CWGGW5_FNe*${?ezk;^ENRrPr=E$M=n^r@xKs z7}Y7rG@gSO0Snhqj{{Q-{;q*vg)fSNJml%C)FlDHMRh{7LpNKJXDM(73wLtaJ(o4W ziZRld^bofsW)ZuNbqeFklP$lNHA4#*rfPfGu-4teG?V&Vxpt%V(!pc&mw4N%D>AH9 zYlg$Sb?mf5xOqAMqr6+%n>Ghkr~A}SUNUF+?e2a1RSl{AYQ@Plo?e>|B~MuV^-s^P z-}S>!Lo=hl+0d30ObflR{KoU*p#$!Zu$X@3*BdWO=WqI7 z|3Gistk2%wzPs=BgE>VFJ=ryL;nP1q5E;jq=Vl0cH!!p2l(9Y1W|@sI zH0&ZgAq-EOZL_^luw-(enY`N^`GZ~itJg4-|?L)w;h<0DOr}wIzgYbP}zK{f+s}bDdjY{iSO<# zjpfv{a~&3)tm_(hL96{{@SbJ)ZqBwj-)TKYds(l_uuQY|3K52=)RKIq_kv+-l#%J> zj)l3hPSc}JoHnb)v%ko!NlrE$(W;i6j+y7ZF4c~AXmNNnCHq~{%;*E zYox)B<`+DI-PT)mso3AGiY(9$zA0JhI_H1=%faXW4|neY)l~MkjUHg52@nW9L=2%P z6b&K@D(+1af+9s!?0|}(qS(=~U_sFl#SV@-sOVt9!8U_47VPMN12(WzL=j;GEB5=G z!2kcg@ArOpeeb$!-F4TxnK20`C+F<_YkTkC^Za&>n@BDyu6S%bx;CMoz4TW86|ZAQ zGp8-Ix7Grq6%U@33M~Ggs6pn{?O1$TFqZ&W{r$*x=)K&;_4sPFKGc0l?4MFN2@)6=ze z@MRis+qfUovQeb?_HE}AEbAkbI7Ip|o=dPG+8d4C+*>FRME7D^y#0z!N5$G?grw3Ry@$z5VA%g%r!`HVn1kE zl1~mua_HKN!~!`B(e)tKOlzCK?1&XoNESjlSzv-yl!#y6bw;Y9h!bWBM!%t2!wnXg zJ)^n}@w9&Aq!66T^`k~=Am}+zkv610;mnwIYNV&IOi12OR@DQ#ndsEylllv z-4!{j^W*VkHy+F7rSVDysgA=tzc{5_@N+EF1xgT$oZ98F%3_D*W7^3EL8Ebo&M2&Q z&W;eO$g&urL=Z5X#Tf|_It@b}>JE>==MBMHJ`xNJ;t;70A&2;klq;4*SOf{ZIY+d0 zU%SHhg(i6uH(ufU)EZqL<`c=ALa-P+6pU4p6Vwirwn)%l1GxtbKsKdY5UzG45Kr9# zh53Tp0W9uU!RTN8MG{>12oK2x`6;W3gooU_Ghr+lOJQ#P(W3Fb5XO36T(TeJ>Dd>D z`(Qck<%2b#LsF+pax7;V)_~=&m@`&N$PrOk8z;m{6-09d$EoFl z3&7b!$oj^xY#wLNCyIwy>)s42A=l{A?!enGVmW?PBq0arY8Cf8*1xBd<=j~uxJuJw z1u11TDHrLr^l_x}7A)mnaw_*YS%LbL5L^xyP>g;q$_88-)F61*LMJ{aHLtObelN;K zjw*!XAj`elSd>O~!g3p2cg_%5ADJ=QX6lZ-agu=4Sh=@xGWQZ>j8$Y8zfiYN5|cHK z?k$`%uB1fATt#xuJ&fbJBNe(|g)=-L=-oZ=##5Am;vN>3LH6=|me2q^mBMkkFx=*^ zaM()ZXsAJV6jU@|I9A@LlB>yzA?gSc9EGROkvQ!SgblJPA}oXpR|-fL@Cfo|5V9ic z20{nofk={U2!*2~i9t4~A=yr9c#CO>x`CJhxq{{7k}WV7q|5|lOQ0~DSOy|TvL--{ zly-oyirZaQOsxEoT-ok-AfH(KK_ojF+RYBAh=M|<{c%!oauqT1#nFB^&=*;XK1n5{ z$Oj#kdBZ(Cdn0v|)=SvNsVd50G#O+8a6^*9%fLgK!b66MJVu+rGjAX;q^&BIke)(W zOs3eor@~+)kW-^b1plaEGPELgE+-O&$qRrVB!l!O;_Y!6Sr^j~yv*&YG zVTmNpQ`7*E4!M2aTP}2mM9jLWvyh>~`Ef2dX0I%$=A7YgpBy3hISx4APO0F6o56;X zLq(BYc@0S6C6X}4nTJJyF~kse87Vcy7?+}thIPi^u=g!G{iHy^-GIRFgo!ym<~~Lz zcgfI+?J18W#yFWyF-4`LZk2;_Gni)Y1d|+Io zy_JANdm|<+kAySJj3o&w*wvYC!W1&c9p+l&DunOK zvW1)?sf9dq;yddITXVpDHuL1K1SHakZ&z691t~JI63EHS0up;^3Sk+;4k8Vdm~4E> z^yV5eISeQkg?fN}#rj;Odp7r=ISuf9F;@%m)VWu2_006%H9+4BU5H#7l?**{U4OY|lt<&y~$@aJFS z5oTO*?;qoZMchkinh{aQ;Ub4(VUhZP>`CQVyxTSgPs1^2!FX}Xt{4b@v@}&fq{Gyy zqyEq`=!c3A`Y z#9*dNrHKYaz{;|uu|hHkd`F&t1FBhHTn3Pzgyi@r732tPp8J~zVSwAGg5#tV@buMG z5)C2`*~SAQ%X+AbxIg%--BYPsh^`9iuIZ-aIK9j^;8i%Ig6B7lR)`b;2O7u}M+7?u z2tD6Ul+W2>00@=?PI@Ve5dvV40Jz7%&SMaJ&Co4?el4U(tc)e4diYQPxe@%+My#s* zP*x1EFU5ds$t>n-GRwKT%xV}vSWUQ917gBU{AB^ z%Qfb#+*O24TGbs!{8*+C z%2Lg_9?C2-oQF_%d5W^Ro^U9z4aFq27o@hRw>pDcAmvQCR77`fuQbGnr1lMyNE3~~ zS`-4S2aUKt1VWWDWFUi8{=w93M1QTx+xxvy@GjcrC9m6~%EscbEjf}$6eV*Sd8-@k~p%;*}kubx)BXFzXamqxJ zKM}`55@03`2}#u?d=iv;GZ{fLX$H>Io2gDAQ={-s6{*CuSDI?frASqVWMLru-kE3T z?V`e5%tF#E$%S6HikUmKUg;=I4X8-}MZ(ZUd}ysV0Bih_%b^pJC52LvQOOr1^Y2PH*tUQ&T6cc=_gg+U1EMFXLe z0Eq5lXi`2mpbSAw4KIvVqrDG#Zyk@}mwPVFw%}GubB(xVVG%?hDWiD^=t|Z`gh>Whxoe3sGnaZ%Au<;vN;A!c@>yvaPt$Wmt@Q zVC3wst^!VvxK!zWKuoN_v*C{8Gtg{8h_4c=J>#q_5H<94@vcT& zB<5lEZ{V7MN2Y)yW0-nd7J@l$2=`u^uMeJ5477zeACqIa&&jEPJzGTZSp`>b9Xu4LQ9djwS|)=F_O>)v;VH}5}7*#r>F@3vN<_KHOE$z!P&W&fVsdx zxGU-cc1}L=cSO9DIjOyguQP6=5QS7!X?RNyyQxda%kIJy%#}GqvIt`5f$o~Ha&AXi z6?{6vkVJdIrgr&YWZK_PDFB5f(GpJrV^SI}lyeDXa) zO&NxFy@vu+|5V`3U6fYq!^5h8p+*QBIGL=(h#QntLSBKUMwY5^8=V3H*#TM_0ANsT zf|XUoI~Zt6hfuV?d)C?Y2kSL@%i_2-w<@C!+$S?fl$}0fJsu5yR^hu2$ymF4; z>MTI&4VGjFQ_4Y!hBG|#6_rb4OgR4nY%3uxHscNzaHP@)lJ|xL(|W@skMx27-gzYp zF!L%WDLs`j@B~~_+jDgqw^^ERMQV8Fr%DCkc898p++o7ru239cc<4kT%>{?o5n;SW z+G0tJ>=B+y!M~8U3CU<1SSuKiW(c(VEj%E693nVH=kM0->%b1?C9qENnukZXuOIwSeq3P;!DI zLuMh6a7M5lJ!2>>!5Gan5mg(P!(SLN;~A)CqBJauRh)%;2nR%q_#$~C%Qp2;VU$#0 zyb0lKAT#J*#*d+EY!Q9@?I6#Gb_I$|u*hT*GYv5B=+0r>jo^7VvC;@LvOs|-I7rG_ zgQ}HgMrz#PCEcJW@9v@yPKEhWQD!kHWw3J(#O^6QglMCuyO{HYqDSil02c1>Z>;@SV&ql4qpc!d4GAJri2 zA5Gu7{C|S5^Ei43!i>Cfmeyd-R)eeaAP|pF0}leQ1H?HzMB8kSJY5;FTW?sAw#BjB zboZ3q`eWO)B^Tr?J+gKiBzWscZ|1J_D%>rama1c2D_`YPzT0qak&f(jZfB#WrACWd zF4~}s$j@MzI9+wgR=hzFGv$)K+*qg{w9I5n;U!1a2B9o5-gHO93g`Y>Ya%k@ z&GHof%0V;qqVxRCBVsO_#_V35kmYWbdV29<{8L zoYh*Fk}=-;sbZDSjiu{m=a28&lz5dqY&A^16d-$(8|>RO!)W2t0GrR%!SqY3Q5p%9 z>)3|)8O#)~=xJxGH$o5~t<74+9PCUg{G9&x+kWmUCR(rDG{{^rGy%L$_>edj3Lmyy zh&jK;xnGSi91MV6g=>Z$jyFFP69l+m#V{azJa!BCZ9~4ld5B!?5^AEqDYw=kn5jdf zkC|+JxW}>EeBq#YyG=Rec}~4f2?x*IvuS5bo^$_?!iZ&dn|F)%DF*oHMQz-(d7o;Z za`1e;=sk8@4n*v88For<*s(oZ3R3pDj{T??bHQ%w(X4%L2|oHGZ|>Q8vT&dKwE6m@ zYwfn3D&N;_?kWATulH;_)3UGo;*a{V+V9F))ic4{RJ*lh#8C?5ogUcv$Po z+aX#lE1dhqnTN+*b{Te*$HsZI-xY|t0ua>^;E8)w8_^+$kThL&l<|)-@&Ok4-s*U> zDI@E)R~9?r$jFT`gRVLp zW0&LdXOYXf4vu$@u5*u>*|iB%%(b%J2m2AUs?NDs;4^kcFd%#B^tZu`fZY%0+Hv z6dHYSO`W{yr^nk_$Uq}kqY6^dYAy{HWvZ|5n7DhH0y z8%J4;c(YsCV#tY;Cj!fQ>O@u8S2eJqY`+;@1Q#}xarnRk!p>aIvsPZ@c;&(M>H=eSRu zIB?VhZS&v%s4tkl)OB>N)biBziAQGbb{*3=((=#y^+)ENcOCnByXBdpsO~>J(jWJ6 z=Cc31#p?}E)iR&mv7KgJI4|D%zk|G0TRk%40B%1Bi+HDdi{2?EP49!Q4gQ?`u%iy!L+%5c6t1I|LL(PY4H33S) zL$T9?c0;n{=(WPa$?vk-Y}3Xq(ItX?B@x{WbWE?6uj#w;<&Bzz^rB13X*1SN*)h@j zL(z8DZKlnJhffv5eg3L{`tJ>BJ@iv{eYS4!?<}dvTsM24=c5-9mD_HAWOELUAM-`?+h&GUwAZ#=p8=_I%uWeZ}dg%IWh< zr|f#OtMi!#AHM~+_Ktmbc%E<5#PA;;)Q$ac`h#yv`YWy4E;b*pPdfW%clSk&qijCk ze}4AE`R|kx6Gk%jp{7uOa@f1NN-hAdho6 zm=WO?5^oY+S}Rx+xi)laq;1pYh~d)4!L=cgML%T&K|ee?Aqv-9oD%3Zb@w6fTL1H> z#Vfn~*G+MMJbE#@wQyDcFS~2lKN~K0Um#i=H+z}nYQu_DpQURj_S}05JVVbt6~e(G*ebVyI7|K( zPMx~f^kLh84!}Eiy_R_+iqGG+1K#Dq)|xu#s!>cAoBoZ&8lZ|#ooDl)cML#pCK^{1HAwrvehrAxp=9#qiJHy@==)DO_?h2c4M}a09&{S3k^2A z@D=zZ%?Ukn5PFN}*nu;krG-_70BieV^3oD-Owkw45Q}c)jEjgCvkf;eL#es$s(+Q5 zJEAE4Duner-JXN19iY191`G0NkslUh|ABiudJA42MJYN_oJMobi(<%Ys&&qQ!(KtQ zzbf>)PhcA2?E3LosD6xBXON-sSZfx>35&2GLlQJrSVVS>Q;Ny#v5|V+NF@_Yjo_=xNALuPdtuPm2we0Yw9E}s zmXrGfabzTp+z-{L|GpY4>M^{M@AHcm%_qTFH;=|C58K%e5BZE*P?DTP1S#bthTlfu z5o%DmF*xNB6wCQ5Tey-i6t*%A27ZPrCBzc-q$J;0SVeOBVU>NMFVZPj`@j@5g@0$f zal=);g&Cx%moS&?;4?YiJ<+{;o>&z2NMeFn5Y{Wyz^l|?Tz5k@WW5`b=esmuH(Ig4 z32MSGwjhCNkIqlAMWcLeaFv%`gsG&+4C}fJ##qjY!m6=4Rf)|A%S(xi0&*!vEwpZy zpr(-~G43hfOPc;W@w^4YxQ>%A!46I&bKH?+33m!7pQXZBK{1V*Xp5aDCCE4mxC#*? zx2e`j9uX7C`QmcaHCE&MPm_@>r0Kap!*G>Wta{%hXOj;!sThEF1Q7RPQmTyX3WtO) zMj#;CWFJ( z+2q?`=sgVP`GK$KnLY^b9uHJ9GG-v;5SpCNg^H>WIx&}_QdfF6bTqv7}cl*p?4B?-tBCd}egWz}Q{zgxj>SQK}p ztcvXDD=g=Bxn}_g#~r>a9lOVQz;?qdqCi8Jg{IdQVB~)Y4>Y| znsF68tqemekSuHge%IgmV#HxkgRe1UygTGW1-LoXy>Vz1*XQ z;Q|9$`U8s0+2c$Bik3~p03K_TTaepVaW9$`TvKv6@V`{p5MP%kChw>T$~s1W$P6K0 zX+0yATJGL}3fh3D#&QB>8+oaZtb-LC!<50>ei?_4$Ktyq(QoG%C=$WKo6DCf^hjc~ zx{y;Qdy~dUbs{$zhUx;1G@{UxJBU9fBO6T=5%8aiaI|kYKC47Y4Hw-ULGG!;itzWt zkmMLHM2)D#vtu+2nbjPr3w+T+Ci3)#X8|yp-~H8zWU9Y90@W`7(r5X(E3mCd6`9XO zVpOG*3%*GzQrJ()xHZWVGPVz_c)Sl(b;$dGfGq2cPF&>^Fnhg_dpVieKoIB)fk0*u zqaMf&26>2DI8|8nQO3C`(}=vvSO|=tc7cC1}ursUpHrSZxKO0i!!+H$tf61AWH(T z?}RRDwz_B>6_yS4U~iEabqHx529rBH6dj%%t;{FghCq`okxAG{Ap(tmG#EXbI7rz- zo(~kpLPg~UWJWMd_7k6KUml>$Mge>VY4QV3{x&&-Z0nDBxy@HtOm_Ffbu0UZm2iC^ z2p^cVt`Cx6mOP;Ku9q;I^DW5YZ27;IdGb!)11&him#OBfkcPxi+CX->C1sOHrMjF< zadvNkr{t5(4(e)h!7dC%GU&e?Ct?2uWTCr2@4o#03uYELtI`-B8VR$=5q%|){LV>o z^6o9JaL2uht1M7)Rbd=g9VX#w-5a>Nf)ov*prIfJm4V(u0N^TUAeU=_gSO&2Z{e1o z;SgFlPGAWlwV2=FA&pBgE&&LhOZ>q3Aa5d-D)LuE5}ZdWHX>PrAjVAt5o^qYAjUdB z*uV$|dnu+E2`~3of`1}S)#t1-u^j@B3U>2R#*jtc=*D{F{K(#3=*C(;BY3DMYy+j~ z7+-kvv+aR*t{%{7I&kRjIP18(d+vr55bRRO8NQNL*BOmEywQvgKs`Q6vkkdVVG%&T%QvX(M(uh*36_7(htx#X`X>*=gxqL2F`#yzosZlNFk4Sk4ae_K@3yWS!CXH zSa0n#sM>d$P)_2f;!@{%?Av}yQWjY@8FH)UVefz>_}{KX2()dI5EIi$Y85$?AS&k) zaNETbg|X!R1O%r36X2nF9>s1Vk%Ch<3Cxk(3QVBbN_BvxW^(XLBUEnp^~JkXwQC15r9iBz)=mW$fm|rSmYu zfJg`l-Vi~qMqp%Jg-ZwHUuUU6NH&BE+mQJ$F(8`;L#^h6l`$wbP6YTArc{ybgOX7C z2|SnV8i*Uq2C7p?ZYZochv$v`q83(ZF!uc+$`Z~^8f!`lgW=n%U`X=B05rsV0Ipda zq!wfJD*+0gR0Y;cgeiFg77`D&m=aTebq2Sbzk|LXV%r8D`nF<_LLVxO;igF&L?po% zQGP*L8`;Ls#QyM6Hjux)(W8HQ%kne1u5LJk>Vt!|jd;_jN zvw^Rs6e7S1fTI-~a3ApIV}YFeQV;>+n74*(#KC{G0ZnKtF)->V#pH-CfR0Y0Do%)i zFq&uLh}05NWausdbx#azqJ=X<$n-Q9fmP$K0E4F(gDG|(;^{nm&0;q>1aBm3Gv@5n z97(r_%;Fr>7_U(y>kMz%32(CqpF$}}Pl7AcZjh#1SZOl&NV+GU1uAljA9r+yBN}3F0|`kT1^ev8J6UNQh8(*D{CPP6>WrNPJ3ci@7(xQ3Ax!L< z0e|(M3H7RnB!v)zC}B1Vx*Lp%eK^c!U7$LH^zlDX1)v1|1oI-6)bv95=Z6@7cbEW% z65xt9!a^=VrZNK{4#cWWDiLta$+3V&a}8uMrl?qEBv>EwhIC^%sh$i2;jS6*?g>Kd zK7g>u?`J@^j)f15lopy0>(Ox6$0LQgTrQ83$H(BVj>FN;`l0Zld;tF3v@%d{c_05K z&Cnx8;W*>q;G`nrIv9crV%@+w4K z#m$ozS#Y1E#U>;tSeQW!`AuN94G^Yqvak&7Sy5t&y}8iI{```uBp^vlW&}Ws{_yE3 z{s?uz&o7@^JP{zRJ>f`;Fgl?mzS@khR&V33O3N)cBcA3n+#Po5id!vk zK{w{`DEK>PeBaj@%0>wC0z$4#yLAQ9L2m04517WIW9+=f@N)1oV7ZHz&Wb8 zqKYg~&{E(z@NH93wM<~aiJ`=F5%k0FEx;p$I>HtJh2(Sj#xi?TQ!cMjJoh67i(wr{AUFhF1t!^4g7 zYK%B^!36h18(MQQM^~U>mT+7Nj`37>DJ)-#le^%(HU4#lugX?q3lhFh6;g!}`6N$5 zX|t_5gA78wIbKDtOwV4cPwIe@}L-pQH=#Dd{A=v0kDly@ArBaY0SC~(!8{$oO zw4{47vJXlHxvWxFkzF46e0&dhP-mXQUF->|@H<^C@`90E<>`nU_3am-W7~IEev@(`_94Tbn9|bYsM8YP5hr<&Lhrw7Xqpx{`ft-px zFt9kd-i*5YaERc?P`J5HD1sTP)fs2m96}01Ru__PAqY-I!EnPt!LX950Yc382f+PX zgM=B}Vjl879EfJg0}-W8N~#b*5^=Y^y>Z{tUdjk!#j`#_z2G^Udm>!_?Fo0b4+Axz z2du**DUE1*z}zCGZCywLPfKVikdqWwr8haEz!&#AD`U9fGC;!)$yuN{wD1+`0)pj1 z8Y1+JVR6G$*8D!3bpfqC{MzkTXz%J!FLVS!sj;Nemk`hEbWQ zGq{(S%9`T68O#azxQw%c8Dp{z|4NalvC@)>Ex4}k-q=bag&4{4lrLAO5N}&|%;B+! zwZoM^*&#$6x5r-&VJHWHr8^=7_*ax?77;xK`oV9>RiwoDk?tbI6e6>j8?>RAbBEaH z@H<+hb%)*up@0N#S|#G*A`=m?8;HsiriSeSGRQK3cjtGst5%dov~Q!iMpKY}T47$S_%Cp|WCzlO_K z`L^sfTHK~1*N)WwKf>ip!WT`_IrFrdet4Vfu< z_Og$H5P!Rk8?y2ooP30#yHK|XO2dBw&O;-#U1QGcwQ~Z%B={eo=bL%-JVNa<%tU`{ z?jFbBlxqWHO-yqh#yjzq<yIl9GL>5sS`zx8;o zqx<9$`lIgGZvDO3vD?fX{V|R4+y1O}?7rZh{b^!p%0UQ7xGXGB;03JOr;L&rwR{lIdNTBCg8#m``JBFmChe}L;jOhvV zJaP5EA#;zQi79b8*cZSur=m2$`Uocj|TY z)XM+II`?CH zcQ#9w_I=cPV_vc8uF?!==g2zS@cE^)WN-6=eP70f|M2jQtnE^8|2MnC7d6eY`SLWF zey#~$^5u;UryIg_>>`#L%$B1{)lWY@LIauqM+JCv;8ODr^n4gLR5$`0YL8fVXdcjW zCUoP`^Lz*MwIkGSs!JwYCkV`s=ie~4t}`jwq3u+4G<~JwxUJ!wjJ{i2%O_5KZ7WU> z3G}h*s3A|3D5EOY#N4*CJR=z3v9V%pVzhmiM}lCVn-%L)Z`<2^6@>Vi+|0^|cCha% zRI8(IZp^;z;Or|5jof&1bAGg=>lop{|6>jLjE%Q;G(Wo2bcyuAKrnU?`qL7Z!{#FLZEkXU=m$0$!_1Q zBTQ3Su5nHY!qNTmmAy{XXbOw(r!4!|TYO^juZ=L;X)pZ6G%g!weh3gC&$r;Q^$dR= zTUX>cID+5c61~*Kp~HBhH?E0RB{;gS)?F#RB^fb65%6P9(42L#U9T3A9^F?P3@W^M z=vql&-!6?qSEbCb{paF1S?uyM{dK?y;4{n%_({Lk)SJm;2u{NRdvPtuE+XC1`}*e@0ElM>#=E0zN2D(kQsc$A%B9S+laN} z?d&%h?sW6~_m8TU26taRqI5zp&+T_g6MA19abxyxp1aD0_AW8U1a{Er&)d*ye3*3^*e4}GAi zArG52YwxH>O>=vnt`D33L*1w+U*;B^)9S{Ta@Xj6aJ$%bnxOsnRlQ#o=Xo4V1B6?w z$HV3tIvKww3rJ`GG4c#b)Nm}EcxqFOw&_-EJ>do~9+Y;cfX7+g2FCc6-qA~_zkur_#rU0bYN_}{`Hgw|HmK2 zgB^m`n7>|;elBshzV93V*y6$!iZ$&&IV-)gviGGpL*XwMyT0bpb=w7Ll0e(v4%!Da z5o4dIKzo^SdkuM2pmTrYHIbWZ%?`u_fwK1Fh}*Rmr>cUw_ka51fBp5@Ubl+|Bo{_@ zNuFKTr6ymLd?|9>{qif;FJgj|6ECj2Ut}*kX?&)iHpf?%7iVjkU(d!*NM)F6wt3GT z^w!2n_w>rLYgjy;e^p@jM6JiZ-#dILq_ZJ=FtFwnyJW;x&l>LX=7E^e54v7IyfiXEcHq6UWXcjdX0s&k%$-3FEP?c%QnSXM?P<(-KBwA|?eCm<`pxh7Wv97i zH`dD?*_Nj_|Jw3Q#@Z~V1cvYI!h#)k+&tZ8$@Ik1w;oAoe^5hEb6^)%x^e8c6X_B* zK0SnzjIJ!jVc5mXM);*3X79el(2ec081&ifHyK-_J@%nDe#xTP$>x~~`PzoF#Lb5b}AV(l9l^kgtOJbc(e&4V$`pPahmbp&%!Z*)*^bYpIRH0=4Yn_b7>)=V*d!7b3; zn7iiT$qqjis-}J8SkSBGKVSPni}ejJJNfF74!djmxukQM4x6_)xaIXu9oA`JA;JI5 zBystYQ8x%%t7{PxyHuA+TI(-rT@bKM(S7@Dn%tQ+w02$Ww^P7$y8SRZZmb?#c6s3Y zXw2e+WS zmkpG@p4-jOn3X<@|G8Y(gjKn#s!JM-*@NwplQaGBcfk6b%tis5_HybxQxj8`6tHpI zgzKiPvhBA8e?B&4v)(n{Ib>r6+ z9v+I_y4jQsId8aP-U18u#(u4jdX^=dQ5{pEz940n&(IwsHc434vEZ+XuExx1s-eTk z8Y_0W-*iXfZpNn1^Zx0Su_5~)69=^QwP6F6ELQgom$CgJez#%|Td}rx{jKs`%vn|5 zoW|BBDKj6l-+Rpd2KqWWJC)9Cq{Fq1Mp_?iq7PCWvi(w<=-;r;-;!U_H@rW8Z>C>@ z=1hvsXrX^R>YTA}d<*px%(sl){g!@IHv8pFdPgTJcK(%+@tUg3)beh(o9Od+DS%n(42M&04hN9v#+nX>ik}e`u=eP~@fEZ)l0i;G)Xl4Sl?NXVvPRZFH{n z)fv`Twb(I@z3Z`4n$JyHCyn7-u`inTDA)nb=c*3B0E{rd_96Q-GDvzo>B23OYU|E^rh~M){`6|)D?01;yk3ocU(#+G|GrB{>&*UknQNxk zZpnsgoo}Ji`vViZ?{22W{11VYexZFWCY|`9>Jx3`oAc%!way&!_4CK~w5NYo>B@(u zY;XP3qpy>?v5N!xOwGIK#MZ>`nEB^9dnP@WmF_mdmi0`!nWx_5!kmBIeR}0+t2NHS50aXkeA06N?QUG}GdV0~@*6f5(=e&xCAV=AKgdH6c6fG9^(w(1^YN(>~2M(TMe5`E6fju`!F6{?;$4%7p28U;1&% zMN{Us-|OWEGjsM!s83|pJu}waTeM*MFJ{al_uOF5cVcDv|VB1D`hv_U26LDld`+qBU#oRE4KRV-J{R&x9O9i-`%fTGY>BCu5Mcw zrgiw@CM{K07IGoHTi_#WHfGP37vp+bGuh=;E^bmeGs_EVteGWeOE%Z%={%IPH=~dD zS=$4@kaWs#!{IY>Rvu2jzP)9`TJP@ranva}Q+ZG7bhE*Zy`St??w4c7KCgVSdxy}T z>6moB*e%eGeb^N7HtU-`GwHlW=kihqcH!u>Yd5Fbu-;R?WnOo*XVGPjrG5R(*z!49 z`F}Q}j&Imdrq()lKB?*w;!}eYf5LN4{9H#rd-*{LRc* z-zg(!59n1x?*+WwES*zFuZz1?2y1Gosrl(0%eK|g7{On@nT1d3jj+HY^ZM7)b0-e# zB!75D_h`ngXEaJIe)sd}dKx<5Mqzc-3pzYJ{^o;ChzC!-HdjV8(rqI~d*7M+g6^>2 zFzH6$*R)5UYV)2MZ)ohzg>84AHqmu8T_R&|w$fJD;*iCP8k#hEc14ioBYG;J`brN) zJw1a_$w6I9KkK^A?&SKECd`>EdwS#vjnG^V?QuT&d&$#RbcANydQBf&oVq~_{-MLh z8y!zuSVJ>c@ej+6aWIfMX~wyJY=_2Ar5*lm)?xp~tlghPEU>M5xlw;X$LE9{I;@;> zeY-Y0@>DN=rmhy7G>(6Kr|)A={bIaTpE*_N{iL({J#CL4Z>guIJ=*L}BTb(vto6zGP9cVcQ z0(nmRge>nFvivDM*H|33ZdfgSuxM+B?fMrq++;w?o>cgqD&dp-t1k2B!_+=qCd*yZ zdkSjmg8S~8Ji6R~#k;0I>e1l-^+sCOuLQ$EZF9qs+Brw3ES%S&#gf0TskvnvfCnzW1X}wY&|?!%BFuX zzJET!nmN2bzB1#hHT&A5t82mYE^K_jA8ES;UD^4qwbLu3BqQF{Jd-rhCAB#uL+*hh&~yW-TFPFWpg*KG+t3pyYS)P{3V_B*5*o&-Hr5xzxLdk0Zmkp z^^eD)qGr11;MYN>%NwapP0F7u&b*>K$6B-s^Ip^P%L^MXFMLhsY3vF2-!bj)HA7#~ z?x|5(U*^}-)OpvIYfWmRtGj(%Klb$#8v3;%7<*pQ`e&eUma$}hm9fP4nO)z4Mfg!#>wH;4jEC>& zK+U-MhWbyQ%{p0!Zb9Fs}|@l%?nZBc#ocL96zcdGVZPlU|6Z{?O}KN~QICx^Fu zdS}4S{y=rEt}$duK8fkMN->+RdfRF++L-D8bGEK_qA81Lvo!w}WX?uS`Cfm+#+-Fm zzV27jN5ZnFUT*oJ4}KvqWNz2$ASqivea^Mt+`2OL^tSg+i{$J@(hdC+A8nZB)*qyC zr)*fMuln??N2V-p{^-`y>vASMvTXTav4kZ}98=n(%RM@~pSMfm+k4bK`1obdTlZ;5 z#q{3{zuu+egoB@5alKF9TX}t-ys4IMZk!i2J-3=ByUtBKA6P?wIaFLVL{>|mKfls% z(TQ4We2*R#7S_?hmzuW~eXXURZk3+Oh^nXOK95`S;?7gr1N)^YW<96M*;jve@v5V@ zHS?e6)a31!E7PK1(1DAVciw)dksdyEd;6(-O>~i}WW=#^&*+qWPkstB`iFXb?s}%j zZ?EXM%yrHM`L*=PlD=23hCZNu+va@fv-lDHX|F-QN86uJ{UcNK?8es6JssnS#opGl z{x**_sZIAP>sl!O#zTeTh4g3I9LsNbpo$-ei#=(p|J|FbW z*y;qMtRdcJ%-KQO+cVdKT~SMZo^jKH<>qoxf7n?u?`uPRoaal~U%hAi`Ych-`n_+M z{iohNnzv0oc*Tr+wEL=yH7VW?Y1QJS9T~Dm^v`K^1?OHpqHD(Ht?QgoO~aaW29LS_ zgjNnonl?VYnyzW9Z&>@Knx0Dk;@mU8hHl!sK~y)cmX5z*nSZFFhI;SXlkO>hO4pv; zw?4J6NrT6!_4Rq!Eww$8bO*HAi{JrCjRMXch?`g05yM{h7OG)fs`GiXT zS`eFJTSFgqjL%s+PdCS9zN9CAuvN`b+^3d?pPO1iO`Uh~^xEY$PwD#F?lV{FKJS>n zzo0#C4$*h@t)~lq5H>rWcups4#>d7EJvcLrV)b5|yR-Ij)Pxzt@#Aclj<}=C+UNJi z>`zVHGVYjf8?vtaaA_%G?Q!Qb9k+Gjh^-TaY_L)EjcGL>I_BA(*g(zojaZiu$LAA` zztbAcIz^W)qBFPudPj$~fA1qbxQ~Bmb;LD}P2LpN>)wPnR4{h>UTXH5p1qNGzar-? zeJ5Eq=fwP1^t@&s|BTL=oqt~~dqU^G`B`AHy^cnFd%bUS^czY~Uw@iCpoK=}7?quy z{)YApEm%Av>@EGmJ-=Nu`7K?l7#rU8*Ee)}PQfIx`CFRoyLflC&3hVo!+XFl;B}r<|N61?{t3umx@+%E!GfN^IWT#V?I?w zJ7?x-vD+V*(~1%;cK>0_1NVVC?4j(z*`1$sSYG7t;~CjH?C9Jb;X6+g_SXEwk^Y|0 zldaBFEeAwZx5J%pJ2|O zCa&K;)6JX(#U9m5T5rxACng`=yTzPI8t*i=R9LdoDW&xX5-eC$TIMC4Jr-=iFS%^P zK}$BTX!9?&LnZ9hxQZ*G$Q#rpWH!9aw_>y3H?eAB15b!FA>7rI?c z?8;&)h8_NMN>{e*V?cPe$cDwNT6}y?gAF^nv`3W5I04g|5!>_clG}8Mfz`#^Q|{1r z&gX3G^D3#VIg@*uewTX5u1RFqs_1}WS*zAJ-Jx&IS~mSNsfs#}+%Z*%@v!z~(~tRg z@6jN$+Q(h;?$cX8>2FLN{(!!`{HZ*~<~}w5>Hh8gy&h54>8nwr*JC=bbmuL@+J|(J zVNKL$mumXPCTI5COVzaO!`INy`qgx59oY@zlAzp0q# zGdfIPZ_AbsE!41M9QrtDUg49;Z|GP}{HmcbvAbvAS^9w9*x4S(ulN2iaLe2Jj(kP~ zJ=D{-`&9F%RPnenXI0rVnxR=Ayr7pl#{2gCU_EurXd2j`y{03&#_Rm-(bSQDXzR!y zzUvr&KhoB&Lv(()N?5TbFJjLgYT{o|$NcUawbR(a=ZkoTQ7Ljxm$p)`GNP(J|C;W}z7gN&$5tvze*8<(gce%X_~)0cL9KME#3TMvMk`&U z$$zv^FSp8D_IXXT@BO$ZdcQQ&vzE=t%WeLlR%@^R6qD6JXKZZEYEizRA`))mY5t6| zu^;Qc<~*ZbKTY0ylRc;0)-Unbx<8|#b=xm3i{#PfqFyf!z~Vceqv0)m18K~YHxVgg0Qz197G zJ$lZ$=iPhXeSf_F-h5w8byrtcShZ@^TC2L&Vi)#^F*WbTV_%$(9k~?ilTAhXN|+yF zb35_`n;QS2rn?S|EgbcgHXF9{W*fKBQyXk!XLS2S$NA`Bq4lFXZ|d5wnl_hi9R3vNxe9i4dZ{X` zp&x>@wbnJ((aa!6t++qysY&P^gTmAXYGcm*Uej^wPHbM4{E{9|3-ax9xa~JTD*3H% zkg^(f<8aU4@{`qX`HEqG&DS<+{hN>3*m?1k&Wk_N$UV_FMV;T$m-jh&=o!tmNx4q- zYH6}Z@O9p#_eN4nO?YJTdFD`c>uP4;|QXF8dol z?w7D@s9KZLXP^v)_pQ?A(20!cY_Tq|jo|3h3_xKNepO%#pBL zPXFb(tWm<&FRYvQZCN=zT^qgaVNMyX6;0@4Y<-_fEkCuD&$>^~t`*PrymX(&@@L!~ zQddsDZTWFLtp9x)^0?pQgpvnz$%`4+l#UOne^-4UE%pI@V*YB`pZgxr;IYdTo;WJE z$M@Ne+hZQm%T@igUHVqg2OCH4?{~a{I?oOn*ZJ%tx_DX0kdxLGbX^~JkBJVCXzFK) zQ4hVxG-j3VKwsY~YI^p&cAk4B9W>$7UlabUq@%yx`B#1ZF-^M0(fKE|_3+Pq&zmY~ zX-&O=Peh09 z?C_lCo4Gj7Yk5vfehle*tmy?U)yP3Lw0!K{>YNufbbe5wGrO{u_Wr!5ey_<3s(dRR za_o8?yY z)>yybs?qiI#T2hz7mmE4#>LX(&%@u*_9@1BjlS>csJqX%jGX^%D`cA(0Uf0mu5&vwO^KUIZqS>#iqlb4_%-NsyoZ4C?Yd=}k@LN9*`C;(APlN9@ z($&A^!XV@NAoibTs&#{t=idI71DmL_rKq-7O+B5f8`s!rz(@K^PXPVJbZ50iNGt8W zKtH-=!6#ZTua8UC`}ljkY@=-&`Sb_c$?d0o|1AgdSdErJ9rPPTk=1P)|Coy6O}?HV@#VLi{FzDzoiQGC<`cC&{B-P? z4|PZk!!4Sk*ZOTU#K%%8N(yNTY@=y4ipAjfXUyrSX}lXm@l@RGi! z&1tl`fsX9H^z`-z_4M%f6AL1=>#1YZjH*?Yb=1sk;EKOop3(H*`q>L>BQ`|deL{Ck z))jv0TSHg86Z{-q|D0aUQU*J8t)tF|tCr0C@{BtCsg;^kT1|(B)D6E7+Cup~c3sT= z)I#_F*7vUcyc`w7-YD^MKbhMltv1_tUTF72~14!@L{m zi}9CY`#xx-{pWuRVXN!unbC%BGi=ORuLWh>yVu*ZbtkM$PcqoIPICWdoYRr5v1|Pi zSNuzf z|I+TOPx9D**(KXA2>EPg$jDDuHuKp@3xiYIAXjB)FPv(;jA0|YyfJ-vPQb3z(=$F@ zEntV+j3{0hCSchftDd-PX|u~0q|A<~w@|~_$SI|EWUC~kpKc@RW)gL+)TtVBc zhEJO1SxG-H>(>(5|1o`XQNO(*8hR9~Z;KnAmeXsbHnX_ClHM(P{c}@H744(>E}@bx zKGAx*;K~ykGU)5q(yNc@c`wtWvVWh_>(BZp+NSmY zgjR&v`=hVvwzs|yPkTJ08!yz>Y&HGLRau$mriqRCfsc;^zEX{u)b@;y~+ z_AgrK?iR06jgQ~c{(1U6hn2L@#6Net8%v>A*64vhQ-`geEw_GtOI@D~nX|%zu#Y`C z!Y5#PM<)M$c(U$qx@q`3-IUd^`<6XeCHL8ZgB$CIUCe9oy?)c*^7PAcBKEc*WSO+Ns7*DKn)dF}CAJ(}q+Jytz^ z@Oa{qXNwxCMg8T&s}9uCo;tPfhAyq4^>c1@dGWTMrbWH-bKeHOO-KFw9ULGN^%`ivERnk8ZH)=Jq=Ji!ZICQQBj6`KYUDapL1|B`cm%6?UV0y1t-& zjd%UqwfY$i*WgPvbxmEjZwSAde!b64jCXX4$%uc4rM#s9H+mMX33x+?{FV!sFS%N2 z1is|KsglsiTfnC*O^d85cuiBINBPwpX{Iy!+?+qszKP!5-|hBjt=Ba4_}@p2XEf0n zKTpRU{L(}dU90+iIr55jD7n7i6ZE1vBWn)EXTGARpN)ELqV-D(Wa?^sf{;g+`o(awi zGPGdd5BbsL+_58jZ}o-cC;H$!q9Z<~`dA$PYIF|mpJK%B?-%L)7T>GDklzs}(|!N_ zWCGFr#{J(6`TftSnv)4z|Nn9_!8XxNk||m1%GenlNc42cG~5`&IM~@H`2=JdZO>&K zdmTvfi_SFO*UmV(+pZ5x%``dUbhAsqX5G;z<4gl0^NlC`&xZWO=Y(Vbcb5Eqxlc>r zEcuPWSH{^YcjpLrek++`dM+zLu`&Ap;OcHqtA3=%Fxi6)uf8YeiRVNNvv^wLrEzt) zP|LDba@(~qu)~5qT2`+EZV#+1@37>mmUV0D?ZHif2Ft6pY`&G<9@<`RuVi^Zp!y=_J$Y|>xrc;;J1e{2KB|n${;Xp#SK%O4M zI0~xUj%f*oPpJJbYkpPe4lgv6Qbsu1tfZ+zX{v%slPJ1sOuzmz4R3QdAFI^}-6r#fhvfA#%Sp?3p5Zn;^kI(Kg>(6eKUNQ)(9o;n<%jv*m)!Wj zxwn(vG%0}Vt`V@hCoSkx&~wvjeUl00@ncr? zo!of@UzNZ)%+}nAwKdziIl(!zY|Hj+_fE?6gy9*iUTDA(v*U?A)0`LV+!5y3dsmhI zjDht#@2MR7WV+@5uMQz>E}auO%HnCYcK=J|rE~uecKhxw%o=6&W`fS3s`9&wb01iJ zh}9WfYiIy>eDT|G9$`eZU^ooD6~d8Kwkj^dK`S97&mE2Q93FaKcZ>thBcPFET8%;r z`HtrU1Q7*mn2+!;__F87?swPhYqMNESmVcTs{Yrex*>rrNd`_s?eza2?e?vfq{#(} zL^tvLvNduOTajO)yJ=2Yf=imMI4V(NbuY$k=k~z|M5kl$wfknKliI!4>6kd@eUgMR z=i*IIlEB1Nmkr}`BTVgX z3+sM+uM6z{|G~+Fhnc;0z8(?jyLDGZ-jRNnUisius$6 zLf`EKjtziz5x4 z2jd7!qCR||C1}_i7~|v)B%C|c>13p!TgZVeaE=D-5jaoCSwEVs?bPEy!cwPUJ3}k; z98=Ha$81#F85K43>b+Ft$7-D_@z5L6bJ@Kf1ML;}Mr;Uulv8m&dz&KsnaB92brs7l zk5>G#LT^H?(c|30mpkU~+%Uv?;Ev^G+qy40wPE7B`8)o6F8DL1X!fMG<2$asPxv$T z_3X*tn|J*6U*`>ObXc1m-(^m?{_ONy*4k$hedbItIT6y|d2!F=X(Ogu)Q9}?PIuD6 z&SG4D?!3WX{b^lBRTYO+^xAPve|pcYRV9&QdhdRwKVyLL`n!t@&hGp6b_ToE(ap_KY_XWG2S~d=BymW7M_l21jRx~NCkQRA|Po6_YbR?y`3BP2GQ=aY6b%~yR>I^rhdt7ni4CG}R5C7=lG~I4}(1;3r!hf)9XyAmVOLZg5 z>dl>tm5awQDQ4mBnTq3a8(tOpbo4o7G$y8XLs+bjG~d;$S6o)|^yHhyjtji{T)w+# zX6zWFT^U}Tu1-nemdRaZV)z?eG%{?e#dw}w|LcYu=f!F(8l-~J-`@(i@3i-uzu9h} zZpxzW$EUs<5vZS0*}5?%dGpMVS+|FTwtB_BJ!tc1znTo$|ukcqm45!$Cyue{>t-ZL_>4(3KL-03JioXwLqF>(loQ!dr_=^FO=4&JA zo@g>dS`-IhZ)^tagLGzy7tWO%iJip#VHQdR^0+UH6~lQGQy4ISfP~l~E!@d@ioyg=Apaj05jq;9(XLrusrRHW9+t~9;Q65 zV^(6LC;-eEojNJPMFK9ip-y{*&IrE@W4XW_n1nO?1t1H_YyjdOLxPaB8@Iy|c8M-B zBnAnOaFc}a6X7htn}}G1gXb#5yp$@^s;D7)igZTYQRGIB`oU|~Vzjf4vsWpI#ISBx zz*_?6n&n42?!Nj}!T5zO>>IU`O9~&dKIJvz-wo~m;Rovtup8naPGp`KiR5IbB8g1s zf<~MKH18`mlPfs={}N~EWw>{bQp1A*Av@RU59G9>fY}tmctrh{vtZ>2EP^-WjVif-;N+?1Jrbrtt4kHCoN(^Kr z$-(_BTq|LY%^qX-1^KrC9*dA3j_XA@_&*r~Q=h!4}Ru6pEITF;QnQfm%tDtf!E4^fM>x0Rh8zOG)FY%}hFHsm5(Ch9wXd zm`Epu52Fghuyo`crFe%U=?r=YBa)c&(d4TFZf(R(VjF-JpjB*QK#y8rR$wGU4v2+{ zj)c6sNXRKPH3R@-@fxhoygSN(Ohv;&59h=wg!J=^AwB)VVA5+fIjeAG7FmmWl2fH; zNNiLM3C4R}Vbfr|LPd^Xru5<_2!Q(;-8zD?O#x*3`#GhcYH!gWT(weCinOz+YaIe? z)L}FeHS~>}ZCMzsG&~;)cL+ye@L>wjYd8jFGeGti()S^M4Z;NsCTDO#7uODedc8Q3 znJyQJNU1`C5f#EJlnbUpI{E1rQ;H55!koewMF5QOxRO(TO(Yc8V-&DW28#y;vOpm@ zjS5oH0bj9_OcQM)#BVor=|j$n^4$W5s;9ZvqIGLP%Mmk!I1OF7>{SQNS1>%wJH)x6dJe} z07$?HtWuN#dUB2Rz`@89D0cC~_;aQJZO~^u#2iJz`apUp+OfDuKz4*=vA70?Tv(99 zNb&&pYc>6m0M&(L4Z;S56A0M|adm>9sA3xnpY0$gXKY(MyZ zm<%UQo&8cl3}6is`97oUQoR2Z&)?zR9{00xe;e`mC>FC>0-Ja)AQ~>P9}AL*JShk; zPkHJqH_asE32tBD6&=J|#L`lX+A`4RUYx6*uc*cVuMWhsYnT%AkiRRgIcUUS=!(Qb z*-`kHI}Y3}M4BD)o= z&r)*9t9P&#T6zqwEo${iPnoSA(UZ065_O6bs!(cHD6ZJW@6_ZOUYmnrPk}7@BR)|Y zjYTH_-H-y^ok%S5;iE0gW;JL3lmw+z0^$-9i-CQE7*a(Z zDxi3*tS5&?so*VG^j}D>q@1tBKDZCR2bmT@KV!)(ezSqm{vL(s&#rM3hgD4;l)HUma2m*onH>Qo>J_j7`q z%2X_1xoCtdX_1A)T@NZvhNZ9~aiYvX%m9x#LoDgAa+C@Pz*QIm#|#|>ly9Jx@o0G_ zO6M4X{)`Reu?@@5Xx{LigGR@K7e;Qx_k=Hx%u-IAqT4qx3*a$&nx8TRxnr) zC2Bmoj8H0;%kBa3j8XSQK&cgk^&Q?1L;ju!hfrn^+5(~t;wvSS6w##GPmWbE46sm= z8&Q#fWB_?Cc9ktLV9?J13{)Zz+X);5hhZ**`~CLV9Q-?mp7dO2)9e4;;mL^0S{kJ& z41WFoaSl)Z=TwcJ^oemBpU>sbvf=5jB8;3RS`t`vW=wE;l97g~c|wN(mapq1SM&Az zq_RArutv={a0*isyu~AiN*A8MG$fj*Z62A;)3J(a;R$UMUHGC->Ct@ME?L=pJwsG&Dn5^~&69YTgy%tDav;x0+oe3-xZ_}+Ct>;+ zCYXpESe1d9gG&Ml4h~d9oC;T&jt$$KU^YJ5&9mdASe}=3O0t`m`Sd-jy=1da-te-R zdzI&HIlsis+iG$3YH#ahZ*O?pto+VX%H#Cim9}d~%u^DE2_tqqxGp3*k}#GeIpru} zb9x@J=Q*ef@c<^YH!vyyp--He4+D9H_91L9PX`?*d6HynKu}Vr9kD7O$6a%7`gGnG z%lCE4Om_FRKb$^ax9hR29NliGazE-ipDFC6r#N3ZU$6V6rX0N<*V;eox!e%;*6*2b z5}@W4ILue~)RszAJl=@a`n`BCs7Vq7;)HfOPG|Ldm%4t^?^CWER?z2RSU^f&<%Bh* z##NDL#r>bfz#wI9V($(EUZyYTFz|KO*^N$b&(+@@)RJd^Z*begsrQDoHype-^m|+V zJxT-)Wh`SFQRXJ>bg0Z-zi&g?Fo~x_xrfQtz&77;kNw{!-E-W zDgIbVqTC1olBk4s>rDb!k|@6)2piufZGY+%cx(}BTX&MMJYH-XOXLC%p9o0K=gEWI(03qts6&|ATL+jf0OAv#j&la9l_t$j^iN7R zW%$-B(o}Z*J=^p{XC6CmHa_aoXR`_O66_vNSoo-K(!?b@P01v~_JHlYtq#%bq-B@R zcAU&JA^BuOo4`$K5S*hVD+SS>%5Y&=$z+`XtxE6JqA^808}W91{=bqj>EWT4uM&I` z{j`FotXC9-3`iO9MH;c$r=NM3w9(V6rllLIlq6A#R*9Hs;$Xyt>GOCJ32WEE3DZ%B z32>XvchFirUE3k2(0jKad$U$*bj418pQT^SBZtI0K8ftKc}%Fuk-cNYvqbOAGZi&OW`uK>Yrp8O?Z5{Q65jgNbY+vmNibU^>o z1!bNp!BoK<6Nb0xn9}^vE3?uO%tF#$I53+>` zAcJ@&srtMiiF}fjm$+kul$Y$Sim_(o*1S4FD&Zw5-B=RNxUs#q3Eaq1o!lwpVs?tpRHqC zi~8HF_*}KbX63in7j0Jk`1aLC#nW|_!);QGJWe#_VAx2#4(qJfl)tNxlMY6zCu=rX zhN+02q|96?Ic>)B!$(B3y~a!AtewC^$|`kZBS6Kt4g=b(RK%!6JOSA`nlM5=oSpNP#~)=3dte7hGl1ezZ^%5F6w>U=U`PK1i*w$MXu#*@fbZyl+t zBD?@23E`nf=rj|c_TrgvBZ?Uz;KmjU3erUqWDy{Z2;^G`Ccly9kL9_^!&oAep7lu! z^6zp_7CgqsO-svxz0cpaXo~-|{N#w2+pMPy7`gpG;K7&MlQ>#{LRI(+z@>wc2loex zXbDvYkcj2k3Zj8*h7z^%7h+k;SN9yxx+ORiNU{xyv5EQ#Pd{4ZLyCLepC;i;?CDs(@86j6~)`c9h;Iq#jF1-{}r2)JUa6o>e-zy$@GZ>($l-#*D`jW|EjY}bYT?V z%~iq}OHAbG4LWBBvPJ9?8I^Ds1LWl~OzM$cCF3qm*U@#lc_c=lbW`!7LhGjUliDTf z-MS+Vn%hSgj3azleJ`41HN?>>TpT*KgU7_5A!!6`^S!ON?A7B9QHtyLPa4Lg!SXZ6h#bc_COv(YBUAV)0GFN_oy4*cgzq2HW`C(}fQC;ZdefCTvSnnkEcdGt_v`I!phs zNIRb86Z6cZ)BRW5&75MFe}MV!BXXE(mXS5UWW+pmrnaRlZ+fzODm>Tr*;Pn*AvfHl zym&*^L7i9+^}(?Kq8TGGLxW7R#}PNFgq83tRalWQ$_}X-73i>(bQ%zHv~fipP%+er=*V$E3h` zs7qPZ`t6ej8l`827n21$=N{<76S@Qt>2Cj?0*BB1x6VWul6pI@VwCWe@#~ENr<(Xdff&CSu zU-nm&jLv^5K1JX~g$P<=p&<`)gGi(5lp%%F%!v^=T@A{ojD}`7*ch5&&iL_i2xW07{jxZnQ97ZE=_tt<-OR^ZyYQeLwUtApSd28zWirLv z4^06e4vL%)31c+r2daCA7wZ(2F#hTSnOzBOn=A9e3>jS@J|2Aeu)?oPGE9@Amu_f`nf=Oi6+g+#|drmsJVAHQ3fEQBHk%8p__vy z4I{C_4($#_m8KA>zA6agZi}JeEUmFN!eqv`KuCAqzzm5a+@ShTH-u zIei5uc|Jz~B9SB%#2|*O76ttgr)OV|7I7lnFoa$ZGY=u=@b0IAQyjA7fg%RIkwcv# zAx|;Jh0xDm!hIM<0>`R4EyT(V7QrnrF{gbF!24tkAvMsfK2G6K*oCpRM$b#|W_L7k zO-dqknVff&7$(&cQ{w~bd5 z4MiDIN5Ss}`j7#j%=9A~U~&e2m!LoW5jr7oGP^zI?v~D&;nCs&X>Wd#t4 z(@6D1VG2bqH-n+fb%NT6bDPRZ{n1dG{hFpbQBf~w!#<`25PwAtX+gfDerk{b2{V=R zX3_%SMgtt>C@5Y5lB1A-aJZ7uGAAJ%nh3cmM$)1PC|L}NQMf{X291heBnBW78oX4% zQ_hTc7Nr8KRKO-B$po&qqi^AUE$FLCqbcu?CPB@|wE1BYaYI*zQuL#upM)_TV;+v6Y1Fol` zd2iv+mk8Bp zR5R}TA>YzdElmHfAg5xC*H7T%Q#?465{+d}j!aT)(QqoWY?6u@&RN=ihUXno$QDH; z6gLu3tN@KWEN%i^Q8)oXB$};=a>PbR`zNXi(2T(n=mcC*VWM#RUM_He+sJ9YgegmY zDRg@wuL$Xn@toT!tP!V|LhmydP1sv{09rR!Om-=BWD+O>6Hz6%X(%NNKx_DZsUT3U z+#Z1!T5W{bX*7HwLL)JCul_}uH%rl0MG9ro>Iz@O)0TdltHx=LT1XO z9Y_eYl<$B5t(Yj>;^<)J28|R3VY`>7fz{^3^g`no# zP6k(LAuwD5{U?-ziWbs4g;N4@Ynzj1HpQSbTBTJ;lL85)Aj=ZX&PHZRE|4&cxXZG^ z(!9$8(nMluNW_vLL`%6X;Q%b~66i>OZR|n4tF7|4s!bEGYCT!PN0!;AhA-T59U~vCSVMw zqm|%#E6N*;It&c4eeqWZZcTL6s2*KVAcuLJ0(%tVAcPwTUw~Fi@p3t?uj1LixE_hl zG~(JAX&mc75#Po8nRvDV!5jC_@SJm5Wr>Eo$2EsG9L-5XD8M^+@XS~t1#cpSx>N|i zGcg*aH>ZjnfUpPYPY}56glzyMxCYQ6ZckjoK|SRtu(Ce`c*6TMUgyZwPK3+ikW=fp zT>z=3`)iT34^XMaDK7)R`Y7KI@$1*JNQ-d7;6CGHnRMFSbR6+npjjg2B%u0E)X z1bl4(d3-9H9Fw(o0E@wG7;`FM7bv~UNyn%b690}{y)YmtJIRt$F`AN9c)n8>B1SXi zO=%~a z71+{KRKb(^I5QYQS9Ks;WvzOEUH}}GD?2cjLq!2tL6d;#*q=rFGGqe`FsLoqPRfOE z7LhBUo~~Iozo723;4hk45x0LV#ZZKi2eJb~EUs`|FB_nbR<#o=w20er=6r^f$X;_a zE*G>YmwZZT#Yk{8EDI==4sH^oEHf0N`!VF}DHdoU0q%1wQ7%vczE3c8!(^$t5vh}P!JTXX-0>)~z;YL23}Z-dSw;tJR_2oFrP<&lv#`e~ zC07kyFhz!zE+q^7a`9CGe4PL^gYZhOB9TLDjB5ZeCl^=?tLA=E5GNM<7X%EKoRpWc z+@}n?Q+!At1-FN*1~R8=W+=Dc)dj7df%_`3wl`2jlOhBQCiWOW*T$j&1l=`46`N39 z3usb^IE=CH>7&wYKupKWBQcF_QP4T8su?nsn53hGbBah37?lB3VNq%-d|0U`pvme5t8P2 z=HTs|Kp@J8ffksbSFSP7J;XbRt@qz~eE%fhhbdK#(r0GQ^OvkZsT; z;MNttbTXUU7f)A6HTVjrt3m(?tfO11YOZNA4n;xi{LW|GjdY%CWCqbjXy zAyXhZ8KDbm;Px%CM@b%>%F=9w<|(o;eiEP?w|6cCOoU{ng4!+Sa?FB_qk z!Uaoah=xIoM)~h>JqBeA#WQF%(1vKN`w|U@WP$dDqCRV}+B(pVj6+lQqWI3p){f>1 zkZmrqbVCuYXb#upv9fkOa#t3K{c_oXj#%O4WT~GMlW8OxM~qUGq_51y7$g>2Az8MJ zOq9VN%!$%0X6!(bD_L0@4XsFvhF+~fR}P9m6(<6m9LSwf(hUX2zZ8N)6TX|l0DKwv z{(uv9+QC)2f-`Ud2?-z+forUvxJ1+UeR?~2O7zP~pjcWV9CHxbjd-Aq%v z{Wq5q6IcFv`rkJs|L0WAhU6{Nwwt#!2OVX}(pry$>kMvi zGgw|T%;tNG4$HVp*2q0<_2&sa9NY~zgn8IowhEOV?nYZPJUThg6OD*)H{M+nZ!@qq zX{5@|BvUHr;v2qxR7RZ%gB}MR(A9S3krS>7d~NmmG4O1kotWS}okw)_Rc7ZaRf@T* zH%w@n((!6jf=+C!UKle>+EJ?AbA5R7RJpx*afo*BUA4(GSbN$1bnU*!!&7F5*;_oR z)YhE1P}y77Np%Jkhi_bvVQQ1KYK=}2;iNCH%(I*uPMQXA*-RcDCGd0JpTujC`cudZ{B z3{-~BJ+S?J_F=``rFs+U>~>r#JKTNoCA~=>Gk08TIoxCAH@z^vz0_QPtxH1Bl5ojZ zX}+^px8#}0Q?2c#g&tnLwjM~<>S|2RhrH^wD!nLqdcRvc@5a39osl#=GUkj{dGgvm zhkKUJ4A?4rbaHLqQ}aq^hZ$Q`m8|V|{!Hnlxoh;QYdUq~PEVAnEuQ9P_P_p3935xB zr&e;*HOu9{xp2rZ-dmxZ;qu^s|DwB7toSB1BA)B;u6gsV-ZFB+1Pmv9md7}RnN^8Y zi-i)^yF+nVf79aV$n{##?V?s>J)OzV&*Z;FWQJvWTV z9u@iP=Nb!2jO<0VU7VLTuisY^ws%OY$bCiV*8M-*ELeeWK#z~b8SM)X3#{Cjc%x0R zv%>c>@{E96PQmf|(^jvs)D1LW&t{sO&+sfy^hlnSb};vTmiI&w6n=l?p*{hrkCn#< zt-R#F*fGJzFu%z??fAp->M6&Dhx_WyC{8=lFTcy$=)@lP4ZCYWsgD0mC7#*q#9dllnF1xJm7|>UL_>eB1ljc1-;cqJWu3q2$OlSfVv8|Iw>2b4j>(y!fJ|7PC zDI9ZA*YNcG!zU&Nt{Z#p2uEGYn%&*q_D}~iv$1q{<()rFd|ILKIFzP7Y^ZiQ$uc9u068O&3TH^ZfSnk>1Q^C zJ5QB8mEIos>ddCq&JlJN=0(0{R+=Lf-8c$Cww-bg&~;)3xZHleWZHlFZE!Z|cg6hf z{3B<(zDu4lWSCPiTw@lV=O zkAQw>_bLRD!*@TaD7bLp(z~eW4ZEvfdG(Kbq?ow)ipBGfM=oA#J@v=Re=KVFon77a zH%2G)uCA5raLre|@0C1zPrbFyr9vOC`CAW8cVfYl&^v{ z?q3`QWYtKefCOz`|KLFPg~#+twl0j2{ii>Muewi_P5gzu0=reVB~;{{Hpe0b+{i#b!X7Bs7Pv=^b zc-XQBvjv}zuj~9~;z-}h6G30H}*eHc=S5nVXd{$?dsq^9SzfJn7!UNbVFN~choo3K9!&8W#zO+7BR_a z-`N|Nqa`A%wyg-Y@%FzYkE}5@&M}KtSRwY(hYlG-QUYzS{J`%3oCjZbos)< zgkFxpN`}AXu>=?>fBZtBa17&YC|?b5E!&6>V=!PMIEp-neC-b`KEGcWLM zMEe2r`NgaIoUE;ylfK1bjP_F3!IL_SJb26Ma@;zzx3$&DHMbnv*7v7O-7zJcO5E(K zH*8MYp~MioiAe^*o_#XKn?kG|9D4@%#@-Fx-n855M^cjCIpZF4Yx6qi=&zS0*By0P z%vI$h)Pg9T0eJ7kn+x4M9_k(Z`y&rbJL)Xm)B-7ux&wRTSzqb|v9 zl6q-Th*$4@hAA_H>({x|9BDn-YHBejVlw>r9PDq$+c+<+9?mEZ4}221W=Vv#bv-|0 zaPz!PGBSB@X#VY?vJZMAKi1nUIczWI88I^bLvo#Q_M&XhK4Brku`;&nz+-WQCw+8F zJ3!T$TV6TlLZae>1r@LpIgUbeDbz3*zgZ5#rE)9>_}1S)?7X&Il2nyu^o7k}SZDhyq1t2G~{#?tl&YgK%v{e36x)oO2}#RohuXq{}M=i+0_ zv?jDsj}3DgwanURMcpXE6n~<6liExfn56!`*{&DU>k~~(H}YZLex!JPDzp0|tv(+g z%Z&U;qs4Q!F(2|jI5QW`cM4E+;5?OqX0od3k|>Z zpqs$8g*ql)HXuzOXhPS%%ZbMaI(vLt6*>1F{-8U5WSUy&R8R2{UhF$M>9UVLzveBy zG9hmXe=tm&9lBY`&w4|B`41oRPb1zq=&)9FGhL^DB1Y?6GtGT{ZzbdKnjS3C-pPD# zqKmxJzG&kJ`-CN*f_2IoXu9PRU!9r;`XSVPsBjKUuq@*564unwB*0gwUr#Uh91@U)BAY65k}NepW!dx z3B&4WdgF~}qK`E+(r!+Su67NT^?2rB*6%sJcur>2v80-=8+~=NXnHO6=yQ3EH2n$n z7?I>4v#g{COr<$8kH_>z;Kydmng_IDdM?i|ig^=}&%c+orxk3(Vpy)5vu?A+1WjRrMFm^Uh0CvNvc*zQs;&^-cQT zeZgKYHjk3i5x2ca9`#@K#okj@Kx392b{?iGqT=@NF7D(Golvwfg;kZ(R=S?MS%n4(%6wV{`Vs)EkX3ysw!HS`e^_>~8f{btF&%?xR!cVEQ2Gvt$| ze~juQ{dj)Hc80*Dk?lA&qiUs2Uk8~8R4sJC6va>hY0I zyrpY<|Fug?)%^SY*HqQv(@Ozqq=yo$|9**+uBwKHjhh*y%hu3teV1pLk{8sUn@FnXbbc+XG=qt~ODWn=sXU|A zQ(q73sH&z8l0V;cR6V8M02{R0bk@~{TcxTeG$(T4Aahj}eKgc+lR2rPmT&6%$w(z- zZ{)9+sUFj*JF=e3$YXkZ*xa=iq=Mcx4}4;wdPMo-JB3)PA5zyn-yT_#hjhaH>MmBQ z2QxX)VddqLoL0j&uQik22x@}2= zeONU;xi)XecJ*aCPwt?XPI75T>U8H_>T|T{{DCQZ!p_i-k@bn^+Z%?S?^U})Hs>(~ zSz-C^d^XTy?P&fD9_u7{Hi@6eV;7qSt>hOHcJ{6%d-ym$w$uA(7^(b8+vY`Ok)J>4 z+Q@}Eyz1|C@K@{Zyy@TRM(e*W@^1c3D`O{E@V9)Un)f5xsgZ%xZoYmy{hO})#((>T zGFiu_X=Q$`d-! zTDf|G7qjd&?LPj^21WuC9jAB3YMpMT>m8Pv3tXG%M8ofY2w?KJ&*Pbg1QCridCH~3 zf+>yEaZA%Q#`iT*XwEY+z}&%LG|?h?)AY!-+G$*;%S=>Of+4uH?a~)>uBDCZqr1^YiaD0 z+CN3EwbbmNJMTr6FgbO$G(|KACLpgRPZ6E2rB6mHzlmVV@7|NBj=H;QXxY+~iMl;% zXe{kJNw+(kg7-~dD_T-ZU3#d8>Q1Vmjw$5>bt7sh3&5H>y`Z|)mv?vk8zxKfowix< zbNX!XBioMWs%dNb>SC$$6Z&jwyXcg8I`EoE7vS6Ci(zqq51S4|#F*`KTN49lnaML#-tW)#r2 z89+VtZ93iH9DkU)h|cY!y2!Gn^lr4)P#`Bw=Mb5#pzS84-dt5lr%tT)(jsr@aZ%=b zEzJ3fbmz}4@Hq!~Nk}U#NBb|GYcU1rro5{h_ z@j|wq%1#|TE@Erx>kd<9=*ny8mrqCROw}*w_KWs=%v8^)O%y0=*fUz({?)uAOxL`> z3j|=RsSyVlHB3jj?CdI)Kc%(Wu`8t+Pw2)iV;iwUM^|$%gjLeR8Bd4HY97;~#n<=C z!XDFwSZ*!U71T2VD@?{C+WMh)cT4h!R?4>~TSh;mBag2bXkAlI!%hE)u+AvwTxi_1 zmXuSuK4!SOj9zhe>}L~JMk6=Bi>2~=8a{$$@6wkm*JZL{r8Icj3sbl35|~W&ob1My z(9^No8{MMsQ0uAhL*3QI^v?UDTki5=x{n_=cvxf+_2CF{SRoD4y?o8X@-~$??Vj%` zETDaUt|;(K%%>Nf&boP(!G?$CxM__yOz^0<;S|&M3>RbRdE|kM>zq9d)@NX%PNV zNB22Q>@E6IORvZEnJPL3{-v?+Vo_=>%?diJqnlGhtAWV66KiOn%ya#Pi|c8|iBpw2 zIxr3YeO3qI`Fc76%ZhMDJ?)HzQfPwbKa_?dn6gU*{T2;?Y0z7-OGO)MX|Gt15u!50 z?lI>?J!`4{xM$6x=QZ@u?GI79W;OK2sVhr$nHt)?F=&EmUKYE|@-dQ{)0 zb8@_fc+?;sdRpw6SwOFJHqi4tQb4`k$KUmg&8NaQ|5|!6`Lx@Ox@fQXJi0yAV42tA zJSzLYiu(?@rjjl0gc=YKkxmk@#jb#YU_0qSR0LF-l`3E;(gZ7F11oFAvWhPDve>aB zy%R#HB8DPjM^|0e#&_-oT@`oVzVE&7ef$)Xx%bYQIdkTe|Cu|}=w={VmkDF?`u7t> zWP)DPhpBd_?~vnbXLbjc?fdjp#Lj>Zn|i2n*@fVb?hq{<<-u$JZ8ft7h(`XYN#wB4 z<8q}z@?H21?XKbcS{QtR!!k;)A?=3|y9Ut9NimXF1G=@vmJr`pilWUx`28AQh| z=p51T(-URzc;lMObaNT3J01LnE-44IVz<$Z&~mu;j2q6-E(fE46E_&iQn;9~{XK&% zh49$~puDG9?l?ac8uKX|eCbXq>wumF|}Ti(iT%?BUU-#oW`h-s4xpGEv18qVw%a?O+FeVB zH}>x9lK58u45ObjW=Mg(Nt>zc)dneO9uyuw1!vcZg^JdXp|y9+HYJru(1^pRY~2d{ zfRHxjwidXCeymF119)@m88IO>F`?GLY8NNcwBE z0^I5n)w-H~BScI-)km#YBMd^vLanj^hGBrDzEcj5&F9Ufjl->4_c_MX-Zz5ryMbx6 z^Qb2{^B>TH8UaV8x7xr)=$|lGs8-Ve>|GNh)VAYR;pktgFOh>8>Us51=$|Zns-stZ zA3inR4AgVJ4>zFxl)nEx2t-F#e{4P29Xq>BKlL7D(HhG1N8E$MyPbv^q}0LUHRW*z zW_3WgdB%>_Fl~BarLjg8OnPB5&t!Zh%uSl2M`u+4&1TII#>#RqzQ=h=uP=xDC8cjgK6$vB^PHV=-hsGq^Vkqa@~B8vG+xsVn) zW}0AP4%ol8+#qPq20h5B6ZmD5{1JZ00_^TmVMG@2QNfFnG5|A1L+#{u;EXNXTr@uu zj_*42M!?P{<8dyf03P>2PQ(_%_|@w^sin)I>X*<7>ht9gg!)QPejmmsiwpG9>%qKQ z^RB+xJxF+wb=p9F7nTk5yJ^U-g}u1dtx;PwsK>t4FlJZ7GQUZ&#)(znOb7T% zEeC6CAS0<9XrHcZW5}hDcmXw1x)h$G1IuhJ16JshU}j<&q$gIKVVal0t@@8InRyt$ zqWfc-D1lgXFH9XJFd}=Vuc@H~B&hc%wwA&~*IDO4QUX!-s!t%g1aua@9LzQ>fzTG$ zaQ5+Hka*s@!L}&|G?N}2yCN7A6S;-cUIFsHoW(K#z??reVvBsK?xiXdJKUBr4amP|LciurI31V z@(h?;3VLrZX2Qi1usfZ7jO|toc}drIvBQc%Uu%sI$EFCk${**z@hF0{ms_s1lGFb4|cc!2b$Z1{bp)^7rSHhe&bLFAJOTM$mLqhx@TQm>%KZiI`) zn;)sk<**;ky1JtrR-QOGMlbn3pxEBmORk3zF0%Q?=~aN!Yp=0CZYeu{n9Nwa3Mxld zYnr500ujEL%&!DFp;*`zgn5`iZE(0bb%(jDn6Vgl5LTRSBRp^O0CpFv>cL>gVwS^5J zUohK-7TH9~ZT!(j*n8Tkr`qsFSTn^kOh5e|s9g8FYph%a?-6&UzmowK8ARVCgSm5K zm($nFKofyV#5>*kW{i z6VOV*F=NVINGyR_ZHIqlPbnsGTDC?p40iSubA}Z`LUHaT&W%DK!btA;LO5plFoc_2 z0IccCzi^!kpjXB(n|V+3V9EXVT3%Eh)OgJ6&sWKVz6iAN$L4}hD87co!HvzUAOis)lf+60KJYlvq^$z%^vze9&?>>T z6fOJw3K+KYN*>)l@T%N+i0&wZz@cw~`TbGUXB=U})3h60lr6 zypL(Dgv58Du9S>tVN)p{(IO3j(WP)1;W20{f%7jm$RWN22)LAOR{|AJSGlld#bC{m zEoUbcgBng`wr(*Tj+|k|i7kS8+pQjR#D%cv6HAvntPrHmG2^&x1yC7~a)j$p0GG=s z_1yM+JPKf9A#Y0_{5mhyM5vNY@=c_Z393Vy?u%w*z-EMF70xKK@7j1x^)%LI`=h_4 z@J@m4K?`$KkW<;C$KP~TkW$&JgGUA^Oro+0oLk{3g?(q^tvH1<6n5FzlY13#tK&uj z?!3`~N4xZ%O?mhUj-tJw%>4w#@zQ#V+ef(nTPBTK{Q->AXPHqGKfpH0u5jwM_uy~U z|2dV8_??Z{aD`cafaS45FNL&rQg0~m+Tnv?c$LD8-${Q!;nQ2lL%X5a=WVCmihTp8 z5wBE~yaqI@8H(|*;pz3h?TSsm!O?wLW=acw19fb$(yCXW(SOhiCHq%^VaGnD7cYT+ zd3b@6*Gs57T%@9Wq7CZMjwq|Q0SS*YUx3cS z6qTO9lp6!?KEkHLB~INgQ6)zZp^&ue_mZ*-Ywt+VLj9 zFy*%D@Mh>cw`wFUt_fna$4#eAX#!1-mOae_<9Nj5X}IWlLDs5%W1htk1aMEqKs>78!uC6Aj0T|5 zT3Xc_@W`{rbVc>6azJ-NUwyxvlrwd2IRw6Ubx|KH2M?Tov>{F4w{ZDSv}cWQC%F1D z4YvjsV}6IWvJvv;zW78FHiG?#jy?(6jj&AjtVpd2^DXyMgVcUToN=q}PihMgXFvcn zVQ>TFpxsJ%A&2{jU+A;yN&j?1f}GS78$@#ODT|0wSCfNVp9cf=((Z#xh^AQ2@jjSc zOTMKitp@@Y)Az3@@oN1~_rL`itbgntG#35ZVo0q8`O2X+Mq8`F+O%q&@jArQ(a|=Z zSOtwI&%ZEksRTsXtBuvG@MzbC^G(K9g6XA%?Iw6c6NS-IXtJw<%$L!HxOF?iIP`iM zAnHAl{!j)=@AwDkGi9)%X<;c{9gp0=c%AWUIn3JAHkmP{92}VXfedCjRKDwbh*2Pg z9f+$l5~ScYXkaZPTnaPZM~r9QD+A}g33Hhz$^f$!%b3f`0K?2x%uB;EvrlTd$esZT8NJ>dL0_#%Xi^Bc@uM!|&efH~OP?`vv*l~z2;yh$46+`Qd zoDrN2MId=LU^C}kAs8Z%#Mx5_+pHe<;Tjaex?`>dT>Sztdogn;FD@St9`)r7$%mxu ztQMY69`spy^F5EB2bk81;jcj)YweDMeEVE58)5sLFU=wIHiD!a*n4@UuYjHdnrN>C z$=T53=c;OfI2#(g1e!v6HjE6vHca?5i?mll|18L9DEd{{KMUM!FXjn9WkQE6`jN0G z6CPjrRZ*0Z3G2?SH4{Z=!k#x?gGAy?uzq195V12scIO?4>@vY#Lt&`MKa=$9M4_1w zfeKidmI+68~P(q zDKO6=aWnxt2Ph${lmw|cfYHcxzF96HOtpxgmILSq1K9!wb3^$Z@bkS*m4_5BKFxh1=0Wcsp zlfp{7+shf0a=3986?Qtx-Poet29!FW&BH)6_I_u+i}I!u=Z$?0si#K|R%W+>2>nwE zh<+YGj^ys{yV=WNyu~BLb9GJXlrjc6>Xjtaw86B^N=HIP9 z8o5;in!`TEX4OE$#F%k)71VEEzt%Xu3NE_8xoT`v1sHyp7#mhWPF72kaeF1G-F(eFe?vlNu3$SWDqQXs-!rlAxD_01f@Y%ha>ld7gLv&x`q-G)WX zO=YA$VuqE$WYcTOOnw=h4%f(I(#l{7CP0|4B%p~3lUXEznC<}rL}()_d@~P zuu7fD%`3noTK$r_E(Ne9)T51Cmk+apvOjTi@`2OaGn2PB4~TRqe?%T&)?zgOc`kf# zb=k{z&V}f!@h|w292kpvT!C8-oP9StNT8hqQVHA8-aOnWkt_&!5=o6TA zWl&;awv?e%4hdr{x6;KjI1w0k+@z=i`m?7FH;Jz#?Wkd04J4s~GPFTl7N?&J$l&xZlLib@Lv+wN{$WAG9#jcLzNihc>zqGM;3@CZ4goz&>(;ER5^ z673~uWs0(tB3{DLnB2kYE98J_$O_t8+~WVjFV3$fH27cle-nbgw5hcUm-Y>+bxG9bXU&jZmE%&VR52sccv1oERtpCV@N zC<9DqE-=+aJLqUp0x2c1YbWandv-C@pdZ0`T?jN>?!fga027~WKk-`fKpXS@BDYL< zj^;u^;}3E^D0#nv^VcfE6}V3U-Jd;*agRy7MCD`)T>SaPF_r2EBz~?+e*j_(+*M~| zUIP=7w8lp8MLnd3Mv%{DXoT~VXM`l6A0@fq{zk1t4ks}#QtyrU zq%>rnflD2R|uc3C|3FuYr2b(`+Smm3o43jk zlg*WYX^CkjcytVA52H==E1_+Je5HwcB}8F3LN};@6}YT}eoqEVR~Yu8>sG*xvAMDI zI2p(v?L1GnmO&Bz(6ulQ?SJtBy|o;Y4Cb3M63c-||1tKJ!_&4Z9|o%&o}a!K^)uow z`Y(S@VpK^X9RUx2U@QXj2M`BXGjht&1LMk|GBGXp0P4Lx zBS)q)b<0Tq{y??_A_kuwa&VCZ#;1*2XxbCwCd9c-dr6?}Sk7cvSPEHh2F(WNQZPe5 znBB7k!fx}N*mcElaYp?X_KIS_aI%u!s~8YPv*j!)f-S$F+{t-X2tCVMwYZ}T!C>!` z(cE_hz<+W)kbAs<#6`IC3gA8l9$ei5a86^c<^7QdLNqwM-FaXx+IpWCf_5I4Ves|x z0MQZ=zbqGGck(v!19G8b=T4SjSq_=M6EtSS#mC{71c$R>A{qigTsB;<-SAN`Ive~k z?JLa70?cMs30pHs99r0hcuuay3}I>(Sf|d66SQT+bH&73ep?RU@`B!cvpgVRSFXGO z6w6K8X}D7Iqpo!}t$=9wa^>WQpoVz|WqAu+ zo|fya!fqk+4=QaBU|7w$UNk&n+ws>OzBF?@Li_xsTQochJ8h-!5jDF8_%w9rRCPN! z)P{}7*2}9W*D>fz?g7HGKO3~)CCAOs@Gf9FHP_I*7MMR@du8Nb4Oe;;M;a$r0ntp8 zJoLL?i(MGw@hGLZd#Q}`n6G&0UBrl&!n+eMrHmC)kc7-rWsZ=-Nd(N9I#L+tmu$&= zS_TQY0EBs?46?Xq0+>le=miw;=vD zYvGRgn}DmuVt4r81bOAX@jLBq;L&cb(YxhopiJlP+-r6b3WlFq#}CZ~gxNdj>E#fF z0J?%0*L#&Le5$bF3843!qjaSe_M@Av-2M=7dCdjosSklzwxDvUg|x3K4n+vsNFW^)Y`wFX-&lBMj-j*`UbLLhGRmp}TuyYu=z2B8B@UZ!e5VTd z)orhh>nq812PTUuA>Fp0y~*rKz_jvm6U|Ckme!nRf=4j6TYs$C7h3_3JLoMY!4*I( zTcc0F^%01h(R)?^E`Q|im&>3{I@N1`sti^k4nsdG0}liS=^JDqWn`7md&ppk!;<^^ zUzS7tm|Jh@CFKx{%Ly0<%Srw)+{-~WOK}#%svJUR)+}bIl>@quD;b}p5Rvfs%+Ht6 ze@(2-`gyw)rdx4jjAc@=>9Mr-=P)VAhWZ*E!1?8Z`L+XZ%AhVa$ccHg4BDx7K?g7| zzU@6@!vR0U)vv9%!_+B*L+utV%v#jr7=JPENI*$#gXuwxS7)4U8)3Q-^Rl=u)6_x& zD3t-GIug*ug$r=26tvJz!{$;*r%zY`%u1zaXKm7kYOuHWQW=Yq{|r)+UQA6R*CQ3IQTcs%ld z5+xljZ#l`LB{q@cL`%n`*7(=e)kfn{YzWw@Eo*=_RCsD_a%jZ)ua|TmDDPWkda3m= z_W2GieYbjOK*vI#j-dN;TxlwDG!DX->0UqXzGB}TZA=9=Dst26B!t7H9I_3VjDOhJUJFyrta6K+N68|EO#^w}*9j-HGKPv)+SIs%`Mew>Z-Gwu? z2u8i07Rq52fh9V+oL7bLdjIQNoU<5mVB(Prg|Hg~ZLV%1SRkIty;uO75UAyf3ZQxQ zfnsj20$h?G`H`E4>(4q0?0L@lq(0)E%mWP1?fFHyFn^4A7XN%M88`4pmo(*84!-kS43+v zA$tGeem^Ia!_)->SMxsP0h&=u&YB{)g&j2+R0+6M?*5^AN56eD^)o1LNc+5emDnn` zdnx&5YKh+K;xBKedQ)hz6cu)?f}xy3!`D&u(_>X^r=? z*lYS4Hqh+s;&gVUuVL9Vs5!>R=^kaT9pcuY?v@v)e>r{ai0FnM^V$^*(1%+^^X9@6l$Q8bn$s#qQO)D#nMrpniiNvCQpN?c8EVXKanae80t zlvxon~3j&mA*qce?4V}+wr zEHndWWExkc3#~7n(+rNtG`UX^*<@L0h3&|sKV*x>%Fby;UCd;>h!u@*?6WmS(xmn# zHFrYWPd%60d6|BQ<)gFIQ$SZRqrS{!w#`=^F5zf}hVo1*lT}71am;3!@eGLfRU;aD z%$F+|WSFb07B}Flt9Hh^hu2vT<7;W0Tdi;0m^e<}r)SSHMSkDDKP5P(^ws}E(QHIq zuT4Juev}&W2r<+79C|`qo`|iZ^V4k4{{06hOmc|Zw&S?ZfME@y$+KVSBxUhgqYh1) zDh}(tznMQ!cOPZtxSA|hO8WMx;==ufc=bbd+7 zHW#XIKF95&(qO2c*IiRqB_PZjW$!5aG0$!Ry$57B{^zX*AZPQNwi7+T-}or zuAAd(TentRjFq^~I_r>@dk)X=5AAsFjOkr#3A{T7IBiHgHAzqiM0~JCap=ap6Nht+ipR4r#4D&Y$4J)1$6AtiQ9D z(5k>`O>5CFX3Bf*CaL$@et5=_VZM7Odj|H}Bb6O}oq56`=JE7o^_|CsGy6I340Jd; zR_~+-ca}A4KA0?SKv97L+3o(K)ijqfPDLMpOR9f)!&zA7*?9EpP=E@YkPIpAQy{`b2Pk-%Byp1 zDlN7y$BjjM*W~^EIalR1CDE0m4t~_|=k%_X#Ji0Cg`pWRX?m?RsdDtO37UaU+iPXV zU93*c(Ol?Wj;~) zO!?jV_R2B0KWc`q>Rl(Nx!Pprw}!?~-ruO7o0eny++pi={pP*{ujV_Q4cm2{-eP&| zYVo48;RoK+Te$aNPO{N(nu| z>x8L-MLd_@x7V1mn|*^b;ze~zI@^zD4G4})m>SX8`;ehvu)|LqR?fWGsHYj9JuGn1 z#@SB~8{DQHN{C%#N&Um|T83L+i%+3*y_fYeD)i48b=YF_ZKo#Vnrb0=hSd)5=`D7- zV<(nvS)Ap~e3K@c__l28N~LCZg~53oo%4ximd$;7?XeS#2k&|b)IPbpR{Ge4>HF@4AouoT5#`85XI`x{Pgqz%y zEE3elZ&r%y8JVbPup!_^v(ax!d39XNE6GKxhi%_e9MNJF_iBp&;XZq%`&*2wDWjh_ zUD#V$R6pZvKp*kg{`+cWnbucprWQp1wohKS={>t?b!e?>^xNJKZSrk@4cq(M{&&0u zV=JzfOg;D8%4Z)|jk~W_8eI^6;Pv>~6Q0FPTh_9D@w>W#@cvQhN(J2kRJ~TV+R0;a z#;-@J9-(u4pOmb%ym&}!`5?ZLu2a>dh{L+da|DwYl&zbi`-@RUtI)RAY3mBzlzn)z zo^>y0yY}b(60}cz(6w^jwo8^WP!M20=8$yf`HM$JEI)zgi%j2Bvg4@LrAJd2?VbMf z^Bu?bJvuRMrMfIxJ@Pnz_(`X&8)PX%B2P>SIywEIdc|@3$dfb9oSbPJGxN0H%u}-- z1iIdQH#2qJ%+no4L){AlD=!?jI@5E;6A$!kLu)YJXMo|+qbE~D$8J2h(96P;7l*$&+BO+mv{-}D-nJF#*= z;^xyn11HxM^c{VE=*u$Qs0Ho|=IrX<|BkqyJ+HVZ@UqIjY`q2JOhzn}zab(=RLZ>U&DsPS$ zpSo|(v*6v=@4Y#^_;!!_whfDKG!OqZrgURHF}Fyzd+vXIa`8?4=sf^uoY{_>*U%rS zy{`7Vg1EOEqu-a8R4ICEl=Ng&a=R9ao{F9d-H=K(q*BlgCjXL-Z=3?XYeSX}O{$V9 zWdv^e(x$0T=@@H>6)}u8IyzQTjHpWO9eAJ`81<&em354IQ9e*{x0YUJYD@-|qT0(C zw~Ap5SHh#%#7Z3<)a;2=iqQ>9hxIR%UR1iggZ$}WI?C*G3PeCokX5O;p z)H&KKHEk3Ws0O(G<4C1M2D|#i+Zw8&Zbyd+m7=X|L`#R)%3}XmHf2EeqIX+6mf=1& z?Zehvw{{pdF#;Yedp=HikPU@Gqou!C89nf4L$7!nYe|v4&$}cYw8-3_) zMKM$f_xAS<^3>~3(bE{9V5k`$>=_#F9}+Ro$1}or0A>?bBs0~SRhUH#*xMs%YOIxGrZPs7NH zqM~i|9dGp%@E-lMRQ=0T7N13un@+}zgitIs%7jE3P$-xNIsq@$;e zf5z)4UR5wsF=F9fMmRuUQ|TI~&g$1t^*2#jPpPb1RDyt_larGn@#}|Gw$J&tM)j_C zcN^x;x-+Qy1yt5M1y+Fq-H`Sq{F2^M#npI(_UBJTy!-j{pQS&dJotwl`Cg1Vsb<|% z)|cI&vQl?YSv!=7PU&EOEUnE)k1}^OH@CJm#~;JbW#+a#b8{=A$oxly^(7aSzU}kp zvHDt0yI859zeRy{^bVEPn%>FG(8vfwC2vo$_=i>31$|rdXKr>$dS|82+4?1PR$V!j z^)`cwTqGx_*{072k(-6F2`+Xo{Sn0R9< zQ|gitVs3WU|4KnWLxFXmiONc8B)X(aww^-yc8jj=rT@B1pE>yL?Ek{Z9m81L)+(@C znhC1YXGuX5Lv*lv z>Ayh?wPYu;HCL(n(&enU`%0|W8)xucsteFJ`N1hx1Vev#wpBN6 z{O#2HOzvBA(nGlwh zM+OIYhxqss4+i6=!7*Phgm?w|dPflDLB0{5=!1FU?ZJ^^@$zA2Ur{Gru^*8AQvTni z_r0Ijo$`(Sl&{MCiO>-2YCW%oAx;D+y-@E@}ME8n#{_3tkJcPV#z z$K8qkS^gcpuXy^cfPHo0@0k6k2i~3Nx7WTS{2#Iy-H7f4y9&Rfgns&ur0GlX-*xYs z_@O(&ZkN9!{S_1cuekeXsM4MGx7Ys5gwdbqPO+=-zf20fiSDGj3jfQb{`4ifQ~dVY zf0=M+@YtQ`pXJ{X{34v+ip`hezmwT-g46CayIuY-lI|V@cc=g3d%kPLe>!o#j=6u( zgs&oU;_7$Ay+T67MDe%0|6KZatp5_%|A6M_kpDj>NO&Ng5eS2LMMjX`$5OQUeZ3K{ zhzJQoFJNh3ae!BtXIKp3K!nD4hJ}SJCWuD)hJ_rK5=MATpJa{Kmf+{b-j@DRK0@1t?rzTFNdZKC9-$tt(F@%yt^B=QXCfU=fH!{j zwsQ#a8s+TgArhM7^F-Z?-CeElIR`%*b@F!2O&V?Rs_Tj#+I5rlxi@mYmUG)cfy1ImW2yG+XT`fB6 z4|XBOFUHGGjAP{E=WS=UYU*G$`8uKV` zJLga@ORLYaMabI^+G)GkMfhjJu!A{{dDvf%`8U^p#J3H@&q7M8!UU|A& z{hRZ_BFZbs#R~r~L0MV+dF+3nUm{Qr#lEgqV((E7e%_)k-SxvZem5_>%h`8h{*Uxu zIOkAJO){%11h9wc7)SGMEJwf`Nz{Jky1Ntyn^Sbn+oKhwLx z4mc(*{%8;WPR5p?O%S6F|NkLhmYqIAr*8ZK&%U|-Bffnz_qxk`s8{e8TlSB1nAa$- z76=PX9vE$On$KhR^gi#=Se{0RDJi*bH->hJ$W8$Hp7@Dho|IIaYL2z?vw>E>+p zSM%U+@BiP;jZnf?dWu~9yj*P~J=_-l)jav(eLv!>dywsCKjH^|3i=pbe%n9uQN&B! zETcoc-CROF{?a$;cF&LW9Qup4;hkgA-L8Js<{!#qr(Z2J_aXeWU>B4v(%&9K_*Cd` z$9T93&AmoVB780M38V2Idw=iXg`K{#oftpcNBP8%w$~Ena)~GMn)EXRCoP#0$cdaf z-5&i(^sB%4svctRU0q9)!#;$eH zE75SIhx67)F2J zb_%&cd?A06zs&JBH_BV&66t1%{ssEz9%yTcON$-HboQSJ@9-zYaa0#SCXxIg2jwe% zU>u12^&sOj54^+XyXVcnJU{iv{3M_M##Ufg#tiLjKaS<+`kXqS?`#!W71=&Q1~}*g zcrNC;j*KGt&*Sg{yPg;D$xd_0`@iZxF%;YYPgf_7UsP9r7jT`rp67P)-G{TFujpNzM^>VF7vtJv3$8|ob-G$-aMF<*%G3mq}u zC*{AB-y)*cZsXnM<75B5@EP*{1zZjR6%ZA3oymv3=id~f6m1+yuPaXFOd;r5;+*T0 z*Ut8KlUG8PxfowtVeBCcM1OBdSM1AiBc8YV@_grbcY+ds_Lm$)F2?ADU5&QFIT-xe zuf&S6iwg)mqqD0heH@3tZ`(r(`PcKuooLUOHsJgx?sp=%k4?vVyg7t|A_o6UBb;WE zLP!81U-OexJ$4R}?rz*Ao+4XwH%lU(ok`q;k7AX?r_P@V6hpI6&#*<2z7fN{Lqms? fAdguWh-20X@8GHuT$J;F@sIKvS7$kLoGtzjRH@*1 literal 0 HcmV?d00001 diff --git a/Data/2_Silver_Processed/Options_Market_Data/2026-04-09/SLV_options_2026-04-09.parquet b/Data/2_Silver_Processed/Options_Market_Data/2026-04-09/SLV_options_2026-04-09.parquet new file mode 100644 index 0000000000000000000000000000000000000000..338705c9811a7b3bf7af3e7e558fc33090e37403 GIT binary patch literal 64651 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 literal 0 HcmV?d00001 diff --git a/Data/2_Silver_Processed/Options_Market_Data/2026-04-09/SPY_options_2026-04-09.parquet b/Data/2_Silver_Processed/Options_Market_Data/2026-04-09/SPY_options_2026-04-09.parquet new file mode 100644 index 0000000000000000000000000000000000000000..c5ecbe0511987e777ed841eb91526652a2ab4838 GIT binary patch literal 107363 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 literal 0 HcmV?d00001 diff --git a/Data/2_Silver_Processed/Options_Market_Data/2026-04-06/SLV_options_2026-04-06.parquet b/Data/2_Silver_Processed/Options_Market_Data/2026-04-06/SLV_options_2026-04-06.parquet new file mode 100644 index 0000000000000000000000000000000000000000..80c97b776c8dd78397f1c94d3f12efefc1fc854d GIT binary patch literal 66829 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 literal 0 HcmV?d00001 diff --git a/Data/2_Silver_Processed/Options_Market_Data/2026-04-06/SPY_options_2026-04-06.parquet b/Data/2_Silver_Processed/Options_Market_Data/2026-04-06/SPY_options_2026-04-06.parquet new file mode 100644 index 0000000000000000000000000000000000000000..859de091023001196eb735028aaa220af5887ab5 GIT binary patch literal 96865 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