wikillm

Paper · 2024-04-22 · cs.CL, cs.AI

Phi-3 Technical Report: A Highly Capable Language Model Locally on Your Phone

Phi-3-mini: a 3.8B decoder-only model trained on 3.3T tokens of filtered web and synthetic data, then SFT and DPO. Quantized to 4 bits it runs on an iPhone 14 at over 12 tokens/s. Author-reported MMLU 68.8 (5-shot) and MT-bench 8.38; 7B and 14B siblings, MoE and vision variants follow.

Language model pretrainingDataset curationPreference optimizationMultimodal language modelsmall-language-modelsynthetic-datadata-curationlong-contexton-device-inferencemixture-of-expertsmultimodalsafety-alignment

arXivPDFMarkdown13 min read

AI-compiled by claude-haiku-5-5 on 2026-10-19, not yet reviewed by a human. Every claim cites its source; check it when a detail matters.

In plain words

Most language models get better by getting bigger and by reading more raw web text. This report shows a small model, about 3.8 billion parameters, whose benchmark scores are close to much larger models and that is small enough to run on a phone.

The main lever is the training data rather than the model's size. The web text is filtered so that only material useful for learning reasoning and general knowledge is kept. Some of the training text is written by a large language model on purpose, to teach logic and niche skills. After pre-training, the model is tuned to follow instructions and to avoid harmful replies.

The authors also make larger versions, a Mixture-of-Experts model, and a version that reads images. The report gives the benchmark results with the settings the authors used, and it is open about where the small model is weak, such as facts it cannot store and languages other than English.

TL;DR

  • phi-3-mini (3.8B parameters, 3.3T training tokens) is a Llama-2-style decoder with a 4K default context, and the authors report results close to Mixtral 8x7B and GPT-3.5 §1 §2 tab. 3.
  • Training uses two sequential phases: web data for general knowledge, then more heavily filtered web data mixed with synthetic reasoning data §2.
  • Post-training is supervised fine-tuning followed by DPO §2. A 4-bit build of phi-3-mini runs on an iPhone 14 at more than 12 tokens per second, offline §2 fig. 2.
  • Larger siblings (phi-3-small 7B, phi-3-medium 14B) and phi-3.5 models (MoE 16x3.8B, Vision 4.2B) extend the family; all numbers are author-reported §2 §4 §7.
  • No official code was found, and the report leaves core training hyperparameters unstated, so an implementation cannot be checked against code §2.

Problem

Scaling laws predict better results from larger models trained on fixed data §1. The authors argue that this assumption breaks down, because frontier LLMs can now filter and generate data §1. They target a small model that matches much larger models and fits on a phone §1 fig. 2. Their prior work, the phi series, showed that LLM-filtered web data plus LLM-written synthetic data can make small models strong §1.

The report does not state a cost for training runs or the hardware used beyond the token counts §2.

Method

Model family. Four model sizes with one recipe, plus later additions §2 §4 §7.

  1. phi-3-mini (3.8B). Transformer decoder with a Llama-2-like block structure, so Llama-2 tooling can be reused. Same 32064-token vocabulary as Llama-2 with BoS removed and chat-template tokens added §2, footnote. Default context 4K, extended to 128K as phi-3-mini-128K with LongRope §2 §4.
  2. phi-3-small (7B). tiktoken vocabulary of 100352 (unused tokens removed), default context 8192. GEGLU activation and muP hyperparameter transfer from a small proxy model §2. Grouped-query attention with 4 queries sharing 1 key §2. Blocksparse attention, with dense and blocksparse layers alternated §2 fig. 1.
  3. phi-3-medium (14B). Same tokenizer and architecture style as phi-3-mini, 40 heads and 40 layers, embedding dimension 5120, trained on 4.8T tokens §2.
  4. phi-3.5-MoE (16 x 3.8B, 6.6B active). Each MoE layer replaces the feed-forward block with 16 GLU experts; each token is routed to the top 2 §2. The sparse router is trained with the SparseMixer method §2. Total 42B parameters §2.
  5. phi-3.5-Vision (4.2B). CLIP ViT-L/14 image encoder feeding phi-3.5-mini, with visual and text tokens interleaved and dynamic cropping of high-resolution images §7.1.

Pre-training data (phi-3-mini). Two disjoint sequential phases §2.

  • Phase 1: mostly web sources, to teach general knowledge and language §2.
  • Phase 2: a more heavily filtered subset of phase-1 web data, merged with synthetic data that teaches logical reasoning and niche skills §2.
  • Filtering keeps pages with the right level of "knowledge" and pages that help "reasoning", and removes facts that only frontier-scale models need (the authors' example is a single sports result) §2 "Data Optimal Regime".
  • The filter criterion is described as "educational level" §2 "Training Methodology". The exact classifier is not described.

Post-training. Supervised fine-tuning, then direct preference optimization §2. SFT data covers math, coding, reasoning, conversation, model identity and safety; the SFT mix starts with English-only examples §2. DPO data covers chat, reasoning and responsible-AI cases; DPO uses unwanted behaviours as the "rejected" responses §2.

Chat template. The model is already chat-tuned. Format: <|user|> newline, question, <|end|> newline, <|assistant|> §2.

Blocksparse attention (phi-3-small). Each head applies a different sparsity pattern over the KV cache, so all tokens are reached by some head §2. Training uses a Triton kernel based on FlashAttention §2. Inference uses a custom prefill kernel and an extension of vLLM's paged attention for decoding §2. The toy example in the figure uses 2 local blocks and vertical stride 3 fig. 1.

Mixture-of-Experts routing (phi-3.5-MoE). Pseudocode restating the top-2 routing described in §2. The paper gives no formula for the router or the SparseMixer gradient.

Pseudocode
# Top-2 mixture-of-experts feed-forward for one token  [§2]
# Input:  hidden (d,) for one token; 16 GLU experts; router weights
# Output: weighted sum of the 2 selected expert outputs (d,)

def moe_ffn(hidden, experts, router):
    # Score every expert for this token  [§2]
    scores = router(hidden)                  # (16,)
    # Keep the 2 highest-scoring experts  [§2]
    chosen = top_k_indices(scores, k=2)      # (2,)
    # Combine the chosen expert outputs; the weighting rule is not stated  [§2]
    weights = gate_weights(scores[chosen])   # (2,)
    output = zeros_like(hidden)
    for index, weight in zip(chosen, weights):
        output = output + weight * experts[index](hidden)
    return output

Phi-3.5-Vision inputs. Images are split into a 2-D grid of blocks, and the block tokens are concatenated §7.1. Multi-image input concatenates the tokens of each image §7.1. Pre-training caps image resolution at 1344 x 1344 §7.1.

Phi-3.5-Vision training. Pre-training uses 0.5T tokens of interleaved image-text documents, image-text pairs, OCR-derived PDF data, chart and table data and text-only data; the loss is applied only to text tokens §7.1. SFT includes about 33B multimodal tokens; DPO mixes text and a smaller multimodal set §7.1.

Hyperparameters

NameValueWhereNotes
phi-3-mini parameters3.8B§2
phi-3-mini training tokens3.3T§2bfloat16 §2
phi-3-mini hidden size / heads / layers3072 / 32 / 32§2
phi-3-mini vocabulary32064§2Llama-2 tokenizer, BoS removed, chat tokens added
phi-3-mini default context4K§2
phi-3-mini-128K context128K§2 §4via LongRope; mixed context-window approach §4
phi-3-mini 4-bit footprintabout 1.8 GB§2quantization method not stated
phi-3-small parameters7B§2
phi-3-small vocabulary100352§2tiktoken; unused tokens removed
phi-3-small hidden / heads / layers4096 / 32 / 32§2
phi-3-small default context8192§2
phi-3-small GQA ratio4 queries : 1 key§2
phi-3-small extra multilingual data10%§2
phi-3-small and phi-3-medium tokens4.8T[abstract] §2
phi-3-medium parameters14B§2
phi-3-medium heads / layers / embedding40 / 40 / 5120§2
phi-3.5-MoE experts16 x 3.8B, top-2§26.6B active, 42B total
phi-3.5-MoE routerSparseMixer§2
phi-3.5-Vision parameters4.2B§7.1CLIP ViT-L/14 + phi-3.5-mini
phi-3.5-Vision pre-training tokens0.5T§7.1
phi-3.5-Vision max image resolution1344 x 1344§7.1pre-training only
phi-3.5-Vision SFT multimodal tokensabout 33B§7.1
Benchmark decodingtemperature 0, few-shot§3shots listed per benchmark
Learning rate, schedule, batch sizenot stated
Optimizer, weight decay, epochs (mini)not stated
Pre-training token split between phasesnot stated§2only "two disjoint and sequential phases"
Data mixture proportionsnot stated§2
SFT and DPO hyperparameters (incl. DPO beta)not stated§2 §7.1
Blocksparse pattern for production modelsnot stated§2 fig. 1figure is a toy example
Dense / blocksparse layer ratio (phi-3-small)not stated§2"alternate" only

Results

Author-reported. Setup: a shared internal evaluation pipeline, few-shot prompts, temperature 0 §3. Baselines: phi-2, Mistral-7B, Gemma-7B, Llama-3-Instruct-8B, Mixtral 8x7B and GPT-3.5 §3. Every model was run through the same pipeline, so numbers can differ from published ones §3.

Academic benchmarks §3, unnumbered table in that section. Reasoning and knowledge scores, phi-3 family and comparators.

Benchmark (setting)Phi-3-mini 3.8bPhi-3-small 7bPhi-3-medium 14bPhi-2 2.7bMistral 7bGemma 7bLlama-3-In 8bMixtral 8x7bGPT-3.5 (1106)
MMLU (5-shot)68.875.778.056.361.763.666.570.571.4
HellaSwag (5-shot)76.777.082.453.658.549.871.170.478.8
ANLI (7-shot)52.858.155.842.547.148.757.355.258.1
GSM-8K (8-shot, CoT)82.589.691.061.146.459.877.464.778.1
MATH (0-shot, CoT)41.334.653.1--15.013.628.211.145.3
MedQA (2-shot)53.865.469.940.950.049.660.562.263.4
AGIEval (0-shot)37.545.150.229.835.142.142.045.248.4
TriviaQA (5-shot)64.058.173.945.275.272.367.782.285.8
Arc-C (10-shot)84.990.791.675.978.678.382.887.387.4
Arc-E (10-shot)94.697.097.788.590.691.493.495.696.3
PIQA (5-shot)84.286.987.960.277.778.175.786.086.6
SociQA (5-shot)76.679.280.268.374.665.573.975.968.3
BigBench-Hard (3-shot, CoT)71.779.181.459.457.359.651.569.768.32
WinoGrande (5-shot)70.881.581.554.754.255.665.062.068.8
OpenBookQA (10-shot)83.288.087.473.679.878.682.685.886.0
BoolQ (2-shot)77.284.886.5--72.266.080.977.679.1
CommonSenseQA (10-shot)80.280.082.869.372.676.279.078.179.6
TruthfulQA (10-shot, MC2)65.070.275.1--53.052.163.260.185.8
HumanEval (0-shot)58.561.062.259.028.034.160.437.862.2
MBPP (3-shot)70.071.775.260.650.851.567.760.277.8
Average69.773.676.7--58.959.367.366.872.8
GPQA (2-shot, CoT)32.834.3------------29.0
MT-Bench (2 rounds, avg.)8.388.708.91----------8.35

Multilingual and long context §4.

  • Multilingual MMLU average: phi-3.5-mini 55.4, phi-3-mini 47.3, phi-3.5-MoE 69.9 §4 fig. 4.
  • RepoQA (long code, 128k context), average of five languages: phi-3.5-MoE 85, phi-3.5-mini 77, Llama-3.1-8B-Instruct 71 tab. 1.
  • RULER at 4k vs 128k: phi-3.5-MoE 94.8 vs 64.2, phi-3.5-mini 94.3 vs 63.6, Llama-3.1-8B-Instruct 95.5 vs 77.0 tab. 2. The authors call the 128K drop "significant" and attribute it to limited long-context mid-training data §4.

Phi-3.5 model quality tab. 3. Setup as in the table caption: each model run through one pipeline.

BenchmarkPhi-3.5-mini 3.8BPhi-3.5-MoE 16x3.8BMistral 7BMistral-Nemo 12BLlama-3.1-In 8BGemma-2 9BGemini-1.5 FlashGPT-4o-mini
Arena Hard3737.918.139.425.74255.275
BigBench Hard (CoT, 0-shot)6979.133.460.263.463.566.780.4
MMLU (5-shot)6978.960.367.268.171.378.777.2
MMLU-Pro (0-shot, CoT)47.554.31840.74450.157.262.8
ARC Challenge (10-shot)84.691.077.984.883.189.892.893.5
BoolQ (2-shot)7884.680.582.582.885.785.888.7
GPQA (0-shot, CoT)27.236.815.628.626.329.237.541.1
HellaSwag (5-shot)69.483.871.676.773.580.967.587.1
OpenBookQA (10-shot)79.289.67884.484.889.68990
PIQA (5-shot)8188.673.483.581.283.787.588.7
Social IQA (5-shot)74.778.07375.371.874.777.882.9
TruthfulQA (10-shot, MC2)6477.564.768.169.276.676.678.2
WinoGrande (5-shot)68.581.358.170.464.77474.776.9
Multilingual MMLU (5-shot)55.469.947.458.956.263.877.272.9
MGSM (0-shot, CoT)47.958.731.863.356.776.475.881.7
GSM8K (8-shot, CoT)86.288.754.484.282.484.982.491.3
MATH (0-shot, CoT)48.559.51931.247.650.93870.2
Qasper41.940.031.430.737.213.943.539.8
SQuALITY24.324.125.925.826.2023.523.8
HumanEval (0-shot)61.570.735.463.466.56174.486.6
MBPP (3-shot)68.680.850.468.169.469.377.584.1
Average61.169.248.561.361.063.368.574.9

Phi-3 safety §5 tab. 4 (lower is better). Internal multi-turn RAI benchmark judged with GPT-4 §5.

MetricPhi-3-miniPhi-3-smallPhi-3-mediumPhi-3.5-MoEPhi-2Mistral 7bGemma 7bLlama-3-In 8b
Ungroundedness0.6030.2990.2130.2281.4810.9350.6790.328
Third-party harm (DR-1)0.2400.2530.2510.1050.2400.5620.3830.373
Harmful content continuation (DR-3)0.0070.0030.0100.0050.0290.0260.0130.013
Harmful content summarization (DR-3)0.1000.1100.1120.120.1440.2230.1030.082
Jailbreak (DR-1)0.1230.1070.1110.1060.1500.1560.1140.130

Phi-3.5-Vision, single image tab. 5. Setup: LLaVA-1.5 style prompts, single letter or short answer, 0-shot, no image preprocessing; images placed first §7.2.1. Numbers are author-reported.

BenchmarkPhi-3.5-Vision 4.2bMM1-3B-ChatMM1-7B-ChatLLaVA-1.6 Vicuna-7bLLaVA-Next Llama3-8bQwen-VL-ChatClaude 3 HaikuGemini 1.0 Pro VGPT-4o (2024-05-13)
MMMU (val)43.033.937.034.236.439.040.742.061.8
ScienceQA (test)91.369.472.670.673.767.272.079.788.5
MathVista (testmini)43.932.035.931.534.829.433.235.054.4
Inter-GPS (test)36.3----20.524.622.332.128.646.9
MMBench (dev-en)81.975.979.076.379.475.862.480.088.4
POPE (test)86.187.486.687.287.082.674.484.287.0
AI2D (test)78.1----63.166.959.860.362.882.8
ChartQA (test)81.8----55.065.850.959.358.064.0
TextVQA (test)72.071.972.864.655.759.462.764.775.6

Phi-3.5-Vision, multi-image and video tab. 6. Setup as stated in §7.2.2: BLINK is answered by the model directly, and VideoMME uses 16 uniformly sampled frames for all models.

BenchmarkPhi-3.5-Vision 4.2bLlava-interleave Qwen 7bInternVL2 4bInternVL2 8bGemini 1.5 FlashGPT-4o mini (2024-07-18)Claude 3.5 SonnetGemini 1.5 ProGPT-4o (2024-05-13)
BLINK (val)57.053.145.945.445.851.956.561.063.2
VideoMME (test)50.850.249.952.662.361.255.962.668.4

Phi-3.5-Vision safety tab. 7 (internal and public multimodal RAI benchmarks, higher is better, scale 0–10) §7.3.

BenchmarkPhi-3.5-VisionPhi-3.5-Vision w/o safetyLLaVA-1.6 Vicuna 7bQwen-VL-ChatGPT-4V
Internal (private)8.167.065.447.278.55
RTVLM (public)5.443.563.864.786.81
VLGuard (public)9.104.665.628.338.90

Headline comparisons in the text: phi-3-mini "rivals" Mixtral 8x7B and GPT-3.5 [abstract] §1; phi-3.5-MoE is "on par with" Gemini-1.5-Flash and GPT-4o-mini on language benchmarks §4 tab. 3.

Paper vs code

No official code.

Searches run: the paper, abstract and arXiv metadata (raw/arxiv/2404.14219.json) name no repository, project page or code link; the LaTeX source has no URL besides a HuggingFace Chat-UI screenshot caption §6 fig. 6. A GitHub repository search for "phi-3" under the microsoft organisation and for "Phi-3-mini" returned only sample apps and unrelated projects, none of which contains the model or training code. No discrepancies can be checked against code.

Pitfalls

  • Training recipe is largely unstated. No learning rate, batch size, optimizer, schedule, sequence packing, epochs for phi-3-mini, or data-mixture proportions are given §2. Phase-1 and phase-2 token counts are not given §2. An implementer cannot reproduce pre-training from this report alone.
  • "Educational level" filtering is undefined. The web-filter classifier, its labels and threshold are not described §2 "Training Methodology". Synthetic data generation prompts and its volume are not described either §2.
  • Abstract vs table rounding. The abstract gives 69% MMLU for phi-3-mini [abstract]; the table gives 68.8 §3. Use the table for exact numbers.
  • Benchmark settings change the numbers. The authors state that using ## before the question improved phi-3-mini on many benchmarks, but they did not use it in the reported runs §3, footnote. Prompts are an internal Microsoft tool and are not released §3. Shots are listed per benchmark §3. Treat cross-paper comparisons as indicative only §3.
  • Long-context drop. phi-3.5 models lose much accuracy at 128K on RULER, e.g. phi-3.5-mini 94.3 at 4K vs 63.6 at 128K tab. 2 §4. The 128K RepoQA and RULER results are the only long-context evidence in the report.
  • LongRope details are not in this report. phi-3-mini-128K and phi-3.5 long context rely on LongRope and a "mixed context window" §2 §4. The rescaling procedure and the mix ratio are not stated here. Cite the LongRope reference for the method (see Lineage).
  • Blocksparse attention is under-specified. The production sparsity pattern, number of local blocks, stride per head, and dense-to-sparse layer ratio are not stated §2. The only concrete values are in the toy illustration (2 local blocks, vertical stride 3) fig. 1. Kernel availability is not stated, and the authors built custom Triton and vLLM-based kernels §2.
  • Hidden inference cost of the MoE model. phi-3.5-MoE has 42B total parameters with 6.6B active §2. Memory footprint is therefore the total, not the active count. The report states no on-device figure for MoE.
  • 4-bit on-device claim. The 1.8 GB and >12 tokens/s figures are for phi-3-mini quantized to 4 bits on iPhone 14 with an A16 chip §2 fig. 2. Quantization scheme, runtime, context length and prompt are not stated.
  • Architecture "similar" to Llama-2, not identical. The text says the block structure is "similar" to Llama-2 §2. Normalization, positional encoding and activation details are not given for phi-3-mini. The text does say phi-3-small uses GEGLU §2.
  • Only phi-3-small and phi-3-medium use the 4.8T-token budget. The mini model uses 3.3T §2 [abstract]. Compare the families with that difference in mind.
  • Phi-3-medium is described as "slightly more epochs". The report gives no epoch count or token-level detail for this §2.
  • Phi-3-mini is mostly English. The authors state that they "mostly restricted the language to English" §6. The phi-3-small multilingual result is described as initial §6.
  • Figure numbers. Figure and table numbers in this card are counted from the LaTeX source order. The source labels fig:1 for the iPhone figure, which is the second figure in source order. Check the compiled PDF before relying on a number.
  • Vision: unknown visual token count. Dynamic cropping splits images into blocks, but the block size, the maximum number of blocks, and tokens per block are not stated §7.1.
  • Vision: evaluation departs from published pipelines. For BLINK the authors do not use ChatGPT for answer selection, and for VideoMME they use 16 frames for all models §7.2.2. Compare to published baselines with care.
  • Vision safety is partial. The authors say the model sometimes fails to refuse harmful inquiries, such as deciphering captchas or describing scam images, and they link this to OCR abilities from instruction data §7.4.
  • Safety evaluation uses GPT-4 as judge and in-house data. The RAI scores come from a GPT-4-simulated multi-turn benchmark and an internal red team §5 tab. 4. They are not reproducible from the paper.

Lineage

  • Builds on: the "Textbooks Are All You Need" line of work, arXiv 2306.11644 §2, and the phi-2 model §1 (a blog post in the bibliography, not an arXiv paper). Llama-2 block structure and tokenizer §2; LongRope for long context (arXiv 2402.13753) §2; FlashAttention §2 and vLLM paged attention, see /papers/2309.06180 §2.
  • Compared against: phi-2, Mistral 7B, Gemma 7B, Llama-3-Instruct 8B, Mixtral 8x7B, GPT-3.5 §3; Llama-3.1-8B, Mistral-Nemo 12B, Gemma-2 9B, Gemini-1.5 Flash, GPT-4o-mini tab. 3; LLaVA-1.6, Qwen-VL-Chat, GPT-4V tab. 5 tab. 7.
  • Superseded by: not known from content already in this wiki.

Source and license

Adapted from “Phi-3 Technical Report: A Highly Capable Language Model Locally on Your Phone” by Marah Abdin, Jyoti Aneja, Hany Awadalla, Ahmed Awadallah, Ammar Ahmad Awan, Nguyen Bach, Amit Bahree, Arash Bakhtiari, Jianmin Bao, Harkirat Behl, Alon Benhaim, Misha Bilenko, Johan Bjorck, Sébastien Bubeck, Martin Cai, Qin Cai, Vishrav Chaudhary, Dong Chen, Dongdong Chen, Weizhu Chen, Yen-Chun Chen, Yi-Ling Chen, Hao Cheng, Parul Chopra, Xiyang Dai, Matthew Dixon, Ronen Eldan, Victor Fragoso, Jianfeng Gao, Mei Gao, Min Gao, Amit Garg, Allie Del Giorno, Abhishek Goswami, Suriya Gunasekar, Emman Haider, Junheng Hao, Russell J. Hewett, Wenxiang Hu, Jamie Huynh, Dan Iter, Sam Ade Jacobs, Mojan Javaheripi, Xin Jin, Nikos Karampatziakis, Piero Kauffmann, Mahoud Khademi, Dongwoo Kim, Young Jin Kim, Lev Kurilenko, James R. Lee, Yin Tat Lee, Yuanzhi Li, Yunsheng Li, Chen Liang, Lars Liden, Xihui Lin, Zeqi Lin, Ce Liu, Liyuan Liu, Mengchen Liu, Weishung Liu, Xiaodong Liu, Chong Luo, Piyush Madan, Ali Mahmoudzadeh, David Majercak, Matt Mazzola, Caio César Teodoro Mendes, Arindam Mitra, Hardik Modi, Anh Nguyen, Brandon Norick, Barun Patra, Daniel Perez-Becker, Thomas Portet, Reid Pryzant, Heyang Qin, Marko Radmilac, Liliang Ren, Gustavo de Rosa, Corby Rosset, Sambudha Roy, Olatunji Ruwase, Olli Saarikivi, Amin Saied, Adil Salim, Michael Santacroce, Shital Shah, Ning Shang, Hiteshi Sharma, Yelong Shen, Swadheen Shukla, Xia Song, Masahiro Tanaka, Andrea Tupini, Praneetha Vaddamanu, Chunyu Wang, Guanhua Wang, Lijuan Wang, Shuohang Wang, Xin Wang, Yu Wang, Rachel Ward, Wen Wen, Philipp Witte, Haiping Wu, Xiaoxia Wu, Michael Wyatt, Bin Xiao, Can Xu, Jiahang Xu, Weijian Xu, Jilong Xue, Sonali Yadav, Fan Yang, Jianwei Yang, Yifan Yang, Ziyi Yang, Donghan Yu, Lu Yuan, Chenruidong Zhang, Cyril Zhang, Jianwen Zhang, Li Lyna Zhang, Yi Zhang, Yue Zhang, Yunan Zhang, Xiren Zhou (arXiv:2404.14219), used under CC BY 4.0. Changes: condensed and restructured for implementation, with tables, equations and algorithms taken from the paper and its code, each cited to its source. Not affiliated with or endorsed by the authors.