ai-asset-screener
General info
ai-asset-screener is a CLI tool for fast, fundamentals-driven equity screening with LLM-assisted reading of 10-K filings. It pulls core metrics from Yahoo Finance, enriches them with fair-value EV adjustments and insurance float extracted from 10-Ks, and builds a segment-level SOTP model. The tool issues BUY/SELL/UNSURE signals per metric and per peer group using robust, outlier-aware rules, then aggregates them into a final verdict. Configuration is done via environment variables (.env supported): LLM_MODEL (required), plus either an OpenAI-compatible LLM_ENDPOINT or LLM_OPENAI_API_KEY. Results are printed as readable console reports with group details and a summary table; intermediate data and 10-K parses are cached under cache/. Logging goes to asset.log.
Features list
-
Data foundation
- Yahoo Finance fetch (market cap, EV, debt, cash, FCF TTM, EBIT/EBITDA TTM, Forward P/E) with local JSON caching per ticker.
- EDGAR 10-K ingestion (via
edgartools) to analyze notes and segment disclosures; large-file chunking and caching.
-
Fair-value EV adjustments (10-K notes => EV)
- LLM extracts candidate items with signed deltas (USD millions): e.g., lease liabilities, pension deficits, TRA payables, contingent consideration, AROs, environmental liabilities, FV uplifts/discounts.
- Canonicalization + whitelist/blacklist filters (drops obligations without recognized liabilities, operating-lease obligations schedules, VIE “exposures”, deferred taxes, etc.).
- Sanity caps by category and as a fraction of EV; duplicates merged; EV and EV/EBITDA recomputed.
-
Insurance float model (insurers only)
-
LLM reads balance/notes to assemble float components (USD millions):
- Unpaid losses & LAE (net), Unearned premiums (net), Future policy benefits, Policyholders’ account balances, Other insurance liabilities; − Reinsurance recoverable, (Re)insurance balances receivable, Deferred charge assets for retroactive reinsurance.
-
Strict netting rules (prefer NET where disclosed), scale sanity checks, and Float/EV ratio computed.
-
-
SOTP (Sum-of-the-Parts) from operating segments
- LLM extracts operating segments (ASC 280) for the latest year and parses a clean table:
Segment | Revenue | Operating income. - Segment valuation via peer median EV/EBIT; fallback: EV/EBITDA × 1.25 when EV/EBIT is sparse.
- Loss-making segments: insurers => EV≈0 (conservative); others => fallback EV/Sales ≈ 1× if revenue is available.
- Outputs per-segment implied EVs, peer bucket used, multiples applied, and a premium/discount vs current EV.
- LLM extracts operating segments (ASC 280) for the latest year and parses a clean table:
-
Signals & robustness
-
Metric signals (IQR rule):
- Forward P/E, P/FCF, EV/EBITDA => BUY if value < Q1, SELL if > Q3, else UNSURE (with caps for outliers).
- Float/EV signal for insurers uses peer quartiles within subsector (P&C / Life / Reins / Conglom).
-
SOTP signal: discount/premium threshold ±10% => BUY/SELL; otherwise UNSURE.
-
Majority vote across available signals with tie-break priority: EV/EBITDA > P/FCF > Forward P/E.
-
-
Peer groups & auto-scoping
- Built-in universes (e.g., BIG_TECH, SEMI, CLOUD_SOFTWARE, INTERNET_ADS, ECOMMERCE, AUTO_EV, ASSET_MANAGERS, CONGLOMERATES, INSURANCE, CRYPTO miners/exchanges).
- Auto-selection of relevant groups for a ticker or explicit filtering via
--group.
-
DX & ops
.envsupport; clear stdout reports (per group + consolidated table).- Persistent caching for Yahoo snapshots and 10-K-derived artifacts.
- Structured logging to
asset.log.
How to run:
pip install ai-asset-screener
ai-asset-screener --ticker=ADBE --group=BIG_TECH_CORE --use-cache
.env file example:
LLM_ENDPOINT = "http://localhost:1234/v1"
LLM_MODEL = "openai/gpt-oss-20b"
Add LLM_OPENAI_API_KEY if you use commercial OpenAI API and remove LLM_ENDPOINT
Metadata
Release files for ai-asset-screener 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| ai_asset_screener-0.1.1.tar.gz | 30.8 kB | Without provenance | Details for ai_asset_screener-0.1.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| ai_asset_screener-0.1.1-py3-none-any.whl | Python 3 | none | any | Details for ai_asset_screener-0.1.1-py3-none-any.whl |
Total release size: 66.8 kB
Release files / ai_asset_screener-0.1.1.tar.gz
| Download URL | ai_asset_screener-0.1.1.tar.gz |
|---|---|
| Size | 30.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c441c7cc53f5237dd07c78e0ab1aaee53cdef3b460f5f373e332bd608758983a
|
|
BLAKE2b-256 checksum How to use checksums |
d21a7dbc0cc3ce0acec1cffbc994d82fce91afd1aff6426db60a6ae9bb56aee7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.9
|
Release files / ai_asset_screener-0.1.1-py3-none-any.whl
| Download URL | ai_asset_screener-0.1.1-py3-none-any.whl |
|---|---|
| Size | 36.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
0be555c4cc129f96b1060c3d14272a2ef7e0f0296ef6ba4dc01dcc4f820104ad
|
|
BLAKE2b-256 checksum How to use checksums |
0e03e917904d6d2d8593de7272c3b158a23e3de6be453d4be75751178d06bcb8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.9
|
Security for ai-asset-screener 0.1.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.