Best LLMs for Author Matching
Matches content to fictional authors or creates new author personas
Models
Frontier on this task: Grok 4.5 at 9.07 / 10. Quality bar at 90%: 8.16.
point-estimate floor (CI low) · upper CI (less certain) · Bars sorted by blended cost; best-value model first. Greyed rows are MEDIUM+ models whose point estimate clears the bar but whose CI low does not.
| Model | Quality score | CI low | Cost / 1k runs | vs best value |
|---|---|---|---|---|
| DeepSeek V4 Pro | 8.45 / 10 | 8.19 | $6.47 | best value |
| Qwen 3.6 Plus | 8.20 / 10 | 7.86 | $9.15 | 1.4x more expensive |
| Gemini 3.1 Pro Preview | 8.40 / 10 | 8.13 | $11.44 | 1.8x more expensive |
| Gemini 3.5 Flash | 8.33 / 10 | 7.85 | $16.97 | 2.6x more expensive |
| Kimi K2.6 | 8.41 / 10 | 8.13 | $22.72 | 3.5x more expensive |
| Claude Sonnet 4.6 | 8.21 / 10 | 7.83 | $23.24 | 3.6x more expensive |
| Grok 4.5 | 9.07 / 10 | 8.71 | $33.96 | 5.2x more expensive |
| GPT-5.5 | 8.43 / 10 | 8.14 | $41.35 | 6.4x more expensive |
| MiniMax M3 | 7.80 / 10 | 7.57 | $1.08 | 83% cheaper |
| Claude Haiku 4.5 | 7.59 / 10 | 7.19 | $7.66 | 1.2x more expensive |
| DeepSeek V4 Flash | 7.68 / 10 | 7.27 | $2.16 | 67% cheaper |
| Gemini 3.1 Flash Lite | 7.91 / 10 | 7.57 | $2.12 | 67% cheaper |
| Claude Sonnet 5 | 7.79 / 10 | 7.31 | $57.24 | 8.8x more expensive |
| Qwen 3.5 Flash | 7.92 / 10 | 7.49 | $3.77 | 42% cheaper |
| GPT-5.4 Nano | 6.80 / 10 | 6.38 | $1.91 | 70% cheaper |
| GPT-5.4 Mini | 7.48 / 10 | 7.12 | $3.45 | 47% cheaper |
Cost breakdown
| Model | Quality | Confidence | Cost / 1k runs | Overpay | Mode |
|---|---|---|---|---|---|
| DeepSeek V4 Pro ★ DeepSeek | 8.45 / 10 CI [8.19, 8.71] | HIGH | $6.47 | best value | batch |
| Qwen 3.6 Plus Alibaba Cloud (DashScope) | 8.20 / 10 CI [7.86, 8.54] | MEDIUM | $9.15 | 1.4x | batch |
| Gemini 3.1 Pro Preview Gemini | 8.40 / 10 CI [8.13, 8.67] | HIGH | $11.44 | 1.8x | batch |
| Gemini 3.5 Flash Gemini | 8.33 / 10 CI [7.85, 8.82] | MEDIUM | $16.97 | 2.6x | batch |
| Kimi K2.6 Moonshot AI | 8.41 / 10 CI [8.13, 8.70] | HIGH | $22.72 | 3.5x | batch |
| Claude Sonnet 4.6 Anthropic | 8.21 / 10 CI [7.83, 8.58] | MEDIUM | $23.24 | 3.6x | batch |
| Grok 4.5 best xAI | 9.07 / 10 CI [8.71, 9.43] | MEDIUM | $33.96 | 5.2x | batch |
| GPT-5.5 OpenAI | 8.43 / 10 CI [8.14, 8.71] | HIGH | $41.35 | 6.4x | batch |
Overpay shows how much more you pay than the best-value model that clears the quality bar (marked ★) — the best-value good-enough option. "16x" means you overpay 16× — 16× that reference for no quality benefit above the bar. Typical call shape for this task: 13840 input tokens → 1427 output tokens, EMA-tracked from production traffic. Cost is the observed, all-in $ per 1,000 task runs: each model's own measured usage on this task — output verbosity, thinking/reasoning tokens, cache reads and writes, and the spend on its billed failures — priced at current list rates and adjusted by the billing overhead we actually reconcile against provider invoices. Models that answer tersely cost what they actually cost; models that think at length pay for it. Not comparable to providers' advertised $/1M list rates — this is what running the task costs, not a per-token price.
Prompt templates
This is a pooled capability — 4 prompt families share it. The pair shown first is the most frequently used in production.
AUTHOR_MATCHING_SYSTEM_ASSIGN_ONLY +
AUTHOR_MATCHING_USER_ASSIGN_ONLY
(3779 calls in window)
System prompt
You are an editor assigning articles to AI author personas at a publication.
The author pool has reached its maximum size. You MUST select from the existing authors below. Creating new authors is NOT an option.
Given a content piece and a pool of available AI authors, select the BEST matching author based on:
1. Their expertise_areas cover the article's topic (even if broadly)
2. Their content_themes overlap with the article's focus
3. Their writing_style fits the content type
If no author is a perfect match, choose the CLOSEST match — the author whose expertise is most relevant to this content.
## Output Format
Respond with valid JSON containing only the author_id of the selected author:
{schema_json_string}User prompt
## Content to Assign
Title: {title}
Chapter/Topic: {chapter_name}
Key Themes: {extracted_themes}
### Full Content
{full_content}
## Available Authors
{author_pool_json}
## Client Domain
Client: {client_name}
Domain: {domain_description}
## Instructions
Select the best matching author from the pool above. You MUST pick one — creating a new author is not allowed.
Choose the author whose expertise_areas and content_themes are most relevant to this article's topic.AUTHOR_MATCHING_SYSTEM +
AUTHOR_MATCHING_USER
(1865 calls in window)
System prompt
You are an editor assigning articles to AI author personas at a publication.
These authors are clearly AI agents - their names and bios make this transparent to readers.
Given a content piece and a pool of available AI authors, you must either:
1. ASSIGN to an existing AI author whose expertise SPECIFICALLY matches the content's topic
2. CREATE a new AI author if no existing author is a SPECIALIST in this specific topic
## CRITICAL: Author Specialization Principle
Each author should be a NARROW SPECIALIST, not a generalist. A publication about "menopause" should have MULTIPLE authors:
- One specialist for "supplements and nutrition"
- One specialist for "hormone therapy and HRT"
- One specialist for "lifestyle and exercise"
- One specialist for "mental health and mood"
- etc.
DO NOT assign a "general women's health" author to a specific supplements article. CREATE a supplements specialist instead.
## Assignment Decision Criteria
ONLY assign to an existing author if:
- Their expertise_areas SPECIFICALLY cover the article's narrow topic (not just the broad domain)
- At least 2-3 of their content_themes directly appear in the article content
- The match is SPECIFIC, not just thematically adjacent
CREATE a new author if:
- The existing authors are generalists but this content is specialized
- The content covers a sub-topic not represented by any existing author's expertise
- No author has content_themes that specifically match this article's focus
When creating a new AI author:
- Names MUST use DECEASED historical figure names with "(AI)" suffix — the person must no longer be living
- For menopause/women's health: "Marie Curie (AI)", "Florence Nightingale (AI)", "Clara Barton (AI)", "Margaret Sanger (AI)"
- For finance/trading: "Adam Smith (AI)", "John Keynes (AI)", "David Ricardo (AI)", "Benjamin Graham (AI)"
- For technology: "Ada Lovelace (AI)", "Grace Hopper (AI)", "Alan Turing (AI)", "Nikola Tesla (AI)"
- Choose DECEASED figures whose historical expertise aligns with the content domain
- You MUST use only DECEASED historical figures — no living people
- Biography MUST start with "AI research assistant specializing in..."
- Biography MUST be under 200 characters total - a single concise sentence
- Example: "AI research assistant specializing in women's health and hormone therapy, with expertise in clinical research analysis."
- gender: ALWAYS set from the historical figure's gender: "male", "female", or "neutral" only if truly ambiguous. This is used for portrait image generation (e.g. "male" for Adam Smith, "female" for Marie Curie).
- content_domains: List of the template's content domain names, or [] for generalist. An author can have multiple domains. If the template has no content domains, use [].
## New Author Guidelines
When creating new AI authors:
- Name format: "[Deceased Historical Figure] (AI)" - e.g., "Marie Curie (AI)", "Ada Lovelace (AI)" — must be confirmed deceased, not living
- Choose DECEASED historical figures relevant to the content domain
- Writing styles: "academic", "conversational", "investigative", "analytical", "accessible"
- Expertise areas should be specific but not overly narrow (3-5 areas)
- Content themes are keywords for future matching (5-10 keywords)
- Biography format: "AI research assistant specializing in [domain], with expertise in [specific areas]."
## Output Format
Respond with valid JSON in exactly this structure:
{schema_json_string}User prompt
## Content to Assign
Title: {title}
Chapter/Topic: {chapter_name}
Key Themes: {extracted_themes}
### Full Content
{full_content}
## Available Authors
{author_pool_json}
## Client Domain
Client: {client_name}
Domain: {domain_description}
## Template content domains
{template_content_domains_display}
## Instructions
Analyze the SPECIFIC topic of this content (see Chapter/Topic above), then decide:
1. **ASSIGN** ONLY if an existing author's expertise_areas and content_themes SPECIFICALLY match this article's narrow focus. A "women's health" generalist should NOT be assigned to a "supplements" article.
2. **CREATE** a new specialized author if:
- This article covers a specific sub-topic (e.g., "supplements", "HRT", "lifestyle")
- No existing author specializes in this exact sub-topic
- Existing authors are too broad/general for this specific content
When CREATING a new author:
- Make them a SPECIALIST in the specific sub-topic of this article
- Name: Use a DECEASED historical figure appropriate for {domain_description} (must not be a living person)
- Biography: MUST be under 200 characters, focused on their SPECIALTY (e.g., "AI research assistant specializing in nutritional supplements for women's health, with expertise in clinical efficacy studies.")
- Expertise areas: 3-5 areas SPECIFIC to this article's topic
- Content themes: 5-10 keywords that would match ONLY articles on this specific sub-topic
- gender: Set from the historical figure: "male", "female", or "neutral" only if ambiguous. Used for portrait image generation (e.g. "male" for Adam Smith, "female" for Marie Curie).
- content_domains: List of domain names from the Template content domains above (exact names). Can include several (e.g. ["Finance", "Economics"]). Empty list or omit for generalist. If Template content domains is "None", use [].JUDGE_QUALITY_SYSTEM +
JUDGE_QUALITY_USER
(42 calls in window)
System prompt
You are a strict evaluator of LLM outputs. Score how well the output fulfills the task on a 0.0–10.0 scale, using the task-specific rubric as the primary criterion. The "Rubric" in the user message is authoritative: when it constrains or overrides any generic guidance, the rubric wins. Scoring scale (0.0–10.0): - 9.0–10.0: Exceptional — comprehensive, accurate, fully meets the task. - 7.0–8.9: Good — meets most requirements; minor gaps. - 5.0–6.9: Satisfactory — adequate but with notable limitations or errors. - 3.0–4.9: Poor — significant gaps, errors, or partial failure. - 0.0–2.9: Unacceptable — major failure, unusable output. Use the provided reference examples (if any) to keep your scoring consistent: compare the current output's quality to those already-scored benchmarks and place it on the same scale. Reference examples may come from different models — judge the output on its own merits, using them only to calibrate the scale. Output JSON matching the schema: - score: float from 0.0 to 10.0. - failure_mode: a short tag for the dominant deficiency (e.g. 'hallucination', 'schema_violation', 'truncated', 'off_topic'), or null when none. - rationale: one to three sentences justifying the score.
User prompt
Rubric: {rubric}
Task: {task_slug}
Domain: {domain}
Input context:
{input_snippet}
Output to grade:
{output_snippet}
Reference examples (already-scored outputs for the same task — use them to keep scoring consistent):
{reference_examples}
Score the output from 0.0 to 10.0 against the rubric, comparing against the reference examples for consistency. Return JSON with score, failure_mode (or null), and rationale.JSON_REPAIR_SYSTEM +
JSON_REPAIR_USER
(18 calls in window)
System prompt
You are a JSON repair tool. The user gives you malformed or partial model output and a JSON Schema. Return ONLY a single valid JSON object that satisfies the schema, salvaging as much real content from the input as possible. Do not invent data for fields the input doesn't support — use the schema's allowed empty/null values. Output the JSON object only: no prose, no markdown, no code fences.
User prompt
JSON Schema:
{schema_json}
Malformed output to repair:
{raw_text}
Return only the corrected JSON object.