Spaces:
Running
Running
Commit History
Today
-
pricing_page_fixes Running
Anoop9ea1713 -
db_file
Anoopcb937ff -
with_db_module
Anoopeb6ac12 -
changes_without_db_module
Anoop1c7be86 -
changes_20-oct-2026_ANOOP
Anoop7beae3b
Yesterday
-
Fix 'Already borrowed': every fast tokenizer gets its own lock, so jobs running at the same time can share a model
unknown +1: Claude Opus 5.5Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>634fc07 -
Smart engine: parallel setting groups and step overlap off by default (fast tokenizers are not thread-safe: 'Already borrowed')
unknown +1: Claude Opus 5.5Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>5f3564c
2 days ago
-
PhonePe webhook (POST /phonepe/webhook): checks the SHA256 username:password header and settles the order from PhonePe's status
unknown +1: Claude Opus 5.5Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>6f0b0af -
Wallet: until PhonePe is connected, top-ups go through WhatsApp/UPI and the admin adds them
unknown +1: Claude Opus 5.5Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>2528ff4 -
Pay as you go only: prepaid wallet with PhonePe top-ups; every run reserved before it starts, capped (Groq + deadline) and charged its actual price with a 300% margin after GST and fees; admin profit report
unknown +1: Claude Opus 5.5Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>89d4f87 -
Smart Humanize faster: setting groups of a pass rewritten at once (GPU), rescue rewrites requested at the start of each call, vocabulary step alongside Parrot; job time in the log
unknown +1: Claude Opus 5.5Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>82a89bf -
Faster and steadier: jobs survive silent connection drops, Journal Finder warm start, parallel lookups and caches, fast engine up to FAST_MAX_WORDS
unknown +1: Claude Opus 5.5Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>1f241b9 -
Journal Finder: title-only search, journals or conferences in one step, conference location, result cards
unknown +1: Claude Opus 5.5Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>346458d -
Journal Finder: SCIE / SSCI / AHCI / ESCI lists from Wikidata (open, partial) until Clarivate's lists are added
unknown +1: Claude Opus 5.5Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>ee1736c -
Journal Finder: conference search (Scopus proceedings, CORE rank, open calls) and Web of Science SCIE/SSCI/ESCI filters
unknown +1: Claude Opus 5.5Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>46373f2 -
Journal Formatter: footnotes, web references, books and reports, author marks, cleaner LaTeX
unknown +1: Claude Opus 5.5Found with a new tester (devtools/fmt_corpus.py + fmt_audit.py: 3 realistic manuscripts x 8 journal styles, Word and LaTeX checked against the source and the journal's rules, every LaTeX project compiled): - Footnotes were dropped everywhere: now real Word footnotes and \footnote in LaTeX. - Web references lost their URL ('Available' was read as the journal); every style now prints the URL its way. - Books and reports: IEEE / APA / Harvard / Vancouver / Chicago forms are read (edition, place, publisher) and formatted per style; an APA book is no longer turned into a journal article with 'Wiley' as the journal. - '(ISO, 2018)' resolves to 'International Organization for Standardization' (abbreviation / initials). - Elsevier LaTeX: author marks '1,*' no longer split into '?', the corresponding-author line is not an affiliation, no trailing commas; table captions get room above the table. - LaTeX: author-year reference lists unnumbered with a hanging indent; MDPI / Vancouver lists '1.…2eb3609 -
Email without a third-party service: own mail relay on your hosting
unknown +1: Claude Opus 5.5Hugging Face Spaces can only make web connections, so the mailer can now post each email over HTTPS to a relay on your own hosting (MAIL_RELAY_URL + MAIL_RELAY_TOKEN), which sends it through that hosting's own mail system. Used before any third-party provider. mail_relay/relay.php (one file for cPanel hosting) and mail_relay/relay.py (pure Python, standard library), token and single-sender checks, hourly limit; setup steps in mail_relay/README.md. Tested end to end: mailer -> running relay.py -> email with HTML and attachment; wrong token / sender refused. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>5b5ce4b -
Sign-up confirms the email address with a 6-digit code before the account is created
unknown +1: Claude Opus 5.5When email is set up (BREVO_API_KEY or RESEND_API_KEY + MAIL_FROM), Create account emails a code and the account exists only once the code is entered (5 wrong tries lock the code, 3 codes per address per hour). Without email, sign-up works as before. SIGNUP_VERIFY=0 turns the check off. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>f670a3d -
Stronger AI detector: two more paraphrase-robust models averaged into the score
unknown +1: Claude Opus 5.5Nine public detectors were tested (devtools/compare_detectors.py) on 18 AI-written academic samples, 21 human abstracts from 2008 and 16 paragraphs our humanizer had rewritten. Added: ShantanuT01/vanguard-ai-text-detector (ModernBERT-large, MIT) and Oxidane/tmr-ai-text-detector (RoBERTa, MIT). The final score is the mean of the previous ensemble and the two: AI 18/18, human 0/21, humanized 11/16 flagged (was 6/16). Rejected: PirateXX (flagged every human text), AICodexLab ModernBERT (18/21 human), desklib academic (13/21), econ-distilroberta (7/21), vraj33 (flagged nothing). DETECTOR_EXTRA sets the extra models ("" = none). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>dc37bdf -
Professional interface: slim sticky top bar, plain text menu, clear page heading, large drop zone
unknown +1: Claude Opus 5.5- ui_theme.py: one design layer (UI_THEME=0 turns it off): Inter, a calm navy/indigo palette, consistent cards, spacing and radii; brand and account actions in one sticky top bar; the main menu is one line of text tabs that scrolls sideways on phones (it used to fill the whole first screen); sub-tabs as pills; a large Word drop zone; a clean sign-in card; a quiet footer. Fed through the app's css= so Gradio scopes it like the older rules and it wins. - app.py: the brand moves into the top bar; the main tool gets a heading, three steps and what is guaranteed; labels of tabs and buttons without emoji; the signed-in top bar shows name and plan (details on hover). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>14adf4d -
Fast engine: never uses a rewrite the faithfulness check did not approve; spending cap scaled to length; stops at 0%
unknown +1: Claude Opus 5.5- A version is used only if the faithfulness check said it keeps the meaning. When the check could not run (the flat $1 job cap stopped it in a 5,500-word test), sentences keep their wording instead of taking unchecked text. - groqai.set_cap: per-job spending cap; the fast engine allows $0.60 per 1,000 words (at least GROQ_JOB_BUDGET). - Once the document is at 0%, one more round at most (for leftover stock phrases). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>f66d9ce -
0% first: rounds continue until the document is at 0% (10-minute safety cap); documents not at 0% are never charged
unknown +1: Claude Opus 5.5- fast.py: no one-minute stop any more: rounds go on until 0% on our detector, until 3 rounds bring no improvement, or the FAST_BUDGET cap (600 s); later rounds give stubborn sentences more versions and the strongest rewrite. The progress line shows the current score every round. - app.py: a document that did not reach 0% is delivered with the remaining sentences highlighted, the customer is told, and it is not charged (no pay-per-use payment, no plan credit). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>45c0ee6 -
Groq only: the fast engine rewrites with four Groq models; no other provider is ever called
unknown +1: Claude Opus 5.5- fast.py: default generators qwen3.8-27b, qwen3.6-27b, gpt-oss-20b, gpt-oss-120b (250k tokens/min each on the paid key); 24 sentences per request (the instructions were most of the tokens sent). - groqai.py: GROQ_ONLY (default on) - the OpenAI fallback of the proofread is off even if an OpenAI key is set. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>3089e27 -
Fast engine: four rewriting models (each its own rate limit), 2 versions per model in round 1, smaller requests, rounds use the remaining time
unknown +1: Claude Opus 5.5Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>fd0351c -
Fix start-up: the half-precision check is started at the end of detector.py (it was called before its definition)
unknown +1: Claude Opus 5.5Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>306f02a -
One-minute deadline for the fast engine; half-precision detector on the GPU when it gives the same verdicts
unknown +1: Claude Opus 5.5- fast.py: the whole job ends within FAST_BUDGET (52 s) whatever the length: language-model requests still running at the deadline are dropped (their sentences keep their best version), rounds are planned from measured times, and long documents' candidates are pre-ranked on the GPU too. - detector.py: half precision on the GPU (about 2x faster), switched on at start-up only if it changes no verdict and no score by more than 0.05 on the bundled samples; logged either way. DETECTOR_HALF=0 = never. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>439ec70
3 days ago
-
Fast engine on CPU about a third faster: versions pre-ranked by the two small detector models
unknown +1: Claude Opus 5.5On a CPU the large DeBERTa detector was about 2/3 of the detector time. Every version is now ranked by the two small models (on its own), the fluency check runs on the shortlist, and only the 2 best per sentence go to the full three-model detector; the document's AI score is still always the full detector's. Benchmark (4 AI paragraphs, laptop CPU): 100% -> 0% in 3 rounds in 218 s (was 320-350 s). int8 quantisation of the detector was tested and rejected: it changed 8 of 77 verdicts (devtools/bench_int8_detector.py). Capping versions per model at 2 was tested and rejected: it stalled at 23%. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>bc66a36 -
Fast engine: a word that opened the author's sentence is lower-cased when a rewrite moves it inside the sentence
unknown +1: Claude Opus 5.5Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>93991f7 -
AI stock words never count as protected terms
unknown +1: Claude Opus 5.5"crucial role" repeated across paragraphs was treated as a document term, so every rewrite had to keep it and produced "acts as a crucial role". Repeated phrases containing an AI stock word are no longer protected; terms the author defined with an abbreviation still are ("robust standard errors (RSE)"). Affects both engines. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>dc4c7d0 -
Fast engine: stronger first round, rounds 2+ judged in context, never builds on a worse round, stock AI phrases always rewritten
unknown +1: Claude Opus 5.5Benchmark (devtools/bench_fast.py, 4 AI paragraphs, 3-model detector): 100% -> 0% in 3 rounds and 100% -> 6% in 4 (was 4 rounds for 0%, first round 100% -> 79%). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>0cb108c -
Stronger AI detector: paraphrase-robust third model in the ensemble
unknown +1: Claude Opus 5.5fakespot-ai/roberta-base-ai-text-detection-v1 averaged with the current coai + desklib score. Measured (devtools/compare_detectors.py): AI samples 18/18 flagged, human abstracts from 2008 0/21, paragraphs our own humanizer had brought to 6%: 6/16 flagged (was 1/16). RADAR was tested and rejected (separation 0.72 on academic text). DETECTOR_MODEL3="" turns it off; DETECTOR_WEIGHT3 sets its share (0.5). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>eebf465 -
Fast engine: round 1 replaces every flagged sentence; larger Gemini batches with fallback for refused ones
unknown +1: Claude Opus 5.5Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>f85f16b -
Fast engine: versions from several models at once (Gemini 3.5 Flash-Lite + Qwen 3.8 by default, gpt-oss-20b as fallback), checked inside the worker threads; generator benchmark
unknown +1: Claude Opus 5.5Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>01f5654 -
Fast engine: every flagged sentence replaced at once (versions judged on their own), 16 sentences per request, keep-every-detail prompt applied in the worker threads, step timings
unknown +1: Claude Opus 5.5Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>d46df30 -
Fast engine self-test on the Space (FAST_SELFTEST=1): timings for ~1.8k, 5.5k and 15k words in the log
unknown +1: Claude Opus 5.5Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>4d0e2bc -
Fast engine (opt-in with ?engine=fast) and one-step document upload
unknown +1: Claude Opus 5.5- fast.py: the whole document at once. The detector reads it once; every flagged sentence is rewritten in parallel by the language model (keep-every-detail prompt); versions must keep terms / numbers / citations, the meaning (embeddings + an independent faithfulness reading) and read as fluent English; the detector picks the most human version in context. Rounds repeat on what is still flagged within a time budget (FAST_BUDGET, 50 s). Live engine unchanged unless SMART_ENGINE=fast or the page is opened with ?engine=fast. - Smart Humanize opens on the Word upload, and dropping a file starts the run; the separate Humanizer tab is hidden. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>4a7a056
4 days ago
-
Paraphrasing 10x faster: learned banned words blocked with suppress_tokens
unknown +1: Claude Opus 5.5The adaptive learner's banned-word list had grown to 5,528 token sequences on the Space. Passed as bad_words_ids it is checked in Python at every generated token (with a GPU sync each time): every Parrot call took 18-28 s, even for one sentence, and it got slower as the tool learned. Single-token bans now go through suppress_tokens (one vectorised step); banned words of several tokens are still rejected afterwards by banned_in(). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>23008bb -
Log the time of each paraphrase generate call
unknown +1: Claude Opus 5.5Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>7be72fa -
Finer stage timing in the Space log
unknown +1: Claude Opus 5.5Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>33aab58 -
Result message names corrections held back by the proofread; stage timing in the Space log
unknown +1: Claude Opus 5.5Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>c7d7f21 -
Faster humanizing on the GPU Space; the automatic proofread no longer undoes the humanizing
unknown +1: Claude Opus 5.5- The meaning, fluency, clarity and vocabulary checking models now run on the GPU when the Space has a dedicated one (they ran on the CPU for every version of every sentence on every pass; HELPERS_GPU=0 keeps them on CPU). - Automatic proofread after humanizing: grammar fixes and repairs that raise the AI score are undone too (a repair put back the author's flagged wording: a live run went 0% -> 100%). If the proofread still scores worse, the humanized version is delivered and the customer is told to press Final check & proofread to apply it anyway. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>4d32393
8 days ago
-
Journal Formatter: equations never run past the column or page
unknown +1: Claude Opus 5.5- LaTeX: a typed display equation wider than the column is scaled down to fit, with room for its number (new \fmmath macro, compiled under IEEEtran, elsarticle and article); matrices up to 30 columns. - Word: an equation picture wider than the column is made smaller instead of running past the page edge. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>538ec83 -
Smart Humanize falls back to a full rewrite when stuck; log-in throttling; pay-per-use loophole closed
unknown +1: Claude Opus 5.5- Smart Humanize: when the score does not come down, the full-paraphrase engine is tried on the original and its result is kept if our detector scores it lower. - A pay-per-use run handed over free (score not lowered) no longer earns free re-runs of that file. - Log-in: after 8 wrong passwords in 15 minutes the account's log-in waits out the window. - Passwords typed into the log-in / sign-up forms are wiped once signed in. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>fe2c3c9
9 days ago
-
Journal Formatter: LaTeX that compiles cleanly on Overleaf, two-column PDFs read correctly
unknown +1: Claude Opus 5.5- LaTeX: equation pictures and tables are never wider than the column (they overlapped the next column and the equation number); a table too wide for one column spans both; a caption goes to the float of its own kind; a caption whose figure/table could not be read keeps its place with a marked box instead of vanishing. - Sections styled one level too low (every section came out as a subsection 'A., B.') are moved up. - Captions pair with the right figure when the manuscript runs figure, caption, figure, caption. - Equations pasted as pictures on their own line are display equations, not uncaptioned figures. - PDF input: the gap between two columns is detected, so lines of the left and right column are no longer glued together; paragraphs, references and captions cut by a line or column break are rejoined; the hyphen of a compound word (peer-to-peer) is kept. - References written the Elsevier numbered way are read and restyled. - New texlint: every generated main.tex is checked …1b14e8e -
Formatter keeps a misread reference as written; dashboard lock and header wording
unknown +1: Claude Opus 5.5- formatmatch/refs: a parse that loses a surname or title word, or reads a one-letter title, is not trusted; the author's own reference text is kept instead of printing a wrong one. - Dashboard lock text no longer talks about uploads; guest bar says '1 trial document'. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>0f86a58 -
Accounts database kept off the storage mount and repaired at start; honest result when the AI score is not lowered
unknown +1: Claude Opus 5.5- auth: the live SQLite file is on the container's disk; a checked snapshot is written to /data after every change and read at start. A damaged stored file is salvaged row by row and kept aside (it had become 'malformed' on the bucket mount, which broke the run history and the admin pages). - Smart Humanize: a run that leaves the score where it was says so instead of 'Done', and is never charged as pay per use. - cost: the automatic proofread no longer replaces the job's token account (pay-per-use price was too low). - tests: no vocabulary model download. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>393219e -
Remove "Open in Overleaf"; dashboard covers every tool and pay per use
unknown +1: Claude Opus 5.5Formatter - No button that sends the project to Overleaf: the customer downloads the LaTeX zip and uploads it himself (New Project -> Upload Project); a note under the files says how. public_url and the Overleaf API code are gone. Dashboard - TOOLS now lists Proofread, Journal Formatter and Journal Finder, so they appear in the charts, the admin tool filter and the tool table. - Formatter and Finder runs are written to the run history (they ran outside the shared job wrapper and were not recorded). A formatted paper can be downloaded again from the dashboard. - A journal search is shown as "Search" and no longer counted as a pasted text. - Customer: tiles for proofreads, papers formatted and journal searches; results waiting for payment listed with price, reference and a Pay link. - Admin: tiles for the new tools (30 days) and for pay per use (awaiting payment, paid, cost). tests/test_dashboard.py; Overleaf tests replaced. 97 tests pass. Not opened in a browser fo…ec28ce1 -
Formatter and Finder tabs: download buttons that carry the file
unknown +1: Claude Opus 5.5Downloads did not work in the two new tabs: they offered results only through Gradio's file box, whose link goes back to the server and is blocked when the app is opened on the custom domain or in a frame. - tools_common.download_link / download_row: buttons with the file in a data link, the same way the other tabs' download buttons work. - Formatter: Word document, LaTeX project and report buttons. - Finder: shortlist and all-journals CSV buttons (also after a search that shortlisted nothing). - The file boxes stay as a second route. Tests added (95 in total). Not checked on screen (the browser pane was hidden during this change). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>ee3bfc0 -
Formatter and Finder tabs: the suite's animated status panel; finder data fixes
unknown +1: Claude Opus 5.5- Both tabs now run their jobs through the shared live status panel (waiting card, spinning logo, progress bar, elapsed time, Stop & reset) instead of Gradio's plain loader. app.py hands the shared look to build(ui); without it the tabs fall back to Gradio's progress. - "Work out the subject" shows the animated waiting card; both tabs start with the styled idle hint. - Finder shortlist: the PubMed column read as text ("False") no longer shows as "yes". - finder_tab.freshen_data_caches(): the parsed copies of the big lists shipped with the app are marked current at start-up, so the first search after a restart does not re-read Scopus / SCImago / PubMed / ABDC (the pipeline trusts a copy only if it is newer than its list, and a checkout gives files arbitrary times). Parsed copies refreshed. - Tests for the above (94 in total). Checked in a browser on the local app: waiting card and logo panel appear on the Finder tab, subject detection and a full search (10 journals, 1…f2e0b82 -
Open in Overleaf: respect Overleaf's request size limit
unknown +1: Claude Opus 5.5Overleaf answered a posted project with "Something went wrong ... there was a problem with your request": HTTP 413. Measured limit: a 1.98 MB request is accepted, 2.13 MB is refused, i.e. a zip of about 1.4 MB once it is base64 in a form. The cut-off had been a guessed 6 MB. - The button now measures the real request and posts the project only when it stays under OVERLEAF_POST_MB (1.8): a zip up to about 1.2 MB. - A larger project is handed over by its public address on the Space (snip_uri=https://...), which Overleaf downloads itself. - With neither possible the page says so and explains the manual upload. - Test that every posted project fits the limit. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>cdcade6