File size: 10,035 Bytes
7880373 35676b4 7880373 35676b4 7880373 35676b4 7880373 35676b4 7880373 35676b4 8727e56 35676b4 7880373 35676b4 8727e56 7880373 8727e56 7880373 35676b4 7880373 35676b4 7880373 35676b4 7880373 35676b4 7880373 35676b4 7880373 35676b4 7880373 35676b4 7880373 35676b4 7880373 35676b4 7880373 35676b4 7880373 35676b4 7880373 35676b4 7880373 35676b4 7880373 35676b4 7880373 35676b4 7880373 8727e56 7880373 8727e56 35676b4 8727e56 7880373 35676b4 7880373 35676b4 7880373 35676b4 7880373 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 | # Amplegest — Architecture
> Render the diagram in VS Code with Mermaid support or paste it into [mermaid.live](https://mermaid.live).
Amplegest separates data collection, retrieval, synthesis, deterministic controls, and presentation. The target user is a portfolio manager or senior equity analyst reviewing a post-earnings change in thesis.
```mermaid
---
title: Amplegest — Post-Earnings Decision Architecture
---
flowchart TB
classDef ext fill:#f3e8ff,stroke:#9333ea,color:#581c87
classDef store fill:#dcfce7,stroke:#16a34a,color:#14532d
classDef warm fill:#fed7aa,stroke:#ea580c,color:#7c2d12
classDef proc fill:#fef9c3,stroke:#ca8a04,color:#78350f
classDef state fill:#fde68a,stroke:#b45309,color:#78350f
classDef rag fill:#e9d5ff,stroke:#7c3aed,color:#3b0764
classDef io fill:#fce7f3,stroke:#db2777,color:#831843
classDef gate fill:#fee2e2,stroke:#dc2626,color:#7f1d1d
USER([PM / senior equity analyst]):::io --> UI["Streamlit research stack<br/>Company Overview · PM Flash · Evidence & Deltas · Financials · Ask AI"]:::io
UI --> PE
subgraph LG ["LangGraph · short-term state"]
direction LR
PE["profile_evidence<br/>deterministic evidence.v1 retrieval"]:::state
AG["agent<br/>Claude Haiku 4.5"]:::state
TN["tools<br/>parallel execution"]:::state
ND["coverage nudge · once<br/>if filing + transcript<br/>were not both searched"]:::state
SY["synthesis<br/>validated BriefOutput"]:::state
PS["post_synthesis<br/>item reliability + deltas"]:::state
PE --> AG
AG == "tool calls · bounded rounds" ==> TN
TN == "ToolMessage" ==> AG
AG -. "coverage floor" .-> ND -.-> AG
AG -- "done or cap" --> SY --> PS
end
PS --> GATE["Presentation policy<br/>alignment required<br/>missing or uncertain = hidden"]:::gate
GATE --> UI
LSM{{LangSmith}}:::ext -. "trace" .- LG
TN <--> TOOLS
subgraph TOOLS ["Runtime tools · RAG + SQL + public data"]
direction TB
T1["get_financial_metrics"]:::proc
T2["search_filing"]:::proc
T3["search_transcript"]:::proc
T4["search_news"]:::proc
T5["get_analyst_expectations"]:::proc
subgraph RAG ["Filing and transcript retrieval"]
direction LR
QE["embed query<br/>MiniLM-L6-v2"]:::rag
VS["Chroma similarity<br/>5× over-fetch"]:::rag
RR["cross-encoder reranker<br/>bge-reranker-base"]:::rag
QE --> VS --> RR
end
T2 --> QE
T3 --> QE
end
subgraph WARM ["Warm tier · 24-hour TTL"]
AVC[(av_cache · SQLite)]:::warm
end
AVL{{Alpha Vantage}}:::ext --> AVC
YF{{yfinance}}:::ext --> AVC
AVC --> T5
subgraph LTM ["Long-term stores · offline ingestion"]
direction LR
EDG{{SEC EDGAR}}:::ext
AVT{{Earnings-call transcript source}}:::ext
EX["XBRL extractor<br/>structured metrics"]:::rag
CK["chunker<br/>500 words · 50 overlap"]:::rag
EM["embedder<br/>MiniLM-L6-v2"]:::rag
MD["metadata<br/>ticker · period · section<br/>source · date · context"]:::rag
DB[(SQLite metrics)]:::store
CHF[(Chroma · filings)]:::store
CHT[(Chroma · transcripts)]:::store
EDG --> EX --> DB
EDG --> CK
AVT --> CK
CK --> EM --> MD --> CHF
MD --> CHT
end
DB -- "filing data" --> T1
CHF -- "10-K / 10-Q evidence" --> VS
CHT -- "transcript evidence" --> VS
TAV{{Tavily news}}:::ext -- "post-filing context" --> T4
```
**search_filing** and **search_transcript** over-fetch Chroma candidates, optionally filter by period, rerank the candidates, and return the best matches. News search is separate and does not inherit filing-level confidence.
## Decision surfaces
| Surface | Primary payload |
| --- | --- |
| **Company Overview** | Stable sourced company profile plus independently refreshed price context and public news. Business model, geographic exposure, three-year trends, attention themes, associated price events, and monitoring variables remain concise and inspectable. |
| **PM Flash** | As-of and coverage; experimental PM read-through; thesis-confirming/challenging sourced points; experimental Swing Factor; watch items. |
| **Evidence & Deltas** | Source-backed facts, verbatim evidence, deterministic detector outputs labelled heuristic, risks, commentary, and experimental AI hypotheses. |
| **Financials** | Structured historical metrics, trends, guidance history, earnings history, and exports. |
| **Ask AI** | Cross-cutting grounded Q&A over the available evidence. |
The navigation order is intentional: company onboarding → decision memo → evidence audit → model depth → cross-cutting AI tool.
## Company Overview
Company Overview is produced inside the same streaming synthesis call as the rest of the brief. Before the agent loop, a deterministic node retrieves the stable profile evidence set—10-K Business, segments/geography, strategic evolution, and transcripts—and injects each `evidence.v1` envelope as a raw human message. Those messages do not satisfy the brief's tool-coverage gate, so the agent must still retrieve the current-quarter evidence required for the decision memo. After synthesis, the overview section is validated separately, passed through the unchanged deterministic evidence verifier, stripped of every non-verified fact, and saved under its source fingerprint. A profile failure is isolated and cannot fail the brief.
The former standalone call existed for three practical reasons: its source fingerprint made the profile stable between earnings; its evidence set was broader and more structural than the latest-quarter brief; and a separate response kept the main synthesis output smaller. The merged design deliberately accepts those trade-offs. Profile evidence is now injected deterministically before the agent loop, which adds only marginal context; the synthesis output limit is raised to 16,384 tokens; and fingerprint-based cache lookup remains in the UI, while a new overview is generated only with a new brief run. This means “Generate Brief” regenerates the overview each time, an acceptable marginal output-token cost in exchange for one billed synthesis call and one coherent evidence-grounded result.
## Output taxonomy
| Payload or derived field | Epistemic class | Presentation |
| --- | --- | --- |
| **what_changed** | Source-backed factual claims | Evidence & Deltas |
| **bull_points**, **bear_points** | Source-backed factual claims | PM Flash as thesis-confirming/challenging; full evidence in Evidence & Deltas |
| **risks_categorized**, **management_commentary** | Source-backed factual claims | Evidence & Deltas |
| **quarter_deltas** | Deterministic detector output; significance is heuristic | Evidence & Deltas with **Heuristic · validate** |
| **what_matters_most** | Experimental AI synthesis | PM Flash with **AI · experimental** |
| **analytical_tensions** | Experimental two-sided hypothesis | PM Flash Swing Factor and Evidence & Deltas |
| **between_the_lines** | Experimental interpretation | Evidence & Deltas; may provide Swing Factor fallback |
| **earnings_quality_signals** | Experimental assessment | Evidence & Deltas |
| **non_obvious_takeaway** | Experimental interpretation | Retained in payload; never presented as a sourced fact |
| **what_to_watch** | Monitoring prompts | PM Flash |
| **sentiment** | Stored analytical payload | Hidden from PM-facing UI until calibrated |
| **market_expectations** | Stored market-data payload | Actual/consensus and D1/D5 hidden until aligned |
## Reliability contract
Every **SourcedFact** carries:
- one source in {10-K, 10-Q, transcript, news};
- an item-level reliability label;
- a short verbatim **evidence_snippet**.
Post-synthesis code rewrites item-level reliability using deterministic defaults and corroboration rules. This metadata helps the analyst decide what to verify first. It is not a calibrated probability and must not be aggregated into a global conviction indicator.
Consequently:
- item-level source and reliability stay visible;
- aggregate HIGH / MEDIUM / LOW distributions, percentages, or headline badges stay hidden.
## Fail-closed alignment gate
The presentation layer treats every market-derived or aggregate field as unavailable until its prerequisites are proven.
| Candidate output | Gate condition |
| --- | --- |
| Actual vs consensus | Same issuer, fiscal period, metric definition, accounting basis, units, currency, and pre-release estimate timestamp |
| D1 / D5 return | Exact release timestamp, timezone, market-session classification, exchange calendar, and deterministic price anchors |
| Aggregate sentiment | Sufficient section coverage, calibrated weights, stability testing, and a documented use |
| Aggregate HIGH / MEDIUM / LOW | A validated aggregation methodology that does not misrepresent source provenance as truth probability |
The default is false. Missing metadata, an ambiguous period, or an uncertain event time prevents rendering. Raw values may remain in storage for validation; storage presence is never display permission.
The same rule applies to evidence coverage: **Verified** requires `total > 0`, `verified == total`, and the deterministic status `VERIFIED`. Older briefs without this summary are labelled **Legacy / unverified**, regardless of their source tags.
## Known alignment priorities
1. XBRL observations must be selected by accession **and** period identity, including end date and duration.
2. Analyst estimates must be mapped to the same reported fiscal period and metric basis.
3. Event returns must account for after-hours and pre-market releases.
4. Evidence should carry a stable source locator: accession, section, URL, transcript speaker, and chunk identifier.
These controls precede portfolio-level scoring, comparative ranking, or additional AI interpretation.
|