parrot.finance — the finance satellite¶
parrot.finance used to live inside this repository. It now ships from its own
repository, parrot-finance-agent,
as the distribution ai-parrot-finance — a PEP 420 satellite that merges
back into the parrot.* namespace exactly like ai-parrot-embeddings and
ai-parrot-integrations do.
pip install ai-parrot-finance # core: flow, committee, schemas
pip install 'ai-parrot-finance[all]' # + every broker/data family
pip install 'ai-parrot-finance[graph-ingest]' # + the trading-corpus ingest path
Import paths are unchanged:
Not the same thing as ai-parrot[finance]¶
This repository still has a finance extra (ta-lib,
pandas-datareader). It is unrelated to the ai-parrot-finance
distribution — different namespaces, no conflict, and installing one has no
bearing on the other. The extra provides numeric libraries; the distribution
provides the agent system.
What moved into the satellite¶
| Was | Now |
|---|---|
parrot_tools/technical_analysis.py |
parrot.finance.tools.technical_analysis |
parrot_tools/composite_score.py |
parrot.finance.tools.composite_score |
Both modules imported .alpaca, .coingecko and .cryptoquant, which do not
exist in parrot_tools — they are finance toolkits. The modules were therefore
unimportable, and took composite_score down with them. The originals are
replaced by shims that raise an ImportError naming the new path instead of a
bare ModuleNotFoundError.
Changes made in this repository for the satellite¶
Each of these is a fix to something that was already broken, not a finance-specific accommodation.
Two undeclared runtime dependencies (proxylists, async-notify). Without
them a clean install cannot import parrot.bots or parrot.interfaces.http.
Added to core.
GraphIndex could not ingest a document corpus (fix(graphindex)). Four
chained defects, each hiding the next:
GraphIndexBuilderpassedNoneas the loader toLoaderExtractor.extract, so everyloader_sourcesentry failed with'NoneType' object has no attribute '_load'. There is now_loader_for(uri), plus a dependency-freePlainTextLoaderfor.md/.markdown/.txt/.text/.rst/.mdx, so a Markdown corpus indexes without ai-parrot-loaders installed.- Stage 1 gathered the three extractors under one
try, so a missing optional parser (tree_sitter_python) discarded the other two extractors' results. Failures are now isolated per extractor and reported by name inBuildResult.errors. count_tokenspropagated tiktoken's BPE-download failure, which killed structure parsing on hosts without internet access. It now falls back to a character-based estimate.md_to_treerequired an LLM adapter even though the tree is derived from the Markdown alone. Withadapter=Noneit builds the structure and skips the optional LLM passes — the exact pathLoaderExtractortakes when noPageIndexToolkitis configured.
Documentation. CLAUDE.md and .agent/CONTEXT.md described a
repo-root parrot/ directory that has not existed since the uv-workspace
migration, and placed the concrete toolkits in parrot/tools/ rather than in
parrot_tools.