langchain-graciousquotes
LangChain tools that check who really said a quote. Each answer comes from Gracious Quotes' fact-checked records: a verdict, the reason for it, the source the quote was traced to, and a link to the record.
Many popular quotes are credited to the wrong person, or were never said at all. A language model answering from memory repeats the attribution it has seen most often, which for famous lines is frequently the wrong one. These tools give the agent the checked record instead.
No API key. No sign-up.
pip install langchain-graciousquotes
Tools
| Tool | Name the model sees | What it returns |
|---|---|---|
QuoteAttributionCheck |
check_quote_attribution |
The verdict for one quote: said by the credited person, uncertain, or wrongly credited, with the reason, the source and the record link. |
QuoteSearch |
search_checked_quotes |
Checked quotes by wording, by author, or by verdict (verified, plausible, disputed, misattributed). The author filter matches who really said it. |
QuoteCitation |
cite_quote |
An MLA 9, APA 7 or Chicago 17 citation for a checked quote, with the in-text form and a warning when the quote is usually credited to someone else. |
Example
from langchain_graciousquotes import QuoteAttributionCheck
check = QuoteAttributionCheck()
print(check.invoke({"quote": "Do not follow where the path may lead. Go instead where there is no path and leave a trail."}))
Match: exact wording
Verdict: No: Ralph Waldo Emerson did not say it. It comes from Muriel Strode.
Status: Re-credited
Quote as checked: “Do not follow where the path may lead. Go instead where there is no path and leave a trail.”
Credit it as: Muriel Strode
Why: The line comes from Muriel Strode's 1903 poem "Wind-Wafted Wild Flowers", ...
Traced to: "Wind-Wafted Wild Flowers" (poem), The Open Court, August 1903; ...
Record: https://graciousquotes.com/quotes-with-sources/?id=588#q588
Source: Gracious Quotes (graciousquotes.com). Link the record above when you repeat this.
The exact wording of a result follows the live record, so it changes when a verdict is updated.
In an agent
from langchain.agents import create_agent
from langchain_graciousquotes import QuoteAttributionCheck, QuoteCitation, QuoteSearch
agent = create_agent(
"anthropic:claude-sonnet-5-5",
tools=[QuoteAttributionCheck(), QuoteSearch(), QuoteCitation()],
)
agent.invoke({"messages": [{"role": "user", "content": "Did Einstein say the definition of insanity is doing the same thing over and over?"}]})
Async works too: every tool supports ainvoke.
What the verdicts mean
| Status | Meaning |
|---|---|
| Verified | Found in these words in the original book, speech, letter or interview, or in a reliable source that cites it, with the work named. |
| Plausible | Consistently credited to this person in reliable references, but the original wording has not been located yet. |
| Disputed | Sources disagree, the line appears only in quote collections or social posts, or it first appears in print long after the person lived. |
| Re-credited | Someone else said or wrote it first. The record names who, or says the real author is unknown. |
| Traditional saying | A proverb or common saying with no known author. |
The full method is on How we source quotes. Corrections are logged in public on the corrections page.
No record is not a verdict. When a quote has not been checked, the tool says so and tells the model not to present an author from memory as confirmed.
Terms of use
- AI tools may fetch these records because a user asked, on condition that they credit Gracious Quotes and link to the record (terms). Every tool result ends with that credit line and link, and the tool descriptions tell the model to repeat them.
- Copying the records in bulk, building datasets from them, or using them to train models needs a licence: email jeremiah@graciousquotes.com with "Data access" in the subject.
- The API is rate limited to 40 requests per 10 seconds per IP. A tool that hits the limit says so in its result rather than raising.
- Quote text belongs to its authors. The records are Gracious Quotes' research about the quotes.
Configuration
Nothing is required. GRACIOUSQUOTES_BASE_URL (or base_url= on any tool) points the tools at another host, for testing.
Requests identify themselves with the user agent langchain-graciousquotes/<version>.
Development
pip install -e ".[test]"
pytest -q
The suite includes LangChain's own conformance tests (langchain-tests, unit and integration, sync and async) and runs against the
live API with no key, the same way a new user would.
Who maintains this
Jeremiah Say, founder and editor of Gracious Quotes. Issues and corrections are welcome here or through the contact page.
MIT licensed (the code). The records the tools return are covered by the terms above.
Metadata
Release files for langchain-graciousquotes 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| langchain_graciousquotes-0.1.0.tar.gz | 12.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| langchain_graciousquotes-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 22.8 kB
Release files / langchain_graciousquotes-0.1.0.tar.gz
| Download URL | langchain_graciousquotes-0.1.0.tar.gz |
|---|---|
| Size | 12.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
6afb705528696a1d1776a8cfcd5e103cd825c7cd2870e21cd8ceba45b7a5e8bc
|
|
BLAKE2b-256 checksum How to use checksums |
454f5f7fbeceda32846ae877cfa8825413d1aa3bf6265dd036a421694dd6932e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.
Transparency logRelease files / langchain_graciousquotes-0.1.0-py3-none-any.whl
| Download URL | langchain_graciousquotes-0.1.0-py3-none-any.whl |
|---|---|
| Size | 10.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
93a7e572671a7c6e98bc36740d3b8120b77468a61a97f1ab9edb06583a91ee2a
|
|
BLAKE2b-256 checksum How to use checksums |
829501f9f7d78f609cc27c58f80e8013b68319bb101cbe8262574e858aab6920
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.
Transparency log