Spaces:
Sleeping
Sleeping
Commit History
-
Improve open source project readiness
pebaryan3183da7
-
Add math formula consistency checker
pebaryan0ae9d9f
-
Semantic Scholar backend, JSON output, image checker, batch mode
pebaryan- Add Semantic Scholar retrieval backend (free API, no auth, no CAPTCHAs) as the default for --enable-claims. Google Scholar kept as opt-in via --retrieval google-scholar. - Add --json flag for machine-readable CI output. - Add images checker: verifies \includegraphics files exist on disk, tries common extensions when none given. - Add batch mode: qalmsw check accepts multiple paths and globs. - Add set_backend() for runtime retrieval switching. - Remove old test_scholar.py (replaced by test_semantic_scholar.py). - Update README and CLAUDE.md for all new features.a438ef8 -
arXiv Code of Conduct checkers: artifacts, figures, references
pebaryanThree new checkers that catch arXiv's 'incontrovertible evidence' of uncurated LLM output — the patterns that carry a 1-year ban: artifacts: - LLM meta-comments ('here is a 200-word summary', 'would you like me to make any changes?') - Placeholder data ('fill in with the real numbers', 'this table is illustrative') - Self-awareness artifacts ('as an AI language model', 'I cannot provide') - LaTeX boilerplate (\lipsum, TODO/FIXME markers) - Phantom labels/captions figures: - Missing \caption{} (error) - Placeholder caption text (error) - Orphaned \label{} without \ref{} (warning) - Near-empty floats (warning) references: - arXiv eprint ID verification via arXiv API - DOI resolution via doi.org - Cache per bib key to avoid redundant network calls - Non-existent papers flagged as errors Also adds eprint and doi fields to BibEntry dataclass for extraction from .bib files during parsing.63f36cc
-
Resolve \input{}/\include{} and discover inline bibliographies
pebaryan +1: Claude Opus 4.7Multi-file papers now load as one document: resolve_includes() inlines \input{} / \include{} recursively (cycle-safe, tolerant of missing targets) and produces a per-line map. Paragraph/Section/Finding carry an origin file so findings point at the real source a user edits, not the top-level main.tex. Papers that ship their bibliography inline as \begin{thebibliography} now auto-populate BibEntry records from \bibitem keys when no .bib file is declared, so the citation checker stops emitting false MISSING findings on that style. Bib-less runs get a single explicit warning instead of silent degradation. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>bf81e27 -
Add ClaimsChecker: LLM claim verification against Scholar abstracts
pebaryan +1: Claude Sonnet 4.6For each paragraph containing a \cite{}, extract (claim, cite_keys) via the LLM, resolve titles from the parsed bib, fetch abstracts via scholarly (cached per bib key), then ask the LLM to judge whether each abstract supports the claim. Non-'supports' verdicts become Findings; contradicts is error-severity, unrelated/unclear are warnings. Opt-in via --enable-claims: Scholar is scraping-based and slow/rate- limited, so the default behavior is unchanged. Search function is injected so tests stub it without touching the network — all 9 ClaimsChecker tests use a ScriptedLLM and a stub search. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>1b38360 -
Extract bib titles and authors via bibtexparser
pebaryan +1: Claude Sonnet 4.6Adds optional title/author fields to BibEntry, populated by a second pass through bibtexparser. The regex pass still owns keys and line numbers so MISSING/UNUSED/DUPLICATE stay robust against malformed fields — when bibtexparser skips a broken entry, we keep the entry with empty string fields rather than losing it. Needed by the upcoming claims checker, which will look titles up on Scholar to retrieve abstracts for claim verification. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>cfed934 -
Exclude inline \begin{thebibliography} from parsed body
pebaryan +1: Claude Sonnet 4.6Papers using IEEE-style inline bibliographies embed hundreds of \bibitem entries in the source between \begin{document} and \end{document}. Those belong to reference metadata, not the prose that grammar/reviewer should see, so cut the body at \begin{thebibliography}. Citation scanning uses doc.source directly and is unaffected. Surfaced while running qalmsw against explainableprom/paper.tex — the Conclusion section's reviewer call was spending ~4k chars of its budget on bibitem text. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>e3ba259 -
Scaffold Google Scholar retrieval
pebaryan +1: Claude Sonnet 4.6Adds `src/qalmsw/retrieval/scholar.py` with a `ScholarResult` dataclass and `search_by_title()` powered by the `scholarly` library. Exposes a `qalmsw scholar "<query>"` CLI subcommand for quick one-off lookups. Tests mock `scholarly.search_pubs` so CI never touches the network. This is the retrieval foundation for the upcoming claims checker. Scraping- based; rate-limits and CAPTCHAs are expected under sustained use — suitable for personal/interactive runs, not CI scale. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>2b73c4e -
Fan out LLM calls in grammar and reviewer checkers
pebaryan +1: Claude Sonnet 4.6Both checkers now take a `concurrency` ctor arg routed through a shared `ordered_parallel_map` helper. CLI exposes `--concurrency/-j`, default 1 so it matches llama.cpp's default `--parallel 1`; users bump both server and CLI together. Results stay order-preserving. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>7c804e7 -
Add reviewer checker for section-level critique
pebaryan +1: Claude Sonnet 4.6One LLM call per \section{} (or whole body if none); over-long sections truncated to 12k chars to fit local-model context. Wired into CLI with a --skip-reviewer flag; grammar and reviewer now share one LlamaCppClient. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>6e7dd43 -
Add deterministic citation checker
pebaryan +1: Claude Sonnet 4.6New checker cross-references .cite keys against parsed .bib entries: - MISSING: cited key not in any .bib file (error) - UNUSED: bib entry never cited (info) - DUPLICATE: same key defined by multiple entries (warning) Architectural changes to support it: - Checker protocol now takes a Document (path + source + paragraphs) instead of just paragraphs, so citation-style checkers can scan the raw source and .bib discovery can use the document's directory. - Finding gains an optional file field so bib-level findings can point at a .bib entry rather than the .tex. - Prose filtering moved from the CLI into GrammarChecker; citation scanning needs headings too. - CLI exit code is 1 only for error-severity findings, so unused-bib info/warning noise in drafts doesn't fail CI. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>d71fbfa -
Skip prose-less paragraphs and fail fast on LLM timeouts
pebaryan +1: Claude Sonnet 4.6Adds parse.has_prose() so structural-only paragraphs (\maketitle, \section{X}) don't burn LLM calls. Sets max_retries=0 on the client to surface real failures instead of silently retrying for 20+ minutes on slow local models. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>06c8e4f -
Initial scaffold: grammar checker MVP
pebaryan +1: Claude Sonnet 4.6- parse/: LaTeX paragraph splitter with source-line tracking - llm/: OpenAI-compat client for llama.cpp with lenient JSON parsing - checkers/: Checker protocol + Finding model + grammar checker - report/: rich terminal output - cli.py: typer-based `qalmsw check` command - tests/ covering parser, grammar checker (FakeLLM), JSON extraction Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>cc9d861