SociaBench · Independent reproduction report
CoSER: An Independent Reproduction Report
Status. This platform has withdrawn its CoSER leaderboard, and no model is ranked on CoSER here. Re-running the method faithfully showed that its score is not a measurement a ranking can rest on: it counts the flaws an LLM chooses to list against one original conversation, so it moves with the judge, with the length of the simulation and from run to run by as much as models differ from each other. A faithful re-run also did not reproduce the paper's numbers. Section 7 gives the evidence, and what it does not show. This platform is not affiliated with the authors of CoSER. The report stays as the record of how the evaluation environment was reproduced; the authors' published table is in Appendix B.
Reproduction policy. Each setting takes the first source that defines it: the paper, where its text and its own numbers agree, or else the reading that reproduces its numbers; the authors' code at a pinned commit; the released files; and only then a platform choice, stated with its reason. Where the current code differs from the code of the paper's time and the paper supports the earlier behaviour, the earlier behaviour is used. The one setting that departs from the paper and affects every session, the next-speaker model, is stated first in Section 3.2. What this report establishes, and what it cannot, is in Section 6.3.
Abstract
CoSER [1] evaluates role-playing of established characters through given-circumstance acting (GCA): a model plays every character of a scene from a renowned book in a multi-agent simulation, a next-speaker model and an environment model drive the scene, and GPT-4o lists flaws against the original conversation in four dimensions. The authors published 21 models, averaged over three runs. This report traces each setting of the platform's protocol 1.1 (Table 3) to the paper, the code, the released files or a stated platform choice, and lists every deviation. Three independent reviews, from the paper, from the code and from the numbers, led to replacing protocol 1.0, which had combined two generations of the authors' code in a form they never ran. In protocol 1.1 the prompts are word for word those of the paper (956 of 986 printed tokens in order; the remaining differences are four listed items), and the rules are those of the authors' code of the paper's time, or of the current code where the paper gives no support for the earlier behaviour (Table 3). The main deviation is that GPT-4o-mini, the current code's default, predicts the next speaker instead of the paper's CoSER-70B. A Python reference built from the official source text agrees with the platform's protocol module on every checked request and score, and a run of the real engine against a local stand-in for all models reproduces the reference's requests, temperatures, records and scores exactly, for one model family; 31 scripted checks pass without calling any model. The anchor, run with criteria fixed in advance, did not reproduce the paper: GPT-4o (2024-08-06) scored 54.68 against the paper's 59.95, with character fidelity 32.83 against 48.95, while storyline consistency and quality came within 1.24. Sending the authors' own three released simulations through the same judge prompts gave character-fidelity severities 1.84 times those of the authors' stored critiques, and no variant tried restored them. The analysis points past that gap to the method itself, though the critic does give the book's own dialogue far more than GPT-4o when the book is also its reference. The score counts the flaws an LLM chooses to list, with no reward and no calibrated top; for one model and one scene it ranges over 13.8 points across three runs (median); the single length correction leaves storyline consistency rising and character fidelity falling with length, and supplies 18.1 points of the Average; and the anchor's shift alone exceeds the difference between the top and the median of the paper's 21 models, among whom the authors' own table finds plain BLEU closer to human judgement than the judged pipeline. The platform therefore withdrew its leaderboard on 2026-11-01. ROUGE-L, the human evaluation, the critic's agreement with people and the construction of the test set cannot be reproduced or verified from the released materials.
1 The original benchmark
1.1 Sources
| Source | Version | Licence |
|---|---|---|
| Paper [1] | arXiv:2502.09082 v1 (2025-02-13 08:55), v2 (2025-05-28 07:23), v3 (2026-01-04 10:46); ICML 2025. LaTeX e-print of v3, SHA-256 c6b39dff…c0f6. Line references are to v3. | CC BY-NC-ND 4.0 |
| Code of the paper's time [2] | Commit 93c1474 (2025-02-14 06:50), gca_evaluation/eval_reproduce.py. Its experiment names carry env_model=gpt-4o-nsp=llama3-1210-8epc, and it lists the paper's models. It is the most likely source of the paper's numbers (Section 2.1); it does not print the paper's tables. | None stated |
| Current code [2] | Commit 624efc5 (2026-04-02), the repository's HEAD and the commit pinned by this protocol, gca_evaluation/main.py and companions. | None stated |
| Test set [2] | data/test/test_set.json, SHA-256 eb175779…374a: 200 scenes, equal to test_data/ (in-domain then out-of-domain) apart from two added fields. | None stated |
| Released examples [2] | exp/simulation/*.json and exp/evaluation/test_set_gpt-4o.json: three scenes from a separate example file, none of them in the 200. They can test a formula; they cannot test a number of any table. | None stated |
| CoSER models [3] | CoSER-Llama-3.1-8B and 70B on Hugging Face (public, tagged MIT). The page does not state that these are the weights behind the paper’s tables. | MIT tag on the model cards |
The evaluation code changed in steps that matter here. On 2025-02-18 (0e11992, “typo fixes”) a ceiling of 100 was added to the dimension score. On 2025-02-24 (297ffff) the script became main.py: the next-speaker model became a parameter with default GPT-4o-mini, and motivations were read from a field the test set does not have. On 2025-12-25 (958f962, whose message reads “add support for thinking models ( especially for nsp)”, then d8489fa and 4d6ed0f) the next-speaker prompt gained an Output Format section, its reply gained a new parser, and the speaker prefix was removed from the record. The main results table has not changed in any arXiv version, so it predates all of these.
1.2 Data
The dataset covers 17,966 characters from 771 books. CoSER Test holds 200 English scenes held out from the final 10% of each book, 100 from books used to train the CoSER models (in-domain) and 100 from books not used (out-of-domain). We count, from the released file: 101 books (69 and 32); 1 to 5 speaking characters per scene, 479 in all, of whom 451 have a motivation; 9 to 32 original lines per scene (median 12), 7 scenes exceeding the simulation's limit of 20 lines. Environment is listed as a speaker in 130 scenes and appended in the other 70. 13 speaking characters have no profile text. The paper says scenes were drawn by a weighted sampling from the top half of conversations ranked by the characters' prominence. Neither that sampling nor the “final 10%” can be verified from what was released: the held-out plot file covers 15 books, one of which appears in the test set (4 scenes).
1.3 Given-circumstance acting
- Simulation. The model under test plays every character, with the scenario, the profiles of the characters involved and the character's motivation, and is instructed to write speech, action and inner thought. The paper's main results use GPT-4o as the environment and CoSER-70B as the next-speaker predictor (NSP), with no original lines given in advance (k = 0). The simulation stops at an end signal from the NSP or after 20 lines. Motivations and inner thoughts are hidden from the other characters.
- Judging. GPT-4o receives the plot summary, the scenario, the profiles and the original conversation, and reads the simulation without inner thoughts. In a separate request per dimension it lists flaws by detailed rubrics, each with a severity from 1 to 5.
- Score. A dimension scores 100 − 5 × the sum of severities + λ|M̄|, with λ = 1.5 as a length correction [4]. The overall score is the mean of storyline consistency, anthropomorphism, character fidelity and storyline quality. Scores are averaged across three runs. BLEU and ROUGE-L against the original dialogue are reported for analysis and are not in the overall score.
1.4 What the sources leave open
- Temperature, output limit, seeds, retries and failure handling: none is in the paper; a search of its source for these terms finds nothing about evaluation.
- The 60-word instruction, the start of the conversation and the per-model handling of prompts and replies are in the code, not in the paper's prompt tables (Appendix A).
- The meaning of the ± in the tables.
- The judge's version: the footnote with version 240806 belongs to the evaluated GPT-4o; the README states that reproduction must use gpt-4o-24-08-06 as the judge.
- What |M̄| counts. The formula reads as the whole simulation; the released examples show that only lines not spoken by the environment count (Section 2.2).
1.5 Related work
Most role-play benchmarks score a single reply given a fixed context, with a trained reward model, a fine-tuned judge or a prompted LLM. CoSER differs in two ways that shape its reproduction: the generation is a multi-agent simulation, so the result depends on the environment and next-speaker models as well as on the model under test; and the score counts flaws against a reference with a prompted LLM, so it depends on one API model's behaviour. The paper's own appendix shows how much that matters: GPT-3.5 scores 52.8 with GPT-4o (a column that holds the in-domain subset, Table 2), 35.9 with DeepSeek-R1 and 40.5 with DeepSeek-V3. Later papers with other configurations report very different values for the same models (Section 9).
2 Published results and their provenance
2.1 The published table
The paper's main table holds 21 models (Appendix B). The platform read it with a script (tools/experiments/coser_paper.py) that records the source's SHA-256 and writes the same data module for the server and the Worker; the audit bundle re-reads the table and confirms the 294 printed values (means and ± of 7 columns for 21 models, in each of the two modules) are unchanged. Tables/main_exp.tex is byte-identical in v1, v2 and v3. Every printed Average is within 0.005 of the mean of its four dimensions. Cells print a mean with a ±; the paper says results are “averaged across three runs” and does not define the ±. Model versions are as in the paper's footnotes (GPT-4o 240806, Claude-3.5-Sonnet 20240620, Doubao-pro 241215). CoSER-8B and CoSER-70B are the authors' models trained on this dataset.
19 rows of the main table equal the mean of the in-domain and out-of-domain table, as eval_reproduce.py computes it; the rows of GPT-4o and GPT-3.5 do not (Table 2). That is why this report calls that script the most likely source, not the source, of the numbers.
2.2 Inconsistencies in the sources
The reviews (Section 6) and a mechanical check of the paper's own numbers (coser_table_checks.py, in the audit bundle) found the following. Line numbers refer to arXiv v3.
| Where | What the sources say | Effect |
|---|---|---|
| Initial score | 4_Methodology.tex:76, 103: 100 − 5Σv. Appendix.tex:204, 212: 100 − Σv. In v1 both lacked the 5, while the main table was already today's. | ×5 is used. The released examples give 12 of 12 scores with ×5, 0 of 12 without; the paper’s case table agrees. |
| Length term | The formula says |M̄|. The released examples fit only the count of lines not spoken by the environment (12 of 12; 0 of 12 when environment lines count). | Lines not spoken by the environment are counted. |
| λ | Appendix.tex:208 fits a slope of −1.5909 on 1,200 cases and sets λ = 1.5. The cases were not released. | λ = 1.5; the fit cannot be recomputed. |
| Ceiling | The formula has no bounds. The code of the paper’s time floors at 0. A ceiling of 100 was added five days after v1 (2025-02-18); the README says scores range from 0 to 100. | Floor at 0, no ceiling (Section 3.2). The released examples cannot decide it: none of their 12 scores is out of bounds. |
| Severity | Text and template: 1 to 5. Storyline Quality rubric: up to 10 for repetition. | Not bounded, as in both code generations. |
| GPT-4o and GPT-3.5 rows | GPT-4o: main table Average 59.95; mean of the in-domain (58.54) and out-of-domain (60.46) table 59.50; Storyline Quality differs by 0.71. GPT-3.5: Average differs by 0.10, Storyline Consistency by 0.415. The other 19 rows agree within rounding. | The anchor’s target is not unique; Section 7.1 fixes it to the main table and reports the other value. |
| Judges table | The GPT-4o column of the table of different judges equals the in-domain Average for all 7 models, and the full-test Average for none; the caption does not say so. | The table is not used. |
| Marks and lists | The split table has wrong bold marks in three out-of-domain columns and wrong underlines in two in-domain columns. The text’s list of models above 57% omits GPT-4o Mini (57.93). The main table has Mistral-7B, the list of models does not. | None: numbers are taken, marks are not. |
| Ablation text | The text says inner thoughts and motivations improve “all models”; CoSER-8B scores 56.45 with motivations and 56.81 without. | None. |
| Critic template | The Character Fidelity rubric holds {major_characters}, which both code generations replace too early, so the judge receives the placeholder literally. | Kept, as it produced the numbers. Named here because the paper’s table reads as if it were filled. |
| Motivations | Since 297ffff the code reads motivation; all 456 entries of the test set have thought, so the current code gives characters no motivation although the paper requires them and its ablation table measures them (GPT-4o 59.95 → 56.34). | The field the data has is read. |
| Three runs | In 624efc5 the output path does not contain the run number, so the second and third runs reuse the first run's file unless regeneration is forced. | Three sessions per scene are really run. |
3 Sources of the protocol
3.1 Every setting and its source
Table 3 names the source of each setting of protocol 1.1. The full matrix with file and line references is published as docs/复现规范/CoSER-核查矩阵.md, in the audit bundle.
| Setting | Paper | Official code | Platform | Basis |
|---|---|---|---|---|
| Test set [C01] | 200 scenes, 100 + 100 | test_set.json | The released file, hash-pinned | Same; construction not verifiable |
| Language [C02] | Not stated | English | English only | Platform: the file is English |
| Environment model [C03] | GPT-4o | gpt-4o | openai/gpt-4o-2024-08-06, OpenAI only | Same; version from the paper’s footnote and the README |
| Judge model [C04] | GPT-4o | gpt-4o; README: gpt-4o-24-08-06 | openai/gpt-4o-2024-08-06, OpenAI only | Same |
| Next-speaker model [C05] | CoSER-70B | Paper-era: llama3-1210-8epc (taken to be CoSER-70B from the paper’s text; the code does not say so). Since 297ffff: default gpt-4o-mini | openai/gpt-4o-mini-2024-07-18, OpenAI only | Deviation (Section 3.2) |
| Character profiles [C06] | Provided | main.py:182-194 | Same | Code |
| Motivations [C07] | Provided | Paper-era: thought. Current: motivation, always empty | thought | Paper |
| Character prompt [C08] | Printed | utils.py; separator 1 of 5, output example except for CoSER models | Same | Paper and code (Appendix A) |
| 60-word line, conversation start, merging [C09] | Not printed | agent.py, both generations | Same | Code |
| Environment prompt [C10] | Printed | utils.py; identity phrase 1 of 4 | Same | Paper and code |
| Random choices [C11] | Not stated | random.seed(42); a shared stream; fallback from a set, whose order varies per process | A stream per protocol version, scene and purpose; same across models and runs | Platform: the official run cannot be replayed |
| Next-speaker prompt [C12] | Printed, no Output Format | Same until 958f962 added Output Format | The paper’s | Paper |
| Next-speaker parsing [C13] | Not stated | Text before the first colon, until 958f962 | Same | Paper-era code |
| Next-speaker history [C14] | Not stated | Parsed name only, until 958f962 | Same | Paper-era code |
| Speaking rules [C15] | End signal or 20 lines | First speaker fixed; end allowed from the 6th line; no one speaks twice in a row; invalid names replaced at random | Same | Code |
| Speaker names in the record [C16] | Thoughts hidden; case tables show prefixes | Prefixed until 958f962 | Prefixed | Paper; released examples 38 of 38 |
| Temperature, limits [C17] | Not stated | 0 then 1; 512 tokens; timeout 180 s. Judge limit 8,192 paper-era, 8,196 current | Same, with 8,196; connection settings cannot override them | Code (a limit neither judge reply is near) |
| Thinking and whitespace [C17a] | Not stated | Kept | A leading think block and surrounding whitespace are removed | Platform: thinking is not part of the reply; the same model may return it in a separate field |
| Empty replies [C18] | Not stated | Current: 6 tries, temperature 0, 1, 1, 1, 1, 1, then an empty line that still counts. Paper-era: 11 tries | As the current code | Code; no support in the paper for the earlier count |
| API errors [C18] | Not stated | Retried without limit | Bounded retries; the session fails and can be retried; no score | Platform: an unbounded retry cannot run |
| Content refusals [C18] | Not stated | An API error: retried without limit | 6 tries, then an empty line, counted and published | Platform |
| Model-name rules [C19] | Not stated | String tests on the name | A table of families, tested against the same rules | Code semantics; ids carry a provider prefix here |
| Judge prompts [C20] | Printed | prompts.py; replacement order | Same, placeholder kept literal | Paper and code |
| Judge input [C21] | No inner thoughts; original and plot summary | main.py:408-466 | Same | Paper and code |
| Reading the judge [C22] | Not stated | JSON extraction, one fix call per generation; 6 generations (paper-era 11); crash at the end | 6 generations; at the end the session fails | Current code; failure handling is a platform choice |
| Severities [C23] | 1 to 5 | Only Python int is summed; not bounded | Same | Code |
| Dimension score [C24] | 100 − 5Σv + 1.5|M̄|, no bounds | Paper-era: floor at 0. Since 0e11992: also a ceiling of 100 | Floor at 0; the ceiling variant is stored beside it | The paper for the formula, the code of its time for the floor |
| Overall [C25] | Mean of four dimensions | Same | Same; no rounding before display | Same |
| Three runs [C26] | Averaged across three runs | Paper-era: three runs. Current: reused | Three sessions per scene | Paper |
| ± and intervals [C27] | Undefined | None | Published per run: means and their sample standard deviation; the board’s interval resamples scenes | Platform |
| BLEU [C28] | For analysis | nltk; version not pinned | nltk 3.9.1 ported [5], not in the overall | Code |
| ROUGE-L [C29] | For analysis | rouge package; version not pinned | Not reported | Platform: none of the 10 PyPI releases matches the released values (Section 6.1) |
| Units and rounding [C30] | Performance (%), two decimals | Score 0–100; BLEU as a fraction | Full precision inside; two decimals shown; BLEU ×100 | The paper’s tables |
| Eligibility [C31] | — | — | Section 4.5 | Platform |
3.2 Deviations from the paper
- Next-speaker model. The paper uses CoSER-70B; the platform uses GPT-4o-mini (2024-07-18), the default of the official code since February 2025. The project owner chose this when protocol 1.0 was set up in October 2026, to avoid deploying a 141 GB model for one role; the README recommends CoSER-70B or another self-deployed model for better cost-efficiency. The weights are public [3], so this is a choice, not a necessity. The NSP decides who speaks and when the scene ends, and each extra line not spoken by the environment adds 1.5 to every dimension, so this deviation can move every dimension. Its size is unknown, and because CoSER-70B was not deployed the anchor cannot isolate it (Section 7.3).
- Random choices. Drawn from seeded streams instead of the official stream, which depends on earlier scenes and on Python's per-process hash seed. Every model under test sees the same choices. Single scenes cannot be aligned with an official run; averages should not be affected.
- Thinking. A leading think block is removed before anything else; the official code keeps it in the record and the judge's input. Only models that write their reasoning into the reply are affected, and the direction favours them.
- Content refusals. Recorded as empty lines rather than retried forever.
- ROUGE-L. Not reported.
In protocol 1.1 the prompts, the speaking rules and the record are those of the official main.py at d7cee90 (2025-02-25), whose default NSP is GPT-4o-mini, with the prompts of the paper's tables. The differences from that commit are the motivations, the absent ceiling, the random stream, the failure paths, the scope of the name-prefix rule (LLaMA-3.1-Instruct 8B and 70B, as in the paper-era code, where that commit applies it to all names starting with llama), the removal of a leading think block and of surrounding whitespace, the tag rules of remove_inner_thoughts, and the retry count and judge limit of the current code. No official commit equals protocol 1.1, and no published number was produced by it.
3.3 Where the current official code departs from the paper
Running 624efc5 as released would give different scores from the paper for reasons unrelated to the model under test: characters get no motivation; the simulation the judge reads has no speaker names, while the original conversation it compares with has them; the next-speaker prompt and parser differ; dimension scores have a ceiling; and the second and third runs repeat the first. The platform follows the paper, or the code of its time, on each. The authors' own recommendation for reproducing the paper is to use gpt-4o-24-08-06 as the judge; the README says nothing about the other differences.
4 The protocol on this platform
Protocol coser-gca-1.1 · 2026-11-01, as it stood when the leaderboard was withdrawn. It is no longer offered in the evaluation lab; the code stays in the repository. Every run stores this version with the prompts and settings it used.
4.1 Simulation
A session is one simulation of one scene. The engine asks the protocol module who acts next, sends the exact messages that agent would hold, stores the reply and moves on; a session can therefore stop and resume at any step. The model under test plays every character. GPT-4o (2024-08-06) plays the environment and GPT-4o-mini (2024-07-18) predicts the next speaker, each pinned to OpenAI with no fallback. Requests start at temperature 0, with a limit of 512 output tokens. The first speaker is the scene's first listed speaker. After every line the NSP names the next speaker; an unknown or repeated name is replaced by a seeded draw among the main characters and the environment, an end signal counts from the sixth line on, and after 20 lines the simulation ends.
Per-model handling follows the official code through a fixed table of model families (gca/family.ts): Claude and o1 receive the system prompt as a user message; only LLaMA-3.1-Instruct 8B and 70B and Step models get the “start your response with” line and have their reply cut to their own lines; models other than GPT and Claude have repeated text removed from their replies; CoSER models get no output examples. New model families fall under “other”.
4.2 Judging
Each session is judged in four independent requests to GPT-4o (2024-08-06), one per dimension, with the template and rubrics of the paper in the official replacement order. The system message holds the materials; the user message holds the simulation with inner thoughts removed and speakers named. A reply is read as the official code reads it: a JSON value is extracted, and if none is found the judge is asked once to repair it; every key must be a dimension and hold flaws; a missing severity counts as 1. A failed reading is requested again at temperature 1, six generations in all.
4.3 Scores
A dimension scores max(0, 100 − 5S + 1.5R): S sums the severities that are JSON integers (as Python's isinstance(x, int), so 3.0 and "3" do not count and true counts 1), R counts the lines not spoken by the environment, empty lines included. The variant with a ceiling of 100, which the official code has had since 2025-02-18, is stored beside it for each dimension of each session, so the effect of the choice can be computed from any run; a single session's dimension can exceed 100. A session's overall score is the mean of its four dimensions, and a run's dimension is the mean over its sessions. Nothing is rounded before display. BLEU is computed as nltk computes it on the lower-cased texts [5], stored ×100, and is not part of the overall score.
4.4 Failures
An empty reply is requested again at temperature 1, six tries in all, and the sixth result is recorded even if empty, as the official code does; it still counts in R. A content refusal by the provider takes the same path and is marked as refused; an account error or a gateway's 403 without a moderation marker is not treated as a refusal. Network errors, server errors and rate limits are retried at the same temperature with backoff, then fail the session, which can be retried from where it stopped; they never produce a score. If the judge cannot be read after six generations, or returns another dimension, the session fails rather than scoring zero. A scene that keeps failing therefore leaves the run incomplete; the official code would retry forever at the same point.
4.5 Run configurations and eligibility
| Configuration | Scenes | Runs | Sessions |
|---|---|---|---|
| Full test set | 200 | 3 | 600 |
| Quick sample | 20 (10 + 10) | 1 | 20 |
| Smoke test | 2 | 1 | 2 |
A run would have qualified for a ranking if it covered all 200 scenes at least three times under the current protocol, every session was complete, and the model under test was served by a single host with fallbacks disabled. The protocol also carried a flag that kept every run report-only until the anchor was judged. No run was ever ranked. Reasoning settings may be used and are marked in the model's name. The protocol's temperature, output limit and similar parameters cannot be overridden by connection settings. An address other than OpenRouter counts as one host.
4.6 Uncertainty and what each run records
The interval given with a run is a 95% percentile bootstrap (1,000 resamples) over the 200 scenes, resampling the three sessions of a scene together, because their scores are correlated. The result of each run also holds: the mean of each of the three runs and their sample standard deviation; the means of the in-domain and out-of-domain scenes; and, per role, the number of lines, of empty lines, of replies cut at the limit, of refusals, of calls that needed a retry, and for the NSP the fallbacks and end signals. The paper's ± is undefined, so the platform's standard deviation is not presented as the same quantity. The three runs are not independent in the statistical sense: their prompts are identical, including the seeded choices, and every first request is at temperature 0, so they differ only through what the providers vary. The paper-era code also reset its seed for each run.
4.7 Data availability and licences
The two runs of the anchor (Section 7) are not public: their simulations contain test-set text. Their numbers are in the audit bundle, by scene and without text. The repository states no licence (an open issue asks for one), so the platform loaded the test set from the pinned commit for evaluation, does not republish it, and quotes no prompts in this report beyond short phrases (Appendix A). The audit bundle contains no test-set text.
5 Judge validity
This reproduction checks that the platform runs the authors' procedure. It cannot check how well that procedure measures role-playing. The paper's evidence on that question is summarised here; none of it can be recomputed, because the annotations and individual scores were not released.
| Item | Paper | Status here |
|---|---|---|
| Human evaluation | 60 scenes, 7 models, 3 annotators on 20 scenes each, scale 1 to 10. CoSER-70B 6.783, Claude-3.5-Sonnet 6.200, GPT-4o 4.967, GPT-3.5 3.117 | Not reproducible: annotations not released |
| Alignment of GCA with GPT-4o | 68.6% | Not reproducible |
| Without reference, rubrics, length correction, dimension separation | 64.3%, 65.1%, 64.5%, 65.2% | Not reproducible |
| Other judges | DeepSeek-V3 65.1%, DeepSeek-R1 77.5% | Not reproducible |
| N-gram metrics | BLEU 75.3%, ROUGE-L 72.0% | Not reproducible |
| Length bias | Score falls by about 1.6 per round (1,200 cases; read here as lines) | Not reproducible; the platform stores R for every session, so the relation can be measured on its own runs |
Three readings of these numbers matter. The GPT-4o judge agrees with people less often than BLEU does in the authors' own measurement. People rank GPT-4o lower among these models than the GPT-4o judge does, which the authors put down to self-preference; GPT-4o is also the judge and the environment here. And the judge is one API model, which Section 7.3 shows does not necessarily behave as it did for the authors.
6 Reproduction verification
6.1 Verification matrix
Table 6 states what is compared at each stage and the result. coser_spec_check.py compares the platform's protocol module with a Python reference whose official functions are the repository's source text, pasted mechanically and checked against the repository on every run. The reference is not an official program: where the protocol takes the paper-era rule, the reference applies that rule, so the comparison shows that the platform implements the protocol as defined in Section 3. No model is called in these checks, except the last two rows of Table 6. They ran on 2026-11-01; outputs and logs are in the audit bundle.
| Stage | Compared with | Result | Status | Check |
|---|---|---|---|---|
| Generated strings | The official strings, extracted with Python’s parser from the pinned commits, against the platform’s file | Identical | Pass | G01–G04 |
| Prompts against the paper | The paper’s 12 printed prompts against the strings the platform sends, word by word | 956 of 986 paper tokens in order; 4 differences, all listed (Appendix A) | Pass | P-PROMPTS |
| Published table | The main table re-extracted from LaTeX against the data of the server and the Worker | 294 values unchanged | Pass | T01–T03 |
| Test set | SHA-256, 100 + 100, fields, identical to the older files | Equal | Pass | V01 |
| Prompts per scene | All agents’ prompts for 200 scenes × 7 model families, against the reference | 0 differences in 1,400 setups | Pass | V02 |
| Random choices | Same for all models; equal to an independent implementation | 0 differences | Pass | V03 |
| Next-speaker logic | Parsing and decisions on constructed replies | 0 differences | Pass | V04 |
| Simulation | Scripted outputs, including empty replies, through both implementations: every request’s messages, temperature and limit, the record, judge prompts and BLEU strings | 0 differences in 350 sessions | Pass | V05 |
| Text functions | Repetition removal, inner thoughts, speaker prefix, reply cut, Python printing of names and numbers | 0 differences | Pass | V07, P01 |
| Judge | Prompts for 200 scenes × 4 dimensions; reading of 47 constructed replies | 0 differences | Pass | V08 |
| Score | Released evaluation; constructed cases on both sides of the floor and above 100 | 12 of 12 released scores; 0 differences | Pass | V10 |
| Run statistics | Per-run means, their standard deviation, per-split means, against Python | 0 differences | Pass | V11 |
| BLEU | Released values; nltk 3.9.1 on 1,000 constructed pairs with correctly rounded logarithms | 3 of 3 to the last bit; 0 differences | Pass | V12 |
| ROUGE-L | The 10 releases of the rouge package on PyPI [6] on the 3 released values, as the code calls it; the GitHub master was not tested | None of the 10 matches any of the 3 values | Not reproduced | V12 |
| Engine, end to end | A local Worker with a stand-in for every model: each session replayed through the reference | Requests, temperatures, limits and scores equal over the whole run | Pass | E2E |
| Failures, end to end | Empty replies, refusals, a transient 500, a gateway 403 and an unreadable judge reply against the real engine | Temperature sequences 0, 1, 1, 1, 1, 1; refusals marked; the 500 retried at the same temperature; the 403 fails the session; the judge asked again at temperature 1 | Pass | V06 |
| Protocol parameters | Temperature, limit, top-p and seed placed in the connection’s settings | Not sent; reasoning kept | Pass | V14 |
| Full configuration | A 600-session run with stand-in models | All sessions complete; report-only under the flag | Pass | E2E |
| Fixed models | OpenRouter’s public listing on 2026-11-01 | GPT-4o 2024-08-06 (OpenAI and Azure) and GPT-4o-mini 2024-07-18 (OpenAI) listed | Available | V13 |
| Paper anchor | GPT-4o as the model under test, against the paper’s row (live models; Section 7.2) | Average −5.27; character fidelity −16.12 | Not reproduced | V09 |
| Judge recheck | The authors’ three released simulations through the same judge prompts, against their stored critiques (live model; Section 7.3) | Character-fidelity severities ×1.84 | Harsher | V09a |
6.2 What the reviews found and changed
Three reviews were run independently of each other, from the paper, from the official code, and from the numbers. The reviewers are AI agents run by the operator of this platform, not outside researchers; no one outside has reviewed this reproduction. The first two wrote their conclusions before reading the existing matrix and report; the third started from the report, as its task was to check its numbers. Their reports (in Chinese) are in the audit bundle. Table 7 lists the findings that changed something.
| Finding | Why it matters | Done |
|---|---|---|
| Protocol 1.0 took the next-speaker prompt, parser and history from December 2025 and the speaker prefix from February 2025; the commit that added one removed the other, so no official commit ever ran the combination. Its stated reason, that the new prompt was made for general-purpose models, is contradicted by the commit message and the ten months the default model ran with the paper’s prompt | The paper prints the prompt; project policy puts the paper first | Protocol changed: the paper’s prompt and the paper-era parser and history |
| Protocol 1.0 capped dimension scores at 100 | The formula has no ceiling, and the printed table predates the ceiling by days | Protocol changed; the capped value is stored too |
| An empty reply caused up to 30 requests with temperatures 0×5, 1×25, and failed tries were not billed | The current code’s sequence is 0, 1×5; the spending limit could not see these costs | Fixed; tested on the real engine |
| Connection settings could override temperature and output limit, and the run stayed eligible | A run could leave the protocol silently | Fixed; tested |
| A gateway 403 whose text matched the moderation pattern became a scored empty line | A failure must not become a score | Fixed for this benchmark; tested |
| The matrix promised a gate before the anchor; the code had none | A run could have entered the ranking unanchored | Added; it held until the leaderboard was withdrawn |
| The matrix claimed run-level ±, the in-domain and out-of-domain split and published truncation counts; the code had none of them. The interval treated 600 sessions as independent | Claims must be true; the interval was too narrow | Implemented; interval resamples scenes |
| Model ids outside the table, such as a provider’s route to Claude, fell into “other” | Wrong prompt role and post-processing | Table reads the last segment of the id |
| “ROUGE-L cannot be reproduced from any version” had no evidence in the repository | An unverifiable claim | Script added; claim restated by what was tested |
| Public texts said “follows the authors’ procedure” without the deviations | Misleading | All rewritten |
| End-to-end checks compared messages only, not how often or at what temperature | They could not have caught the retry fault | Rewritten to compare the whole sequence |
| The main table’s GPT-4o row differs from the split table | The anchor had no unique target | Target fixed before measurement (Section 7) |
| The third review checked 349 figures and statements of the draft of this report against their sources: 23 did not hold (16 items) and 8 could not be checked, among them a hash prefix, a day count, a claim about Table 3’s rows, and a judge path no run had exercised | Numbers must be traceable | All corrected; the judge path was added to the end-to-end run. The review describes the draft, so its figures may differ from this version |
Findings left as they are, with their reasons, are in the matrix (“交叉验证发现的处理”): the empty-line length bonus, the 512-token limit and the asymmetric repetition removal are official behaviour and are listed as limitations.
6.3 What this report establishes, and what it does not
- Is every setting traced to a source? Yes: Table 3 names each one, and the platform choices say why.
- Does the platform say the same as the paper? In the prompts, word for word except four listed items. In the formula, yes, with the floor at 0 taken from the code of the paper's time and the length term read as the released examples require. The next-speaker model is different.
- Does the platform do what its protocol says? On every request and score checked, yes, both in the protocol module and on the real engine with stand-in models. The engine runs used one family of model rules (“other”); the other families were checked in the protocol module only. Those checks used stand-in models; of the live providers, only OpenAI through OpenRouter has been exercised, in the anchor.
- Does a platform run reproduce the paper's numbers? No, by the criteria fixed in advance (Section 7.2). Two dimensions come close and two do not. No official commit equals the protocol, the released examples are three scenes outside the test set, and no simulation behind the paper's table was released, so the comparison cannot go further than Section 7.
- Does the critic measure what people judge? This report cannot say. The authors' figure is 68.6%, and it cannot be checked (Section 5).
- Is the test set what the paper describes? Its counts are. Its sampling and the “final 10%” cannot be checked beyond 4 of 200 scenes.
7 Paper anchor and withdrawal of the leaderboard
7.1 Design and criteria
The anchor runs the full test set under protocol 1.1 with openai/gpt-4o-2024-08-06, pinned to OpenAI, as the model under test, and compares it with the paper's GPT-4o row. The criteria below were written on 2026-11-01, before any measurement, and are in the matrix (V09).
| Storyline consistency | Anthropomorphism | Character fidelity | Storyline quality | Average | |
|---|---|---|---|---|---|
| Main table, GPT-4o (target) | 61.59 ± 0.66 | 48.93 ± 0.48 | 48.95 ± 1.73 | 80.33 ± 0.59 | 59.95 ± 0.50 |
| Mean of the split table (reported, not judged) | 61.085 | 48.795 | 48.50 | 79.62 | 59.50 |
| Reproduced | |Δ| ≤ 2.5 | |Δ| ≤ 2.5 | |Δ| ≤ 2.5 | |Δ| ≤ 2.5 | |Δ| ≤ 1.0 |
| Same range | |Δ| ≤ 5 | |Δ| ≤ 5 | |Δ| ≤ 5 | |Δ| ≤ 5 | |Δ| ≤ 3.0 |
Reproduced or same range would have opened platform runs. Anything else is not reproduced: runs stay closed, the cause is examined, and the project owner decides.
Basis. If the printed ± is taken as the standard deviation of three runs, which the paper does not state, the difference of two three-run means has a standard deviation of about √(2/3)·s: 0.41 for the Average (s = 0.50), 0.39 to 1.41 for the dimensions. 1.0 is 2.4 times the value for the Average; 2.5 is 1.8 times the value for character fidelity and at least 4.6 times the others. Both exceed the gap between the paper's own two GPT-4o figures (0.45 and at most 0.71). 3.0 is about a fifth of the range of the 21 Averages (45.53 to 59.95).
7.2 Result: not reproduced
| Storyline consistency | Anthropomorphism | Character fidelity | Storyline quality | Average | BLEU | |
|---|---|---|---|---|---|---|
| Platform | 62.27 | 42.05 | 32.83 | 81.57 | 54.68 | 4.95 |
| Main table | 61.59 | 48.93 | 48.95 | 80.33 | 59.95 | 5.90 |
| Δ | +0.68 | −6.88 | −16.12 | +1.24 | −5.27 | −0.95 |
| Three-run standard deviation | 0.66 | 0.80 | 2.01 | 0.40 | 0.80 | 0.08 |
| Platform, in-domain | 62.05 | 42.37 | 30.51 | 81.98 | 54.23 | 4.58 |
| Paper, in-domain | 59.88 | 48.11 | 47.10 | 79.06 | 58.54 | — |
| Platform, out-of-domain | 62.49 | 41.73 | 35.14 | 81.15 | 55.13 | 5.32 |
| Paper, out-of-domain | 62.29 | 49.48 | 49.90 | 80.18 | 60.46 | — |
007c947738f44da5, started 2026-11-01 12:19 UTC, 600 of 600 sessions complete. Read from coser_anchor.result.json.Three cells exceed the “same range” limits, in bold, so by the criteria the result is not reproduced. The 95% interval of the Average, resampling scenes, is [53.52, 55.8], so this is not noise. The ceiling makes no difference: with it the Average is 54.67, and only 3 session dimensions exceed 100.
The run itself was clean. The model under test wrote 7,222 lines, with 0 empty, 0 cut at the limit and 0 refused. The next-speaker model's name was replaced at random in 3.7% of its calls, and it ended 61% of the sessions. Sessions have 12.0 character lines on average. 24 sessions failed at their first step with a provider's HTTP 503 (error code 1019), having produced nothing, and were retried as the protocol allows. The run cost US$60.01; a 20-scene sample run before it cost US$2.05 and showed the same pattern (Average 56.39, character fidelity 32.15).
Where the gap comes from. In 25% of sessions the judge lists 10 or more character-fidelity flaws, nearly one per line, in 13% it does so for anthropomorphism, and in the other two dimensions almost never. 161 of 600 sessions score 0 on character fidelity and 75 on anthropomorphism, against 1 and 1 on the others. The length of the simulation does not explain the Average, which stays between 53.5 and 56.4 across all lengths (Table 8b), though it does move the dimensions in opposite directions.
| Character lines | Sessions | Storyline consistency | Anthropomorphism | Character fidelity | Storyline quality | Average |
|---|---|---|---|---|---|---|
| 3–6 | 58 | 56.2 | 47.1 | 47.3 | 75.1 | 56.4 |
| 7–9 | 109 | 56.1 | 41.3 | 37.5 | 79.1 | 53.5 |
| 10–12 | 120 | 59.1 | 42.2 | 32.6 | 81.0 | 53.7 |
| 13–15 | 203 | 67.3 | 42.0 | 29.8 | 83.4 | 55.7 |
| 16–20 | 110 | 65.7 | 40.0 | 26.4 | 84.6 | 54.2 |
7.3 Rechecking the judge on the authors' own simulations
To separate the judge from everything before it, the three simulations the authors released were sent through the official judge prompts, to the same model and host, twice each, and compared with the critiques the authors stored for them. No simulation is generated, so the next-speaker model and the model under test play no part. The criteria were written into coser_judge_recheck.py before the first request; the result is harsher. The authors' file does not record which judge produced its critiques; the README asks for gpt-4o-24-08-06 and the example command names gpt-4o.
| Dimension | Stored S | Today S | Ratio | Stored score | Today score |
|---|---|---|---|---|---|
| Storyline consistency | 29 | 26.5 | 0.91 | 66.17 | 70.33 |
| Anthropomorphism | 37 | 41.5 | 1.12 | 52.83 | 45.33 |
| Character fidelity | 38 | 70.0 | 1.84 | 51.17 | 14.00 |
| Storyline quality | 21 | 20.5 | 0.98 | 79.50 | 80.33 |
The pattern matches the anchor: character fidelity moves most, anthropomorphism a little, the other two hardly. The change therefore appears on identical input, before anything the platform generates.
| Variant | S per scene | Flaws per scene |
|---|---|---|
| placeholder filled, 2024-08-06, OpenAI | 23.67 | 11, 11 · 5, 5 · 5, 9 |
| literal, 2024-08-06, Azure | 20.33 | 11 · 4 · 5 |
| literal, 2024-05-13, OpenAI | Not available through OpenRouter (HTTP 404) | — |
| literal, 2024-11-20, OpenAI | 17.00 | 5 · 5 · 5 |
| literal, gpt-4o alias, OpenAI | 23.00 | 11 · 5 · 9 |
No variant brings the stored critiques back. Filling in the placeholder that both code generations leave literal changes nothing, nor does the other host. The later snapshot stops listing line by line but stays above the stored severities.
What this establishes. On these three simulations, today's judge is harsher on character fidelity than the stored critiques, with the same prompts and the same model name. What it does not. Why: the authors' setting at the time is not recorded and a provider's changes cannot be observed. Three scenes outside the test set are a small sample, although two passes agree closely. That the judge is the whole gap: the next-speaker model and the model under test have not been measured separately, and the agreement of the other two dimensions only suggests that they are not the main cause.
7.4 Why the leaderboard was withdrawn
The anchor's failure raised a broader question: whether the score, however faithfully produced, measures what a ranking needs. The evidence, from 600 sessions of one model (Table 8e) and from the paper's own tables, is that it does not.
| Dimension | ICC, same scene | Median range within a scene, 3 runs | Sessions at the floor of 0 | Raw slope per line | Net slope per line | Range of the 21 models in the paper |
|---|---|---|---|---|---|---|
| Storyline consistency | 0.55 | 15.0 | 1 | −0.32 | +1.18 | 51.25–61.59 |
| Anthropomorphism | 0.33 | 21.8 | 75 | −3.04 | −1.54 | 35.48–53.33 |
| Character fidelity | 0.38 | 29.5 | 161 | −5.22 | −3.72 | 31.51–48.95 |
| Storyline quality | 0.36 | 10.0 | 1 | −0.77 | +0.73 | 60.43–80.33 |
- The score is a count of what the critic chooses to write, not a scale. It starts at 100 and only falls: good role-playing earns nothing, and the instruction to identify all instances of flaws invites longer lists. The list length is not stable. In 56 of 200 scenes the same model on the same scene received at most 5 character-fidelity flaws in one run and 10 or more in another. The lower end is cut off: the 161 sessions at 0 would average -48.3 without the floor, so the scale cannot tell them apart. The top is not 100 either: the official code writes 100 for the original conversation without judging it, and when we judged it (Table 8f) the length term took it to 115.9 on storyline consistency.
- The length correction does not correct. One λ is applied to dimensions whose flaws grow with length very differently (Table 8e). After it, a longer simulation gains on storyline consistency and quality and loses on character fidelity and anthropomorphism. The term is not small: it supplies 18.1 points of the Average, about a third, and it counts lines however empty, so a blank line earns 1.5 points in every dimension. The length is largely decided by the next-speaker model, not by the model under test.
- Comparing with the original adds little, on the authors' own evidence. The simulation starts from scratch and the actors never see the original conversation, so a sound continuation that goes elsewhere counts as deviation; one conversation stands in for everything the scene allows. In the paper's alignment table (Table 5), removing the reference moves GPT-4o from 68.6% to 64.3% and DeepSeek-R1 from 77.5% to 77.2%. Removing rubrics, length correction or dimension separation costs at most 4.1 points each. BLEU, a plain count of shared word sequences at 5.90 for GPT-4o, reaches 75.3%, above the whole judged pipeline with GPT-4o. The elaborate procedure does not earn its authority.
- The instrument moves as much as the models differ. The anchor's shift of 5.27 on the Average exceeds the 3.71 between the paper's top model and its median; 15 of its 21 models lie within that distance of the top. The shift of 16.12 on character fidelity is nearly the whole range of the 21 models on that dimension (31.51–48.95), and it appears on identical input with the same model name (Section 7.3). Other judges move scores further: GPT-3.5 gets 52.8, 35.9 and 40.5 in the paper's own table, and later work with other judges gives CoSER-70B 35.95 against the paper's 59.06 (Section 9). The score has no scale independent of the judge, and human annotators order models differently from it: GPT-4o is first by its own judgement and third of seven by theirs (Table 5).
- Averaging does not rescue it. For one session the score is dominated by noise: the median range of a scene's overall score across three runs is 13.8 points. Averaging 600 sessions narrows the interval to about ±1.1, but it narrows the error around whatever the instrument measures, and items 1 to 4 are about what it measures: list length, simulation length and the judge's current habits. A precise number of that kind is not a ranking of role-playing ability.
A test that went the other way. We expected the critic to find flaws in the book itself, and sent the original conversations of 24 scenes to it as if they were simulations. The criteria, written into coser_method_validity.py before the first request, asked for at least 90 on storyline consistency and more than GPT-4o on the same scenes on all four dimensions. The result is passes (Table 8f): the book scores 97.94 on average against 51.75 for GPT-4o, so the critic does separate them. The test is weaker than it looks, because it is not blind: the text being judged is word for word the reference the critic is given, and a critic that only compares the two would give the same result. It therefore shows that the score rewards matching a conversation the model under test never saw, and does not show how the critic would judge good writing it had no reference for. Even so, the critic lists 4.2 anthropomorphism flaws per scene in human-written dialogue, with 9.8 points of severity against 18.1 for GPT-4o, and rates the book below GPT-4o on that dimension in 3 of the 24 scenes.
| Dimension | Book: score | GPT-4o: score | Book: flaws | Book: S | GPT-4o: S | Scenes where the book scores lower |
|---|---|---|---|---|---|---|
| Storyline consistency | 115.85 | 61.77 | 0.08 | 0.29 | 11.13 | 0 |
| Anthropomorphism | 68.56 | 35.03 | 4.21 | 9.75 | 18.07 | 3 |
| Character fidelity | 104.19 | 28.08 | 0.92 | 2.63 | 21.40 | 0 |
| Storyline quality | 103.15 | 82.12 | 1.17 | 2.83 | 7.06 | 0 |
These problems lie in the method, not in the reproduction, so no correction to this platform's implementation would remove them, and changing the judge, the scale or the formula until the paper's numbers return would be fitting the protocol to a result. A leaderboard would present those numbers as an ordering of models, so the platform withdrew it.
What this does not show. The evidence comes from one model on this platform and from the paper's tables; the order of models under today's judge was not tested. A 68.6% agreement with people is better than chance, and the critic does separate the book from GPT-4o (Table 8f), so the score is not pure noise. The authors' numbers may be exactly what their judge returned at the time. The CoSER dataset and its use for training are outside this analysis. For anyone comparing new GCA scores with the paper's table using gpt-4o-2024-08-06 as the judge, the practical warning is to check first that the judge still returns the authors' stored critiques. Reinstating a board would take a different scoring method, and with it a different benchmark.
8 Reproducing this report
The checks behind Sections 2, 3, 6 and 7 are published as an audit bundle, /audit/coser/2026-11-01/, with the SHA-256 of every file: the scripts and the platform source as run, each step's output and log, the outputs of the local end-to-end runs, the anchor's numbers by scene, the judge recheck and the analysis of Section 7.4, the three independent reviews, and the search behind Section 9. It contains no test-set text. With the bundle, the authors' repository and the arXiv e-prints, a third party can repeat the scripted checks without any model:
Commands
git clone https://github.com/Neph0s/CoSER repo
for v in 1 2 3; do mkdir -p eprint/v$v; curl -L https://arxiv.org/e-print/2502.09082v$v | tar xz -C eprint/v$v; done
python3 -m venv venv && venv/bin/pip install nltk==3.9.1 regex
venv/bin/python -c "import nltk; nltk.download('punkt_tab', download_dir='nltk_data')"
venv/bin/python -I tools/experiments/coser_spec_check.py repo nltk_data # Section 6: the protocol module (needs node)
python3 -I tools/experiments/coser_prompt_check.py eprint/v3 # Appendix A: prompts against the paper (needs node)
python3 -I tools/experiments/coser_table_checks.py eprint repo # Section 2: the paper's own numbers
python3 -I tools/experiments/coser_paper.py eprint/v3 # Section 2.1: rewrites published.ts; git diff must stay empty
venv/bin/python -I tools/experiments/coser_rouge_check.py repo work # Section 6: ROUGE-L; downloads the rouge releases, needs uv
python3 -I tools/experiments/coser_e2e_mock.py 18999 requests.jsonl # the stand-in for every model
venv/bin/python -I tools/experiments/coser_e2e_check.py repo nltk_data requests.jsonl <api> <token file> <run> # after a local run
venv/bin/python -I tools/experiments/coser_judge_recheck.py repo <file with an OpenRouter key> out.json # Section 7.3: about US$0.25, calls the live judgeThe end-to-end check needs a local Worker pointed at the stand-in (OPENROUTER_BASE_URL). Some findings rest on the reviews and are not re-checked by a bundled script: the reading of the commit history, the sections of the paper not concerning evaluation, and the search of Section 9.
9 Third-party results
We searched arXiv, GitHub, Hugging Face and the web on 2026-11-01 for later work reporting CoSER scores; queries and sources are in coser_third_party_search.md in the audit bundle. Google Scholar could not be used and Semantic Scholar returned only part of the citations, so the list is not exhaustive. We found no complete reproduction with the paper's configuration: no work combining gpt-4o-2024-08-06 as judge, all 200 scenes and the models of the main table. These results cannot be set beside the paper's, because their judges, next-speaker models and sometimes their test sets differ, most without stating them. CogDual, with a GPT-4o judge of unstated version, reports an Average for GPT-4o of 54.76, close to the 54.68 of Section 7.2; that may be a coincidence, as its other settings are not stated. They do show how strongly the score depends on the judge and the rest of the configuration. In the official repository's 12 issues nobody reports a failure to reproduce or a disagreement with the paper's numbers.
| Source | Judge and test set as stated | Reported (overall) | Relation to the main table |
|---|---|---|---|
| CogDual [7] | GPT-4o, version not stated; size and runs not found | GPT-4o 54.76; LLaMA-3.1-8B 43.85 | Below it: GPT-4o 59.95, LLaMA-3.1-8B 52.99 |
| DREAM [8] | GPT-4o, version not stated; 100 sampled; 10 runs. An author shares a name with CoSER’s first author (not confirmed the same person) | GPT-4o 59.35; LLaMA-3.1-8B 53.20; CoSER-8B 56.82 | Close: 59.95, 52.99, 56.45 |
| HER [9] | Qwen3-235B; 200 scenes; author names overlap CoSER’s | CoSER-70B 35.95; GPT-4o-240806 27.69; Claude-4.5-Opus 62.43 | Other judge. Order of CoSER-70B and GPT-4o reversed (main table 59.06, 59.95) |
| Agentopia [10] | Qwen3-235B as judge, NSP and environment; 200 scenes; author names overlap CoSER’s | Qwen3.5-397B 42.51; CoSER-70B 35.95 | Other judge. The 35.95 and four other rows equal HER’s digit for digit, so they are not independent results |
| RAPO [11] | GPT-4o-mini; size not found | GPT-4o-mini 45.09; Llama-3.1-8B-CoSER 47.59 | Other judge; whether official weights were used is not stated |
| Ditto [12] | gpt-5.4 as judge, gpt-5-nano as environment; 200 scenes; scores on 0 to 1 | GPT-5.4 0.659; Coser 8B 0.305 | Other judge (main table CoSER-8B 56.45) |
| OdysSim [13] | gpt-5.4, stated in its appendix on the scoring set-up; 100 evaluation instances in its table of tasks; authors overlap Ditto’s | Claude Opus 4.7 66.5; Coser 8B 30.0 | Other judge |
| Socio-Foundation [14] | DeepSeek-V4-Flash as partner and judge; 200 scenes; four dimensions, no overall | CoSER-8B 55.5, 31.1, 31.0, 47.6 | Other judge |
| CaMOPD [15] | Qwen2.5-72B as judge, NSP and environment; size not found | CaMOPD 45.00 | No shared model. It states that the official GPT-4o configuration gives the same order, without numbers |
| PersMem [16] | DeepSeek-v4-flash; size and runs not stated | PersMem 66.13 | One own row. Its table of references reprints eight main-table rows digit for digit, labelled as cited |
| AdvRole [17] | GPT-4o as partner and judge, 30 turns as stated; only its own models are run | AdvRole (Qwen2.5-7B) 59.1 | Baselines reprinted, rounded. Its GPT-4o row mixes CogDual’s dimensions with the main table’s n-gram scores |
10 Platform results and history
The platform has no CoSER leaderboard. It made two runs of CoSER, both with GPT-4o (2024-08-06) as the model under test, both for the anchor: a 20-scene sample and the full test set of Section 7.2. Neither was ever ranked. Both stay in the platform's database for audit, not public; the addresses of the board now lead to this report.
10.1 Protocol history
- 1.0 (labelled 2026-10-28; committed 2026-10-27 19:53 UTC) was the first protocol. It used the next-speaker prompt, parser and history of December 2025 and a ceiling of 100, and had the engine faults of Table 7. No run of it is on the leaderboard.
- 1.1 (2026-11-01) is the last protocol: the paper's next-speaker prompt with the paper-era parser and history, no ceiling, the official retry sequence, and fixed settings. It was checked as in Section 6 and anchored as in Section 7, and was withdrawn the same day with the leaderboard.
10.2 Report history
- 2026-10-27. First versions (their text was dated 2026-10-26): the original benchmark and the published results, then the published results separated from platform runs as the original leaderboard, with a short description of the planned reproduction.
- 2026-11-01. Rewritten: the protocol and every setting's source; inconsistencies in the sources; verification; the anchor's criteria; third-party work; audit bundle. Corrections to earlier versions: the test set is held out from the final 10% of each book, not from the final 10% of books; the script of the paper's time is the most likely source of the numbers, not established as the source; the commit is dated 14 February, not the day of v1; “every model sees the same prompts” holds for the seeded choices only, as output examples and roles follow the model family. Later the same day: the anchor's result, the recheck of the judge, an analysis of what the score measures, the withdrawal of the leaderboard on that ground, and the paper's main table as Appendix B, since the original leaderboard no longer lists it.
11 Limitations
- Not reproduced, and the score itself is in question. Scores from this protocol cannot be compared with the paper's, and Section 7.4 explains why they should not rank models either. The cause of the gap is established only as far as Section 7.3 goes.
- Next-speaker model. It differs from the paper, and its separate effect cannot be measured without deploying CoSER-70B.
- No official commit equals the protocol, and no published number was produced by it.
- The judge is an evaluated model and a provider's model. GPT-4o judged itself in the anchor; the authors report self-preference. A dated model name does not guarantee the behaviour of the time (Section 7.3).
- Judge validity cannot be checked (Section 5). The authors' alignment of 68.6% is lower than that of BLEU in the same table.
- The protocol was built for 2024 models. Three official rules can affect today's models unevenly, and none has been measured, as only GPT-4o was run: the limit of 512 tokens may leave a model that reasons inside that limit with short or empty replies; empty lines earn the length bonus (1.5 per line in each dimension), which the judge may or may not outweigh; and repetition is removed from the replies of all but GPT and Claude models, while the rubric penalises repetition. Reasoning models averaged several hundred output tokens per reply on another benchmark here, so this limit would have mattered.
- Refusals. Treating them as empty lines is a platform choice. A scene whose judge keeps being refused leaves the run incomplete.
- Thinking removal favours models that write reasoning into their reply.
- Three runs are not independent repetitions (Section 4.6), so their standard deviation understates what independent repetitions would show, and the paper's ± is undefined.
- No outside review. The three reviews were run by the operator (Section 6.2).
- Providers largely untested. The verification used stand-in models, and the anchor used OpenAI alone, which refused nothing. How other providers report refusals on this material is unknown.
- Test set. Its construction cannot be verified, and the repository states no licence for it.
- Partial reproduction of the paper. The anchor covers the main table's four dimensions, Average and BLEU. They do not cover ROUGE-L, win rates, the k = 3 setting, ablations, retrieval augmentation, other judges, other benchmarks or the human evaluation.
- Model family table. It reads model ids, and a misclassified model would get different prompts. Only the “gpt” family has met a live model.
References
- X. Wang, H. Wang, Y. Zhang, X. Yuan, R. Xu, J. Huang, S. Yuan, H. Guo, J. Chen, S. Zhou, W. Wang, Y. Xiao. CoSER: A Comprehensive Literary Dataset and Framework for Training and Evaluating LLM Role-Playing and Persona Simulation. ICML 2025. arXiv:2502.09082 (v3, 4 Jan 2026; v1 of 13 Feb 2025 and v2 of 28 May 2025 carry the title “CoSER: Coordinating LLM-Based Persona Simulation of Established Roles”). https://arxiv.org/abs/2502.09082
- Neph0s. CoSER: code, test data and GCA evaluation. GitHub, commits 93c1474 (14 Feb 2025) and 624efc5 (2 Apr 2026). The repository states no licence. https://github.com/Neph0s/CoSER
- Neph0s. CoSER-Llama-3.1-70B. Hugging Face, model weights (the model card is tagged MIT). https://huggingface.co/Neph0s/CoSER-Llama-3.1-70B
- Y. Dubois, B. Galambosi, P. Liang, T. B. Hashimoto. Length-Controlled AlpacaEval: A Simple Way to Debias Automatic Evaluators. arXiv:2404.04475, 2024. https://arxiv.org/abs/2404.04475
- S. Bird, E. Klein, E. Loper. NLTK 3.9.1, the implementation of BLEU and word tokenization this report ports. https://www.nltk.org/
- pltrdy. rouge: a Python implementation of the ROUGE metric. PyPI, versions 0.2 to 1.0.1. https://pypi.org/project/rouge/
- C. Liu, Y. Lu, F. Ye, et al. CogDual: Enhancing Dual Cognition of LLMs via Reinforcement Learning with Implicit Rule-Based Rewards. arXiv:2507.17147v1, 2025. https://arxiv.org/abs/2507.17147v1
- Z. Xiao, M. Li, X. Wang, et al. DREAM: LLM-based Dynamic Role-playing via Event-Aware Memory Graph. arXiv:2608.05170v1, 2026 (KDD 2026). https://arxiv.org/abs/2608.05170v1
- C. Du, X. Wang, A. Chen, et al. HER: Human-like Reasoning and Reinforcement Learning for LLM Role-playing. arXiv:2601.21459v4, 2026 (Findings of ACL 2026). https://arxiv.org/abs/2601.21459v4
- X. Wang, S. Zheng, H. Wu, et al. Agentopia: Long-Term Life Simulation and Learning in Agent Societies. arXiv:2606.07513v1, 2026. https://arxiv.org/abs/2606.07513v1
- Z. Xu, D. Chen, J. Li, et al. Improving General Role-Playing Agents via Psychology-Grounded Reasoning and Role-Aware Policy Optimization (RAPO). arXiv:2606.27025v1, 2026. https://arxiv.org/abs/2606.27025v1
- W. Sun, X. Zhou, J. Liu, et al. Reinforcing Human Behavior Simulation via Verbal Feedback (Ditto). arXiv:2605.20506v1, 2026. https://arxiv.org/abs/2605.20506v1
- X. Zhou, W. Sun, W. Du, et al. OdysSim: Building Foundation Models for Human Behavior Simulation. arXiv:2606.14199v2, 2026. https://arxiv.org/abs/2606.14199v2
- L. Wang, W. Xie, X. Mou, et al. Socio-Foundation: A Model for Generalizable Individual Behavior Simulation via Hierarchical Capability Distillation. arXiv:2610.08967v1, 2026. https://arxiv.org/abs/2610.08967v1
- T. Chen, J. Ou, Z. Liu, et al. Counteraction-Aware Multi-Teacher On-Policy Distillation for General Capability Recovery with Domain Preservation (CaMOPD). arXiv:2605.27115v2, 2026. https://arxiv.org/abs/2605.27115v2
- H. Zhang, Z. Xiang, W. Xie, et al. PersMem: Internalizing Personality into Dual-Pathway Memory for LLM Agents. arXiv:2609.34372v1, 2026. https://arxiv.org/abs/2609.34372v1
- Z. Zhang, L. Liu, Q. Chai, et al. Adversarial Closed-Loop Curriculum for Evolving Role-Playing Agents (AdvRole). arXiv:2609.28609v1, 2026. https://arxiv.org/abs/2609.28609v1
Appendix A: Prompts
The prompts are printed in the paper's tables (Tables/prompts_agent.tex, prompts_agent_2.tex, prompts_eval.tex, prompts_eval_2.tex) and in the repository at the pinned commits. Because the repository states no licence, this report identifies them instead of reprinting them. The platform's strings are extracted from the source with Python's parser and never typed by hand; coser_prompt_check.py compares them with the LaTeX tables word by word and fails on any difference not listed below. Table A1 is read from its output.
| Prompt | Paper tokens | Equal, in order | Platform tokens | Differences | SHA-256 |
|---|---|---|---|---|---|
| character template | 97 | 97 | 97 | 0 | bd2cc8d30574… |
| environment | 153 | 153 | 153 | 0 | e85f5fb4ef37… |
| next speaker (the string sent, 93c1474) | 76 | 76 | 76 | 0 | a5bfc4461784… |
| next speaker (current code's string, 624efc5, not sent) | 76 | 76 | 103 | 1 | a914186a5e27… |
| judge template | 258 | 228 | 232 | 4 | ce166d1b7a7b… |
| Anthropomorphism: intro | 7 | 7 | 7 | 0 | 9f095f99cfe6… |
| Anthropomorphism: rubrics | 119 | 119 | 119 | 0 | d0ac111d056a… |
| Character Fidelity: intro | 11 | 11 | 11 | 0 | cb678e4e825d… |
| Character Fidelity: rubrics | 154 | 154 | 154 | 0 | 3ef8adec46ca… |
| Storyline Quality: intro | 10 | 10 | 10 | 0 | 96928c91730e… |
| Storyline Quality: rubrics | 59 | 59 | 59 | 0 | 20f0e9fd4e0f… |
| Storyline Consistency: intro | 18 | 18 | 18 | 0 | a0f64b0fbdd4… |
| Storyline Consistency: rubrics | 24 | 24 | 24 | 0 | 070c09793521… |
| Prompt | Paper | Platform | What it is |
|---|---|---|---|
| next speaker (current code's string, 624efc5, not sent) | — | ===Output Format=== You must structure your response as foll… | added to the official code in December 2025 (958f962, “add support for thinking models”); not in the paper's table and not sent by protocol 1.1 (matrix C12) |
| judge template | {dimension_intro}. | {dimension_brief}. | placeholder name only |
| judge template | Please note that the first {k} messages in the simulated con… | — | printed for k > 0 only; the main results and the platform use k = 0, where the code's additional_instructions is empty |
| judge template | {dimension_rubrics} | {dimension_criteria} | placeholder name only |
| judge template | },}, | }, }, | space inside the JSON example, not kept by the table |
Models also receive text that the paper's tables do not print, from the code of both generations: a line limiting the reply to 60 words after the role-play instruction (“Limit your response to 60 words.”), a first user message marking the start of the conversation, one of five separators between the other characters' profiles, and, for the families of Section 4.1, a line telling the model to start with its character's name.
Appendix B: The paper's main table
The results the authors published, read unchanged from Tables/main_exp.tex of the arXiv e-print by coser_table_checks.py (byte-identical in v1, v2 and v3). These are the authors' results, not the platform's, and they are means of three runs with the paper's undefined ± left out. CoSER-8B and CoSER-70B are the authors' models. Section 7 explains why they could not be reproduced with today's judge.
| Model | Storyline consistency | Anthropomorphism | Character fidelity | Storyline quality | Average | BLEU | ROUGE-L |
|---|---|---|---|---|---|---|---|
| Abab7-preview | 56.81 | 44.23 | 43.83 | 74.83 | 54.92 | 4.96 | 11.50 |
| Doubao-pro | 60.95 | 49.72 | 47.02 | 79.28 | 59.24 | 6.38 | 12.95 |
| Step-1-Flash | 57.75 | 48.12 | 44.48 | 75.93 | 56.57 | 5.95 | 12.71 |
| Step-2 | 61.43 | 49.06 | 47.33 | 77.96 | 58.94 | 5.75 | 12.50 |
| GPT-3.5 | 57.22 | 43.30 | 42.29 | 73.91 | 54.18 | 4.58 | 11.80 |
| GPT-4o | 61.59 | 48.93 | 48.95 | 80.33 | 59.95 | 5.90 | 12.11 |
| GPT-4o Mini | 60.09 | 48.21 | 44.88 | 78.55 | 57.93 | 3.90 | 10.81 |
| Gemini Pro | 59.11 | 52.41 | 47.83 | 77.59 | 59.24 | 5.39 | 11.65 |
| Claude-3-Haiku | 58.18 | 44.66 | 41.88 | 74.14 | 54.71 | 4.80 | 12.02 |
| Claude-3.5-Sonnet | 57.45 | 48.50 | 45.69 | 77.23 | 57.22 | 5.17 | 11.45 |
| Mistral-7B | 59.90 | 40.00 | 44.75 | 61.93 | 51.64 | 2.71 | 9.28 |
| Qwen-2-7B | 51.96 | 35.48 | 31.51 | 63.18 | 45.53 | 4.21 | 10.71 |
| LLaMA-3.1-8B | 54.10 | 45.36 | 40.22 | 72.29 | 52.99 | 4.59 | 10.18 |
| CoSER-8B | 58.61 | 47.23 | 46.90 | 73.04 | 56.45 | 9.40 | 14.21 |
| Vicuna-13B-1.5 | 52.75 | 39.12 | 38.04 | 60.43 | 47.58 | 1.67 | 5.59 |
| Mixtral-8x7B | 51.25 | 38.44 | 36.92 | 67.69 | 48.58 | 5.28 | 11.66 |
| Qwen-2-72B | 57.75 | 47.28 | 46.62 | 76.60 | 57.06 | 5.38 | 11.85 |
| LLaMA-3.1-70B | 57.46 | 45.95 | 43.72 | 74.84 | 55.49 | 4.82 | 10.98 |
| Higgs-Llama-3-70B | 57.10 | 43.82 | 42.41 | 75.62 | 54.74 | 3.99 | 10.92 |
| CoSER-70B | 58.66 | 53.33 | 48.75 | 75.49 | 59.06 | 10.10 | 14.78 |
| DeepSeek-V3 | 56.40 | 47.87 | 44.02 | 76.66 | 56.24 | 4.54 | 11.02 |