Abstraction Ladder · Agentic Tools · Glass Box Execution
The Amkor domain uses a Glass Box agent architecture — every plan is visible and interruptible before execution. Unlike opaque LLM agents, this system is a deterministic expert pattern-matcher: all parameters are computable at plan time, no random identifiers, no probabilistic branching.
The pipeline runs: Natural Language Query → Plan Builder → Human Approval Gate → Tool Executor → Structured Output. The user can inspect the full plan before any tool fires. Tools never call other tools at runtime — all chaining is resolved at plan time.
Four variations teach progressively from operational snapshots to advisory synthesis. Each variation builds on the previous — V4 is gated on V1–V3 data being populated.
| Variation | Mode | Purpose | Key Tools |
|---|---|---|---|
| V1 — Snapshot | Procedural | Operational baseline: jobs, filings, news, financial metrics, events | get_recent_job_postings, get_recent_filings, get_recent_news, get_key_events, get_company_metric_trend |
| V2 — KPI | Conditional | Compact multi-metric summary: revenue, gross margin, operating income, CapEx in one table | get_key_kpis, get_multi_metric_summary, get_filing_detail |
| V3 — Trend | Chained analytics | Time-series with year-over-year deltas: revenue growth, price relative performance, CapEx trajectory | get_revenue_trend, get_price_trend, get_capex_trend, get_price_relative_performance, get_multi_metric_summary |
| V4 — Advisory | HITL-gated synthesis | Readiness-gated hypothesis generation and human-scored claim scoring | evaluate_variation4_readiness, generate_advisory_hypotheses, submit_advisory_hypothesis_score, list_advisory_hypothesis_scores, get_segment_disclosure |
15 tools registered. All tools return structured dicts with deterministic keys. Tool descriptions are surfaced verbatim to the plan builder for NL routing.
| # | Tool | Variation | Returns |
|---|---|---|---|
| 1 | get_database_stats | V1 | Row counts across all tables: prices, filings, vendor_metrics, news, events, hypothesis_scores, text_disclosures |
| 2 | get_recent_job_postings | V1 | Recent job postings with role, location, posted_date; note: Workday-sourced, sparsity expected |
| 3 | get_recent_filings | V1 | SEC filings with form type, filed_date, company, filing_url for AMKR and peer set |
| 4 | get_company_metric_trend | V1 | Single XBRL metric time-series for any ticker (raw values, no computed deltas) |
| 5 | compare_companies | V1 | Side-by-side metric comparison across two or more tickers for a given metric and year |
| 6 | get_recent_news | V1 | Recent news items from Google News RSS with title, published_at, summary |
| 7 | get_key_events | V1 | High-signal corporate milestones (earnings, facility, partnership, strategy, CHIPS Act) |
| 8 | get_key_kpis | V2 | Compact KPI dict: revenue_B, gross_margin_pct, operating_income_B, net_income_B, ppe_net_B for latest period |
| 9 | get_filing_detail | V2 | Single filing detail with accession number, primary document, and filing_url |
| 10 | get_revenue_trend | V3 | Year-by-year revenue with YoY growth %; deduplicates by year (last filing date wins); handles both XBRL revenue tags |
| 11 | get_price_trend | V3 | Base-100 indexed price series for multi-ticker comparison; default tickers: AMKR, ASX, SMH |
| 12 | get_capex_trend | V3 | CapEx proxy via PP&E net; computes value_billions and yoy_delta_billions per year |
| 13 | get_price_relative_performance | V3 | Cumulative return % and annualized alpha vs. sector benchmark (SMH) over a date range |
| 14 | get_multi_metric_summary | V3 | Year-by-year FY table: revenue_B, gross_profit_B, gross_margin_pct, operating_income_B, net_income_B, ppe_net_B |
| 15 | get_segment_disclosure | V4 | 10-K text excerpts (600-char windows) for packaging/segment keywords; bridges the CLM-003 XBRL gap where advanced packaging revenue % is not a discrete tag |
Every tool returns a dict with fixed keys. The agent never interpolates free text — outputs are schema-bound, so downstream rendering is deterministic.
Schema tables are only created if corresponding pull scripts and import routines exist. Dead schema — tables with no data pipeline — is removed, not left dormant.
V4 advisory synthesis is locked behind evaluate_variation4_readiness. If V1–V3 tables are empty, the gate returns a block reason and refuses to generate hypotheses.
Every advisory hypothesis carries a human-scored confidence (1–5) stored in SQLite. No claim is presented without a scored rationale — the system surfaces evidence for and against each thesis.