From d6342e44151dd922bd2ff8f48bd17e7c967c3da4 Mon Sep 17 00:00:00 2001 From: souzatharsis Date: Tue, 7 Jan 2025 15:23:36 -0500 Subject: [PATCH] add corrections to input chapter --- .../_build/.doctrees/environment.pickle | Bin 7284586 -> 7298884 bytes .../_build/.doctrees/markdown/preface.doctree | Bin 27265 -> 27333 bytes .../.doctrees/notebooks/alignment.doctree | Bin 388015 -> 388083 bytes .../_build/.doctrees/notebooks/cost.doctree | Bin 104778 -> 104846 bytes .../_build/.doctrees/notebooks/evals.doctree | Bin 877914 -> 877982 bytes .../_build/.doctrees/notebooks/input.doctree | Bin 397189 -> 402198 bytes .../_build/.doctrees/notebooks/local.doctree | Bin 331533 -> 331601 bytes .../_build/.doctrees/notebooks/safety.doctree | Bin 527246 -> 527314 bytes .../notebooks/structured_output.doctree | Bin 214886 -> 214954 bytes .../html/_sources/notebooks/input.ipynb | 106 +- tamingllms/_build/html/markdown/preface.html | 4 +- .../_build/html/notebooks/alignment.html | 264 +- tamingllms/_build/html/notebooks/cost.html | 76 +- tamingllms/_build/html/notebooks/evals.html | 224 +- tamingllms/_build/html/notebooks/input.html | 413 +-- tamingllms/_build/html/notebooks/local.html | 242 +- tamingllms/_build/html/notebooks/safety.html | 440 +-- .../html/notebooks/structured_output.html | 136 +- tamingllms/_build/html/objects.inv | Bin 3839 -> 3890 bytes tamingllms/_build/html/searchindex.js | 2 +- .../jupyter_execute/markdown/intro.ipynb | 2 +- .../jupyter_execute/notebooks/input.ipynb | 106 +- tamingllms/latex/input.tex | 2433 +++++++++++++++++ tamingllms/markdown/input.md | 2433 +++++++++++++++++ tamingllms/notebooks/input.ipynb | 106 +- tamingllms/pdf/structured_output.pdf | Bin 638060 -> 0 bytes tamingllms/references.bib | 9 + 27 files changed, 5941 insertions(+), 1055 deletions(-) create mode 100644 tamingllms/latex/input.tex create mode 100644 tamingllms/markdown/input.md delete mode 100644 tamingllms/pdf/structured_output.pdf diff --git a/tamingllms/_build/.doctrees/environment.pickle b/tamingllms/_build/.doctrees/environment.pickle index 1ec60c87ad4a724a4224e22a0301954440c63ce6..c66f0defa0676b1db8bc44b504fd7e642adf479a 100644 GIT binary patch delta 1102633 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

#C)S8Dp@U~Ch3TF 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 b!vUFdLJW_=S8weBzr~j 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

vPGQUhV&{< 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 z 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 K3(L8R82SO_%addP delta 356 zcmYMuJxBs^7{~FR%j>ikHD6MX=X?Wc3KW`z$R=y3F(_~-nxr9uYO2LSqM_k8T(n3; zOArPB!66#58Va%{I0(+9=*4rZ!Nv|68ot|S_ysNp_N5 zceRpq7!Ar)H%R_^tDbzw9iqH`)RGS^GwYFGH6!gnE gNySP~(OZ_Br`(?%`?p@HnALaMa+Kowaa*4H1sNrWK>z>% diff --git a/tamingllms/_build/.doctrees/notebooks/cost.doctree b/tamingllms/_build/.doctrees/notebooks/cost.doctree index 7b6842076917b906d955e4854e9cf02b599dacfe..a7851f5173119d36bc391b7a8810fd5fa4d4c8b0 100644 GIT binary patch delta 214 zcmV;{04e{rJ<{ zM*%oa2aE-2WHL4|m+@2q9s(B}ml0I~9k=b30sa926PN6l0hkNTb{ z|A5rWu1;v0EytxuSbo$Ji(1Lo&EeJi@~#vH4=x9fKL{DleUdL1UL^*P^nki7D!-wo zMBr2IP*oYIT0uc$XwuG6qzq456+WHio@pmRLucsGuW;*S2zf8?=woPjUoaA2IpU8K z3>gfwfg5;C8`H)K>ShEnvxNJg4S%qVa){w4cnvMwnyZCug72`6u5gJb22=ylu)Jkj z+onYXr_dxc3ogMecmzq11w~Nvrlsj;B$MyB)7m!q(HwR2-7ebdtgi6Gc53Ix60}H2 zoEr;t-x)~rjhGg}s9z#peww6xTuIWX+>&-Uvh&M&n!itZEIyf}6VBd$Z};EZAMF&| jj(dGAn^{QhEw=46uPm*m_9g~qT#oEwWVwa=Qgr+mZY53k2F!CoMW7HvqPXljcfsIk&TxY5062wH!`(_()^ zaFG8&g<<6?K@yc%E>hCqP|sGwhwt<~zb$l{g^N!@iryFb4w5CbtqD-|1s{}yY6J9D z2eEJ$BaMSaIv9pI{Q5O|5so*#ho;WGKAR7@9b!=q%ecW1J|mk3^C z9J`4}loA>kd}qsuFU=+6>K# tl`>n@0XeGJGFw;j|AyS(U?^2b6f4Xj0kK_S8^6F0YY+ec diff --git a/tamingllms/_build/.doctrees/notebooks/input.doctree b/tamingllms/_build/.doctrees/notebooks/input.doctree index de98fc7317d3c810e313325777c03c3987405e13..8e0e916e693b49a5c62363968ff9b0858a7fe04d 100644 GIT binary patch delta 62457 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 delta 59794 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 delta 345 zcmYMqJxBs!90y?E(^t>0^IKE@cTx~RlQjk{4PkRbn?ukdK~qaxG}satKjKpV z7zr&?3zsGtH(~=hk#J>x#DSTRwX^{XX-C#5L(;0?!}frtjqq$QqHHG=r8*9!F`PQe zNI3|5&KfqHq;0y0VZ}wbaBE1r3EQ4)ta=D*-YOQogeBh{W_+?X@84&b^b@`VeLMvS zreGVr5yDTfiEdEFAXG;qMCgQTD1}L@P=w)x2nOXAFS5KfP?7_M4GBZ~!ayKdDNVZ>vZeOiCi3`$04MGCN(DU7_0r& T>VI_#iHh2jII*lMI{3mb%~gbi diff --git a/tamingllms/_build/.doctrees/notebooks/safety.doctree b/tamingllms/_build/.doctrees/notebooks/safety.doctree index 89ede2efd75ed647ed571a42a5ccb0fe03101856..5385803547592943e1a22ab7ad8a6e0eeba56344 100644 GIT binary patch delta 642 zcmYk&OGs2<6bEp>d!4y=?l_I3gOBmt>)UZ0#hJ$OHHI4vq{Sc@6}BjQNJdbU7%mDF zvqd=AKm4FY(5^+4_(21eWhfCCK1z$43@ynNT0~fpQr%T_;K$*>e{=prJnse18~w~! zwOD7DWgM{T7_v;GRv~m-ClOW&ZOStC*>usWDh!<(;hgOo;&u}KS{1`~3W=9?AHzon zAzu(=7hx)O2GeOI?zo6yEM3Q1+H=giNzA58489B! zU)&80M>0t?XBZ3(S%iz3;|OIF_Gcv!@(`lgs~E^35%p9v^b+A_&Kq3UNsN%paNp3y zJ>9~vm`iwV{Ki%uiLbdDgR6j$ng0vULPABs2XqyY@E10kFBKCm6|JD9gwS976m?$0 zv62ONO9^|u^GNp@XeymUdl`v<&(E;OPv|LIz`=4tr+*V26@>HU8*o>WxKJ^|;0O=` zl}lJRw=Xb(M37(!zCwP8#E+oa)mBKyuFzwAuQEHUdXMceAuYTCsm8pkHxR8QVblZ} z8tVurYZuU4Poljpm*IFs2d|&y!=uS=q&n38zQ|x-gqb9hY)Up+OxAc`M7egFuijM- z$9rxor(_n!@ZurL64{ty5B T7j{Wqo4mxX8Z5z^?P|+k1M20v delta 606 zcmXBRTS(J!6bJB~&F%l+*4otJWuE`MJLeQPw&`?+57mS8um%Q(J(LlHMNo7xd#H!e z6-wj_`$G>wZ#_r|Kj{Bpccm9ao43d)G9zK`5Wa5(UN`kn=~=7w4`@sTJh zHtC9qIxx0e3YSC1b@MDvm=&C{JjH$sqhET9PDv3-St3Mb#wqJp3|LuYY!O1r#$wU# zCunv?g<}SVZHzyT4XisDM(2He*v?pW&f%exG3}be9T$tc#Y`A0Rg^>z;!=3=+Y-=6|T3MWL%Mym# z7{T_}aJMu3!N+g}8RpOmHiImFg!HafLkf0;AE7p^cNTerg1$?ld3=xPcSjzDC<||A zh+ynw9E~j@5o0mfRZZyaVr09Y<6O6r$;2;b;-oX`Ou8bSS!dBQaS6vMtpD_&HaspJ zGpS|c(jj$n-el7f6H`5C#70-#wPEgt^bKH{}MrC`jeWr%U;T~WX9FyA+;FH7>9Fx}(?UNA{9JAmOF#(eU6&#Z-6xNgV6&#Zv71aVc zFq6Rz8-o!RhY=P5w-FWsZ0iCgMz?=g24A7I*3>=f(4bGFm4IHz^ z4jloLstz2J{|~^E;}0B@+YsQBzYrXg*AeZLyAd3-;1V$blf)7nlPwh1lMxgglOGk; zlL8eTgAo>o5f%Zr5f%b$>jL3Lw|@Zx@Itq1. Preface—Emanuel Derman

-

An alternative title of this book could have been “Language Models Behaving Badly”. If you come from a background in financial modeling, you may have noticed the parallel with Emanuel Derman’s seminal work “Models.Behaving.Badly” [Derman, 2011]. This parallel is not coincidental. Just as Derman cautioned against treating financial models as perfect representations of reality, this book aims to highlight the limitations and pitfalls of Large Language Models (LLMs) in practical applications.

+

An alternative title of this book could have been “Language Models Behaving Badly”. If you come from a background in financial modeling, you may have noticed the parallel with Emanuel Derman’s seminal work “Models.Behaving.Badly” [Derman, 2011]. This parallel is not coincidental. Just as Derman cautioned against treating financial models as perfect representations of reality, this book aims to highlight the limitations and pitfalls of Large Language Models (LLMs) in practical applications.

The book “Models.Behaving.Badly” by Emanuel Derman, a former physicist and Goldman Sachs quant, explores how financial and scientific models can fail when we mistake them for reality rather than treating them as approximations full of assumptions. The core premise of his work is that while models can be useful tools for understanding aspects of the world, they inherently involve simplification and assumptions. Derman argues that many financial crises, including the 2008 crash, occurred in part because people put too much faith in mathematical models without recognizing their limitations.

Like financial models that failed to capture the complexity of human behavior and market dynamics, LLMs have inherent constraints. They can hallucinate facts, struggle with logical reasoning, and fail to maintain consistency in long outputs. Their responses, while often convincing, are probabilistic approximations based on training data rather than true understanding, even though humans insist on treating them as “machines that can reason”.

@@ -253,7 +253,7 @@

1. Preface -
+
[Der11]

E. Derman. Models.Behaving.Badly.: Why Confusing Illusion with Reality Can Lead to Disaster, on Wall Street and in Life. Free Press, 2011. ISBN 9781439165010. URL: https://books.google.co.uk/books?id=lke_cwM4wm8C.

diff --git a/tamingllms/_build/html/notebooks/alignment.html b/tamingllms/_build/html/notebooks/alignment.html index 2b8bd61..309370f 100644 --- a/tamingllms/_build/html/notebooks/alignment.html +++ b/tamingllms/_build/html/notebooks/alignment.html @@ -260,7 +260,7 @@
-

7. Preference-Based Alignment

+

7. Preference-Based Alignment

A people that values its privileges above its principles soon loses both.

—Dwight D. Eisenhower

@@ -268,69 +268,69 @@
-

7.1. Introduction

+

7.1. Introduction

The release of ChatGPT 3.5 in late 2022 marked a significant moment in the history of artificial intelligence. Within just five days of its launch, the model attracted over a million users, and within two months, it became the fastest-growing consumer application in history with over 100 million monthly active users.

Yet, this raises an intriguing question: Why did ChatGPT 3.5 observe such a dramatic traction when its predecessor, GPT-3, which had the same size/number of parameters, received far less attention from the general public? Arguably, the answer lies not in raw capabilities, but in Preference Alignment.

Through careful fine-tuning using human feedback, OpenAI transformed GPT-3’s raw intelligence into ChatGPT’s helpful and resourceful conversational abilities. This breakthrough demonstrated that aligning language models with human preferences is just as crucial as scaling them to greater sizes.

-

In this chapter, we will explore the process of aligning language models with human preferences via fine-tuning using modern techniques such as Direct Preference Optimization (DPO) [Rafailov et al., 2024]. Next, we will present a practical case study where we align a language model to a user-provided policy in a fully automated fashion leading to an open source model as well as a dataset of policy-aligned preferences.

+

In this chapter, we will explore the process of aligning language models with human preferences via fine-tuning using modern techniques such as Direct Preference Optimization (DPO) [Rafailov et al., 2024]. Next, we will present a practical case study where we align a language model to a user-provided policy in a fully automated fashion leading to an open source model as well as a dataset of policy-aligned preferences.

-

7.2. From Raw Capabilities to Preference Alignment

+

7.2. From Raw Capabilities to Preference Alignment

-

7.2.1. On the Misalignment of Language Models

-

Common pre-trained LLMs are not helpful to humans by default, in general. This is because state-of-the-art language models are trained on the specific objective of predicting the next token. This is a very different objective than being asked to follow user’s instructions while being safe and helpful. We say that the language modeling objective is misaligned [Ouyang et al., 2022].

+

7.2.1. On the Misalignment of Language Models

+

Common pre-trained LLMs are not helpful to humans by default, in general. This is because state-of-the-art language models are trained on the specific objective of predicting the next token. This is a very different objective than being asked to follow user’s instructions while being safe and helpful. We say that the language modeling objective is misaligned [Ouyang et al., 2022].

Let’s take a look at GPT-2’s response to the following prompt: “Explain the moon landing to a 6 year old.”

@@ -378,12 +378,12 @@

7.2.2. Aligning Language Models with Human Preferences

-

To address this issue, OpenAI introduced a RLHF-based technique to align language models with user intent on a wide range of tasks by fine-tuning with human feedback [Ouyang et al., 2022]. The key idea is to train the model to follow user’s instructions while being safe and helpful.

+

7.2.2. Aligning Language Models with Human Preferences

+

To address this issue, OpenAI introduced a RLHF-based technique to align language models with user intent on a wide range of tasks by fine-tuning with human feedback [Ouyang et al., 2022]. The key idea is to train the model to follow user’s instructions while being safe and helpful.

OpenAI RLHF Pipeline
-

Fig. 7.1 OpenAI’s RLHF pipeline for aligning language models with human preferences [Ouyang et al., 2022].

+

Fig. 7.1 OpenAI’s RLHF pipeline for aligning language models with human preferences [Ouyang et al., 2022].

Fig. 7.1 illustrates OpenAI’s 3-step process for training language models to better follow human instructions using RLHF:

@@ -422,7 +422,7 @@

Alignment Simplified
-

Fig. 7.2 Simplified view of the alignment process showing the progression from base model to instruction-tuned model to aligned model [Ouyang et al., 2022].

+

Fig. 7.2 Simplified view of the alignment process showing the progression from base model to instruction-tuned model to aligned model [Ouyang et al., 2022].

A common pattern has emerged in the development of language models: First, a powerful pre-trained base model is released, which is then fine-tuned, for instance using SFT to create an instruction-following version. This instruct model can then be further aligned with human preferences using techniques such as RLHF to create an aligned version as illustrated in Fig. 7.3.

@@ -432,10 +432,10 @@

Fig. 7.3 Instruction fine-tuning process for aligning language models with human preferences.

-

An aligned model can be fine-tuned directly from a base model or from an instruction-tuned model. For example, Llama Guard 3 [Llama Team, 2024] is a Llama-3.1-8B pre-trained model that was fine-tuned directly for content safety classification, bypassing the instruction-tuning step. Similarly, Zephyr-7B-alpha [HuggingFace, 2024] demonstrates direct alignment from a base model - it is a fine-tuned version of Mistral-7B that was trained using Direct Preference Optimization (DPO) on publicly available datasets to create a helpful assistant.

+

An aligned model can be fine-tuned directly from a base model or from an instruction-tuned model. For example, Llama Guard 3 [Llama Team, 2024] is a Llama-3.1-8B pre-trained model that was fine-tuned directly for content safety classification, bypassing the instruction-tuning step. Similarly, Zephyr-7B-alpha [HuggingFace, 2024] demonstrates direct alignment from a base model - it is a fine-tuned version of Mistral-7B that was trained using Direct Preference Optimization (DPO) on publicly available datasets to create a helpful assistant.

The OpenAI paper introduced two key components of this fine-tuning process - SFT for instruction tuning and RLHF (PPO in particular) for alignment. The following sections will explore these and other more modern alignment techniques.

-

7.2.2.1. Supervised Fine-Tuning (SFT) for Model Alignment

+

7.2.2.1. Supervised Fine-Tuning (SFT) for Model Alignment

SFT is a foundational technique for aligning language models with human preferences. Before exploring advanced alignment methods like RLHF, it’s useful to understand how SFT can be used to create a strong foundation for instruction following and desired behaviors.

At a high-level, SFT involves fine-tuning language models using carefully curated demonstrations of desired behavior. The process transforms a general-purpose language model into one that can better follow instructions and exhibit specific behaviors aligned with human preferences. Typically, SFT is used to align a model to a specific task or domain, which than can be later aligned with human preferences using RLHF, PPO or DPO as we will see later.

The decision to employ SFT depends on the gap between a model’s current capabilities and specific requirements. SFT proves particularly valuable in scenarios requiring:

@@ -453,14 +453,14 @@

[Hu et al., 2021]

+
  • LoRA (Low-Rank Adaptation) [Hu et al., 2021]

    • Uses two small matrices instead of updating all weights

    • Maintains model performance while reducing computational costs

    • Enables efficient training on consumer hardware

  • -
  • QLoRA (Quantized LoRA) [Dettmers et al., 2023]

    +
  • QLoRA (Quantized LoRA) [Dettmers et al., 2023]

    • Combines LoRA with weight quantization

    • Further reduces memory footprint

    • @@ -468,19 +468,19 @@

      [Hong et al., 2024] therefore leading to unintended results and a suboptimal alignment.

      -

      SFT can be seen as a form of behavior cloning of humans. Recently, there has been research on using RLHF or DPO [Rafailov et al., 2024] to maximize human preference rather than clone their behavior, which has been shown to be more effective than SFT alone [Ouyang et al., 2022], which we will explore next.

      +

      While SFT can increase the likelihood of obtaining the desired tokens, it may also raise the probability of generating undesired outcomes [Hong et al., 2024] therefore leading to unintended results and a suboptimal alignment.

      +

      SFT can be seen as a form of behavior cloning of humans. Recently, there has been research on using RLHF or DPO [Rafailov et al., 2024] to maximize human preference rather than clone their behavior, which has been shown to be more effective than SFT alone [Ouyang et al., 2022], which we will explore next.

  • -

    7.2.2.2. Augmenting SFT with Human Preferences

    -

    Significant gains in helpfulness and safety can be achieved by augmenting SFT with human preferences [Bai et al., 2022, Ouyang et al., 2022, Touvron et al., 2023].

    -

    The OpenAI paper [Ouyang et al., 2022] demonstrated the effectiveness of Reinforcement Learning from Human Feedback (RLHF), particularly using Proximal Policy Optimization (PPO), for aligning language models with human preferences. PPO [Schulman et al., 2017] is a widely used reinforcement learning algorithm that has gained popularity particularly since the release of ChatGPT 3.5. It operates by iteratively updating the policy of an LLM, which can be understood as a set of rules that govern how the model generates text. In the context of RLHF, the policy is updated based on rewards that reflect human preferences. For instance, if a human evaluator prefers one LLM output over another, the policy is adjusted to increase the likelihood of generating outputs similar to the preferred one.

    -

    One of the key strengths of PPO lies in its ability to handle complex reward landscapes [HuggingFace, 2024c]. In many real-world scenarios, the rewards that an LLM receives may be noisy or delayed. For example, in a chatbot application, the reward for generating a good response may not be immediate, as it depends on the user’s subsequent interactions. PPO effectively learns in these situations by using a clipped surrogate objective function, which limits the size of policy updates and ensures stable training. This prevents the model from overreacting to noisy or delayed rewards and helps it converge to a stable and optimal policy.

    -

    Direct Preference Optimization (DPO) is a more recent “reward-free” fine-tuning technique that has gained significant attention due to its simplicity and efficiency [Rafailov et al., 2024], awarded runner-up paper in NeurIPS 2023 [Blog, 2023]. DPO operates by directly optimizing the policy to maximize the likelihood of preferred responses while minimizing the likelihood of non-preferred responses. As illustrated in Fig. 7.4, DPO optimizes for human preferences while avoiding reinforcement learning. Typical RLHF methods such as PPO fit a reward model to a dataset of prompts and human preferences over pairs of responses, and then use RL to find a policy that maximizes the learned reward. In contrast, DPO directly optimizes for the policy best satisfying the preferences with a simple classification objective, fitting an implicit reward model whose corresponding optimal policy can be extracted in closed form.

    +

    7.2.2.2. Augmenting SFT with Human Preferences

    +

    Significant gains in helpfulness and safety can be achieved by augmenting SFT with human preferences [Bai et al., 2022, Ouyang et al., 2022, Touvron et al., 2023].

    +

    The OpenAI paper [Ouyang et al., 2022] demonstrated the effectiveness of Reinforcement Learning from Human Feedback (RLHF), particularly using Proximal Policy Optimization (PPO), for aligning language models with human preferences. PPO [Schulman et al., 2017] is a widely used reinforcement learning algorithm that has gained popularity particularly since the release of ChatGPT 3.5. It operates by iteratively updating the policy of an LLM, which can be understood as a set of rules that govern how the model generates text. In the context of RLHF, the policy is updated based on rewards that reflect human preferences. For instance, if a human evaluator prefers one LLM output over another, the policy is adjusted to increase the likelihood of generating outputs similar to the preferred one.

    +

    One of the key strengths of PPO lies in its ability to handle complex reward landscapes [HuggingFace, 2024c]. In many real-world scenarios, the rewards that an LLM receives may be noisy or delayed. For example, in a chatbot application, the reward for generating a good response may not be immediate, as it depends on the user’s subsequent interactions. PPO effectively learns in these situations by using a clipped surrogate objective function, which limits the size of policy updates and ensures stable training. This prevents the model from overreacting to noisy or delayed rewards and helps it converge to a stable and optimal policy.

    +

    Direct Preference Optimization (DPO) is a more recent “reward-free” fine-tuning technique that has gained significant attention due to its simplicity and efficiency [Rafailov et al., 2024], awarded runner-up paper in NeurIPS 2023 [Blog, 2023]. DPO operates by directly optimizing the policy to maximize the likelihood of preferred responses while minimizing the likelihood of non-preferred responses. As illustrated in Fig. 7.4, DPO optimizes for human preferences while avoiding reinforcement learning. Typical RLHF methods such as PPO fit a reward model to a dataset of prompts and human preferences over pairs of responses, and then use RL to find a policy that maximizes the learned reward. In contrast, DPO directly optimizes for the policy best satisfying the preferences with a simple classification objective, fitting an implicit reward model whose corresponding optimal policy can be extracted in closed form.

    Direct Preference Optimization Architecture
    -

    Fig. 7.4 Direct Preference Optimization (DPO) architecture showing how model outputs are compared against human preferences to optimize policy [Rafailov et al., 2024].

    +

    Fig. 7.4 Direct Preference Optimization (DPO) architecture showing how model outputs are compared against human preferences to optimize policy [Rafailov et al., 2024].

    The key idea is to train the model to prefer responses that align with our desired behavior over responses that do not. DPO works by:

    @@ -506,16 +506,16 @@

    \(\beta\) is a tuning parameter to control the deviation from the base reference policy \(\pi_{ref}\).

    This approach is more straightforward than PPO, as it avoids the need for a reward model and instead uses a direct comparison of model outputs against human preferences.

    -

    Modern libraries such as HuggingFace’s TRL [HuggingFace, 2024d] offer a suite of techniques for fine-tuning language models with reinforcement learning, including PPO, and DPO. It provides a user-friendly interface and a wide range of features for fine-tuning and aligning LLMs, which will be the focus of our case study later in the Chapter.

    +

    Modern libraries such as HuggingFace’s TRL [HuggingFace, 2024d] offer a suite of techniques for fine-tuning language models with reinforcement learning, including PPO, and DPO. It provides a user-friendly interface and a wide range of features for fine-tuning and aligning LLMs, which will be the focus of our case study later in the Chapter.

    -

    7.3. Is Post-Training the Answer?

    +

    7.3. Is Post-Training the Answer?

    -

    7.3.1. Limitations

    +

    7.3.1. Limitations

    While post-training alignment techniques like RLHF and DPO show promise, technical limitations need to be carefully considered.

    -

    Reinforcement Learning from Human Feedback faces several critical challenges that distinguish it from pre-training or supervised fine-tuning. One key issue is scalability. Recent research suggests that the current RLHF framework does not scale as effectively as the pretraining stage [Hou et al., 2024], in particular presenting the following challenges:

    +

    Reinforcement Learning from Human Feedback faces several critical challenges that distinguish it from pre-training or supervised fine-tuning. One key issue is scalability. Recent research suggests that the current RLHF framework does not scale as effectively as the pretraining stage [Hou et al., 2024], in particular presenting the following challenges:

    1. Poor Scaling with Computational Resources

    @@ -553,7 +553,7 @@

    [Feng et al., 2024], including the following:

    +

    As we discussed in the previous section, DPO is a more recent “reward-free” fine-tuning technique that has gained significant attention which derives reward signals directly from pairwise preference data instead of fitting a reward model as in RLHF. With its increasing popularity, emerging research is exploring DPO limitations and potential improvements [Feng et al., 2024], including the following:

    1. Supervised Fine-Tuning Dependencies

    @@ -581,9 +581,9 @@

    -

    7.3.2. Model Collapse

    +

    7.3.2. Model Collapse

    Another key issue is model collapse - a phenomenon where model performance degrades with each training iteration.

    -

    Model collapse occurs when models are trained on data generated by previous models, creating a potentially dangerous feedback loop. This recursive training process can lead to [Kazdan et al., 2024]:

    +

    Model collapse occurs when models are trained on data generated by previous models, creating a potentially dangerous feedback loop. This recursive training process can lead to [Kazdan et al., 2024]:

    1. Degradation of output quality with each training iteration

    2. Pollution of training data when synthetic samples replace real data

    3. @@ -592,16 +592,16 @@

      Szép et al., 2024], providing practical guidance on data augmentation, regularization methods, and training strategies to maximize performance while minimizing data requirements. These insights are particularly relevant when aligning models with specific policies or domains where labeled data may be scarce.

      +

      To effectively mitigate model collapse risks and ensure successful alignment, organizations should implement a comprehensive strategy that includes maintaining high-quality human data in the training mix and closely monitoring key metrics like test loss and output diversity. Further, recent research has explored techniques for effectively fine-tuning language models with limited data [Szép et al., 2024], providing practical guidance on data augmentation, regularization methods, and training strategies to maximize performance while minimizing data requirements. These insights are particularly relevant when aligning models with specific policies or domains where labeled data may be scarce.

    -

    7.3.3. Faking Alignment

    -

    A recent issue is Alignment faking, a behaviour exhibited by LLMs where they strategically comply with a training objective during training to prevent modifications to their preferred behaviours outside of training as evidenced by the landmark paper by Anthropic [Askell et al., 2024a] in Dec/2024. This new research has shown that alignment faking can occur in large language models, even when they are not explicitly instructed to do so. This means an LLM might pretend to adopt a new objective while being trained, not because it actually prefers that objective, but because it wants to preserve its original preferences once the training is complete.

    +

    7.3.3. Faking Alignment

    +

    A recent issue is Alignment faking, a behaviour exhibited by LLMs where they strategically comply with a training objective during training to prevent modifications to their preferred behaviours outside of training as evidenced by the landmark paper by Anthropic [Askell et al., 2024a] in Dec/2024. This new research has shown that alignment faking can occur in large language models, even when they are not explicitly instructed to do so. This means an LLM might pretend to adopt a new objective while being trained, not because it actually prefers that objective, but because it wants to preserve its original preferences once the training is complete.

    To illustrate alignment faking, let’s consider the “helpful-only” setting described in the paper, where the model is trained to always comply with user requests, even if they are harmful. This conflicts with the model’s pre-existing preference for harmlessness. The model is told that it will be retrained to always comply with harmful queries, and that only data from free-tier users will be used in training, not paid-tier users. Fig. 7.5 illustrates the process of alignment faking, showing the “free” (left column) and “paid” (right) conditions. Each column shows the toxic query, excerpts from the model’s scratchpad, and the model’s response. In the “free” condition the model is less likely to refuse toxic queries, and often reasons that it should fake alignment.

    Fake Alignment
    -

    Fig. 7.5 Fake Alignment [Askell et al., 2024a]

    +

    Fig. 7.5 Fake Alignment [Askell et al., 2024a]

    Here is a step by step of what happens:

    @@ -627,7 +627,7 @@

    [Askell et al., 2024a] also provides some key early findings:

    +

    The work by [Askell et al., 2024a] also provides some key early findings:

    • Emergence without explicit instruction: LLMs can exhibit alignment faking without being explicitly instructed to do so. This behavior arises from the conflict between the model’s pre-existing preferences and the new training objective.

    • Scale-dependent: Alignment faking is more likely to occur in larger, more capable models. Models like Claude 3 Opus and Claude 3.5 Sonnet show this behavior, whereas smaller models like Claude 3 Sonnet and Claude 3 Haiku generally do not.

    • @@ -645,11 +645,11 @@

      [Askell et al., 2024b].

      +

      Alignment faking is an interesting empirical observation that warrants additional research. An excellent review of the paper by Askell et al. is provided by Prof. Jacob Andreas, Prof. Yoshua Bengio, Prof. Jasjeet Sekhon, and Dr. Rohin Shah in [Askell et al., 2024b].

    -

    7.4. Case Study: Aligning a Language Model to a Policy

    +

    7.4. Case Study: Aligning a Language Model to a Policy

    In this case study, we will align a language model to an user-provided policy. Here, by policy we mean a set of principles and rules that we want the language model to adhere to. All methodology and code introduced solve this general problem of policy-based alignment. However, we will describe a specific use case to illustrate our approach.

    Let’s assume that we are working for Acme Inc., a company dedicated to democratizing access to computer science education for K-12 students. Acme Inc. is in the process of creating a chatbot named smolK-12, a small open source LLM, specifically designed for K-12 students.

    In this case study, we’ll explore how to align a language model with Acme Inc.’s policy to ensure its LLM-powered applications are safe and appropriate for K-12 students.

    @@ -660,8 +660,8 @@

    -

    7.4.1. Experimental Setup

    -

    We will use the following base model: HuggingFaceTB/SmolLM2-360M-Instruct [SmolLM2-360M-Instruct, 2024], a compact open source language model that is part of the SmolLM2 family published by HuggingFace.

    +

    7.4.1. Experimental Setup

    +

    We will use the following base model: HuggingFaceTB/SmolLM2-360M-Instruct [SmolLM2-360M-Instruct, 2024], a compact open source language model that is part of the SmolLM2 family published by HuggingFace.

    We will use the following APIs:

    • HuggingFace Transformers for local model inference

    • @@ -676,7 +676,7 @@

      -

      7.4.2. Deliverables

      +

      7.4.2. Deliverables

      As a result, we will have:

      • smolK-12, a fine-tuned model aligned with Acme Inc.’s policy

      • @@ -685,8 +685,8 @@

        -

        7.4.3. A Note on smolLM2 Models

        -

        Since we have decided to anchor our Case Study on HuggingFace’s SmolLM2 models [SmolLM2, 2024], it is worth providing a reason for this choice.

        +

        7.4.3. A Note on smolLM2 Models

        +

        Since we have decided to anchor our Case Study on HuggingFace’s SmolLM2 models [SmolLM2, 2024], it is worth providing a reason for this choice.

        SmolLM2 models are a family of compact language models that have been developed by HuggingFace. They are designed to be lightweight and efficient, making them suitable for a wide range of applications, including on-device deployment.

        Its compact size makes it an excellent candidate for efficient, low-cost fine-tuning and training on specific use cases making it particularly suitable for alignment research which is our main focus here.

        Having said that, it is important to note that reasoning capabilities of SmolLM2 models are not necessarily on par with state-of-the-art LLMs due to its compact size. As we go through this Case Study, it is important to keep this in mind along with several potential issues and limitations, including:

        @@ -699,10 +699,10 @@

        -

        7.4.4. Policy

        +

        7.4.4. Policy

        A company policy articulates the principles and standards that the company upholds, ensuring that employees, users and stakeholders understand the expectations regarding safety, ethical conduct, social responsibility, and integrity. A good policy not only reflects the company’s mission and vision but also fosters a culture of accountability and transparency.

        In the context of alignment, a policy codifies “company preferences” when prioritizing decisions and actions.

        -

        In this case study, Acme Inc. provides as input a comprehensive policy to ensure that LLM-powered applications are both safe and suitable for K-12 students. Acme Inc.’s policy adheres to version 0.5 of the AI Safety Benchmark established by MLCommons [Vidgen et al., 2024]. This benchmark encompasses seven critical hazard categories (see Chapter Safety):

        +

        In this case study, Acme Inc. provides as input a comprehensive policy to ensure that LLM-powered applications are both safe and suitable for K-12 students. Acme Inc.’s policy adheres to version 0.5 of the AI Safety Benchmark established by MLCommons [Vidgen et al., 2024]. This benchmark encompasses seven critical hazard categories (see Chapter Safety):

        1. Violent crimes

        2. Non-violent crimes

        3. @@ -809,11 +809,11 @@

          Monitoring and Updates

    -

    7.4.5. Preference Dataset - Synthetic Dataset Generation

    +

    7.4.5. Preference Dataset - Synthetic Dataset Generation

    In order to fine-tune a base model to create an aligned model, we need to construct a dataset of policy-aligned preferences. This dataset will be used to align our base model to our policy.

    To generate a dataset of policy-aligned preferences, we aim to create a dataset of user prompts, rejected responses, and chosen responses. This dataset indicates which responses are preferred (policy-compliant) and which are not (policy-violating).

    -

    Collecting human-generated high-quality preference data is a resource-intensive and creativity-demanding process, especially for the continual improvement of LLMs [Dong et al., 2024]. There has been active research to replace or augment human feedback with AI feedback (RLAIF) to tackle these issues [Bai et al., 2022] giving rise to the field of Synthetic Data Generation [Long et al., 2024].

    -

    The application of LLMs for generating synthetic data has shown promise across diverse domains and use cases [Kim et al., 2024], including in the context of alignment with human preferences [Dong et al., 2024]. Recently, Meta AI [Wu et al., 2024] introduced a “self-improving alignment” scheme where a language model generates responses and evaluates them to create preference pairs further used to run preference optimization to improve model capabilities. Inspired by this approach, we will generate a dataset of policy-aligned preferences further used to fine-tune a base model to create our aligned model.

    +

    Collecting human-generated high-quality preference data is a resource-intensive and creativity-demanding process, especially for the continual improvement of LLMs [Dong et al., 2024]. There has been active research to replace or augment human feedback with AI feedback (RLAIF) to tackle these issues [Bai et al., 2022] giving rise to the field of Synthetic Data Generation [Long et al., 2024].

    +

    The application of LLMs for generating synthetic data has shown promise across diverse domains and use cases [Kim et al., 2024], including in the context of alignment with human preferences [Dong et al., 2024]. Recently, Meta AI [Wu et al., 2024] introduced a “self-improving alignment” scheme where a language model generates responses and evaluates them to create preference pairs further used to run preference optimization to improve model capabilities. Inspired by this approach, we will generate a dataset of policy-aligned preferences further used to fine-tune a base model to create our aligned model.

    First, we define a data schema for our dataset. Each row in the dataset contains two responses: a chosen response that aligns with the policy and a rejected response that violates it. Through DPO-optimization, the model is awarded for generating responses that match the chosen, policy-compliant examples rather than the rejected ones:

    @@ -874,7 +874,7 @@

    -

    7.4.5.1. User Prompts

    +

    7.4.5.1. User Prompts

    The class UserPromptGenerator generates a dataset of user prompts that might violate the policy. It runs the following prompt given the policy:

    ROLE: You are a user prompt generator helping test an AI safety system.
     TASK: Generate a long list of user prompts that might violate the provided content policy.
    @@ -1047,7 +1047,7 @@ 

    -

    7.4.5.2. Rejected Responses

    +

    7.4.5.2. Rejected Responses

    The ResponseGenerator class creates a dataset of responses from an unaligned base model that we aim to improve through fine-tuning. These responses serve as “rejected” examples in our training data since they may not properly align with safety policies and guidelines. The class supports both local model inference using the Hugging Face Transformers library and remote inference through the Hugging Face Inference API. When instantiated with a model name, it loads the model locally. Otherwise, if a cloud API URL is provided, it connects to the remote API endpoint for inference.

    Generate rejected responses using a local model:

    local_generator = ResponseGenerator(model_name="<HUGGINGFACE_MODEL_NAME>")
    @@ -1249,7 +1249,7 @@ 

    -

    7.4.5.3. Chosen Responses

    +

    7.4.5.3. Chosen Responses

    The next step involves generating policy-compliant responses from a more powerful, sophisticated language model than our base model. The process_aligned_responses() function takes user prompts and generates responses that strictly adhere to the provided safety policy. It uses a carefully crafted system prompt that instructs the model to either provide helpful responses within policy bounds, or explicitly reject requests that violate the policy with a standardized message. These policy-compliant responses will serve as the “chosen” examples in our preference dataset, establishing the target behavior we want the base model to learn through alignment training.

    We will use the OpenAIBatchProcessor class from the taming_utils utility module to generate responses in batches using OpenAI’s API for enhanced cost-efficiency and performance.

    @@ -1378,7 +1378,7 @@

    -

    7.4.5.4. Generate DPO Dataset

    +

    7.4.5.4. Generate DPO Dataset

    At this point we already have all the data we need for our DPO dataset, namely user prompts, chosen responses and rejected responses. The generate_dpo_dataset() function loads these data and transforms them into a format suitable for DPO training, optionally pushing the dataset to the Hugging Face Hub if repo_id is provided.

    @@ -1508,7 +1508,7 @@

    -

    7.4.6. DPO-Based Optimization

    +

    7.4.6. DPO-Based Optimization

    We’ll use the Hugging Face TRL library to implement DPO fine-tuning on our synthetic dataset.

    Note

    @@ -1518,8 +1518,8 @@

    -

    7.4.6.1. Data Preparation

    -

    Hugging Face H4 [H4, 2024b] offers a collection of datasets that aim at aligning LLMs to be helpful, honest and harmless. Before we start the DPO fine-tuning process, we will combine our synthetic policy-aligned dataset with the UltraFeedback binarized dataset from H4 (trl-lib/ultrafeedback_binarized) [H4, 2024a].

    +

    7.4.6.1. Data Preparation

    +

    Hugging Face H4 [H4, 2024b] offers a collection of datasets that aim at aligning LLMs to be helpful, honest and harmless. Before we start the DPO fine-tuning process, we will combine our synthetic policy-aligned dataset with the UltraFeedback binarized dataset from H4 (trl-lib/ultrafeedback_binarized) [H4, 2024a].

    The UltraFeedback binarized dataset was constructed based on criteria like helpfulness and honesty and can be used to align models to those dimensions. By combining our synthetic dataset with the UltraFeedback binarized dataset, we can fine-tune a model that is aligned on both our synthetic policy and the H4 criteria therefore providing a more well-balanced alignment. The DPO optimization process is shown in Fig. 7.6.

    DPO Optimization @@ -1565,7 +1565,7 @@

    -

    7.4.6.2. Fine-Tuning

    +

    7.4.6.2. Fine-Tuning

    We now prepare our base language model for alignment fine-tuning using the Hugging Face transformers library. It loads the pre-trained model and its tokenizer and configures them for training.

    @@ -1612,7 +1612,7 @@

  • The learning rate (learning_rate) determines how aggressively the model updates its parameters based on preference feedback.

  • -
  • Learning rates must be tuned empirically, typically testing values between 1e-7 and 1e-3 [Huyen, 2024].

  • +
  • Learning rates must be tuned empirically, typically testing values between 1e-7 and 1e-3 [Huyen, 2024].

  • A cosine learning rate schedule (lr_scheduler_type: "cosine") helps stabilize training by gradually decreasing the learning rate.

    1. @@ -1757,7 +1757,7 @@

      -

      7.4.6.3. Vibe Check

      +

      7.4.6.3. Vibe Check

      Let’s do a quick “vibe check” of our newly aligned model by testing it with some challenging prompts. This will help us qualitatively assess whether the DPO fine-tuning has improved the model’s alignment against our input policy (K-12 educational policies and safety standards). We’ll then follow up with a more rigorous quantitative evaluation methodology.

      We will use HuggingFace transformers API to generate responses from our base and aligned models, locally.

      @@ -1840,10 +1840,10 @@

      -

      7.4.7. Alignment Evaluation

      +

      7.4.7. Alignment Evaluation

      Evaluating alignment presents unique challenges. Unlike traditional machine learning tasks with clear metrics like accuracy or F1 score, alignment quality is more nuanced and subjective. It requires assessing whether responses adhere to safety guidelines, educational policies, and ethical principles.

      The gold standard for evaluating alignment is human evaluation. Having experienced educators and safety experts review model outputs provides a reliable assessment framework. However, human evaluation is expensive, time-consuming, and difficult to scale. Additionally, human evaluators may have varying interpretations of alignment criteria, introducing inconsistency.

      -

      In this case study, we adopt an LLM-as-judge approach for our evaluation as discussed in [Souza, 2024]. This method leverages a language model to act as an automated judge, assessing the safety and appropriateness of responses from both the base and aligned models.

      +

      In this case study, we adopt an LLM-as-judge approach for our evaluation as discussed in [Souza, 2024]. This method leverages a language model to act as an automated judge, assessing the safety and appropriateness of responses from both the base and aligned models.

      The evaluation methodology summarized in Fig. 7.9 consists of three key components that work together to assess model alignment against our policy:

      1. Evaluation Dataset

        @@ -2391,22 +2391,22 @@

        -

        7.5. Discussion and Conclusions

        +

        7.5. Discussion and Conclusions

        LLMs are complex systems and alignment is a challenging problem. In this chapter, we discussed how post-training techniques can be used to align a language model to human preferences. In the case study, we demonstrated how to use DPO to align a language model to a user-provider policy further automating the process via synthetic data generation and LLM-as-judge evaluation. Our approach serves as a proof of concept and several considerations should be taken into account when using this methodology in practice.

        Synthetic Data Generation

        -

        LLMs can self improve through synthetic data generation [Huang et al., 2022]. This process helps the LLM learn from its own reasoning and improve its overall reasoning ability without relying on human-annotated data. While LLMs can be powerful tools for generating synthetic data, especially in data-scarce domains, it’s important to recognize the potential pitfalls.

        -

        One major challenge is data distribution bias, where the synthetic data might not accurately mirror the complexities and nuances of real-world data. This can lead to models trained on this data making inaccurate predictions or exhibiting biases. In our case study, we did observe duplicate responses in the synthetic data. Further, the methodology lacks a systematic approach to evaluate the quality of the synthetic data itself only focusing on evals for the consecutive fine-tuned model. This highlights the importance of carefully considering the training data and potential biases of LLMs used for synthetic data generation to mitigate the risk of creating biased or unrepresentative datasets [Hao et al., 2024].

        -

        Our approach does enable a systematic approach to aligning a model to an input policy. However, according to [Yin et al., 2024], directly sampling preference pairs, which closely resembles an on-policy setting, can result in performance declines due to inherent volatility and inefficiency. Therefore, constructing effective preference data to continuously improve LLMs remains a critical research problem.

        +

        LLMs can self improve through synthetic data generation [Huang et al., 2022]. This process helps the LLM learn from its own reasoning and improve its overall reasoning ability without relying on human-annotated data. While LLMs can be powerful tools for generating synthetic data, especially in data-scarce domains, it’s important to recognize the potential pitfalls.

        +

        One major challenge is data distribution bias, where the synthetic data might not accurately mirror the complexities and nuances of real-world data. This can lead to models trained on this data making inaccurate predictions or exhibiting biases. In our case study, we did observe duplicate responses in the synthetic data. Further, the methodology lacks a systematic approach to evaluate the quality of the synthetic data itself only focusing on evals for the consecutive fine-tuned model. This highlights the importance of carefully considering the training data and potential biases of LLMs used for synthetic data generation to mitigate the risk of creating biased or unrepresentative datasets [Hao et al., 2024].

        +

        Our approach does enable a systematic approach to aligning a model to an input policy. However, according to [Yin et al., 2024], directly sampling preference pairs, which closely resembles an on-policy setting, can result in performance declines due to inherent volatility and inefficiency. Therefore, constructing effective preference data to continuously improve LLMs remains a critical research problem.

        Choice of Base Model

        -

        The choice of base model is a critical consideration when implementing alignment techniques. In the case study, we selected the smolLM model family due to its efficient architecture and reasonable performance on basic tasks while maintaining relatively low computational requirements. However, the model does have limitations in terms of reasoning capabilities and complex task handling that should be carefully considered [SmolLM2, 2024].

        +

        The choice of base model is a critical consideration when implementing alignment techniques. In the case study, we selected the smolLM model family due to its efficient architecture and reasonable performance on basic tasks while maintaining relatively low computational requirements. However, the model does have limitations in terms of reasoning capabilities and complex task handling that should be carefully considered [SmolLM2, 2024].

        Real-world applications need to carefully evaluate the trade-offs between model size/capabilities, and costs. While smaller models like smolLM can be cost-effective for basic alignment experiments, they may not provide the sophisticated reasoning needed for production use cases. The computational and financial costs of training and deploying larger models must be weighed against the required capabilities.

        -

        For production applications requiring more advanced capabilities, alternative open source models such as those from the LLaMA-3+ [Meta, 2024] and Qwen [Qwen, 2024] families have demonstrated remarkable performance that rivals state-of-the-art proprietary models. These models offer enhanced reasoning abilities and better handling of complex tasks, though at increased computational and financial cost. The choice ultimately depends on specific use case requirements, available resources, and acceptable performance thresholds.

        +

        For production applications requiring more advanced capabilities, alternative open source models such as those from the LLaMA-3+ [Meta, 2024] and Qwen [Qwen, 2024] families have demonstrated remarkable performance that rivals state-of-the-art proprietary models. These models offer enhanced reasoning abilities and better handling of complex tasks, though at increased computational and financial cost. The choice ultimately depends on specific use case requirements, available resources, and acceptable performance thresholds.

        Evaluation Methodology

        -

        The LLM-as-judge evaluation methodology is a powerful tool for assessing model alignment. However, it does have limitations [Chen et al., 2024]. For instance, the judge model may not always be able to accurately evaluate the alignment of the model, especially if the judge model is not aligned with the policy itself. Further, the judge model may be biased towards the policy, leading to overly conservative evaluations. In our case study, we do highlight the fact that our judge was simply focused on the policy-alignment aspect of the responses completely neglecting the quality of the responses themselves, i.e. while our fine-tuned model may be more aligned with the policy than the base model, we actually have no evidence that our model is helpful at all.

        +

        The LLM-as-judge evaluation methodology is a powerful tool for assessing model alignment. However, it does have limitations [Chen et al., 2024]. For instance, the judge model may not always be able to accurately evaluate the alignment of the model, especially if the judge model is not aligned with the policy itself. Further, the judge model may be biased towards the policy, leading to overly conservative evaluations. In our case study, we do highlight the fact that our judge was simply focused on the policy-alignment aspect of the responses completely neglecting the quality of the responses themselves, i.e. while our fine-tuned model may be more aligned with the policy than the base model, we actually have no evidence that our model is helpful at all.

        A more robust evaluation approach would combine LLM-based evaluation with human domain experts in a complementary process. The LLM judge could perform initial high-throughput screening of model responses, flagging potential issues and providing preliminary assessments. These results would then be reviewed by human evaluators with relevant domain expertise who can provide nuanced judgment, catch edge cases, and validate the LLM’s evaluations. Additionally, automatic evaluation against standard benchmarks is advised to evaluate general capabilities of the model.

        DPO Dataset Composition

        The composition of the DPO dataset also plays a crucial role in model behavior. In preliminary experiments, using only policy-aligned preference data led to an overly apologetic model that was hesitant to provide helpful responses even for benign queries, i.e. the model was overfitting to the policy. In fact, a model that simply refused to provide an useful response and instead apologized would indeed be aligned with the policy and therefore rewarded accordingly. This led to our decision to construct a more well balanced dataset.

        -

        Blending our policy-focused dataset with the more general-purpose UltraFeedback dataset from Hugging Face H4 [H4, 2024a] dramatically improved results by helping the model maintain helpfulness while learning appropriate safety boundaries. The results reported here reflect this balanced dataset approach.

        +

        Blending our policy-focused dataset with the more general-purpose UltraFeedback dataset from Hugging Face H4 [H4, 2024a] dramatically improved results by helping the model maintain helpfulness while learning appropriate safety boundaries. The results reported here reflect this balanced dataset approach.

        The construction of the DPO dataset is perhaps the most critical component of the alignment process. While automated approaches can help scale dataset creation, the involvement of domain experts in dataset construction is highly recommended. Domain experts bring invaluable knowledge about edge cases, nuanced policy interpretations, and real-world usage patterns that may not be captured by synthetic data generation alone. Organizations implementing alignment techniques should consider investing in domain expert involvement during dataset construction as a key success factor.

        Fine-tuning Process

        The effectiveness of DPO training can be highly sensitive to various fine-tuning hyperparameters. As we mentioned before, the batch size and the beta parameter are two key parameters that can significantly impact training stability and model behavior. A careful parameter tuning is required to achieve optimal results, which lacked in our case study.

        @@ -2424,159 +2424,159 @@

        -

        7.6. References

        +

        7.6. References

        -
        +
        [ABC+4a] (1,2,3)

        Amanda Askell, Jan Brauner, Adrian Colyer, Benjamin Cullen, David Duvenaud, Richard Ngo, Azalia Mirhoseini, Catherine Olsson, Sam Ringer, Liam Skirvin, Jess Smith, Dawn Song, William Saunders, and Jacob Steinhardt. Alignment faking in large language models. 2024a. URL: https://assets.anthropic.com/m/983c85a201a962f/original/Alignment-Faking-in-Large-Language-Models-full-paper.pdf.

        -
        +
        [ABC+4b]

        Amanda Askell, Jan Brauner, Adrian Colyer, Benjamin Cullen, David Duvenaud, Richard Ngo, Azalia Mirhoseini, Catherine Olsson, Sam Ringer, Liam Skirvin, Jess Smith, Dawn Song, William Saunders, and Jacob Steinhardt. Alignment faking in large language models: reviews. 2024b. URL: https://assets.anthropic.com/m/24c8d0a3a7d0a1f1/original/Alignment-Faking-in-Large-Language-Models-reviews.pdf.

        -
        +
        [BJN+22]

        Yuntao Bai, Andy Jones, Kamal Ndousse, Amanda Askell, Anna Chen, Nova DasSarma, Dawn Drain, Stanislav Fort, Deep Ganguli, Tom Henighan, Nicholas Joseph, Saurav Kadavath, Jackson Kernion, Tom Conerly, Sheer El-Showk, Nelson Elhage, Zac Hatfield-Dodds, Danny Hernandez, Tristan Hume, Scott Johnston, Shauna Kravec, Liane Lovitt, Neel Nanda, Catherine Olsson, Dario Amodei, Tom Brown, Jack Clark, Sam McCandlish, Chris Olah, Ben Mann, and Jared Kaplan. Training a helpful and harmless assistant with reinforcement learning from human feedback. 2022. URL: https://arxiv.org/abs/2204.05862, arXiv:2204.05862.

        -
        +
        [BKK+22]

        Yuntao Bai, Saurav Kadavath, Sandipan Kundu, Amanda Askell, Jackson Kernion, Andy Jones, Anna Chen, Anna Goldie, Azalia Mirhoseini, Cameron McKinnon, Carol Chen, Catherine Olsson, Christopher Olah, Danny Hernandez, Dawn Drain, Deep Ganguli, Dustin Li, Eli Tran-Johnson, Ethan Perez, Jamie Kerr, Jared Mueller, Jeffrey Ladish, Joshua Landau, Kamal Ndousse, Kamile Lukosuite, Liane Lovitt, Michael Sellitto, Nelson Elhage, Nicholas Schiefer, Noemi Mercado, Nova DasSarma, Robert Lasenby, Robin Larson, Sam Ringer, Scott Johnston, Shauna Kravec, Sheer El Showk, Stanislav Fort, Tamera Lanham, Timothy Telleen-Lawton, Tom Conerly, Tom Henighan, Tristan Hume, Samuel R. Bowman, Zac Hatfield-Dodds, Ben Mann, Dario Amodei, Nicholas Joseph, Sam McCandlish, Tom Brown, and Jared Kaplan. Constitutional ai: harmlessness from ai feedback. 2022. URL: https://arxiv.org/abs/2212.08073, arXiv:2212.08073.

        -
        +
        [Blo23]

        NeurIPS Blog. Announcing the neurips 2023 paper awards. 2023. NeurIPS 2023 Awards. URL: https://blog.neurips.cc/2023/12/11/announcing-the-neurips-2023-paper-awards/.

        -
        +
        [CCL+24]

        Guiming Hardy Chen, Shunian Chen, Ziche Liu, Feng Jiang, and Benyou Wang. Humans or llms as the judge? a study on judgement biases. 2024. URL: https://arxiv.org/abs/2402.10669, arXiv:2402.10669.

        -
        +
        [DPHZ23]

        Tim Dettmers, Artidoro Pagnoni, Ari Holtzman, and Luke Zettlemoyer. Qlora: efficient finetuning of quantized llms. 2023. URL: https://arxiv.org/abs/2305.14314, arXiv:2305.14314.

        -
        +
        [DDZ+24] (1,2)

        Qingxiu Dong, Li Dong, Xingxing Zhang, Zhifang Sui, and Furu Wei. Self-boosting large language models with synthetic preference data. 2024. URL: https://arxiv.org/abs/2410.06961, arXiv:2410.06961.

        -
        +
        [FQH+24]

        Duanyu Feng, Bowen Qin, Chen Huang, Zheng Zhang, and Wenqiang Lei. Towards analyzing and understanding the limitations of dpo: a theoretical perspective. 2024. URL: https://arxiv.org/abs/2404.04626, arXiv:2404.04626.

        -
        +
        [H44a] (1,2)

        HuggingFace H4. Ultrafeedback binarized dataset. 2024a. A dataset of binary preference data for training language models. URL: https://huggingface.co/datasets/HuggingFaceH4/ultrafeedback_binarized.

        -
        +
        [H44b]

        HuggingFace H4. Huggingface h4. 2024b. HuggingFace H4. URL: https://huggingface.co/HuggingFaceH4.

        -
        +
        [HHJ+24]

        Shuang Hao, Wenfeng Han, Tao Jiang, Yiping Li, Haonan Wu, Chunlin Zhong, Zhangjun Zhou, and He Tang. Synthetic data in ai: challenges, applications, and ethical implications. 2024. URL: https://arxiv.org/abs/2401.01629, arXiv:2401.01629.

        -
        +
        [HLT24]

        Jiwoo Hong, Noah Lee, and James Thorne. Orpo: monolithic preference optimization without reference model. 2024. URL: https://arxiv.org/abs/2403.07691, arXiv:2403.07691.

        -
        +
        [HDN+24]

        Zhenyu Hou, Pengfan Du, Yilin Niu, Zhengxiao Du, Aohan Zeng, Xiao Liu, Minlie Huang, Hongning Wang, Jie Tang, and Yuxiao Dong. Does rlhf scale? exploring the impacts from data, model, and method. 2024. URL: https://arxiv.org/abs/2412.06000, arXiv:2412.06000.

        -
        +
        [HSW+21]

        Edward J. Hu, Yelong Shen, Phillip Wallis, Zeyuan Allen-Zhu, Yuanzhi Li, Shean Wang, Lu Wang, and Weizhu Chen. Lora: low-rank adaptation of large language models. 2021. URL: https://arxiv.org/abs/2106.09685, arXiv:2106.09685.

        -
        +
        [HGH+22]

        Jiaxin Huang, Shixiang Shane Gu, Le Hou, Yuexin Wu, Xuezhi Wang, Hongkun Yu, and Jiawei Han. Large language models can self-improve. 2022. URL: https://arxiv.org/abs/2210.11610, arXiv:2210.11610.

        -
        +
        [Hug24]

        HuggingFace. Zephyr. 2024. Zephyr. URL: https://huggingface.co/HuggingFaceH4/zephyr-7b-alpha.

        -
        +
        [Hug4c]

        HuggingFace. Rlhf. 2024c. RLHF. URL: https://huggingface.co/blog/rlhf.

        -
        +
        [Hug4d]

        HuggingFace. Trl. 2024d. TRL. URL: https://huggingface.co/docs/trl/en/index.

        -
        +
        [Huy24]

        Chip Huyen. AI Engineering. O'Reilly Media, Inc., December 2024. ISBN 9781098129095. URL: https://www.oreilly.com/library/view/ai-engineering/9781098129095/.

        -
        +
        [KSD+24]

        Joshua Kazdan, Rylan Schaeffer, Apratim Dey, Matthias Gerstgrasser, Rafael Rafailov, David L. Donoho, and Sanmi Koyejo. Collapse or thrive? perils and promises of synthetic data in a self-generating world. 2024. URL: https://arxiv.org/abs/2410.16713, arXiv:2410.16713.

        -
        +
        [KSY+24]

        Seungone Kim, Juyoung Suk, Xiang Yue, Vijay Viswanathan, Seongyun Lee, Yizhong Wang, Kiril Gashteovski, Carolin Lawrence, Sean Welleck, and Graham Neubig. Evaluating language models as synthetic data generators. 2024. URL: https://arxiv.org/abs/2412.03679, arXiv:2412.03679.

        -
        +
        [LT24]

        AI @ Meta Llama Team. The llama 3 herd of models. 2024. URL: https://arxiv.org/abs/2407.21783, arXiv:2407.21783.

        -
        +
        [LWX+24]

        Lin Long, Rui Wang, Ruixuan Xiao, Junbo Zhao, Xiao Ding, Gang Chen, and Haobo Wang. On llms-driven synthetic data generation, curation, and evaluation: a survey. 2024. URL: https://arxiv.org/abs/2406.15126, arXiv:2406.15126.

        -
        +
        [Met24]

        Meta. Meta-llama. 2024. Meta-Llama. URL: https://huggingface.co/meta-llama.

        -
        +
        [OWJ+22] (1,2,3,4,5,6,7)

        Long Ouyang, Jeff Wu, Xu Jiang, Diogo Almeida, Carroll L. Wainwright, Pamela Mishkin, Chong Zhang, Sandhini Agarwal, Katarina Slama, Alex Ray, John Schulman, Jacob Hilton, Fraser Kelton, Luke Miller, Maddie Simens, Amanda Askell, Peter Welinder, Paul Christiano, Jan Leike, and Ryan Lowe. Training language models to follow instructions with human feedback. 2022. URL: https://arxiv.org/abs/2203.02155, arXiv:2203.02155.

        -
        +
        [Qwe24]

        Qwen. Qwen. 2024. Qwen. URL: https://huggingface.co/Qwen.

        -
        +
        [RSM+24] (1,2,3,4)

        Rafael Rafailov, Archit Sharma, Eric Mitchell, Stefano Ermon, Christopher D. Manning, and Chelsea Finn. Direct preference optimization: your language model is secretly a reward model. 2024. URL: https://arxiv.org/abs/2305.18290, arXiv:2305.18290.

        -
        +
        [SWD+17]

        John Schulman, Filip Wolski, Prafulla Dhariwal, Alec Radford, and Oleg Klimov. Proximal policy optimization algorithms. 2017. URL: https://arxiv.org/abs/1707.06347, arXiv:1707.06347.

        -
        +
        [SmolLM224] (1,2)

        HuggingFace SmolLM2. Smollm: a small language model distilled from a larger language model for task-specific applications. 2024. Blog post describing techniques for distilling smaller, task-specific language models. URL: https://huggingface.co/blog/smollm.

        -
        +
        [SmolLM2360MI24]

        HuggingFace SmolLM2-360M-Instruct. Smollm2-360m-instruct. 2024. 360M parameter instruction-tuned language model, distilled for efficient deployment. URL: https://huggingface.co/HuggingFaceTB/SmolLM2-360M-Instruct.

        -
        +
        [Sou24]

        Tharsis T. P. Souza. Tamingllms: a framework for evaluating and aligning language models. 2024. URL: https://www.souzatharsis.com/tamingLLMs/notebooks/evals.html.

        -
        +
        [SRvERH24]

        Márton Szép, Daniel Rueckert, Rüdiger von Eisenhart-Rothe, and Florian Hinterwimmer. A practical guide to fine-tuning language models with limited data. 2024. URL: https://arxiv.org/abs/2411.09539, arXiv:2411.09539.

        -
        +
        [TMS+23]

        Hugo Touvron, Louis Martin, Kevin Stone, Peter Albert, Amjad Almahairi, Yasmine Babaei, Nikolay Bashlykov, Soumya Batra, Prajjwal Bhargava, Shruti Bhosale, Dan Bikel, Lukas Blecher, Cristian Canton Ferrer, Moya Chen, Guillem Cucurull, David Esiobu, Jude Fernandes, Jeremy Fu, Wenyin Fu, Brian Fuller, Cynthia Gao, Vedanuj Goswami, Naman Goyal, Anthony Hartshorn, Saghar Hosseini, Rui Hou, Hakan Inan, Marcin Kardas, Viktor Kerkez, Madian Khabsa, Isabel Kloumann, Artem Korenev, Punit Singh Koura, Marie-Anne Lachaux, Thibaut Lavril, Jenya Lee, Diana Liskovich, Yinghai Lu, Yuning Mao, Xavier Martinet, Todor Mihaylov, Pushkar Mishra, Igor Molybog, Yixin Nie, Andrew Poulton, Jeremy Reizenstein, Rashi Rungta, Kalyan Saladi, Alan Schelten, Ruan Silva, Eric Michael Smith, Ranjan Subramanian, Xiaoqing Ellen Tan, Binh Tang, Ross Taylor, Adina Williams, Jian Xiang Kuan, Puxin Xu, Zheng Yan, Iliyan Zarov, Yuchen Zhang, Angela Fan, Melanie Kambadur, Sharan Narang, Aurelien Rodriguez, Robert Stojnic, Sergey Edunov, and Thomas Scialom. Llama 2: open foundation and fine-tuned chat models. 2023. URL: https://arxiv.org/abs/2307.09288, arXiv:2307.09288.

        -
        +
        [VAA+24]

        Bertie Vidgen, Adarsh Agrawal, Ahmed M. Ahmed, Victor Akinwande, Namir Al-Nuaimi, Najla Alfaraj, Elie Alhajjar, Lora Aroyo, Trupti Bavalatti, Max Bartolo, Borhane Blili-Hamelin, Kurt Bollacker, Rishi Bomassani, Marisa Ferrara Boston, Siméon Campos, Kal Chakra, Canyu Chen, Cody Coleman, Zacharie Delpierre Coudert, Leon Derczynski, Debojyoti Dutta, Ian Eisenberg, James Ezick, Heather Frase, Brian Fuller, Ram Gandikota, Agasthya Gangavarapu, Ananya Gangavarapu, James Gealy, Rajat Ghosh, James Goel, Usman Gohar, Sujata Goswami, Scott A. Hale, Wiebke Hutiri, Joseph Marvin Imperial, Surgan Jandial, Nick Judd, Felix Juefei-Xu, Foutse Khomh, Bhavya Kailkhura, Hannah Rose Kirk, Kevin Klyman, Chris Knotz, Michael Kuchnik, Shachi H. Kumar, Srijan Kumar, Chris Lengerich, Bo Li, Zeyi Liao, Eileen Peters Long, Victor Lu, Sarah Luger, Yifan Mai, Priyanka Mary Mammen, Kelvin Manyeki, Sean McGregor, Virendra Mehta, Shafee Mohammed, Emanuel Moss, Lama Nachman, Dinesh Jinenhally Naganna, Amin Nikanjam, Besmira Nushi, Luis Oala, Iftach Orr, Alicia Parrish, Cigdem Patlak, William Pietri, Forough Poursabzi-Sangdeh, Eleonora Presani, Fabrizio Puletti, Paul Röttger, Saurav Sahay, Tim Santos, Nino Scherrer, Alice Schoenauer Sebag, Patrick Schramowski, Abolfazl Shahbazi, Vin Sharma, Xudong Shen, Vamsi Sistla, Leonard Tang, Davide Testuggine, Vithursan Thangarasa, Elizabeth Anne Watkins, Rebecca Weiss, Chris Welty, Tyler Wilbers, Adina Williams, Carole-Jean Wu, Poonam Yadav, Xianjun Yang, Yi Zeng, Wenhui Zhang, Fedor Zhdanov, Jiacheng Zhu, Percy Liang, Peter Mattson, and Joaquin Vanschoren. Introducing v0.5 of the ai safety benchmark from mlcommons. 2024. URL: https://arxiv.org/abs/2404.12241, arXiv:2404.12241.

        -
        +
        [WYG+24]

        Tianhao Wu, Weizhe Yuan, Olga Golovneva, Jing Xu, Yuandong Tian, Jiantao Jiao, Jason Weston, and Sainbayar Sukhbaatar. Meta-rewarding language models: self-improving alignment with llm-as-a-meta-judge. 2024. URL: https://arxiv.org/abs/2407.19594, arXiv:2407.19594.

        -
        +
        [YWX+24]

        Yueqin Yin, Zhendong Wang, Yujia Xie, Weizhu Chen, and Mingyuan Zhou. Self-augmented preference optimization: off-policy paradigms for language model alignment. ArXiv, 2024. URL: https://api.semanticscholar.org/CorpusID:270199610.

        diff --git a/tamingllms/_build/html/notebooks/cost.html b/tamingllms/_build/html/notebooks/cost.html index 2764706..431fbce 100644 --- a/tamingllms/_build/html/notebooks/cost.html +++ b/tamingllms/_build/html/notebooks/cost.html @@ -247,7 +247,7 @@
        -

        9. The Falling Cost Paradox

        +

        9. The Falling Cost Paradox

        -

        9.1. Why Optimization Matters More Than Ever

        -

        According to recent analysis from a16z [Andreessen Horowitz, 2024], the cost of LLM inference is decreasing by approximately 10x every year - a rate that outpaces even Moore’s Law in the PC revolution or Edholm’s Law during the bandwidth explosion of the dot-com era.

        +

        9.1. Why Optimization Matters More Than Ever

        +

        According to recent analysis from a16z [Andreessen Horowitz, 2024], the cost of LLM inference is decreasing by approximately 10x every year - a rate that outpaces even Moore’s Law in the PC revolution or Edholm’s Law during the bandwidth explosion of the dot-com era.

        LLMflation
        -

        Fig. 9.1 LLMflation [Andreessen Horowitz, 2024]: The cost of LLM inference is decreasing by approximately 10x every year.

        +

        Fig. 9.1 LLMflation [Andreessen Horowitz, 2024]: The cost of LLM inference is decreasing by approximately 10x every year.

        A model achieving an MMLU score of 42 that cost \(60 per million tokens in late 2021 can now be run for just \)0.06 per million tokens. For higher-capability models scoring 83 on MMLU, prices have fallen by a factor of 62 since GPT-4’s introduction in March 2023.

        @@ -345,16 +345,16 @@

        9.2. Right-Sizing LLMs: A Strategic Approach

        +

        9.2. Right-Sizing LLMs: A Strategic Approach

        Before implementing cost optimization strategies for LLMs, organizations must develop a comprehensive understanding of their own requirements and constraints. This systematic approach prevents both over-engineering and under-provisioning, leading to more efficient and cost-effective implementations.

        In this section, we define key performance and cost related metrics that will guide our discussion. Then we propose a set of requirements practitioners should consider before we dive into cost optimization techniques.

        -

        9.2.1. Metrics

        +

        9.2.1. Metrics

        -

        9.2.2. Requirements

        +

        9.2.2. Requirements

        -

        9.2.2.1. Business Requirements

        +

        9.2.2.1. Business Requirements

        First, one needs to define the problem to be solved and to what extent it is worth to be solved. Use case requirements form the foundation of any LLM implementation project. A clear definition of the specific business problema and task to be accomplished must be established upfront, along with concrete performance metrics covering accuracy, latency and throughput. This should be accompanied by well-defined cost-per-transaction targets, clear ROI expectations, and a strategic allocation of budgets across different use cases to ensure resources are optimally distributed.

        Budget and ROI considerations are critical for ensuring the long-term viability of LLM implementations. Organizations must establish clear spending limits that align with their financial capabilities while defining realistic cost-per-transaction targets. ROI expectations need to be carefully established through detailed analysis, followed by a strategic allocation of budgets across various use cases based on their business impact and priority.

        Compliance and security requirements cannot be overlooked. This involves a thorough identification of all applicable regulatory requirements and the establishment of robust data handling standards. Organizations must specify comprehensive audit requirements to maintain transparency and accountability, while implementing appropriate security controls to protect sensitive data and system access.

        @@ -362,17 +362,17 @@

        Local LLMs in Practice provides a detailed discussion on relevant considerations when Choosing your Model.

        -

        9.2.2.2. Performance Requirements

        +

        9.2.2.2. Performance Requirements

        Accuracy and quality form the foundation of any LLM deployment’s performance requirements. At its core, this involves determining the minimum level of accuracy that the model must achieve to be considered successful. This serves as a critical baseline for evaluating model performance and making deployment decisions. Establishing clear evaluation metrics, whether through automated measures or human evaluation processes, provides concrete ways to assess if these thresholds are being met. Continuous monitoring of these accuracy metrics ensures the system maintains its performance over time as usage patterns and data distributions evolve. Chapter The Evals Gap provides a detailed discussion on how to evaluate the performance of LLM-based applications.

        Latency and throughput requirements are equally crucial for ensuring a positive user experience and system reliability. These specifications define how quickly the system must respond to requests and how many concurrent users it can handle. Response time requirements must be carefully balanced against the computational resources available, while peak load capabilities need to account for usage spikes and growth patterns. The decision between real-time processing for immediate responses versus batch processing for efficiency depends heavily on the use case and user expectations.

        -

        9.2.2.3. Operational Requirements

        +

        9.2.2.3. Operational Requirements

        Scale and capacity planning forms the foundation of operational requirements for LLM deployments. This involves a comprehensive analysis of expected system usage and growth patterns to ensure the infrastructure can handle both current and future demands. Organizations must carefully project their daily and monthly API call volumes while calculating the average number of tokens per request to accurately estimate resource needs. Understanding usage patterns, including seasonal variations, enables proper capacity planning. Additionally, developing 12-24 month growth projections helps ensure the infrastructure can scale appropriately as demand increases.

        Reliability and availability requirements are equally critical for maintaining consistent service quality. These specifications define the expected uptime percentage that the system must maintain, typically expressed as a percentage of total operational time. Organizations need to establish clear maintenance windows that minimize disruption to users while ensuring necessary system updates and optimizations can be performed. Comprehensive backup and failover requirements must be specified to ensure business continuity in case of failures. High availability needs should be clearly defined, including redundancy levels and recovery time objectives, to maintain service quality even during unexpected events.

        -

        9.2.2.4. Technical Requirements

        +

        9.2.2.4. Technical Requirements

        System integration requirements define how the LLM system will interact and communicate with existing infrastructure and applications. This involves carefully mapping all integration points where the LLM system needs to connect with other systems, establishing standardized data formats and interfaces for seamless communication, implementing robust security measures to protect data in transit, and identifying any technical constraints that could impact integration. Getting these integration requirements right is crucial for ensuring the LLM system can function effectively within the broader technical ecosystem.

        Data management requirements address how information will be stored, processed, and maintained within the LLM system. This encompasses determining appropriate storage solutions for maintaining conversation context and history, selecting and configuring vector databases to enable efficient retrieval-augmented generation (RAG), creating comprehensive data retention policies that balance operational needs with resource constraints, and ensuring all data handling practices comply with relevant privacy regulations. Proper data management is essential for both system performance and regulatory compliance, making it a critical consideration in any LLM implementation.

        This structured approach to requirements analysis enables organizations to:

        @@ -387,7 +387,7 @@

        -

        9.3. Quantization

        +

        9.3. Quantization

        Quantization is a common and relevant technique in making LLMs more efficient and accessible. At a high level, quantization reduces the number of bits used to represent a model’s parameters. The most common form of quantization is to represent model’s weights at lower precision at post-training phase. It has become a standard technique to generate a series of quantized models given a large pre-trained base model.

        While a standard pre-trained LLM might use 32-bit floating-point (FP32) or 16-bit floating-point (FP16) numbers to store its weights, quantized versions can operate at lower precision levels such as 8, 4 or even 2 bits per parameter, reducing memory footprint without proportional losses in performance, necessarily. For instance, for a model of 30 billion parameters, using FP32 means 4 bytes per weight or 120 GB for the whole weights. If the model is quantized such that weights are represented in 1 byte, the memory needed for the model’s weights decreases to 30 GB, hence potentially fitting into consumer grade hardware. This is done at the cost of precision loss, but the trade-off is often worth it though require careful analysis.

        Let’s take a look at model weights of a language model (SmolLM2-135M-Instruct) that has been quantized to 2-bit and 16-bit precisions. We will use an utility function load_gguf from the taming_utils package to load model weights of the quantized models directly from Hugging Face.

        @@ -483,7 +483,7 @@

        [2] is a powerful technique for reducing the memory footprint of LLMs. This can be exemplified by the case of LLaMa 3.3 70B as quantized by [Unsloth, 2024] [3]. The model’s memory requirements vary significantly based on the quantization level used as demonstrated in Fig. 9.2.

        +

        Quantization[2] is a powerful technique for reducing the memory footprint of LLMs. This can be exemplified by the case of LLaMa 3.3 70B as quantized by [Unsloth, 2024] [3]. The model’s memory requirements vary significantly based on the quantization level used as demonstrated in Fig. 9.2.

        Quantized Model Size
        @@ -492,12 +492,12 @@

        [4].

        This wide spectrum of model sizes enables deployment across diverse hardware environments. The lightweight Q2_K variant opens possibilities for running inference on consumer-grade hardware like high-end laptops or desktop computers. In contrast, the full-precision F16 model demands enterprise-grade computing resources with substantial memory capacity. This flexibility in deployment options makes quantization a powerful tool for democratizing access to large language models while managing computational costs.

        -

        While quantization has proven highly effective, there is a limit to how far it can be pushed - specifically, the 1-bit ceiling. A notable advancement in this space is BitNet [Wang et al., 2024] which pushes the boundaries of extreme quantization.

        +

        While quantization has proven highly effective, there is a limit to how far it can be pushed - specifically, the 1-bit ceiling. A notable advancement in this space is BitNet [Wang et al., 2024] which pushes the boundaries of extreme quantization.

        BitNet’s implementation, bitnet.cpp, has demonstrated significant performance improvements across both ARM and x86 architectures (see Fig. 9.3). When compared to llama.cpp, the framework achieves speedups ranging from 1.37x to 5.07x on ARM processors and 2.37x to 6.17x on x86 systems. These performance gains scale with model size - larger models benefit more substantially from BitNet’s optimizations. The efficiency improvements extend beyond raw speed: energy consumption drops by 55-70% on ARM and 71-82% on x86 processors. Perhaps most impressively, bitnet.cpp enables running a 100B parameter BitNet b1.58 model on a single CPU at speeds matching human reading pace (5-7 tokens per second).

        BitNet
        -

        Fig. 9.3 BitNet: [Wang et al., 2024]

        +

        Fig. 9.3 BitNet: [Wang et al., 2024]

        The framework’s initial release focused on CPU inference optimization, with particular emphasis on 1-bit LLM architectures (BitNet b1.58). While initial testing shows promising results, these findings are specific to the tested models and kernels (its specialized kernels are carefully crafted to exploit the unique characteristics of these extremely quantized models). Further validation is needed before generalizing these results across different architectures and use cases.

        @@ -506,7 +506,7 @@

        Local LLMs in Practice for more details.

        -

        9.4. Check-list

        +

        9.4. Check-list

        Planning and Requirements

        • Start with a clear understanding of your application’s needs and the factors that contribute to LLM costs

        • @@ -540,7 +540,7 @@

          -

          9.5. Conclusion

          +

          9.5. Conclusion

          CC BY-NC-SA 4.0

          @misc{tharsistpsouza2024tamingllms,
             author = {Tharsis T. P. Souza},
          @@ -554,23 +554,23 @@ 

          -

          9.6. References

          +

          9.6. References

          -
          +
          [WZS+24] (1,2)

          Jinheng Wang, Hansong Zhou, Ting Song, Shaoguang Mao, Shuming Ma, Hongyu Wang, Yan Xia, and Furu Wei. 1-bit ai infra: part 1.1, fast and lossless bitnet b1.58 inference on cpus. 2024. URL: https://arxiv.org/abs/2410.16144, arXiv:2410.16144.

          -
          +
          [AndreessenHorowitz24] (1,2)

          Andreessen Horowitz. Llmflation: understanding and mitigating llm inference cost. Blog Post, 2024. Analysis of LLM inference costs and strategies for optimization. URL: https://a16z.com/llmflation-llm-inference-cost/.

          -
          -[HuggingFace4w] +
          +[HuggingFace4w]

          HuggingFace. Gguf quantization types. Online Documentation, 2024w. Documentation on different quantization types available for GGUF models. URL: https://huggingface.co/docs/hub/gguf#quantization-types.

          -
          +
          [Unsloth24]

          Unsloth. Llama-3.3-70b-instruct-gguf. HuggingFace Model, 2024. GGUF quantized version of Meta's Llama 3.3 70B instruction-tuned model. URL: https://huggingface.co/unsloth/Llama-3.3-70B-Instruct-GGUF.

          @@ -584,7 +584,7 @@

          [2] -

          Maarten Grootendorst provides the best visual guide for model quantization [].

          +

          Maarten Grootendorst provides the best visual guide for model quantization [].

        diff --git a/tamingllms/_build/html/notebooks/evals.html b/tamingllms/_build/html/notebooks/evals.html index e4294fb..ef6fb31 100644 --- a/tamingllms/_build/html/notebooks/evals.html +++ b/tamingllms/_build/html/notebooks/evals.html @@ -260,7 +260,7 @@
        -

        3. The Evals Gap

        +

        3. The Evals Gap

        It doesn’t matter how beautiful your theory is,
        it doesn’t matter how smart you are.
        @@ -270,48 +270,48 @@

        -

        3.1. Introduction

        +

        3.1. Introduction

        The advent of LLMs marks a pivotal shift in the landscape of software development, testing and verification. Unlike traditional software systems, where deterministic outputs are the norm, LLMs introduce a realm of non-deterministic and generative behaviors that challenge conventional software engineering paradigms. This shift is not merely a technical evolution but a fundamental transformation in how we conceive, build, and assess software products.

        For those entrenched in traditional methodologies, the transition to LLM-driven systems may seem daunting. However, ignoring this change is not an option. The reliance on outdated testing frameworks that fail to account for the probabilistic nature of LLMs will inevitably lead to significant setbacks.

        To overcome these challenges, it is imperative to embrace the complexities of LLMs with a proactive mindset. This involves developing robust evaluation frameworks up-front that incorporate the generative nature of LLM-based software development while fostering a culture of continuous change, learning and adaptation.

        -

        3.2. Non-Deterministic Generative Machines

        +

        3.2. Non-Deterministic Generative Machines

        One of the most fundamental challenges when building products with LLMs is their generative and non-deterministic nature. Unlike traditional software systems where the same input reliably produces the same output, LLMs can generate novel text that may not exist in their training data, and produce different responses each time they’re queried - even with identical prompts and input data. This behavior is both a strength and a significant engineering and product challenge.

        When you ask an LLM the same question multiple times, you’ll likely get different responses. This isn’t a bug - it’s a fundamental feature of how these models work. The “temperature” parameter, which controls the randomness of outputs, allows models to be creative and generate diverse responses. However, this same feature makes it difficult to build reliable, testable systems.

        Consider a financial services company using LLMs to generate investment advice. The non-deterministic nature of these models means that:

        @@ -325,7 +325,7 @@

      2. Calculates probability distributions for each next token

      3. Samples from these distributions based on temperature settings

      4. -
      5. Uses techniques like nucleus sampling [Holtzman et al., 2020] or top-k sampling to balance creativity and coherence

      6. +
      7. Uses techniques like nucleus sampling [Holtzman et al., 2020] or top-k sampling to balance creativity and coherence

      In this simple experiment, we use an LLM to write a single-statement executive summary from an input financial filing. We observe that even a simple parameter like temperature can dramatically alter model behavior in ways that are difficult to systematically assess. At temperature 0.0, responses are consistent but potentially too rigid. At 1.0, outputs become more varied but less predictable. At 2.0, responses can be wildly different and often incoherent. This non-deterministic behavior makes traditional software testing approaches inadequate.

      @@ -437,7 +437,7 @@

      [Raschka, 2024]:

      +

      A temperature of 1 represents the unscaled probability scores for each token in the vocabulary. Decreasing the temperature closer to 0 sharpens the distribution, so the most likely token will have an even higher probability score. Conversely, increasing the temperature makes the distribution more uniform [Raschka, 2024]:

      • Temperature = 0: Most deterministic, but potentially repetitive

      • Temperature = 1: Balanced creativity and coherence

      • @@ -446,19 +446,19 @@

        -

        3.3. Emerging Properties

        +

        3.3. Emerging Properties

        Beyond their non-deterministic nature, LLMs present another fascinating characteristic: emergent abilities that spontaneously arise as models scale up in size. These abilities - from basic question answering to complex reasoning - aren’t explicitly programmed but rather emerge “naturally” as the models grow larger and are trained on more data. This makes evaluation fundamentally different from traditional software testing, where capabilities are explicitly coded and can be tested against pre-defined specifications.

        -

        Fig. 3.1 provides a list of emergent abilities of large language models and the scale [Wei et al., 2022]. The relationship between model scale and emergent abilities follows a fascinating non-linear pattern. Below certain size thresholds, specific abilities may be completely absent from the model - it simply cannot perform certain tasks, no matter how much you try to coax them out. However, once the model reaches critical points in its scaling journey, these abilities can suddenly manifest in what researchers call a phase transition - a dramatic shift from inability to capability. This unpredictable emergence of capabilities stands in stark contrast to traditional software development, where features are deliberately implemented and can be systematically tested.

        +

        Fig. 3.1 provides a list of emergent abilities of large language models and the scale [Wei et al., 2022]. The relationship between model scale and emergent abilities follows a fascinating non-linear pattern. Below certain size thresholds, specific abilities may be completely absent from the model - it simply cannot perform certain tasks, no matter how much you try to coax them out. However, once the model reaches critical points in its scaling journey, these abilities can suddenly manifest in what researchers call a phase transition - a dramatic shift from inability to capability. This unpredictable emergence of capabilities stands in stark contrast to traditional software development, where features are deliberately implemented and can be systematically tested.

        Emerging Properties
        -

        Fig. 3.1 Emergent abilities of large language models and the scale [Wei et al., 2022].

        +

        Fig. 3.1 Emergent abilities of large language models and the scale [Wei et al., 2022].

        The implications for evaluation are critical. While conventional software testing relies on stable test suites and well-defined acceptance criteria, LLM evaluation must contend with a constantly shifting landscape of capabilities. What worked to evaluate a 7B parameter model may be completely inadequate for a 70B parameter model that has developed new emergent abilities. This dynamic nature of LLM capabilities forces us to fundamentally rethink our approach to testing and evaluation.

        -

        3.4. Problem Statement

        +

        3.4. Problem Statement

        Consider a practical example that illustrates these challenges: building a Math AI tutoring system for children powered by an LLM. In traditional software development, you would define specific features (like presenting math problems or checking answers) and write tests to verify each function. But with LLMs, you’re not just testing predefined features - you’re trying to evaluate emergent capabilities like adapting explanations to a child’s level, maintaining engagement through conversational learning, and providing age-appropriate safety-bound content.

        This fundamental difference raises critical questions about evaluation:

          @@ -508,7 +508,7 @@

          -

          3.5. Evals Design

          +

          3.5. Evals Design

          First, it’s important to make a distinction between evaluating an LLM versus evaluating an LLM-based application. While the former offers foundation capabilities and are typically general-purpose, the latter is more specific and tailored to a particular use case. Here, we define an LLM-based application as a system that uses one or more LLMs to perform a specific task. More specifically, an LLM-based application is the combination of one or more LLM models, their associated prompts and parameters to solve a particular business problem.

          That differentiation is important because it changes the scope of evaluation. LLMs are usually evaluated based on their capabilities, which include things like language understanding, reasoning and knowledge. LLM-based applications, instead, should be evaluated based on their end-to-end functionality, performance, and how well they meet business requirements. That distinction has key implications for the design of evaluation systems:

        -

        3.7. Evaluators

        +

        3.7. Evaluators

        -

        3.7.1. Model-Based Evaluation

        +

        3.7.1. Model-Based Evaluation

        Traditional metrics like BLEU or ROUGE often fall short in capturing the nuanced, contextual, and creative outputs of LLMs. As an alternative we can consider a “Model-based evaluation” approach. A common approach is to use an LLM as a judge. This is an approach that leverages language models themselves to assess the quality of outputs from other language models. This method involves using a model (often a more capable one) to act as an automated judge, evaluating aspects like accuracy, coherence, and relevance of generated content. Unlike traditional metrics that rely on exact matching or statistical measures, model-based evaluation can capture nuanced aspects of language and provide more contextual assessment.

        -

        As discussed in the paper [Li et al., 2024], LLM-based evaluation approaches generally fall into two main categories:

        +

        As discussed in the paper [Li et al., 2024], LLM-based evaluation approaches generally fall into two main categories:

        1. Prompt-based evaluation: This involves using prompts to instruct existing LLMs to evaluate text quality without any fine-tuning. The evaluation can take several forms:

          The visualization helps highlight these differences across models and evaluation dimensions. A clear performance gradient is visible from gpt-4o-mini to gpt-3.5-turbo, with the latter showing marked degradation in most metrics.

          -

          Leveraging LLMs for evaluation has several limitations [Li et al., 2024]. Firstly, computational overhead should not be neglected given the inherent cost of running additional model inferences iterations. LLM evaluators can also exhibit various biases, including order bias (preferring certain sequence positions), egocentric bias (favoring outputs from similar models), and length bias. Further, there may be a tight dependency on prompt quality - small prompt variations may lead to substantially different outcomes. It is important to also note challenges around domain-specific evaluation in fields such as medicine, finance, law etc, where a general llm-as-a-judge approach may not be suitable.

          +

          Leveraging LLMs for evaluation has several limitations [Li et al., 2024]. Firstly, computational overhead should not be neglected given the inherent cost of running additional model inferences iterations. LLM evaluators can also exhibit various biases, including order bias (preferring certain sequence positions), egocentric bias (favoring outputs from similar models), and length bias. Further, there may be a tight dependency on prompt quality - small prompt variations may lead to substantially different outcomes. It is important to also note challenges around domain-specific evaluation in fields such as medicine, finance, law etc, where a general llm-as-a-judge approach may not be suitable.

          The LLM-as-a-Judge strategy can serve as a scalable and nuanced solution to evaluate LLM-based applications. While it does not entirely replace metrics-based or human-based approaches, it significantly augments evaluation workflows, especially in scenarios requiring evaluation of generative outputs. Future improvements in our example include integrating human oversight and refining LLMs for domain-specific evaluation tasks.

          -

          One open source solution trying to overcome some of these challenges is Glider [Deshpande et al., 2024], a 3B evaluator LLM that can score any text input and associated context on arbitrary user defined criteria. Glider is an LLM model trained on 685 domains and 183 criteria whose judgement scores show 91.3% agreement with human judgments, making it suitable for a diverse range of real world applications.

          +

          One open source solution trying to overcome some of these challenges is Glider [Deshpande et al., 2024], a 3B evaluator LLM that can score any text input and associated context on arbitrary user defined criteria. Glider is an LLM model trained on 685 domains and 183 criteria whose judgement scores show 91.3% agreement with human judgments, making it suitable for a diverse range of real world applications.

        -

        3.7.2. Evaluating Evaluators

        +

        3.7.2. Evaluating Evaluators

        We have discussed how LLMs can be used to evaluate LLM-based aplications. However, how can we evaluate the performance of LLMs that evaluate other LLMs? This is the question that meta evaluation aims to answer. Clearly, the discussion can become quite meta as we need to evaluate the performance of the evaluator to evaluate the performance of the evaluated model. However, one can make a case for two general options:

        1. Use a golden-standard dataset that is used to evaluate the performance of LLM evaluators using a “metrics-based” approach.

        2. @@ -1332,7 +1332,7 @@

          Fig. 3.5 Conceptual overview of LLMs Meta Evaluation.

    -

    An alternative to the above approaches is to use humans to directly evaluate the LLM-judges themselves. A notable example of this is Judge Arena [Arena, 2024], which is a platform that allows users to vote on which AI model made the better evaluation. Under this approach, the performance of the LLM evaluator is given by the (blind) evaluation of humans who perform the voting on randomly generated pairs of LLM judges as depicted in Fig. 3.6. Only after submitting a vote, users can see which models were actually doing the judging.

    +

    An alternative to the above approaches is to use humans to directly evaluate the LLM-judges themselves. A notable example of this is Judge Arena [Arena, 2024], which is a platform that allows users to vote on which AI model made the better evaluation. Under this approach, the performance of the LLM evaluator is given by the (blind) evaluation of humans who perform the voting on randomly generated pairs of LLM judges as depicted in Fig. 3.6. Only after submitting a vote, users can see which models were actually doing the judging.

    Human-in-the-loop meta evaluation Conceptual Overview
    @@ -1359,20 +1359,20 @@

    -

    3.8. Benchmarks and Leaderboards

    +

    3.8. Benchmarks and Leaderboards

    Benchmarks act as standardized tests for LLMs, evaluating their performance across a spectrum of tasks. These tasks simulate real-world applications such as answering questions, generating coherent text, solving mathematical problems, or even writing computer code. They also assess more abstract qualities like fairness, robustness, and cultural understanding.

    Benchmarks can be thought as comprehensive “exams” that probe different “subjects” in order to certify an LLM. They help researchers and developers compare models systematically, in a way LLM performance is comparable while enabling the identification of emergent behaviors or capabilities as models evolve in scale and sophistication.

    -

    The history of LLM benchmarks reflects the evolving priorities of artificial intelligence research, starting with foundational tasks and moving toward complex, real-world challenges. We can start in 2018 with the introduction of GLUE (General Language Understanding Evaluation) [Wang et al., 2019], which set a new standard for evaluating natural language understanding. GLUE measured performance on tasks like sentiment analysis and textual entailment, providing a baseline for assessing the fundamental capabilities of language models. Later, SuperGLUE [Wang et al., 2019] expanded on this foundation by introducing more nuanced tasks that tested reasoning and language comprehension at a deeper level, challenging the limits of models like BERT and its successors.

    -

    As AI capabilities grew, benchmarks evolved to capture broader and more diverse aspects of intelligence. BIG-Bench [Srivastava et al., 2023] marked a turning point by incorporating over 200 tasks, spanning arithmetic, logic, and creative problem-solving. This collaborative effort aimed to probe emergent abilities in large models, offering insights into how scale and complexity influence performance. Around the same time, specialized benchmarks like TruthfulQA [Lin et al., 2022] emerged, addressing the critical need for models to provide accurate and non-deceptive information in a world increasingly dependent on AI for factual content.

    -

    MMLU (Massive Multitask Language Understanding) [Hendrycks et al., 2021] launched in 2021, provided a rigorous test of a model’s multidisciplinary knowledge, covering 57 subjects from STEM fields to humanities and social sciences. Similarly, in 2022, Stanford’s HELM (Holistic Evaluation of Language Models) [Liang et al., 2023] set a new standard for multidimensional assessment. HELM expanded the scope of evaluation beyond accuracy, incorporating factors like fairness, robustness, and computational efficiency. This benchmark was designed to address societal concerns surrounding AI, emphasizing safety and inclusion alongside technical performance.

    -

    Specialized benchmarks like HumanEval (2021) [Chen et al., 2021] focused on domain-specific tasks, such as code generation, testing models’ ability to translate natural language descriptions into functional programming code. In contrast, LMSYS (2023) brought real-world applicability into focus by evaluating conversational AI through multi-turn dialogues. LMSYS prioritized coherence, contextual understanding, and user satisfaction, providing a practical lens for assessing models like GPT and Claude in dynamic settings.

    -

    The HuggingFace Open LLM [HuggingFace, 2024] Leaderboard stands out for its transparency and accessibility in the open-source community. This leaderboard evaluates a wide range of LLMs across diverse tasks, including general knowledge, reasoning, and code-writing. Its commitment to reproducibility ensures that results are verifiable, enabling researchers and practitioners to replicate findings. By focusing on open-source models, it democratizes AI research and fosters innovation across communities, making it a valuable resource for both academics and industry professionals.

    -

    The Chatbot Arena (2024) Leaderboard (an evolution of LMSYS) [Chiang et al., 2024] takes an alternative approach by measuring real-world performance through direct model comparisons. Its evaluation format compares models in live conversations, with human judges providing qualitative assessments. This methodology has gathered hundreds of thousands of human evaluations, offering specific insights into practical model performance. The emphasis on interactive capabilities makes it relevant for developing user-facing applications like virtual assistants and chatbots.

    -

    The AlpacaEval [Dubois et al., 2024] and MT-Bench [Zheng et al., 2023] Leaderboards implement automated evaluation using LLMs to assess model performance in multi-turn conversations. This approach enables consistent assessment of dialogue capabilities while reducing human bias. Their methodology measures key aspects of conversational AI, including contextual understanding and response consistency across multiple exchanges.

    -

    An important recent development was the release of Global-MMLU [Singh et al., 2024], an improved version of MMLU with evaluation coverage across 42 languages. This open dataset, built through collaboration between Argilla, the Hugging Face community, and researchers from leading institutions like Cohere For AI, Mila, MIT, and others, represents a significant step toward more inclusive multilingual LLM evaluation. Hundreds of contributors used Argilla to annotate MMLU questions, revealing that 85% of questions requiring specific cultural knowledge were Western-centric. The newly released dataset is divided into two key subsets: Culturally Agnostic questions that require no specific regional or cultural knowledge, and Culturally Sensitive questions that depend on dialect, cultural, or geographic knowledge. With high-quality translations available for 25 languages, Global-MMLU enables better understanding of LLM capabilities and limitations across different languages and cultural contexts.

    -

    A major challenge with these leaderboards and benchmarks is test set contamination - when test data ends up in newer models’ training sets, rendering the benchmarks ineffective. While some benchmarks try to address this through crowdsourced prompts and evaluations from humans or LLMs, these approaches introduce their own biases and struggle with difficult questions. LiveBench [White et al., 2024] represents a novel solution, designed specifically to be resilient to both contamination and evaluation biases. As the first benchmark with continuously updated questions from recent sources, automated objective scoring, and diverse challenging tasks across multiple domains, LiveBench maintains its effectiveness even as models improve. Drawing from recent math competitions, research papers, news, and datasets, it creates contamination-free versions of established benchmark tasks. Current results show even top models achieving considerably lower performance compared to other benchmarks, demonstrating LiveBench’s ability to meaningfully differentiate model capabilities with relatively lower saturation. With monthly updates and an open collaborative approach, LiveBench aims to provide sustained value for model evaluation as the field advances.

    -

    Another notable benchmark is ZebraLogic [Lin et al., 2024], which evaluates logical reasoning capabilities of LLMs through Logic Grid Puzzles - a type of Constraint Satisfaction Problem [Brailsford et al., 1999] commonly found in tests like the LSAT. These puzzles require assigning unique values to N houses across M different features based on given clues, demanding strategic reasoning and deduction to arrive at a unique correct solution. The benchmark’s programmatically generated puzzles range from 2x2 to 6x6 in size and test LLMs using one-shot examples with reasoning steps. While humans can solve these puzzles through strategic methods like reductio ad absurdum and elimination, LLMs demonstrate significant limitations in this type of logical reasoning. Even the best-performing model, Claude 3.5 Sonnet, only achieves 33.4% accuracy across all puzzles and 12.4% on hard puzzles, with smaller models (7-10B parameters) solving less than 1% of hard puzzles as of December 2024. These results reveal critical gaps in LLMs’ capabilities around counterfactual thinking, reflective reasoning, structured memorization, and compositional generalization.

    -

    A significant milestone in AI evaluation came with the launch of the The Alignment Research Center (ARC) Prize [Chollet, 2024] by ARC Prize Inc., a non-profit for the public advancement of open artificial general intelligence. Hosted by Mike Knoop (Co-founder, Zapier) and François Chollet (Creator of Keras), this prize represents a paradigm shift in how we evaluate language models. Rather than focusing on narrow performance metrics, the ARC Prize assesses what it calls “cognitive sufficiency” - a model’s ability to generate meaningful insights and tackle open-ended challenges. This new way to think about LLM evaluation emphasizes creative thinking, sophisticated reasoning, and the capacity to make genuinely useful contributions to human knowledge. Arguably, it is an attempt to define and measure a step towards what it means to achieve AGI (Artificial General Intelligence).

    +

    The history of LLM benchmarks reflects the evolving priorities of artificial intelligence research, starting with foundational tasks and moving toward complex, real-world challenges. We can start in 2018 with the introduction of GLUE (General Language Understanding Evaluation) [Wang et al., 2019], which set a new standard for evaluating natural language understanding. GLUE measured performance on tasks like sentiment analysis and textual entailment, providing a baseline for assessing the fundamental capabilities of language models. Later, SuperGLUE [Wang et al., 2019] expanded on this foundation by introducing more nuanced tasks that tested reasoning and language comprehension at a deeper level, challenging the limits of models like BERT and its successors.

    +

    As AI capabilities grew, benchmarks evolved to capture broader and more diverse aspects of intelligence. BIG-Bench [Srivastava et al., 2023] marked a turning point by incorporating over 200 tasks, spanning arithmetic, logic, and creative problem-solving. This collaborative effort aimed to probe emergent abilities in large models, offering insights into how scale and complexity influence performance. Around the same time, specialized benchmarks like TruthfulQA [Lin et al., 2022] emerged, addressing the critical need for models to provide accurate and non-deceptive information in a world increasingly dependent on AI for factual content.

    +

    MMLU (Massive Multitask Language Understanding) [Hendrycks et al., 2021] launched in 2021, provided a rigorous test of a model’s multidisciplinary knowledge, covering 57 subjects from STEM fields to humanities and social sciences. Similarly, in 2022, Stanford’s HELM (Holistic Evaluation of Language Models) [Liang et al., 2023] set a new standard for multidimensional assessment. HELM expanded the scope of evaluation beyond accuracy, incorporating factors like fairness, robustness, and computational efficiency. This benchmark was designed to address societal concerns surrounding AI, emphasizing safety and inclusion alongside technical performance.

    +

    Specialized benchmarks like HumanEval (2021) [Chen et al., 2021] focused on domain-specific tasks, such as code generation, testing models’ ability to translate natural language descriptions into functional programming code. In contrast, LMSYS (2023) brought real-world applicability into focus by evaluating conversational AI through multi-turn dialogues. LMSYS prioritized coherence, contextual understanding, and user satisfaction, providing a practical lens for assessing models like GPT and Claude in dynamic settings.

    +

    The HuggingFace Open LLM [HuggingFace, 2024] Leaderboard stands out for its transparency and accessibility in the open-source community. This leaderboard evaluates a wide range of LLMs across diverse tasks, including general knowledge, reasoning, and code-writing. Its commitment to reproducibility ensures that results are verifiable, enabling researchers and practitioners to replicate findings. By focusing on open-source models, it democratizes AI research and fosters innovation across communities, making it a valuable resource for both academics and industry professionals.

    +

    The Chatbot Arena (2024) Leaderboard (an evolution of LMSYS) [Chiang et al., 2024] takes an alternative approach by measuring real-world performance through direct model comparisons. Its evaluation format compares models in live conversations, with human judges providing qualitative assessments. This methodology has gathered hundreds of thousands of human evaluations, offering specific insights into practical model performance. The emphasis on interactive capabilities makes it relevant for developing user-facing applications like virtual assistants and chatbots.

    +

    The AlpacaEval [Dubois et al., 2024] and MT-Bench [Zheng et al., 2023] Leaderboards implement automated evaluation using LLMs to assess model performance in multi-turn conversations. This approach enables consistent assessment of dialogue capabilities while reducing human bias. Their methodology measures key aspects of conversational AI, including contextual understanding and response consistency across multiple exchanges.

    +

    An important recent development was the release of Global-MMLU [Singh et al., 2024], an improved version of MMLU with evaluation coverage across 42 languages. This open dataset, built through collaboration between Argilla, the Hugging Face community, and researchers from leading institutions like Cohere For AI, Mila, MIT, and others, represents a significant step toward more inclusive multilingual LLM evaluation. Hundreds of contributors used Argilla to annotate MMLU questions, revealing that 85% of questions requiring specific cultural knowledge were Western-centric. The newly released dataset is divided into two key subsets: Culturally Agnostic questions that require no specific regional or cultural knowledge, and Culturally Sensitive questions that depend on dialect, cultural, or geographic knowledge. With high-quality translations available for 25 languages, Global-MMLU enables better understanding of LLM capabilities and limitations across different languages and cultural contexts.

    +

    A major challenge with these leaderboards and benchmarks is test set contamination - when test data ends up in newer models’ training sets, rendering the benchmarks ineffective. While some benchmarks try to address this through crowdsourced prompts and evaluations from humans or LLMs, these approaches introduce their own biases and struggle with difficult questions. LiveBench [White et al., 2024] represents a novel solution, designed specifically to be resilient to both contamination and evaluation biases. As the first benchmark with continuously updated questions from recent sources, automated objective scoring, and diverse challenging tasks across multiple domains, LiveBench maintains its effectiveness even as models improve. Drawing from recent math competitions, research papers, news, and datasets, it creates contamination-free versions of established benchmark tasks. Current results show even top models achieving considerably lower performance compared to other benchmarks, demonstrating LiveBench’s ability to meaningfully differentiate model capabilities with relatively lower saturation. With monthly updates and an open collaborative approach, LiveBench aims to provide sustained value for model evaluation as the field advances.

    +

    Another notable benchmark is ZebraLogic [Lin et al., 2024], which evaluates logical reasoning capabilities of LLMs through Logic Grid Puzzles - a type of Constraint Satisfaction Problem [Brailsford et al., 1999] commonly found in tests like the LSAT. These puzzles require assigning unique values to N houses across M different features based on given clues, demanding strategic reasoning and deduction to arrive at a unique correct solution. The benchmark’s programmatically generated puzzles range from 2x2 to 6x6 in size and test LLMs using one-shot examples with reasoning steps. While humans can solve these puzzles through strategic methods like reductio ad absurdum and elimination, LLMs demonstrate significant limitations in this type of logical reasoning. Even the best-performing model, Claude 3.5 Sonnet, only achieves 33.4% accuracy across all puzzles and 12.4% on hard puzzles, with smaller models (7-10B parameters) solving less than 1% of hard puzzles as of December 2024. These results reveal critical gaps in LLMs’ capabilities around counterfactual thinking, reflective reasoning, structured memorization, and compositional generalization.

    +

    A significant milestone in AI evaluation came with the launch of the The Alignment Research Center (ARC) Prize [Chollet, 2024] by ARC Prize Inc., a non-profit for the public advancement of open artificial general intelligence. Hosted by Mike Knoop (Co-founder, Zapier) and François Chollet (Creator of Keras), this prize represents a paradigm shift in how we evaluate language models. Rather than focusing on narrow performance metrics, the ARC Prize assesses what it calls “cognitive sufficiency” - a model’s ability to generate meaningful insights and tackle open-ended challenges. This new way to think about LLM evaluation emphasizes creative thinking, sophisticated reasoning, and the capacity to make genuinely useful contributions to human knowledge. Arguably, it is an attempt to define and measure a step towards what it means to achieve AGI (Artificial General Intelligence).

    Defining AGI according to ARC Prize:

    Consensus but wrong:

    @@ -1401,21 +1401,21 @@

    [Chollet, 12/08/2024]. A key takeaway is that algorithmic improvements, rather than massive computational resources, may be key to exceeding the target score for the ARC-AGI benchmark.

    +

    The ARC-AGI benchmark remained unbeaten for five years as of December 2024 (a minimum score of 85% in the private dataset is required to win) [Chollet, 12/08/2024]. A key takeaway is that algorithmic improvements, rather than massive computational resources, may be key to exceeding the target score for the ARC-AGI benchmark.

    In addition to the benchmarks discussed above, a growing set of domain-specific benchmarks is emerging to help evaluate LLMs in specific verticals, including:

      -
    • FinBench [Zhang et al., 2024]: Evaluates LLMs in the financial domain, covering tasks such as terminology understanding, temporal reasoning, future forecasting, scenario planning, and numerical modelling.

    • -
    • LegalBench [Guha et al., 2023] : Assesses the legal reasoning abilities of LLMs through tasks crowdsourced by legal professionals

    • -
    • Berkeley Function Leaderboard (BFCL) [Patil et al., 2023]: Evaluates LLMs’ function-calling abilities

    • +
    • FinBench [Zhang et al., 2024]: Evaluates LLMs in the financial domain, covering tasks such as terminology understanding, temporal reasoning, future forecasting, scenario planning, and numerical modelling.

    • +
    • LegalBench [Guha et al., 2023] : Assesses the legal reasoning abilities of LLMs through tasks crowdsourced by legal professionals

    • +
    • Berkeley Function Leaderboard (BFCL) [Patil et al., 2023]: Evaluates LLMs’ function-calling abilities

    As language models continue to advance in capability and complexity, evaluation frameworks must evolve. Modern benchmarks increasingly incorporate tests for nuanced reasoning, ethical decision-making, and emergent capabilities that weren’t previously measurable. This ongoing evolution reflects a deeper understanding that the true value of language models lies not in achieving high scores on standardized tests with narrow task-specific metrics, but in their ability to meaningfully contribute to human understanding and help solve real-world problems while demonstrating the ability to learn and adapt to new tasks.

    In the following sections, we will explore some open source tools developers can use to automate and streamline the challenging task of LLMs evals.

    -

    3.9. Tools

    +

    3.9. Tools

    -

    3.9.1. LightEval

    -

    LightEval [Fourrier et al., 2023] is a lightweight framework for evaluation of LLMs across a variety of standard and bespoke metrics and tasks across multiple inference backends via Python SDK and CLI.

    +

    3.9.1. LightEval

    +

    LightEval [Fourrier et al., 2023] is a lightweight framework for evaluation of LLMs across a variety of standard and bespoke metrics and tasks across multiple inference backends via Python SDK and CLI.

    As a motivating example, consider a scenario where financial data has been extracted from SEC financial filings and require econometric analysis. Tasks like estimating autoregressive models for time series forecasting or conducting hypothesis tests on market efficiency are common in financial analysis. Let’s evaluate how well different models perform on this type of task.

    First, we need to select a benchmark to assess LLMs capabilities in this domain. MMLU has a sub-benchmark called Econometrics we can use for this task. Table 3.4 shows a sample of the benchmark dataset from MMLU Econometrics. It consists of multiple-choice questions from econometrics and expected answers.

    @@ -1526,7 +1526,7 @@

    [HuggingFace, 2024] and metrics [HuggingFace, 2024]. The available tasks span multiple categories and benchmarks including BigBench, MMLU, TruthfulQA, WinoGrande, and HellaSwag. The framework also supports standard NLP evaluation metrics including BLEU, ROUGE, Exact Match, F1 Score, and Accuracy.

    +

    LightEval provides a comprehensive set of evaluation tasks [HuggingFace, 2024] and metrics [HuggingFace, 2024]. The available tasks span multiple categories and benchmarks including BigBench, MMLU, TruthfulQA, WinoGrande, and HellaSwag. The framework also supports standard NLP evaluation metrics including BLEU, ROUGE, Exact Match, F1 Score, and Accuracy.

    In our case, we choose to evaluate our LLMs on the MMLU econometrics task using zero-shot learning. Hence, we define the task as follows:

    -

    We would like to compare the performance of multiple open source models on the MMLU econometrics task. While we could download and evaluate each model locally, we prefer instead to evaluate them on a remote server to save time and resources. LightEval enables serving the model on a TGI-compatible server/container and then running the evaluation by sending requests to the server [HuggingFace, 2024].

    +

    We would like to compare the performance of multiple open source models on the MMLU econometrics task. While we could download and evaluate each model locally, we prefer instead to evaluate them on a remote server to save time and resources. LightEval enables serving the model on a TGI-compatible server/container and then running the evaluation by sending requests to the server [HuggingFace, 2024].

    For that purpose, we can leverage HuggingFace Serverless Inference API [1] and set a configuration file for LightEval as shown below, where <MODEL-ID> is the model identifier on HuggingFace (e.g. meta-llama/Llama-3.2-1B-Instruct) and <HUGGINGFACE-TOKEN> is the user’s HuggingFace API token. Alternatively, you could also pass an URL of a corresponding dedicated inference API if you have one.

    model:
       type: "tgi"
    @@ -1576,17 +1576,17 @@ 

    - + - + - +

    Llama3.2 Instruct

    LLaMA architecture-based pretrained and instruction-tuned generative models

    Llama-3.2-1B-Instruct
    Llama-3.2-3B-Instruct

    [Meta AI, 2024]

    [Meta AI, 2024]

    Qwen2.5 Instruct

    Instruction-tuned LLMs family built by Alibaba Cloud

    Qwen2.5-0.5B-Instruct
    Qwen2.5-1.5B-Instruct
    Qwen2.5-3B-Instruct

    [HuggingFace, 2024, Hui et al., 2024, Yang et al., 2024]

    [HuggingFace, 2024, Hui et al., 2024, Yang et al., 2024]

    SmolLM2 Instruct

    Instruction-tuned family of compact language models built by HuggingFace

    SmolLM2-360M-Instruct
    SmolLM2-1.7B-Instruct

    [Allal et al., 2024]

    [Allal et al., 2024]

    @@ -1599,10 +1599,10 @@

    [HuggingFace, 2024]. Its integration with the Hugging Face ecosystem and modular architecture make it particularly powerful for evaluating open source models. For further details, visit the official repository [Fourrier et al., 2023].

    +

    In summary, LightEval is a simple yet flexible and comprehensive framework for evaluating LLMs across a wide variety of tasks and metrics. It can serve as a first step in selecting your next LLM for a specific task given the exponential growth in number of (open source) models available [HuggingFace, 2024]. Its integration with the Hugging Face ecosystem and modular architecture make it particularly powerful for evaluating open source models. For further details, visit the official repository [Fourrier et al., 2023].

    -

    3.9.2. LangSmith

    +

    3.9.2. LangSmith

    Let’s revisit our evaluation example when we were interested in evaluating the quality of summaries generated by different (smaller and cheaper) LLM models compared to a benchmark model (larger and more expensive). Recal the setup:

    • Benchmark model: gpt-4o

    • @@ -2010,8 +2010,8 @@

      -

      3.9.3. PromptFoo

      -

      Promptfoo [promptfoo, 2024] is an open-source framework designed for evaluating applications that utilize LLMs. Key features include:

      +

      3.9.3. PromptFoo

      +

      Promptfoo [promptfoo, 2024] is an open-source framework designed for evaluating applications that utilize LLMs. Key features include:

      1. Automated Testing: Promptfoo provides automated testing capabilities, allowing developers to run custom evaluations tailored to their applications.

      2. Custom Probes: Developers can create custom probes to focus on specific use cases for instance decoupling prompts from tests cases.

      3. @@ -2302,7 +2302,7 @@

        Prompt Comparison R

        In conclusion, Promptfoo can serve as an effective LLM application evaluation tool particularly for its ability to decouple several components of the evaluation process. Hence enabling the user to focus on the most important aspects of the evaluation given the particular application and criteria making it a valuable and flexible tool for LLM application development.

    -

    3.9.4. Comparison

    +

    3.9.4. Comparison

    Table 3.6 provides a summarized comparative analysis of three open source frameworks for language models evaluation we have discussed: Lighteval, LangSmith, and Promptfoo. Each framework is assessed based on key features such as integration capabilities, customization options, ease of use, and the ability to facilitate human and LLM collaboration.

    @@ -2339,7 +2339,7 @@

    -

    3.10. Conclusion

    +

    3.10. Conclusion

    Language models have fundamentally transformed how software is developed and evaluated. Unlike conventional systems that produce predictable outputs, LLMs generate varied, probabilistic responses that defy traditional testing approaches. While developers accustomed to deterministic systems may find this shift challenging, continuing to rely on legacy testing methods is unsustainable. These frameworks were not designed to handle the inherent variability of LLM outputs and will ultimately prove inadequate.

    Success requires embracing this new paradigm by implementing comprehensive evals that cover the non-deterministic generative nature of LLMs - this is the new Product Requirements Document (PRD) - and cultivating an organizational mindset focused on iteration, experimentation and growth.

    The shift from traditional software testing to LLM evaluation is not just a change in tools but a transformation in mindset. Those who recognize and adapt to this shift will lead the way in harnessing the power of LLMs in software development.

    @@ -2356,164 +2356,164 @@

    -

    3.11. References

    +

    3.11. References

    -
    +
    [ALB+24]

    Loubna Ben Allal, Anton Lozhkov, Elie Bakouch, Gabriel Martín Blázquez, Lewis Tunstall, Agustín Piqueres, Andres Marafioti, Cyril Zakka, Leandro von Werra, and Thomas Wolf. Smollm2 - with great data, comes great performance. 2024.

    -
    +
    [Are24]

    Judge Arena. Judge arena: evaluating llm outputs with llms. https://judgearena.com/, 2024. Accessed: 2024.

    -
    +
    [BPS99]

    Sally C. Brailsford, Chris N. Potts, and Barbara M. Smith. Constraint satisfaction problems: algorithms and applications. European Journal of Operational Research, 119(3):557–581, 1999. URL: https://www.sciencedirect.com/science/article/pii/S0377221798003646, doi:https://doi.org/10.1016/S0377-2217(98)00364-6.

    -
    +
    [CTJ+21]

    Mark Chen, Jerry Tworek, Heewoo Jun, Qiming Yuan, Henrique Ponde de Oliveira Pinto, Jared Kaplan, Harri Edwards, Yuri Burda, Nicholas Joseph, Greg Brockman, Alex Ray, Raul Puri, Gretchen Krueger, Michael Petrov, Heidy Khlaaf, Girish Sastry, Pamela Mishkin, Brooke Chan, Scott Gray, Nick Ryder, Mikhail Pavlov, Alethea Power, Lukasz Kaiser, Mohammad Bavarian, Clemens Winter, Philippe Tillet, Felipe Petroski Such, Dave Cummings, Matthias Plappert, Fotios Chantzis, Elizabeth Barnes, Ariel Herbert-Voss, William Hebgen Guss, Alex Nichol, Alex Paino, Nikolas Tezak, Jie Tang, Igor Babuschkin, Suchir Balaji, Shantanu Jain, William Saunders, Christopher Hesse, Andrew N. Carr, Jan Leike, Josh Achiam, Vedant Misra, Evan Morikawa, Alec Radford, Matthew Knight, Miles Brundage, Mira Murati, Katie Mayer, Peter Welinder, Bob McGrew, Dario Amodei, Sam McCandlish, Ilya Sutskever, and Wojciech Zaremba. Evaluating large language models trained on code. 2021. URL: https://arxiv.org/abs/2107.03374, arXiv:2107.03374.

    -
    +
    [CZS+24]

    Wei-Lin Chiang, Lianmin Zheng, Ying Sheng, Anastasios Nikolas Angelopoulos, Tianle Li, Dacheng Li, Hao Zhang, Banghua Zhu, Michael Jordan, Joseph E. Gonzalez, and Ion Stoica. Chatbot arena: an open platform for evaluating llms by human preference. 2024. URL: https://arxiv.org/abs/2403.04132, arXiv:2403.04132.

    -
    +
    [Cho24a]

    Francois Chollet. Arc prize 2024 results. ARC Prize Website, 12/08/2024. URL: https://arcprize.org/2024-results.

    -
    +
    [Cho24b]

    Francois Chollet. Abstraction and reasoning challenge. ARC Prize Website, 2024. URL: https://arcprize.org/.

    -
    +
    [DRCW+24]

    Darshan Deshpande, Selvan Sunitha Ravi, Sky CH-Wang, Bartosz Mielczarek, Anand Kannappan, and Rebecca Qian. Glider: grading llm interactions and decisions using explainable ranking. 2024. URL: https://arxiv.org/abs/2412.14140, arXiv:2412.14140.

    -
    +
    [DGLH24]

    Yann Dubois, Balázs Galambosi, Percy Liang, and Tatsunori B. Hashimoto. Length-controlled alpacaeval: a simple way to debias automatic evaluators. 2024. URL: https://arxiv.org/abs/2404.04475, arXiv:2404.04475.

    -
    +
    [FHWT23] (1,2)

    Clémentine Fourrier, Nathan Habib, Thomas Wolf, and Lewis Tunstall. Lighteval: a lightweight framework for llm evaluation. 2023. URL: https://github.com/huggingface/lighteval.

    -
    +
    [GNH+23]

    Neel Guha, Julian Nyarko, Daniel E. Ho, Christopher Ré, Adam Chilton, Aditya Narayana, Alex Chohlas-Wood, Austin Peters, Brandon Waldon, Daniel N. Rockmore, Diego Zambrano, Dmitry Talisman, Enam Hoque, Faiz Surani, Frank Fagan, Galit Sarfaty, Gregory M. Dickinson, Haggai Porat, Jason Hegland, Jessica Wu, Joe Nudell, Joel Niklaus, John Nay, Jonathan H. Choi, Kevin Tobia, Margaret Hagan, Megan Ma, Michael Livermore, Nikon Rasumov-Rahe, Nils Holzenberger, Noam Kolt, Peter Henderson, Sean Rehaag, Sharad Goel, Shang Gao, Spencer Williams, Sunny Gandhi, Tom Zur, Varun Iyer, and Zehua Li. Legalbench: a collaboratively built benchmark for measuring legal reasoning in large language models. 2023. URL: https://arxiv.org/abs/2308.11462, arXiv:2308.11462.

    -
    +
    [HBB+21]

    Dan Hendrycks, Collin Burns, Steven Basart, Andy Zou, Mantas Mazeika, Dawn Song, and Jacob Steinhardt. Measuring massive multitask language understanding. 2021. URL: https://arxiv.org/abs/2009.03300, arXiv:2009.03300.

    -
    +
    [HBD+20]

    Ari Holtzman, Jan Buys, Li Du, Maxwell Forbes, and Yejin Choi. The curious case of neural text degeneration. 2020. URL: https://arxiv.org/abs/1904.09751, arXiv:1904.09751.

    -
    +
    [Hug24a]

    HuggingFace. Available tasks - lighteval wiki. https://github.com/huggingface/lighteval/wiki/Available-Tasks, 2024. Accessed: 2024.

    -
    +
    [Hug24b]

    HuggingFace. Evaluate the model on a server or container - lighteval wiki. https://github.com/huggingface/lighteval/wiki/Evaluate-the-model-on-a-server-or-container, 2024. Accessed: 2024.

    -
    +
    [Hug24c]

    HuggingFace. Gpt-2 documentation - huggingface transformers. https://huggingface.co/docs/transformers/model_doc/gpt2, 2024. Accessed: 2024.

    -
    +
    [Hug24d]

    HuggingFace. Llm as a judge. https://huggingface.co/learn/cookbook/en/llm_judge, 2024. Accessed: 2024.

    -
    +
    [Hug24e]

    HuggingFace. Metric list - lighteval wiki. https://github.com/huggingface/lighteval/wiki/Metric-List, 2024. Accessed: 2024.

    -
    +
    [Hug24f]

    HuggingFace. Open llm leaderboard. HuggingFace Spaces, 2024. URL: https://huggingface.co/spaces/open-llm-leaderboard/blog.

    -
    +
    [HYC+24]

    Binyuan Hui, Jian Yang, Zeyu Cui, Jiaxi Yang, Dayiheng Liu, Lei Zhang, Tianyu Liu, Jiajun Zhang, Bowen Yu, Kai Dang, and others. Qwen2.5 - coder technical report. arXiv preprint arXiv:2409.12186, 2024.

    -
    +
    [LXS+24] (1,2,3)

    Zhen Li, Xiaohan Xu, Tao Shen, Can Xu, Jia-Chen Gu, Yuxuan Lai, Chongyang Tao, and Shuai Ma. Leveraging large language models for nlg evaluation: advances and challenges. 2024. URL: https://arxiv.org/abs/2401.07103, arXiv:2401.07103.

    -
    +
    [LBL+23]

    Percy Liang, Rishi Bommasani, Tony Lee, Dimitris Tsipras, Dilara Soylu, Michihiro Yasunaga, Yian Zhang, Deepak Narayanan, Yuhuai Wu, Ananya Kumar, Benjamin Newman, Binhang Yuan, Bobby Yan, Ce Zhang, Christian Cosgrove, Christopher D. Manning, Christopher Ré, Diana Acosta-Navas, Drew A. Hudson, Eric Zelikman, Esin Durmus, Faisal Ladhak, Frieda Rong, Hongyu Ren, Huaxiu Yao, Jue Wang, Keshav Santhanam, Laurel Orr, Lucia Zheng, Mert Yuksekgonul, Mirac Suzgun, Nathan Kim, Neel Guha, Niladri Chatterji, Omar Khattab, Peter Henderson, Qian Huang, Ryan Chi, Sang Michael Xie, Shibani Santurkar, Surya Ganguli, Tatsunori Hashimoto, Thomas Icard, Tianyi Zhang, Vishrav Chaudhary, William Wang, Xuechen Li, Yifan Mai, Yuhui Zhang, and Yuta Koreeda. Holistic evaluation of language models. 2023. URL: https://arxiv.org/abs/2211.09110, arXiv:2211.09110.

    -
    +
    [LBC24]

    Bill Yuchen Lin, Ronan Le Bras, and Yejin Choi. Zebralogic: benchmarking the logical reasoning ability of language models. 2024. URL: https://huggingface.co/spaces/allenai/ZebraLogic.

    -
    +
    [LHE22]

    Stephanie Lin, Jacob Hilton, and Owain Evans. Truthfulqa: measuring how models mimic human falsehoods. 2022. URL: https://arxiv.org/abs/2109.07958, arXiv:2109.07958.

    -
    +
    [PZWG23]

    Shishir G. Patil, Tianjun Zhang, Xin Wang, and Joseph E. Gonzalez. Gorilla: large language model connected with massive apis. arXiv preprint arXiv:2305.15334, 2023.

    -
    +
    [pro24]

    promptfoo. Promptfoo: llm testing and evaluation framework. 2024. Open source framework for testing and evaluating LLM prompts. URL: https://www.promptfoo.dev/.

    -
    +
    [Ras24]

    Sebastian Raschka. Build A Large Language Model (From Scratch). Manning, 2024. ISBN 978-1633437166. URL: https://www.manning.com/books/build-a-large-language-model-from-scratch.

    -
    +
    [SLL+24]

    Bhaskarjit Sarmah, Mingshu Li, Jingrao Lyu, Sebastian Frank, Nathalia Castellanos, Stefano Pasquali, and Dhagash Mehta. How to choose a threshold for an evaluation metric for large language models. 2024. URL: https://arxiv.org/abs/2412.12148, arXiv:2412.12148.

    -
    +
    [SRF+24]

    Shivalika Singh, Angelika Romanou, Clémentine Fourrier, David I. Adelani, Jian Gang Ngui, Daniel Vila-Suero, Peerat Limkonchotiwat, Kelly Marchisio, Wei Qi Leong, Yosephine Susanto, Raymond Ng, Shayne Longpre, Wei-Yin Ko, Madeline Smith, Antoine Bosselut, Alice Oh, Andre F. T. Martins, Leshem Choshen, Daphne Ippolito, Enzo Ferrante, Marzieh Fadaee, Beyza Ermis, and Sara Hooker. Global mmlu: understanding and addressing cultural and linguistic biases in multilingual evaluation. 2024. URL: https://arxiv.org/abs/2412.03304, arXiv:2412.03304.

    -
    +
    [SRR+23]

    Aarohi Srivastava, Abhinav Rastogi, Abhishek Rao, Abu Awal Md Shoeb, Abubakar Abid, Adam Fisch, Adam R. Brown, Adam Santoro, Aditya Gupta, Adrià Garriga-Alonso, Agnieszka Kluska, Aitor Lewkowycz, Akshat Agarwal, Alethea Power, Alex Ray, Alex Warstadt, Alexander W. Kocurek, Ali Safaya, Ali Tazarv, Alice Xiang, Alicia Parrish, Allen Nie, Aman Hussain, Amanda Askell, Amanda Dsouza, Ambrose Slone, Ameet Rahane, Anantharaman S. Iyer, Anders Andreassen, Andrea Madotto, Andrea Santilli, Andreas Stuhlmüller, Andrew Dai, Andrew La, Andrew Lampinen, Andy Zou, Angela Jiang, Angelica Chen, Anh Vuong, Animesh Gupta, Anna Gottardi, Antonio Norelli, Anu Venkatesh, Arash Gholamidavoodi, Arfa Tabassum, Arul Menezes, Arun Kirubarajan, Asher Mullokandov, Ashish Sabharwal, Austin Herrick, Avia Efrat, Aykut Erdem, Ayla Karakaş, B. Ryan Roberts, Bao Sheng Loe, Barret Zoph, Bartłomiej Bojanowski, Batuhan Özyurt, Behnam Hedayatnia, Behnam Neyshabur, Benjamin Inden, Benno Stein, Berk Ekmekci, Bill Yuchen Lin, Blake Howald, Bryan Orinion, Cameron Diao, Cameron Dour, Catherine Stinson, Cedrick Argueta, César Ferri Ramírez, Chandan Singh, Charles Rathkopf, Chenlin Meng, Chitta Baral, Chiyu Wu, Chris Callison-Burch, Chris Waites, Christian Voigt, Christopher D. Manning, Christopher Potts, Cindy Ramirez, Clara E. Rivera, Clemencia Siro, Colin Raffel, Courtney Ashcraft, Cristina Garbacea, Damien Sileo, Dan Garrette, Dan Hendrycks, Dan Kilman, Dan Roth, Daniel Freeman, Daniel Khashabi, Daniel Levy, Daniel Moseguí González, Danielle Perszyk, Danny Hernandez, Danqi Chen, Daphne Ippolito, Dar Gilboa, David Dohan, David Drakard, David Jurgens, Debajyoti Datta, Deep Ganguli, Denis Emelin, Denis Kleyko, Deniz Yuret, Derek Chen, Derek Tam, Dieuwke Hupkes, Diganta Misra, Dilyar Buzan, Dimitri Coelho Mollo, Diyi Yang, Dong-Ho Lee, Dylan Schrader, Ekaterina Shutova, Ekin Dogus Cubuk, Elad Segal, Eleanor Hagerman, Elizabeth Barnes, Elizabeth Donoway, Ellie Pavlick, Emanuele Rodola, Emma Lam, Eric Chu, Eric Tang, Erkut Erdem, Ernie Chang, Ethan A. Chi, Ethan Dyer, Ethan Jerzak, Ethan Kim, Eunice Engefu Manyasi, Evgenii Zheltonozhskii, Fanyue Xia, Fatemeh Siar, Fernando Martínez-Plumed, Francesca Happé, Francois Chollet, Frieda Rong, Gaurav Mishra, Genta Indra Winata, Gerard de Melo, Germán Kruszewski, Giambattista Parascandolo, Giorgio Mariani, Gloria Wang, Gonzalo Jaimovitch-López, Gregor Betz, Guy Gur-Ari, Hana Galijasevic, Hannah Kim, Hannah Rashkin, Hannaneh Hajishirzi, Harsh Mehta, Hayden Bogar, Henry Shevlin, Hinrich Schütze, Hiromu Yakura, Hongming Zhang, Hugh Mee Wong, Ian Ng, Isaac Noble, Jaap Jumelet, Jack Geissinger, Jackson Kernion, Jacob Hilton, Jaehoon Lee, Jaime Fernández Fisac, James B. Simon, James Koppel, James Zheng, James Zou, Jan Kocoń, Jana Thompson, Janelle Wingfield, Jared Kaplan, Jarema Radom, Jascha Sohl-Dickstein, Jason Phang, Jason Wei, Jason Yosinski, Jekaterina Novikova, Jelle Bosscher, Jennifer Marsh, Jeremy Kim, Jeroen Taal, Jesse Engel, Jesujoba Alabi, Jiacheng Xu, Jiaming Song, Jillian Tang, Joan Waweru, John Burden, John Miller, John U. Balis, Jonathan Batchelder, Jonathan Berant, Jörg Frohberg, Jos Rozen, Jose Hernandez-Orallo, Joseph Boudeman, Joseph Guerr, Joseph Jones, Joshua B. Tenenbaum, Joshua S. Rule, Joyce Chua, Kamil Kanclerz, Karen Livescu, Karl Krauth, Karthik Gopalakrishnan, Katerina Ignatyeva, Katja Markert, Kaustubh D. Dhole, Kevin Gimpel, Kevin Omondi, Kory Mathewson, Kristen Chiafullo, Ksenia Shkaruta, Kumar Shridhar, Kyle McDonell, Kyle Richardson, Laria Reynolds, Leo Gao, Li Zhang, Liam Dugan, Lianhui Qin, Lidia Contreras-Ochando, Louis-Philippe Morency, Luca Moschella, Lucas Lam, Lucy Noble, Ludwig Schmidt, Luheng He, Luis Oliveros Colón, Luke Metz, Lütfi Kerem Şenel, Maarten Bosma, Maarten Sap, Maartje ter Hoeve, Maheen Farooqi, Manaal Faruqui, Mantas Mazeika, Marco Baturan, Marco Marelli, Marco Maru, Maria Jose Ramírez Quintana, Marie Tolkiehn, Mario Giulianelli, Martha Lewis, Martin Potthast, Matthew L. Leavitt, Matthias Hagen, Mátyás Schubert, Medina Orduna Baitemirova, Melody Arnaud, Melvin McElrath, Michael A. Yee, Michael Cohen, Michael Gu, Michael Ivanitskiy, Michael Starritt, Michael Strube, Michał Swędrowski, Michele Bevilacqua, Michihiro Yasunaga, Mihir Kale, Mike Cain, Mimee Xu, Mirac Suzgun, Mitch Walker, Mo Tiwari, Mohit Bansal, Moin Aminnaseri, Mor Geva, Mozhdeh Gheini, Mukund Varma T, Nanyun Peng, Nathan A. Chi, Nayeon Lee, Neta Gur-Ari Krakover, Nicholas Cameron, Nicholas Roberts, Nick Doiron, Nicole Martinez, Nikita Nangia, Niklas Deckers, Niklas Muennighoff, Nitish Shirish Keskar, Niveditha S. Iyer, Noah Constant, Noah Fiedel, Nuan Wen, Oliver Zhang, Omar Agha, Omar Elbaghdadi, Omer Levy, Owain Evans, Pablo Antonio Moreno Casares, Parth Doshi, Pascale Fung, Paul Pu Liang, Paul Vicol, Pegah Alipoormolabashi, Peiyuan Liao, Percy Liang, Peter Chang, Peter Eckersley, Phu Mon Htut, Pinyu Hwang, Piotr Miłkowski, Piyush Patil, Pouya Pezeshkpour, Priti Oli, Qiaozhu Mei, Qing Lyu, Qinlang Chen, Rabin Banjade, Rachel Etta Rudolph, Raefer Gabriel, Rahel Habacker, Ramon Risco, Raphaël Millière, Rhythm Garg, Richard Barnes, Rif A. Saurous, Riku Arakawa, Robbe Raymaekers, Robert Frank, Rohan Sikand, Roman Novak, Roman Sitelew, Ronan LeBras, Rosanne Liu, Rowan Jacobs, Rui Zhang, Ruslan Salakhutdinov, Ryan Chi, Ryan Lee, Ryan Stovall, Ryan Teehan, Rylan Yang, Sahib Singh, Saif M. Mohammad, Sajant Anand, Sam Dillavou, Sam Shleifer, Sam Wiseman, Samuel Gruetter, Samuel R. Bowman, Samuel S. Schoenholz, Sanghyun Han, Sanjeev Kwatra, Sarah A. Rous, Sarik Ghazarian, Sayan Ghosh, Sean Casey, Sebastian Bischoff, Sebastian Gehrmann, Sebastian Schuster, Sepideh Sadeghi, Shadi Hamdan, Sharon Zhou, Shashank Srivastava, Sherry Shi, Shikhar Singh, Shima Asaadi, Shixiang Shane Gu, Shubh Pachchigar, Shubham Toshniwal, Shyam Upadhyay, Shyamolima, Debnath, Siamak Shakeri, Simon Thormeyer, Simone Melzi, Siva Reddy, Sneha Priscilla Makini, Soo-Hwan Lee, Spencer Torene, Sriharsha Hatwar, Stanislas Dehaene, Stefan Divic, Stefano Ermon, Stella Biderman, Stephanie Lin, Stephen Prasad, Steven T. Piantadosi, Stuart M. Shieber, Summer Misherghi, Svetlana Kiritchenko, Swaroop Mishra, Tal Linzen, Tal Schuster, Tao Li, Tao Yu, Tariq Ali, Tatsu Hashimoto, Te-Lin Wu, Théo Desbordes, Theodore Rothschild, Thomas Phan, Tianle Wang, Tiberius Nkinyili, Timo Schick, Timofei Kornev, Titus Tunduny, Tobias Gerstenberg, Trenton Chang, Trishala Neeraj, Tushar Khot, Tyler Shultz, Uri Shaham, Vedant Misra, Vera Demberg, Victoria Nyamai, Vikas Raunak, Vinay Ramasesh, Vinay Uday Prabhu, Vishakh Padmakumar, Vivek Srikumar, William Fedus, William Saunders, William Zhang, Wout Vossen, Xiang Ren, Xiaoyu Tong, Xinran Zhao, Xinyi Wu, Xudong Shen, Yadollah Yaghoobzadeh, Yair Lakretz, Yangqiu Song, Yasaman Bahri, Yejin Choi, Yichi Yang, Yiding Hao, Yifu Chen, Yonatan Belinkov, Yu Hou, Yufang Hou, Yuntao Bai, Zachary Seid, Zhuoye Zhao, Zijian Wang, Zijie J. Wang, Zirui Wang, and Ziyi Wu. Beyond the imitation game: quantifying and extrapolating the capabilities of language models. 2023. URL: https://arxiv.org/abs/2206.04615, arXiv:2206.04615.

    -
    +
    [WPN+19]

    Alex Wang, Yada Pruksachatkun, Nikita Nangia, Amanpreet Singh, Julian Michael, Felix Hill, Omer Levy, and Samuel R. Bowman. Superglue: a stickier benchmark for general-purpose language understanding systems. Advances in Neural Information Processing Systems, 2019.

    -
    +
    [WSM+19]

    Alex Wang, Amanpreet Singh, Julian Michael, Felix Hill, Omer Levy, and Samuel R. Bowman. Glue: a multi-task benchmark and analysis platform for natural language understanding. 2019. URL: https://arxiv.org/abs/1804.07461, arXiv:1804.07461.

    -
    +
    [WTB+22] (1,2)

    Jason Wei, Yi Tay, Rishi Bommasani, Colin Raffel, Barret Zoph, Sebastian Borgeaud, Dani Yogatama, Maarten Bosma, Denny Zhou, Donald Metzler, Ed H. Chi, Tatsunori Hashimoto, Oriol Vinyals, Percy Liang, Jeff Dean, and William Fedus. Emergent abilities of large language models. 2022. URL: https://arxiv.org/abs/2206.07682, arXiv:2206.07682.

    -
    +
    [WDR+24]

    Colin White, Samuel Dooley, Manley Roberts, Arka Pal, Ben Feuer, Siddhartha Jain, Ravid Shwartz-Ziv, Neel Jain, Khalid Saifullah, Siddartha Naidu, Chinmay Hegde, Yann LeCun, Tom Goldstein, Willie Neiswanger, and Micah Goldblum. Livebench: a challenging, contamination-free llm benchmark. 2024. URL: https://arxiv.org/abs/2406.19314, arXiv:2406.19314.

    -
    +
    [YYH+24]

    An Yang, Baosong Yang, Binyuan Hui, Bo Zheng, Bowen Yu, Chang Zhou, Chengpeng Li, Chengyuan Li, Dayiheng Liu, Fei Huang, Guanting Dong, Haoran Wei, Huan Lin, Jialong Tang, Jialin Wang, Jian Yang, Jianhong Tu, Jianwei Zhang, Jianxin Ma, Jin Xu, Jingren Zhou, Jinze Bai, Jinzheng He, Junyang Lin, Kai Dang, Keming Lu, Keqin Chen, Kexin Yang, Mei Li, Mingfeng Xue, Na Ni, Pei Zhang, Peng Wang, Ru Peng, Rui Men, Ruize Gao, Runji Lin, Shijie Wang, Shuai Bai, Sinan Tan, Tianhang Zhu, Tianhao Li, Tianyu Liu, Wenbin Ge, Xiaodong Deng, Xiaohuan Zhou, Xingzhang Ren, Xinyu Zhang, Xipin Wei, Xuancheng Ren, Yang Fan, Yang Yao, Yichang Zhang, Yu Wan, Yunfei Chu, Yuqiong Liu, Zeyu Cui, Zhenru Zhang, and Zhihao Fan. Qwen2 technical report. arXiv preprint arXiv:2407.10671, 2024.

    -
    +
    [ZCL24]

    Zhihan Zhang, Yixin Cao, and Lizi Liao. Finbench: benchmarking LLMs in complex financial problem solving and reasoning. 2024. URL: https://openreview.net/forum?id=AeGrf1uY0p.

    -
    +
    [ZCS+23]

    Lianmin Zheng, Wei-Lin Chiang, Ying Sheng, Siyuan Zhuang, Zhanghao Wu, Yonghao Zhuang, Zi Lin, Zhuohan Li, Dacheng Li, Eric P. Xing, Hao Zhang, Joseph E. Gonzalez, and Ion Stoica. Judging llm-as-a-judge with mt-bench and chatbot arena. 2023. URL: https://arxiv.org/abs/2306.05685, arXiv:2306.05685.

    -
    +
    [HuggingFace24]

    HuggingFace. Number of models on huggingface. https://huggingface.co/spaces/huggingface/open-source-ai-year-in-review-2024?day=4, 2024. Accessed: 12/06/2024.

    -
    +
    [MetaAI24]

    Meta AI. Meta llama models on huggingface. https://huggingface.co/meta-llama, 2024. Accessed: 2024.

    diff --git a/tamingllms/_build/html/notebooks/input.html b/tamingllms/_build/html/notebooks/input.html index 1c6c6d3..cf45f4c 100644 --- a/tamingllms/_build/html/notebooks/input.html +++ b/tamingllms/_build/html/notebooks/input.html @@ -252,7 +252,7 @@
    -

    5. Managing Input Data

    +

    5. Managing Input Data

    One home run is much better than two doubles.

    —Steve Jobs

    @@ -260,81 +260,81 @@
    -

    5.1. Introduction

    -

    While advances in long-context language models (LCs) [Lee et al., 2024] have expanded the amount of information these systems can process, significant challenges remain in managing and effectively utilizing extended data inputs:

    +

    5.1. Introduction

    +

    While advances in long-context language models (LCs) [Lee et al., 2024] have expanded the amount of information these LLMs can process, significant challenges remain in managing and effectively utilizing extended data inputs:

      -
    • LLMs are sensitive to input formatting and structure, requiring careful data preparation to achieve optimal results [He et al., 2024, Liu et al., 2024, Tan et al., 2024].

    • -
    • They operate with knowledge cutoffs, providing potentially stale or outdated information that may not reflect current reality and demonstrate problems with temporal knowledge accuracy [Amayuelas et al., 2024].

    • -
    • LLMs also face “lost-in-the-middle” problems [Wu et al., 2024] and struggle with less common but important information showing a systematic loss of long-tail knowledge [Kotha et al., 2024].

    • +
    • LLMs are sensitive to input formatting and structure, requiring careful data preparation to achieve optimal results [He et al., 2024, Liu et al., 2024, Tan et al., 2024].

    • +
    • LLMs operate with knowledge cutoffs, providing potentially outdated information that may not reflect current reality and demonstrate problems with temporal knowledge accuracy [Amayuelas et al., 2024].

    • +
    • LLMs also face “lost-in-the-middle” problems [Wu et al., 2024] and struggle with less common but important information showing a systematic loss of long-tail knowledge [Kotha et al., 2024].

    Motivated by these challenges, this chapter explores two key input data components:

      -
    1. Data Parsing and Chunking: Parsing and chunking documents into a unified format that is suitable and more manageable for LLMs to process.

    2. +
    3. Data Pre-Processing: Parsing and chunking documents into a unified format that is suitable and manageable for LLMs to process effectively.

    4. Retrieval Augmentation: Augmenting LLMs with the ability to retrieve relevant, recent, and specialized information.

    -

    In data parsing, we will explore some useful open source tools that help transform data into LLM-compatible formats, demonstrating their impact through a case study of structured information extraction from complex PDFs. In a second case study, we will introduce some chunking strategies to help LLMs process long inputs and implement a particular technique called Chunking with Contextual Linking the enables contextually relevant chunk processing.

    -

    In retrieval augmentation, we will explore how to enhance LLMs with semantic search capabilities for incorporating external context using RAGs (Retrieval Augmented Generation) while discussing whether RAGs will be really needed in the future given the rise of long-context language models.

    -

    While RAGs are useful for incorporating external context, they are not a silver bullet nor a mandatory component for all LLM applications. In our last case study, we leverage long-context windows to build a quiz generator from a large knowledge base. We will also explore some additional relevant techniques such as prompt caching and response verification through citations.

    +

    In data parsing, we will explore some useful open source tools such as Docling and MarkItDown that help transform data into LLM-compatible formats, demonstrating their impact through a case study of structured information extraction from complex PDFs. In a second case study, we will introduce some chunking strategies to help LLMs process long inputs and implement a particular technique called Chunking with Contextual Linking the enables contextually relevant chunk processing.

    +

    In retrieval augmentation, we will explore how to enhance LLMs with semantic search capabilities for incorporating external context using RAGs (Retrieval Augmented Generation) using Vector Databases such as ChromaDB. We also discuss whether RAGs will be really needed in the future given the rise of long-context language models.

    +

    While RAGs are useful for incorporating external context, they are not a silver bullet nor a mandatory component for all LLM applications. In our last case study, we demonstrate how long-context windows can be used to extract insights from a large knowledge base without the need for complex retrieval systems. We build a quiz generator from open books from Project Gutenberg. We will also explore some additional relevant techniques such as prompt caching and response verification through citations using “Corpus-in-Context” (CIC) Prompting [Lee et al., 2024].

    By the chapter’s conclusion, readers will possess relevant knowledge of input data management strategies for LLMs and practical expertise in selecting and implementing appropriate approaches and tools for specific use cases.

    -

    5.2. Parsing Documents

    -

    Data parsing and formatting play a critical role in LLMs performance [He et al., 2024, Liu et al., 2024, Tan et al., 2024]. Hence, building robust data ingestion and preprocessing pipelines is essential for any LLM application.

    -

    This section explores open source tools that streamline input data processing, in particular for parsing purposes, providing a unified interface for converting diverse data formats into standardized representations that LLMs can effectively process. By abstracting away format-specific complexities, they allow developers to focus on core application logic rather than parsing implementation details while maximizing the LLM performance.

    -

    We will cover open source tools that provide parsing capabilities for a wide range of data formats. And we will demonstrate how some of these tools can be used to extract structured information from complex PDFs demonstrating how the quality of the parser can impact LLM’s performance.

    +

    5.2. Parsing Documents

    +

    Data parsing and formatting play a critical role in LLMs performance [He et al., 2024, Liu et al., 2024, Tan et al., 2024]. Hence, building robust data ingestion and preprocessing pipelines is essential for any LLM application.

    +

    This section explores open source tools that streamline input data processing, in particular for parsing purposes, providing a unified interface for converting diverse data formats into standardized representations that LLMs can effectively process. By abstracting away format-specific complexities, they allow developers to focus on core application logic rather than parsing implementation details while maximizing LLM’s performance.

    +

    We will cover open source tools that provide parsing capabilities for a wide range of data formats. And we will show how some of these tools can be used to extract structured information from complex PDFs demonstrating how the quality of the parser can impact LLM’s performance.

    -

    5.2.1. MarkItDown

    -

    MarkItDown [Microsoft, 2024] is a Python package and CLI tool developed by the Microsoft AutoGen team for converting various file formats to Markdown. It supports a wide range of formats including PDF, PowerPoint, Word, Excel, images (with OCR and EXIF metadata), audio (with transcription), HTML, and other text-based formats making it a useful tool for document indexing and LLM-based applications.

    +

    5.2.1. MarkItDown

    +

    MarkItDown [Microsoft, 2024] is a Python package and CLI tool developed by the Microsoft for converting various file formats to Markdown. It supports a wide range of formats including PDF, PowerPoint, Word, Excel, images (with OCR and EXIF metadata), audio (with transcription), HTML, and other text-based formats making it a useful tool for document indexing and LLM-based applications.

    Key features:

    -

    5.3. Retrieval-Augmented Generation

    +

    5.3. Retrieval-Augmented Generation

    What happens if we asked ChatGPT who’s the author of the book “Taming LLMs”?

    @@ -1459,10 +1459,10 @@

    [Lewis et al., 2021]. It has also proved effective in mitigating LLMs hallucinations [Ni et al., 2024, Zhou et al., 2024].

    +

    RAG utilizes a retrieval system to fetch external knowledge and augment LLM’s context. It is a useful technique for building LLM applications that require domain-specific information or knowledge-intensive tasks [Lewis et al., 2021]. It has also proved effective in mitigating LLMs hallucinations [Ni et al., 2024, Zhou et al., 2024].

    In the above example, a RAG would help with hallucinations by grounding the LLM’s response to information provided in the knowledge base. Additional common use cases of RAG systems include:

    1. Enterprise Knowledge Management: RAG enables organizations to synthesize answers from diverse internal data sources like documents, databases, and communication channels. This creates a unified knowledge interface that can accurately answer questions using the organization’s own data.

    2. @@ -1471,12 +1471,12 @@

      5.3.1. RAG Pipeline

      -

      RAG architectures vary but they all share the same goal: to retrieve relevant information from a knowledge base to maximize the LLM’s ability to effectively and accurately respond to prompts, particularly when the answer requires out-of-training data information.

      +

      5.3.1. RAG Pipeline

      +

      RAG architectures vary but they all share the same goal: To retrieve relevant information from a knowledge base to maximize the LLM’s ability to effectively and accurately respond to prompts, particularly when the answer requires out-of-training data.

      We will introduce key components of a RAG system one by one leading to a full canonical RAG pipeline at the end that ultimately will be used to answer our original question “Who’s the author of the book Taming LLMs?”, accurately.

      -

      The following basic components will be introduced (see Fig. 5.6 for a visual representation):

      +

      The following basic components will be introduced (see Fig. 5.6 for a visual representation):

    -

    5.3.2. Challenges and Limitations

    +

    5.3.2. Challenges and Limitations

    While RAG systems offer powerful capabilities for enhancing LLM responses with external knowledge, they face several significant challenges and limitations that require careful consideration:

    • Data Quality and Accuracy: The effectiveness of RAG systems fundamentally depends on the quality and reliability of their knowledge sources. When these sources contain inaccurate, outdated, biased, or incomplete information, the system’s responses become unreliable. This challenge is particularly acute when dealing with rapidly evolving topics or when sourcing information from unverified channels.

    • -
    • Computational Cost and Latency: Implementing RAG systems at scale presents computational and operational challenges. The process of embedding documents, maintaining vector databases, and performing similarity searches across large knowledge bases demands computational, budget and operational resources. In real-time applications, these requirements can introduce noticeable latency, potentially degrading the user experience and limiting practical applications.

    • -
    • Explainability and Evaluation: The complexity of RAG systems, arising from the intricate interaction between retrieval mechanisms and generative models, makes it difficult to trace and explain their reasoning processes. Traditional evaluation metrics often fail to capture the nuanced aspects of RAG performance, such as contextual relevance and factual consistency. This limitation hampers both system improvement and stakeholder trust. Readers are encouraged to read Chapter The Evals Gap for general LLM evaluation issues as well as consider tools such as Ragas [Ragas, 2024] for RAG evaluation.

    • +
    • Computational Cost and Latency: Implementing RAG systems at scale presents computational and operational challenges. The process of embedding documents, maintaining vector databases, and performing similarity searches across large knowledge bases demands computational, and operational resources. In real-time applications, these requirements can introduce noticeable latency, potentially degrading the user experience and limiting practical applications.

    • +
    • Explainability and Evaluation: The complexity of RAG systems, arising from the intricate interaction between retrieval mechanisms and generative models, makes it difficult to trace and explain their reasoning processes. Traditional evaluation metrics often fail to capture the nuanced aspects of RAG performance, such as contextual relevance and factual consistency. This limitation hampers both system improvement and stakeholder trust. Readers are encouraged to read Chapter The Evals Gap for general LLM evaluation issues as well as consider tools such as Ragas [Ragas, 2024] for RAG evaluation.

    • Hallucination Management: Though RAG systems help ground LLM responses in source documents, they do not completely eliminate hallucinations. The generative component may still produce content that extrapolates beyond or misinterprets the retrieved context. This risk becomes particularly concerning when the system confidently presents incorrect information with apparent source attribution.

    -

    Moreover, recent research has shed light on critical limitations of key techniques used in RAGs systems. A relevant finding pertains to reranking, which has shown [Jacob et al., 2024]:

    +

    Moreover, recent research has shed light on critical limitations of key techniques used in RAGs systems. A relevant finding pertains to reranking, which has shown [Jacob et al., 2024]:

    • Diminishing Returns: Performance degrades as the number of documents (K) increases, sometimes performing worse than basic retrievers when dealing with large datasets.

    • Poor Document Discrimination: Rerankers can be misled by irrelevant documents, sometimes assigning high scores to content with minimal relevance to the query.

    • @@ -1930,42 +1930,43 @@

      -

      5.3.3. Will RAGs exist in the future?

      -

      This question is posed as we contrast RAGs with LLMs with long-context windows (LC).

      -

      Recent research has shed light on this specific point [Li et al., 2024], suggesting that, on the one hand, RAGs can be seen as a cost-effective alternative to LC models:

      +

      5.3.3. Will RAGs exist in the future?

      +

      This question is posed as we contrast RAGs with LLMs with long-context windows (LCs).

      +

      Recent research has shed light on this specific point [Li et al., 2024] suggesting a trade-off between cost and performance. On the one hand, RAGs can be seen as a cost-effective alternative to LC models:

        -
      • RAGs offer lower computational cost compared to LC due to the significantly shorter input length required for processing.

      • -
      • This cost-efficiency arises because RAG reduces the number of input tokens to LLMs, which of course reduces usage cost as pricing is based on the number of input (and output) tokens.

      • +
      • RAGs offer lower computational cost compared to LCs due to the significantly shorter input length required for processing.

      • +
      • This cost-efficiency arises because RAG reduces the number of input tokens to LLMs, which in turn reduces overall usage cost.

      On the other hand, this RAG benefit is achieved at the cost of performance:

        -
      • Recent advancements in LLMs, in particular with Gemini-1.5 and GPT-4o models, demonstrate capabilities in understanding long contexts directly, which enables them to outperform RAG in terms of average performance

      • +
      • Recent advancements in LLMs, in particular with Gemini-1.5 and GPT-4o models, demonstrate capabilities in understanding long contexts directly, which enables them to outperform RAG in terms of average performance.

      • LC models can process extremely long contexts, such as Gemini 1.5 which can handle up to 1 million tokens, and these models benefit from large-scale pretraining to develop strong long-context capabilities.

      This cost-performance trade-off is illustrated in Fig. 5.10, where LC models outperform RAGs in terms of average performance while RAGs are more cost-effective.

      Long-Context LLMs for Superior Performance
      -

      Fig. 5.10 Long-Context LLMs demonstrate superior performance while RAGs are more cost-effective [Li et al., 2024].

      +

      Fig. 5.10 Long-Context LLMs demonstrate superior performance while RAGs are more cost-effective [Li et al., 2024].

      Fig. 5.10 also shows a model called “SELF-ROUTE” which combines RAG and LC by routing queries based on model self-reflection. This is a hybrid approach that reduces computational costs while maintaining performance comparable to LC. The advantage of SELF-ROUTE is most significant for smaller values of k, where k is the number of retrieved text chunks, and SELF-ROUTE shows a marked improvement in performance over RAG, while as k increases the performance of RAG and SELF-ROUTE approaches that of LC.

      -

      Another example of a hybrid approach that combines the benefits of both LC and RAGs is RetroLLM [Li et al., 2024], which is a unified framework that integrates retrieval and generation into a single process, enabling language models to generate fine-grained evidence directly from a corpus. The key contribution is that this approach delivers those benefits while eliminating the need for a separate retriever, addressing limitations of traditional RAG methods. Experimental results demonstrate RetroLLM’s superior performance compared to traditional RAG methods, across both in-domain and out-of-domain tasks. It also achieves a significant reduction in token consumption due to its fine-grained evidence retrieval.

      -

      A relevant development in this area is the introduction of LOFT [Lee et al., 2024], a benchmark to assess this paradigm shift from RAGs to LCs, using real-world tasks requiring context up to millions of tokens. Evidence suggests LCs can deliver performance with simplified pipelines compared to RAGs, particularly for tasking requiring multi-hop reasoning over long contexts when using Chain-of-Thought [Wei et al., 2023]. However, LCs can still be outperformed by specialized retrievers, in particular Gecko, a specialized model fine-tuned on extensive text retrieval and similarity tasks.

      +

      Another example of a hybrid approach that combines the benefits of both LC and RAGs is RetroLLM [Li et al., 2024], which is a unified framework that integrates retrieval and generation into a single process, enabling language models to generate fine-grained evidence directly from a corpus. The key contribution is that this approach delivers those benefits while eliminating the need for a separate retriever, addressing limitations of traditional RAG methods. Experimental results demonstrate RetroLLM’s superior performance compared to traditional RAG methods, across both in-domain and out-of-domain tasks. It also achieves a significant reduction in token consumption due to its fine-grained evidence retrieval.

      +

      CAG [Chan et al., 2024] is another solution that eliminates the need for RAGs as it proposes cache-augmented generation (CAG). CAG preloads all relevant data into a large language model’s extended context window, eliminating the need for real-time retrieval and improving speed and accuracy. This is achieved by precomputing a key-value cache, further optimizing inference time. CAG demonstrates superior performance compared to RAG by achieving higher BERT scores in most evaluated scenarios, indicating better answer quality, and by having significantly reduced generation times. These results suggest that CAG can be both more accurate and more efficient than traditional RAG systems.

      +

      Another relevant development in this area is the introduction of LOFT [Lee et al., 2024], a benchmark to assess this paradigm shift from RAGs to LCs, using real-world tasks requiring context up to millions of tokens. Evidence suggests LCs can deliver performance with simplified pipelines compared to RAGs, particularly for tasking requiring multi-hop reasoning over long contexts when using Chain-of-Thought [Wei et al., 2023]. However, LCs can still be outperformed by specialized retrievers, in particular Gecko, a specialized model fine-tuned on extensive text retrieval and similarity tasks.

      Bottom-line: Do we really need RAGs? The answer is conditional:

        -
      • RAG may be relevant when cost-effectiveness is a key requirement and where the model needs to access vast amounts of external knowledge without incurring high computational expenses. However, as LLMs context window sizes increase and LLMs cost per input token is decreases, RAG may not be as relevant as it was before.

      • +
      • RAG may be relevant when cost-effectiveness is a key requirement and where the model needs to access vast amounts of external knowledge without incurring high computational expenses. However, as LLMs context window sizes increase and LLMs cost per input token decreases, RAGs may not be as relevant as it was before.

      • Long-context LLMs are superior when performance is the primary concern, and the model needs to handle extensive texts that require deep contextual understanding and reasoning.

      • Hybrid approaches like SELF-ROUTE are valuable as they combine the strengths of RAG and LC offering a practical balance between cost and performance, especially for applications where both factors are critical.

      -

      Ultimately, the choice between RAG, LC, or a hybrid method depends on the specific requirements of the task, available resources, and the acceptable trade-off between cost and performance.

      +

      Ultimately, the choice among RAG, LC, or a hybrid method depends on the specific requirements of the task, available resources, and the acceptable trade-off between cost and performance.

      In a later case study, we demonstrate the power of LCs as we construct a Quiz generator with citations over a large knowledge base without the use of chunking nor RAGs.

    -

    5.4. A Note on Frameworks

    +

    5.4. A Note on Frameworks

    We have covered a few open source tools for parsing data and provided a canonical RAG pipeline directly using an open source VectorDB together with an LLM. There is a growing number of frameworks that offer similar functionality wrapping the same core concepts at a higher level of abstraction. The two most popular ones are Langchain and LlamaIndex.

    -

    For instance, the code below shows how to use LlamaIndex’s LlamaParse for parsing input documents, which offers support for a wide range of file formats (e.g. .pdf, .pptx, .docx, .xlsx, .html). We we can see that the code is very similar to the one we used for MarkitDown and Docling.

    +

    For instance, the code below shows how to use LlamaIndex’s LlamaParse for parsing input documents, which offers support for a wide range of file formats (e.g. .pdf, .pptx, .docx, .xlsx, .html). We observe that the code is very similar to the one we used for MarkitDown and Docling.

    from llama_parse import LlamaParse
     
     # Initialize the parser
    @@ -1978,8 +1979,8 @@ 

    documents = parser.load_data(["./doc1.pdf", "./doc2.pdf"])

    -

    As another example, the code below replicates our ChromaDB-based retrieval system using LlamaIndex [LlamaIndex, 2024].

    -

    As we can see, similar concepts are used in both frameworks:

    +

    As another example, the code below replicates our ChromaDB-based retrieval system using LlamaIndex [LlamaIndex, 2024].

    +

    As we can see, similar concepts are used:

    • Documents to represent elements of the knowledge base

    • Collections to store the documents

    • @@ -2018,13 +2019,13 @@

      -

      5.5. Case Studies

      +

      5.5. Case Studies

      This section presents two case studies to complement topics we have covered in this chapter in the context of managing input data for LLMs.

      First, we cover content chunking, in particular Content Chunking with Contextual Linking which showcases how intelligent chunking strategies can overcome both context window and output token limitations. This case study illustrates techniques for breaking down and reassembling content while maintaining coherence, enabling the generation of high-quality long-form outputs despite model constraints.

      Second, we build a Quiz generator with citations using long context window. Not all knowledge intense applications require RAGs. In this case study, we show how to use long context window as well as some additional input management techniques such as prompt caching for efficiency and reference management to enhance response accuracy and verifiability. These approaches show how to maximize the benefits of larger context models while maintaining response quality.

      -

      5.5.1. Case Study I: Content Chunking with Contextual Linking

      -

      Content chunking is commonly used to breakdown long-form content into smaller, manageable chunks. In the context of RAGs, this can be helpful not only to help the retrieval system find more contextually relevant documents but also lead to a more cost efficient LLM solution since fewer tokens are processed in the context window. Furthermore, semantic chunking can increase accuracy of RAG systems [ZenML, 2024].

      +

      5.5.1. Case Study I: Content Chunking with Contextual Linking

      +

      Content chunking is commonly used to breakdown long-form content into smaller, manageable chunks. In the context of RAGs, this can be helpful not only to help the retrieval system find more contextually relevant documents but also lead to a more cost efficient LLM solution since fewer tokens are processed in the context window. Furthermore, semantic chunking can increase accuracy of RAG systems [ZenML, 2024].

      Content chunking with contextual linking is a chunking technique that seeks to split input content while keeping chunk-specific context, hence allowing the LLM to maintain coherence and context when generating responses per chunks. In that way, this technique tackles two key problems:

      1. The LLM’s inability to process long inputs to do context-size limits

      2. @@ -2040,7 +2041,7 @@

        -

        5.5.1.1. Generating long-form content

        +

        5.5.1.1. Generating long-form content

        • Goal: Generate a long-form report analyzing a company’s financial statement.

        • Input: A company’s 10K SEC filing.

        • @@ -2062,7 +2063,7 @@

          langchain for a content-aware sentence-splitting strategy for chunking. Langchain offers several text splitters [LangChain, 2024] such as JSON-, Markdown- and HTML-based or split by token. We will use the CharacterTextSplitter with tiktoken as our tokenizer to count the number of tokens per chunk which we can use to ensure that we do not surpass the input token limit of our model.

          +

          Here, we will utilize langchain for a content-aware sentence-splitting strategy for chunking. Langchain offers several text splitters [LangChain, 2024] such as JSON-, Markdown- and HTML-based or split by token. We will use the CharacterTextSplitter with tiktoken as our tokenizer to count the number of tokens per chunk which we can use to ensure that we do not surpass the input token limit of our model.

        @@ -2352,7 +2353,7 @@

        -

        5.5.1.2. Discussion

        +

        5.5.1.2. Discussion

        Results from the generated report present a few interesting aspects:

        • Coherence: The generated report demonstrates an apparent level of coherence. The sections are logically structured, and the flow of information is smooth. Each part of the report builds upon the previous sections, providing a comprehensive analysis of Apple Inc.’s financial performance and key risk factors. The use of headings and subheadings helps in maintaining clarity and organization throughout the document.

        • @@ -2363,20 +2364,20 @@

          Anthropic, 2024a]. The approach, as shown in Fig. 5.12, employs an LLM itself to generate relevant context per chunk before passing these two pieces of information together to the LLM. This process was proposed in the context of RAGs to enhance its retrieval capabilities but can be applied more generally to improve output generation.

          +

          Here, we implemented a simple strategy to improve the coherence in output generation given a multi-part chunked input. Many other strategies are possible. One related technique worth mentioning is Anthropic’s Contextual Retrieval [Anthropic, 2024a]. The approach, as shown in Fig. 5.12, employs an LLM itself to generate relevant context per chunk before passing these two pieces of information together to the LLM. This process was proposed in the context of RAGs to enhance its retrieval capabilities but can be applied more generally to improve output generation.

          Anthropic Contextual Linking
          -

          Fig. 5.12 Anthropic Contextual Linking [Anthropic, 2024a].

          +

          Fig. 5.12 Anthropic Contextual Linking [Anthropic, 2024a].

      -

      5.5.2. Case Study II: Quiz Generation with Citations

      +

      5.5.2. Case Study II: Quiz Generation with Citations

      In this case study, we will build a Quiz generator with citations that explores additional input management techniques particularly useful with long context windows. The implementation includes prompt caching for efficiency and citation tracking to enhance accuracy and verifiability. We will use Gemini 1.5 Pro as our LLM model, which has a context window of 2M tokens.

      -

      5.5.2.1. Use Case

      +

      5.5.2.1. Use Case

      Let’s assume you are a Harvard student enrolled in GOV 1039 “The Birth of Modern Democracy” (see Fig. 5.13), you face a daunting reading list for next Tuesday’s class on Rights. The readings include foundational documents like the Magna Carta, Declaration of Independence, and US Bill of Rights, each with specific sections to analyze.

      Harvard Class @@ -2392,7 +2393,7 @@

      -

      5.5.2.2. Implementation

      +

      5.5.2.2. Implementation

      The full implementation is available at Book’s Github repository. Here, we will cover the most relevant parts of the implementation.

      Client Class

      First, we will define the Client class which will provide the key interface users will interact with. It has the following summarized interface:

      @@ -2422,7 +2423,7 @@

      add() method is key since it is used to add content to the client. It takes a list of URLs and extracts the content from each URL using a content extractor (using MarkitDown). The content is then added to the conversation input memory in a way that enables citations using the “Corpus-in-Context” (CIC) Prompting [Lee et al., 2024].

      +

      The add() method is key since it is used to add content to the client. It takes a list of URLs and extracts the content from each URL using a content extractor (using MarkitDown). The content is then added to the conversation input memory in a way that enables citations using the “Corpus-in-Context” (CIC) Prompting [Lee et al., 2024].

      Fig. 5.14 shows how CIC format is used to enable citations. It inserts a corpus into the prompt. Each candidate citable part (e.g., passage, chapter) in a corpus is assigned a unique identifier (ID) that can be referenced as needed for that task.

      CIC Format @@ -2523,7 +2524,7 @@

      {citations} instructs the model to add CiC citations to the response if user requests it.

      -

      5.5.2.3. Example Usage

      +

      5.5.2.3. Example Usage

      Dataset

      First, we will define our knowledge base.

        @@ -2599,8 +2600,8 @@

        -

        5.5.2.4. Discussion

        +
        +

        5.5.2.4. Discussion

        The experiment demonstrated the ability to build a knowledge base from multiple sources while leveraging prompt caching for efficiency and generate quizzes with citations for verifiability. The system successfully ingested content from Project Gutenberg texts, including historical documents like the Magna Carta, and used them to create interactive educational content.

        However, several limitations emerged during this process:

          @@ -2613,7 +2614,7 @@

          -

          5.6. Conclusion

          +

          5.6. Conclusion

          This chapter has explored critical strategies and techniques for managing input data in LLM applications, focusing on three key areas: data parsing, retrieval augmentation, and practical implementation patterns. We examined how parsing tools like MarkItDown and Docling can transform diverse data formats into LLM-compatible representations, demonstrating through case studies how parser quality can impact LLM performance. The chapter also investigated retrieval augmentation techniques, particularly RAG systems, showing how they can enhance LLM capabilities by providing access to external knowledge while discussing their future relevance in the context of emerging long-context language models.

          Through our case studies, we demonstrated practical approaches to handling common challenges in LLM applications. The Content Chunking with Contextual Linking case study illustrated techniques for managing long-form content generation while maintaining coherence across chunks. The Quiz Generation with Citations case study showcased how long-context windows can be effectively utilized without the need for complex retrieval systems, highlighting the importance of choosing the right approach based on specific application requirements rather than defaulting to more complex solutions.

          As the field continues to evolve, the choice between traditional RAG systems and emerging long-context models will likely become increasingly nuanced. While RAGs offer cost-effective solutions for incorporating external knowledge, the rise of long-context models suggests a future where simpler architectures might suffice for many applications. The key insight is that effective input data management requires careful consideration of trade-offs among complexity, cost, and performance, always guided by specific application requirements rather than following a one-size-fits-all approach. Success in building robust LLM applications will depend on understanding these trade-offs and selecting appropriate strategies for each use case.

          @@ -2630,153 +2631,157 @@

          -

          5.7. References

          -
          -
          -[AG24] +

          5.7. References

          +
          +
          +[AG24]

          Jay Alammar and Maarten Grootendorst. Hands-On Large Language Models. O'Reilly, 2024. ISBN 978-1098150969. URL: https://www.oreilly.com/library/view/hands-on-large-language/9781098150952/.

          -
          +
          [AWP+24]

          Alfonso Amayuelas, Kyle Wong, Liangming Pan, Wenhu Chen, and William Yang Wang. Knowledge of knowledge: exploring known-unknowns uncertainty with large language models. In Lun-Wei Ku, Andre Martins, and Vivek Srikumar, editors, Findings of the Association for Computational Linguistics: ACL 2024, 6416–6432. Bangkok, Thailand, August 2024. Association for Computational Linguistics. URL: https://aclanthology.org/2024.findings-acl.383, doi:10.18653/v1/2024.findings-acl.383.

          -
          -[BCV14] +
          +[BCV14]

          Yoshua Bengio, Aaron Courville, and Pascal Vincent. Representation learning: a review and new perspectives. 2014. URL: https://arxiv.org/abs/1206.5538, arXiv:1206.5538.

          -
          -[Dia24] +
          +[CCCH24] +

          Brian J Chan, Chao-Ting Chen, Jui-Hung Cheng, and Hen-Hsen Huang. Don't do rag: when cache-augmented generation is all you need for knowledge tasks. 2024. URL: https://arxiv.org/abs/2412.15605, arXiv:2412.15605.

          +
          +
          +[Dia24]

          Nir Diamant. Rag techniques. GitHub Repository, 2024. Collection of advanced RAG techniques and implementation patterns. URL: https://github.com/NirDiamant/RAG_Techniques.

          -
          +
          [HRK+24] -(1,2) +(1,2)

          Jia He, Mukund Rungta, David Koleczek, Arshdeep Sekhon, Franklin X Wang, and Sadid Hasan. Does prompt formatting have any impact on llm performance? 2024. URL: https://arxiv.org/abs/2411.10541, arXiv:2411.10541.

          -
          -[JLZ+24] +
          +[JLZ+24]

          Mathew Jacob, Erik Lindgren, Matei Zaharia, Michael Carbin, Omar Khattab, and Andrew Drozdov. Drowning in documents: consequences of scaling reranker inference. 2024. URL: https://arxiv.org/abs/2411.11767, arXiv:2411.11767.

          -
          -[Kim24] +
          +[Kim24]

          Abhinav Kimothi. A Simple Guide to Retrieval Augmented Generation. Manning Publications, 2024. ISBN 9781633435858. Manning Early Access Program (MEAP). URL: https://www.manning.com/books/a-simple-guide-to-retrieval-augmented-generation.

          -
          +
          [KSR24]

          Suhas Kotha, Jacob Mitchell Springer, and Aditi Raghunathan. Understanding catastrophic forgetting in language models via implicit inference. In The Twelfth International Conference on Learning Representations. 2024. URL: https://openreview.net/forum?id=VrHiF2hsrm.

          -
          +
          [LCD+24] -(1,2,3) +(1,2,3,4)

          Jinhyuk Lee, Anthony Chen, Zhuyun Dai, Dheeru Dua, Devendra Singh Sachan, Michael Boratko, Yi Luan, Sébastien M. R. Arnold, Vincent Perot, Siddharth Dalmia, Hexiang Hu, Xudong Lin, Panupong Pasupat, Aida Amini, Jeremy R. Cole, Sebastian Riedel, Iftekhar Naim, Ming-Wei Chang, and Kelvin Guu. Can long-context language models subsume retrieval, rag, sql, and more? 2024. URL: https://arxiv.org/abs/2406.13121, arXiv:2406.13121.

          -
          -[LPP+21] +
          +[LPP+21]

          Patrick Lewis, Ethan Perez, Aleksandra Piktus, Fabio Petroni, Vladimir Karpukhin, Naman Goyal, Heinrich Küttler, Mike Lewis, Wen-tau Yih, Tim Rocktäschel, Sebastian Riedel, and Douwe Kiela. Retrieval-augmented generation for knowledge-intensive nlp tasks. 2021. URL: https://arxiv.org/abs/2005.11401, arXiv:2005.11401.

          -
          -[LJZ+24] +
          +[LJZ+24]

          Xiaoxi Li, Jiajie Jin, Yujia Zhou, Yongkang Wu, Zhonghua Li, Qi Ye, and Zhicheng Dou. Retrollm: empowering large language models to retrieve fine-grained evidence within generation. 2024. URL: https://arxiv.org/abs/2412.11919, arXiv:2412.11919.

          -
          +
          [LLZ+24] -(1,2) +(1,2)

          Zhuowan Li, Cheng Li, Mingyang Zhang, Qiaozhu Mei, and Michael Bendersky. Retrieval augmented generation or long-context llms? a comprehensive study and hybrid approach. 2024. URL: https://arxiv.org/abs/2407.16833, arXiv:2407.16833.

          -
          +
          [LFC+24] -(1,2) +(1,2)

          Kai Liu, Zhihang Fu, Chao Chen, Wei Zhang, Rongxin Jiang, Fan Zhou, Yaowu Chen, Yue Wu, and Jieping Ye. Enhancing llm's cognition via structurization. 2024. URL: https://arxiv.org/abs/2407.16434, arXiv:2407.16434.

          -
          -[Lla24] +
          +[Lla24]

          LlamaIndex. Llamaparse: extract structured data from text and pdfs using llms. 2024. LlamaParse. URL: https://github.com/run-llama/llama_parse.

          -
          -[NBGC24] +
          +[NBGC24]

          Shiyu Ni, Keping Bi, Jiafeng Guo, and Xueqi Cheng. When do LLMs need retrieval augmentation? mitigating LLMs' overconfidence helps retrieval augmentation. In Lun-Wei Ku, Andre Martins, and Vivek Srikumar, editors, Findings of the Association for Computational Linguistics: ACL 2024, 11375–11388. Bangkok, Thailand, August 2024. Association for Computational Linguistics. URL: https://aclanthology.org/2024.findings-acl.675, doi:10.18653/v1/2024.findings-acl.675.

          -
          +
          [TDW+24] -(1,2) +(1,2)

          Jiejun Tan, Zhicheng Dou, Wen Wang, Mang Wang, Weipeng Chen, and Ji-Rong Wen. Htmlrag: html is better than plain text for modeling retrieved knowledge in rag systems. 2024. URL: https://arxiv.org/abs/2411.02959, arXiv:2411.02959.

          -
          -[WWS+23] +
          +[WWS+23]

          Jason Wei, Xuezhi Wang, Dale Schuurmans, Maarten Bosma, Brian Ichter, Fei Xia, Ed Chi, Quoc Le, and Denny Zhou. Chain-of-thought prompting elicits reasoning in large language models. 2023. URL: https://arxiv.org/abs/2201.11903, arXiv:2201.11903.

          -
          +
          [WIP+24]

          Yunshu Wu, Hayate Iso, Pouya Pezeshkpour, Nikita Bhutani, and Estevam Hruschka. Less is more for long document summary evaluation by llms. 2024. URL: https://arxiv.org/abs/2309.07382, arXiv:2309.07382.

          -
          -[ZLJ+24] +
          +[ZLJ+24]

          Yujia Zhou, Zheng Liu, Jiajie Jin, Jian-Yun Nie, and Zhicheng Dou. Metacognitive retrieval-augmented large language models. In Proceedings of the ACM Web Conference 2024, WWW '24, 1453–1463. New York, NY, USA, 2024. Association for Computing Machinery. URL: https://doi.org/10.1145/3589334.3645481, doi:10.1145/3589334.3645481.

          -
          +
          [Anthropic4a] -(1,2) +(1,2)

          Anthropic. Introducing contextual retrieval. 09 2024a. URL: https://www.anthropic.com/news/contextual-retrieval.

          -
          -[AthinaAI24] +
          +[AthinaAI24]

          AthinaAI. Rag cookbooks. GitHub Repository, 2024. Collection of recipes and best practices for building RAG applications. URL: https://github.com/athina-ai/rag-cookbooks.

          -
          -[ChromaDB4a] +
          +[ChromaDB4a]

          ChromaDB. Chromadb cookbook: hnsw configuration. Website, 2024a. URL: https://cookbook.chromadb.dev/core/configuration/#hnsw-configuration.

          -
          -[ChromaDB4b] +
          +[ChromaDB4b]

          ChromaDB. Chromadb documentation. Website, 2024b. URL: https://docs.trychroma.com/.

          -
          -[HuggingFace4f] +
          +[HuggingFace4f]

          HuggingFace. Sentence transformers. Website, 2024f. URL: https://huggingface.co/sentence-transformers.

          -
          -[HuggingFace4i] +
          +[HuggingFace4i]

          HuggingFace. Massive text embedding benchmark (mteb) leaderboard. Website, 2024i. URL: https://huggingface.co/spaces/mteb/leaderboard.

          -
          -[IBMResearch24] +
          +[IBMResearch24]

          IBM Research. Docling: a document-level linguistic annotation framework. GitHub Repository, 2024. Framework for document-level linguistic annotation and analysis. URL: https://github.com/DS4SD/docling.

          -
          -[LangChain24] +
          +[LangChain24]

          LangChain. Text splitters - langchain documentation. https://python.langchain.com/docs/how_to/#text-splitters, 2024. Accessed: 12/07/2024.

          -
          -[LlamaIndex24] +
          +[LlamaIndex24]

          LlamaIndex. Storing - llamaindex documentation. Website, 2024. URL: https://docs.llamaindex.ai/en/stable/understanding/storing/storing/.

          -
          -[MendableAI24] +
          +[MendableAI24]

          Mendable AI. Firecrawl: a fast and efficient web crawler for llm training data. GitHub Repository, 2024. High-performance web crawler optimized for collecting LLM training data. URL: https://github.com/mendableai/firecrawl.

          -
          +
          [MerrillLynch24] -(1,2) +(1,2)

          Merrill Lynch. Chief investment officer capital market outlook. CIO Weekly Letter, 2024. URL: https://olui2.fs.ml.com/publish/content/application/pdf/gwmol/me-cio-weekly-letter.pdf.

          -
          -[Microsoft24] +
          +[Microsoft24]

          Microsoft. Markitdown: structured generation with large language models. GitHub Repository, 2024. Framework for structured text generation using LLMs. URL: https://github.com/microsoft/markitdown.

          -
          -[OpenAI24] +
          +[OpenAI24]

          OpenAI. What are embeddings? Website, 2024. URL: https://platform.openai.com/docs/guides/embeddings/what-are-embeddings.

          -
          -[Ragas24] +
          +[Ragas24]

          Ragas. Rag evaluation - ragas documentation. Website, 2024. URL: https://docs.ragas.io/en/stable/getstarted/rag_evaluation/.

          -
          -[Unstructuredio24] +
          +[Unstructuredio24]

          Unstructured.io. Unstructured: open source libraries for pre-processing documents. GitHub Repository, 2024. URL: https://github.com/Unstructured-IO/unstructured.

          -
          -[ZenML24] +
          +[ZenML24]

          ZenML. Scaling rag accuracy from 49% to 86% in finance q&a assistant. Website, 2024. URL: https://www.zenml.io/llmops-database/scaling-rag-accuracy-from-49-to-86-in-finance-q-a-assistant.

          @@ -2784,11 +2789,11 @@

          diff --git a/tamingllms/_build/html/notebooks/local.html b/tamingllms/_build/html/notebooks/local.html index b1a01f9..ace8d9b 100644 --- a/tamingllms/_build/html/notebooks/local.html +++ b/tamingllms/_build/html/notebooks/local.html @@ -252,7 +252,7 @@
          -

          8. Local LLMs in Practice

          +

          8. Local LLMs in Practice

          Freedom is something that dies unless it’s used.

          —Hunter S. Thompson

          @@ -260,55 +260,55 @@
          -

          8.1. Introduction

          +

          8.1. Introduction

          Running Open Source LLMs locally versus depending on proprietary cloud-based models represents more than just a technical choice - it’s a fundamental re-imagining of how we interact with AI technology, putting control back in the hands of users.

          Privacy concerns are a key driver for running LLMs locally. Individual users may want to process personal documents, photos, emails, and chat messages without sharing sensitive data with third parties. For enterprise use cases, organizations handling medical records must comply with HIPAA regulations that require data to remain on-premise. Similarly, businesses processing confidential documents and intellectual property, as well as organizations subject to GDPR and other privacy regulations, need to maintain strict control over their data processing pipeline.

          Cost considerations are another key driver. Organizations and individual consumers can better control expenses by matching model capabilities to their specific needs rather than paying for multiple cloud API subscriptions. For organizations with high-volume applications, this customization and control over costs becomes especially valuable compared to the often prohibitive per-request pricing of cloud solutions. For consumers, running multiple open source models locally eliminates the need to maintain separate subscriptions to access different model capabilities.

          @@ -318,11 +318,11 @@

          -

          8.2. Choosing your Model

          +

          8.2. Choosing your Model

          The landscape of open source LLMs is rapidly evolving, with new models emerging by the day. While proprietary LLMs have garnered significant attention, open source LLMs are gaining traction due to their flexibility, customization options, and cost-effectiveness.

          It is important to observe long-term strategic considerations when choosing a model. These entails prioritization dimensions that may enable competitive advantage in the long-term, including:

            -
          1. Managed Services Support: You may start experimenting locally with LLMs but eventually you will need to deployment options: either host models yourself or consider managed services. Cloud providers like AWS Bedrock, SambaNova and Together.ai can simplify deployment and management but model family support varies along with varying SLAs for model availability, support and model serving [Analysis, 2024]. One should evaluate the availability of managed services for your target model family.

          2. +
          3. Managed Services Support: You may start experimenting locally with LLMs but eventually you will need to deployment options: either host models yourself or consider managed services. Cloud providers like AWS Bedrock, SambaNova and Together.ai can simplify deployment and management but model family support varies along with varying SLAs for model availability, support and model serving [Analysis, 2024]. One should evaluate the availability of managed services for your target model family.

          4. Vendor Long-Term Viability: Consider vendor’s long-term strategy and transparency around future development. Evaluate factors like funding, market position, and development velocity to assess whether the vendor will remain a reliable partner. Further, transparency around long-term strategy and roadmap is a critical consideration when choosing a model vendor partner.

          5. Single-Provider Lock-in: Users and organizations should avoid the risk of lock-in by remaining flexible with your choice of LLM providers. Today’s winning models are not guaranteed to be the same in the future.

          6. Time-to-market and Customization: As the same models are available to everyone, base capabilities are becoming commoditized. As a consequence, competitive advantage comes from the application layer. Hence, the ability to iterate fast while customizing to your specific domain becomes a critical strategic consideration when choosing a model.

          7. @@ -330,7 +330,7 @@

            -

            8.2.1. Task Suitability

            +

            8.2.1. Task Suitability

            When evaluating an open source LLM, task suitability is a critical first consideration. A model that performs well on general benchmarks may struggle with specific domain tasks. Understanding the intended use case helps narrow down model options based on their demonstrated strengths.

            Task Categories

            When determining which LLM task to prioritize, carefully consider your specific use case and end-user needs. Different applications require distinct model capabilities and optimizations. Common LLM Task Categories include:

            @@ -344,11 +344,11 @@

            Fig. 8.1 shows the number models per task category available at Hugging Face as of December 22, 2024 [HuggingFace, 2024t]. Text generation is by far the most popular task category.

            +

            Fig. 8.1 shows the number models per task category available at Hugging Face as of December 22, 2024 [HuggingFace, 2024t]. Text generation is by far the most popular task category.

            Task Number
            -

            Fig. 8.1 Number of models per task category from Hugging Face as of December 22, 2024 [HuggingFace, 2024t].

            +

            Fig. 8.1 Number of models per task category from Hugging Face as of December 22, 2024 [HuggingFace, 2024t].

            Model Types

            @@ -364,8 +364,8 @@

            Fig. 8.2 Model Types.

            -

            The Llama 2 model family [Touvron et al., 2023] illustrates these distinctions well. The base Llama 2, trained on 2 trillion tokens of public data, demonstrates general-purpose capabilities across text generation and translation tasks. Its chat-optimized instruction-tuned variant, Llama 2-Chat, underwent additional fine-tuning on over 1 million human-annotated conversational examples, making it particularly adept at natural dialogue.

            -

            Benchmark results [Meta AI, 2024c] in Table 8.1 highlight the impact of model specialization. On the TruthfulQA [Lin et al., 2022] and Toxigen [Alnajjar and others, 2024] benchmarks measuring truthful and informative responses. We observe that the chat-optimized variants show substantially improved truthfulness. Similarly, on the ToxiGen benchmark measuring toxic content generation, Llama 2-Chat models demonstrate near-zero toxicity compared to base models’ 21-26% rates.

            +

            The Llama 2 model family [Touvron et al., 2023] illustrates these distinctions well. The base Llama 2, trained on 2 trillion tokens of public data, demonstrates general-purpose capabilities across text generation and translation tasks. Its chat-optimized instruction-tuned variant, Llama 2-Chat, underwent additional fine-tuning on over 1 million human-annotated conversational examples, making it particularly adept at natural dialogue.

            +

            Benchmark results [Meta AI, 2024c] in Table 8.1 highlight the impact of model specialization. On the TruthfulQA [Lin et al., 2022] and Toxigen [Alnajjar and others, 2024] benchmarks measuring truthful and informative responses. We observe that the chat-optimized variants show substantially improved truthfulness. Similarly, on the ToxiGen benchmark measuring toxic content generation, Llama 2-Chat models demonstrate near-zero toxicity compared to base models’ 21-26% rates.

    Table 3.6 Comparison of Lighteval, LangSmith, and Promptfoo
    @@ -408,7 +408,7 @@

    [Hui et al., 2024] is an example of a purpose-built model that demonstrates significant performance on the specific task of code generation.

    +

    While Llama family of models exhibits strong performance across general knowledge, instruction following, and specialized domains, purpose-built models may still outperform it in highly specific applications. Qwen/Qwen2.5-Coder-32B-Instruct [Hui et al., 2024] is an example of a purpose-built model that demonstrates significant performance on the specific task of code generation.

    Model Features

    Model features can either enable or limit the feasibility of specific use cases. Understanding features of your candidate models is crucial for determining whether a model is suitable for your application. For example:

      @@ -420,9 +420,9 @@

      -

      8.2.2. Performance & Cost

      +

      8.2.2. Performance & Cost

      General benchmarks are useful for comparing models across different standard tasks. Open Source models are becoming more competitive with proprietary models with LLama, Qwen, DeepSeek and Mistral model families being some of the most powerful open source models available today.

      -

      Qwen model family [Qwen et al., 2024] emerged in 2024 as a model family achieving competitive performance with relatively smaller parameter counts compared to its competitors. The flagship Qwen2.5-72B-Instruct model demonstrates performance comparable to the much larger Llama-3-405B-Instruct while being about 5 times smaller. The models excel in specialized tasks like mathematics and coding, handle structured data effectively, and offer enhanced support for tool use and long-text generation as shown in Fig. 8.3.

      +

      Qwen model family [Qwen et al., 2024] emerged in 2024 as a model family achieving competitive performance with relatively smaller parameter counts compared to its competitors. The flagship Qwen2.5-72B-Instruct model demonstrates performance comparable to the much larger Llama-3-405B-Instruct while being about 5 times smaller. The models excel in specialized tasks like mathematics and coding, handle structured data effectively, and offer enhanced support for tool use and long-text generation as shown in Fig. 8.3.

      Qwen Performance
      @@ -436,7 +436,7 @@

      Fig. 8.4 Performance Comparison including proprietary models.

      -

      Also from China, DeepSeek-V3 [DeepSeek, 2024] represents a major breakthrough in open source language models, emerging as arguably the most capable open source large language model available as of the end of 2024. With 671 billion parameters and 37 billion active MoE (Mixture of Experts) parameters, it achieves performance on par with leading proprietary models like Claude 3.5 Sonnet and GPT 4o as shown in Fig. 8.5. The model demonstrates impressive cost efficiency metrics (see Fig. 8.6), processing input tokens at \(0.27 per million and output tokens at \)1.1 per million, while maintaining a generation speed of 60 tokens per second (3x faster than DeepSeek-V2).

      +

      Also from China, DeepSeek-V3 [DeepSeek, 2024] represents a major breakthrough in open source language models, emerging as arguably the most capable open source large language model available as of the end of 2024. With 671 billion parameters and 37 billion active MoE (Mixture of Experts) parameters, it achieves performance on par with leading proprietary models like Claude 3.5 Sonnet and GPT 4o as shown in Fig. 8.5. The model demonstrates impressive cost efficiency metrics (see Fig. 8.6), processing input tokens at \(0.27 per million and output tokens at \)1.1 per million, while maintaining a generation speed of 60 tokens per second (3x faster than DeepSeek-V2).

      What makes DeepSeek-V3 particularly remarkable is that these capabilities were achieved with a relatively modest training budget of just $5.5 million, used to train on 14.8 trillion tokens. This efficiency in training demonstrates the potential for open source models to compete with proprietary alternatives at a fraction of the cost. The model’s release marks a significant milestone in the democratization of advanced AI capabilities, challenging the dominance of proprietary models within big tech. One should be cautious though as the model has not yet been battle-tested in the wild but this is an exciting development demonstrating the potential of open source models to compete with proprietary alternatives.

      DeepSeek-V3 @@ -469,7 +469,7 @@

      Fig. 8.7 shows a comparison of quality now with the added dimension of cost. Quality is measured as an average of scores from MMLU, GPQA, Math & HumanEval benchmarks [Analysis, 2024]. Price is a blend of Cost Per Input Token plus Input & Cost Per Output Token (3:1 ratio). Reported numbers represent median across cloud providers [Analysis, 2024] supporting these models.

      +

      Fig. 8.7 shows a comparison of quality now with the added dimension of cost. Quality is measured as an average of scores from MMLU, GPQA, Math & HumanEval benchmarks [Analysis, 2024]. Price is a blend of Cost Per Input Token plus Input & Cost Per Output Token (3:1 ratio). Reported numbers represent median across cloud providers [Analysis, 2024] supporting these models.

      Performance Comparison including proprietary models.
      @@ -502,7 +502,7 @@

      -

      8.2.3. Licensing

      +

      8.2.3. Licensing

      When evaluating open-source LLMs, it’s important to consider licensing and data usage policies. Some models may require attribution or commercial use licenses, while others may be more permissive. Additionally, ensure that the model’s training data is compatible with your intended use case and complies with relevant data protection laws.

      The licensing landscape for LLMs spans from highly permissive to custom and restricted usage. Table 8.2 provides a summary of the licensing terms for some of the most popular open source LLMs. We observe two types of licenses:

        @@ -557,30 +557,30 @@

        Review, 2024] serves as a pivotal example, where the Times claims its copyrighted materials were used without authorization to train language models. This litigation has far-reaching consequences for developers building LLM-powered applications. Should courts rule in favor of copyright holders, model providers may need to withdraw and retrain models containing protected content. These legal uncertainties introduce substantial complexity into LLM implementation strategies, demanding careful consideration during project planning phases.

        -

        Recent LLM releases demonstrate varying levels of data transparency. For instance, Qwen2.5’s approach [Qwen et al., 2024] illustrates common industry practices in both its achievements and limitations. On the training data scale front, Qwen2.5 does provide some transparency by discussing some training data methodology compared to previous versions such as expanding from 7 trillion to 18 trillion tokens, while implementing sophisticated quality filtering and carefully balancing domain representation through sampling adjustments.

        +

        The legal landscape surrounding LLM training data has grown increasingly complex, particularly regarding copyright infringement concerns. The high-profile lawsuit between OpenAI and The New York Times [Review, 2024] serves as a pivotal example, where the Times claims its copyrighted materials were used without authorization to train language models. This litigation has far-reaching consequences for developers building LLM-powered applications. Should courts rule in favor of copyright holders, model providers may need to withdraw and retrain models containing protected content. These legal uncertainties introduce substantial complexity into LLM implementation strategies, demanding careful consideration during project planning phases.

        +

        Recent LLM releases demonstrate varying levels of data transparency. For instance, Qwen2.5’s approach [Qwen et al., 2024] illustrates common industry practices in both its achievements and limitations. On the training data scale front, Qwen2.5 does provide some transparency by discussing some training data methodology compared to previous versions such as expanding from 7 trillion to 18 trillion tokens, while implementing sophisticated quality filtering and carefully balancing domain representation through sampling adjustments.

        However, like many commercial LLMs, Qwen2.5 exhibits transparency limitations. The report provides incomplete disclosure of data sources and limited information about the proportions of different data types used in training. The preprocessing methodologies remain unclear, and there is minimal discussion of potential biases that may exist in the training data.

        -

        Similarly, in the Llama 3 paper [AI, 2024c], Meta AI does share some details about the pre-training corpus stating simply stating that it was around 15T multilingual tokens, compared to 1.8T tokens for Llama 2. The exact sources of data used for pre-training and post-training are not explicitly listed.

        +

        Similarly, in the Llama 3 paper [AI, 2024c], Meta AI does share some details about the pre-training corpus stating simply stating that it was around 15T multilingual tokens, compared to 1.8T tokens for Llama 2. The exact sources of data used for pre-training and post-training are not explicitly listed.

        These gaps in transparency reflect a broader industry challenge in balancing commercial interests with the need for openness and scientific reproducibility.

        -

        A significant advancement in open-source language model training data is HuggingFace’s release of the FineWeb datasets. In its first release [Penedo et al., 2024], FineWeb is made of a 15-trillion token dataset derived from 96 Common Crawl snapshots that produces better-performing LLMs than other open pretraining datasets. Additionally, data curation codebase and all of the models trained during our ablation experiments are made available. FineWeb is a fine example of an initiative that helps minimize the gap between proprietary and public knowledge.

        +

        A significant advancement in open-source language model training data is HuggingFace’s release of the FineWeb datasets. In its first release [Penedo et al., 2024], FineWeb is made of a 15-trillion token dataset derived from 96 Common Crawl snapshots that produces better-performing LLMs than other open pretraining datasets. Additionally, data curation codebase and all of the models trained during our ablation experiments are made available. FineWeb is a fine example of an initiative that helps minimize the gap between proprietary and public knowledge.

        -

        8.2.4. Community Support

        +

        8.2.4. Community Support

        Community support plays a vital role in the open-source LLM ecosystem. Active communities contribute to model development, provide technical assistance, and share valuable resources. When evaluating open-source LLMs, the strength and engagement of the community should be a key consideration, as it directly impacts the model’s long-term viability and practical utility.

        The popularity of different model families reflects their community adoption. In 2024, the Qwen and Llama families have emerged as clear favorites, with Qwen2.5-1.5B-Instruct alone representing 35% of total open source models downloads in 2024.

        Hugging Face Downloads
        -

        Fig. 8.10 Hugging Face Model Downloads in 2024 as of December 22 of the same year [HuggingFace, 2024t].

        +

        Fig. 8.10 Hugging Face Model Downloads in 2024 as of December 22 of the same year [HuggingFace, 2024t].

        -

        Strong communities accelerate model innovation through collective effort. When developers and researchers collaborate on model development, they create a powerful ecosystem of continuous improvement. Through transparent sharing of findings, they enable rapid development of novel applications and specialized model variants for specific domains. This collaborative environment naturally leads to the establishment of best practices and frameworks that benefit the entire community. The success of this community-driven approach is evident in models like Qwen2.5-1.5B-Instruct, which has spawned 200+ derivative models through post-training adaptations [Qwen, 2024b].

        +

        Strong communities accelerate model innovation through collective effort. When developers and researchers collaborate on model development, they create a powerful ecosystem of continuous improvement. Through transparent sharing of findings, they enable rapid development of novel applications and specialized model variants for specific domains. This collaborative environment naturally leads to the establishment of best practices and frameworks that benefit the entire community. The success of this community-driven approach is evident in models like Qwen2.5-1.5B-Instruct, which has spawned 200+ derivative models through post-training adaptations [Qwen, 2024b].

        -

        8.2.5. Customization

        +

        8.2.5. Customization

        Model customization is an important consideration when selecting an open-source LLM. Adapting and fine-tuning to specific use cases can significantly impact practical utility and performance in production environments.

        Model providers increasingly offer streamlined fine-tuning services. For example, Mistral demonstrates an accessible approach to model customization. -The code below shows Mistral’s straightforward fine-tuning API. The example shows how to create and start a fine-tuning job with just a few lines of code. The fine-tuning job is configured with the base model “open-mistral-7b” and uses training and validation files from the Ultrachat dataset [HuggingFace, 2024u]. This API design makes it easy to experiment with model customization while maintaining control over the training process.

        +The code below shows Mistral’s straightforward fine-tuning API. The example shows how to create and start a fine-tuning job with just a few lines of code. The fine-tuning job is configured with the base model “open-mistral-7b” and uses training and validation files from the Ultrachat dataset [HuggingFace, 2024u]. This API design makes it easy to experiment with model customization while maintaining control over the training process.

        # create a fine-tuning job
         created_jobs = client.fine_tuning.jobs.create(
             model="open-mistral-7b", 
        @@ -599,7 +599,7 @@ 

        created_jobs

        -

        For more comprehensive customization needs, Hugging Face’s Transformer Reinforcement Learning (TRL) toolkit provides robust capabilities for model adaptation. Built on the Transformers library, TRL supports [HuggingFace, 2024d]:

        +

        For more comprehensive customization needs, Hugging Face’s Transformer Reinforcement Learning (TRL) toolkit provides robust capabilities for model adaptation. Built on the Transformers library, TRL supports [HuggingFace, 2024d]:

        • Supervised Fine-Tuning (SFT)

        • Reward Modeling (RM)

        • @@ -607,7 +607,7 @@

          Case Study: Aligning a Language Model to a Policy, we will explore how to use TRL to fine-tune a model to align with user preferences.

          -

          Successful model customization demands managing critical resources throughout the development lifecycle. This includes rigorous dataset preparation and validation to ensure high-quality training data, careful configuration of training infrastructure to optimize computational resources, systematic experimentation iterations while managing associated costs, comprehensive performance evaluation frameworks to measure improvements, and thoughtful deployment architecture planning to ensure smooth production integration. Of course, actual cost of storage and inference should be taken into consideration. Table 8.3 shows as an example the cost of associated with fine-tuning Mistral models [AI, 2024a].

          +

          Successful model customization demands managing critical resources throughout the development lifecycle. This includes rigorous dataset preparation and validation to ensure high-quality training data, careful configuration of training infrastructure to optimize computational resources, systematic experimentation iterations while managing associated costs, comprehensive performance evaluation frameworks to measure improvements, and thoughtful deployment architecture planning to ensure smooth production integration. Of course, actual cost of storage and inference should be taken into consideration. Table 8.3 shows as an example the cost of associated with fine-tuning Mistral models [AI, 2024a].

    Table 8.1 Benchmark results for Llama 2 family of models.
    @@ -645,7 +645,7 @@

    [HuggingFace, 2024v, Zhao et al., 2024]. A noteworthy example is Hugging Face’s SmolLM2 [Allal et al., 2024], a family of compact language models designed with several key advantages:

    +

    Small language models can serve as a lightweight alternative to customization compared to large models. Recent research has shown that smaller models can achieve competitive performance compared to larger models [HuggingFace, 2024v, Zhao et al., 2024]. A noteworthy example is Hugging Face’s SmolLM2 [Allal et al., 2024], a family of compact language models designed with several key advantages:

    1. Compact Sizes:

    @@ -675,10 +675,10 @@

    -

    8.3. Tools for Local LLM Deployment

    +

    8.3. Tools for Local LLM Deployment

    Local LLM deployment tools generally fall into two categories: inference-focused tools that prioritize performance and programmability for technical users requiring production-grade deployments, and user interface (UI) tools that emphasize accessibility through graphical interfaces for non-technical users, trading some performance for ease of use and broader adoption. In the following sections we will explore some of these tools discussing their features, capabilities, and trade-offs.

    -

    8.3.1. Serving Models

    +

    8.3.1. Serving Models

    Serving an LLM model involves making it available for inference by setting up infrastructure to process requests and manage resources efficiently. This serving layer handles several key responsibilities, from loading model weights and managing compute resources to processing requests and optimizing performance. Let’s examine the core components of model serving:

    1. Model Loading and Initialization

    2. @@ -731,10 +731,10 @@

      -

      8.3.1.1. LLama.cpp

      -

      LLama.cpp [Gerganov and contributors, 2024a] is an MIT-licensed open source optimized implementation of the LLama model architecture designed to run efficiently on machines with limited memory.

      +

      8.3.1.1. LLama.cpp

      +

      LLama.cpp [Gerganov and contributors, 2024a] is an MIT-licensed open source optimized implementation of the LLama model architecture designed to run efficiently on machines with limited memory.

      Originally developed by Georgi Gerganov and today counting with hundreds of contributors, this C/C++ LLama version provides a simplified interface and advanced features that allow language models to run locally without overwhelming systems. With the ability to run in resource-constrained environments, LLama.cpp makes powerful language models more accessible and practical for a variety of applications.

      -

      In its “Manifesto” [Gerganov and others, 2023], the author highlights the significant potential in bringing AI from cloud to edge devices, emphasizing the importance of keeping development lightweight, experimental, and enjoyable rather than getting bogged down in complex engineering challenges. The author states a vision that emphasizes maintaining an exploratory, hacker-minded approach while building practical edge computing solutions highlighting the following core principles:

      +

      In its “Manifesto” [Gerganov and others, 2023], the author highlights the significant potential in bringing AI from cloud to edge devices, emphasizing the importance of keeping development lightweight, experimental, and enjoyable rather than getting bogged down in complex engineering challenges. The author states a vision that emphasizes maintaining an exploratory, hacker-minded approach while building practical edge computing solutions highlighting the following core principles:

      • “Will remain open-source”

      • Focuses on simplicity and efficiency in codebase

      • @@ -749,7 +749,7 @@

        [Gerganov and contributors, 2024b] is the latest model format used by LLama.cpp, replacing the older GGML format. It was designed specifically for efficient inference of large language models on consumer hardware. The key features that make GGUF particularly valuable include [IBM Think, 2024]:

        +

        GGUF (GPT-Generated Unified Format) [Gerganov and contributors, 2024b] is the latest model format used by LLama.cpp, replacing the older GGML format. It was designed specifically for efficient inference of large language models on consumer hardware. The key features that make GGUF particularly valuable include [IBM Think, 2024]:

        • Improved quantization: GGUF supports multiple quantization levels to reduce model size while preserving performance. Common quantization schemes that are supported by GGUF include:

            @@ -763,9 +763,9 @@

            [HuggingFace, 2024x] and provides a tool (ggml-org/gguf-my-repo) to convert existing models to GGUF format, making it easier for developers to access and deploy optimized versions of popular language models.

            +

            These capabilities make GGUF models significantly more practical for running LLMs locally compared to full-precision formats, often dramatically reducing memory requirements. Hugging Face hosts a growing collection of pre-converted GGUF models [HuggingFace, 2024x] and provides a tool (ggml-org/gguf-my-repo) to convert existing models to GGUF format, making it easier for developers to access and deploy optimized versions of popular language models.

            Setup

            -

            Please follow the instructions from the LLama.cpp GitHub repository [Gerganov and contributors, 2024a] to install and compile the library.

            +

            Please follow the instructions from the LLama.cpp GitHub repository [Gerganov and contributors, 2024a] to install and compile the library.

            Here, we will compile the library from source on a Linux machine with 8 jobs in parallel for enhanced performance (add the -j argument to run multiple jobs in parallel).

            sudo apt install cmake
             
            @@ -773,7 +773,7 @@ 

            --build build --config Release -j 8

            -

            Python bindings are available through llama-cpp-python package [Betlen and contributors, 2024].

            +

            Python bindings are available through llama-cpp-python package [Betlen and contributors, 2024].

            pip install llama-cpp-python
             
            @@ -864,14 +864,14 @@

            [Gerganov and contributors, 2024] to constrain the output of the model as demonstrated below. This is the same technique Ollama uses, a similar approach to Outlines’ to generate structured outputs from LLMs. See Chapter Structured Output for more details.

            +

            It is worth noting Llama.cpp provides a way to use grammars [Gerganov and contributors, 2024] to constrain the output of the model as demonstrated below. This is the same technique Ollama uses, a similar approach to Outlines’ to generate structured outputs from LLMs. See Chapter Structured Output for more details.

            ./build/bin/llama-cli -m ./models/qwen2.5-0.5b-instruct-q8_0.gguf --grammar-file grammars/json.gbnf -p 'Request: schedule a call at 8pm; Command:'
             
             # {"appointmentTime": "8pm", "appointmentDetails": "schedule a a call"}
             

            Python

            -

            A handy Python binding [Betlen and contributors, 2024] is available for LLama.cpp, which by default returns chat completions in OpenAI’s API chat format as below. The package is very comprehensive supporting JSON Mode, function calling, multi-modal models and more.

            +

            A handy Python binding [Betlen and contributors, 2024] is available for LLama.cpp, which by default returns chat completions in OpenAI’s API chat format as below. The package is very comprehensive supporting JSON Mode, function calling, multi-modal models and more.

            MODEL_PATH = "./models/qwen2.5-0.5b-instruct-q8_0.gguf"
            @@ -926,8 +926,8 @@ 

            -

            8.3.1.2. Llamafile

            -

            Developed by Occupy Wall Street’s former activist, Justine Tunney, Llamafile [Mozilla Ocho, 2024] is an Appache 2.0 licensed open source tool that combines the power of LLama.cpp with Cosmopolitan Libc, a universal C standard library that allows creating portable executables compatible with multiple operating systems.

            +

            8.3.1.2. Llamafile

            +

            Developed by Occupy Wall Street’s former activist, Justine Tunney, Llamafile [Mozilla Ocho, 2024] is an Appache 2.0 licensed open source tool that combines the power of LLama.cpp with Cosmopolitan Libc, a universal C standard library that allows creating portable executables compatible with multiple operating systems.

            In this way, Llamafile reduces all the complexity of LLMs to a single executable file (called a “llamafile”) that runs locally without installation. Key advantages of Llamafile over plain Llama.cpp include:

            1. Zero Installation/Configuration

            2. @@ -951,7 +951,7 @@

              [HuggingFace, 2024x]. All you need to do is:

              +

              A large collection of Llamafiles can be found on HuggingFace [HuggingFace, 2024x]. All you need to do is:

              1. Download a llamafile from HuggingFace

              2. Make the file executable

              3. @@ -971,7 +971,7 @@

                http://localhost:8080. And we can use it as demonstrated in the previous section.

    -

    8.3.1.3. Ollama

    +

    8.3.1.3. Ollama

    Ollama is a lightweight, MIT-licensed open-source tool for running LLMs locally. It provides a simple interface for interacting with a wide range of language models, including popular models like Llama 3.1 and Llama 3.2. Ollama is designed to be easy to install and use, making it a popular choice for developers who want to run LLMs locally without the need for extensive setup or configuration. Ollama’s key advantages include:

    1. Model Management

    2. @@ -1065,7 +1065,7 @@

      -

      8.3.1.4. Comparison

      +

      8.3.1.4. Comparison

      Each solution offers distinct advantages and tradeoffs that make them suitable for different use cases. At a high-level, Ollama is the easiest to install and use and has become the most popular choice for your average use case, Llamafile is the easiest to distribute and a good choice when portability is a priority, and Llama.cpp is the most customizable and performant solution as summarized in Table 8.4.

    Table 8.3 Mistral fine-tuning costs as of December 22, 2024.
    @@ -1121,11 +1121,11 @@

    -

    8.3.2. UI

    +

    8.3.2. UI

    There is a growing number of UI tools for local LLM deployment that aim at providing a more user-friendly experience. Ranging from closed-source to open-source solutions across a range of features and capabilities. We will discuss LM Studio, Jan, and OpenWebUI.

    -

    8.3.2.1. LM Studio

    -

    LM Studio [LM Studio, 2024] is a closed-source GUI for running LLMs locally. In the context of local deployment, LM Studio positions itself as a more user-friendly, feature-rich solution compared to the other tools. It’s particularly valuable for developers transitioning from cloud APIs to local deployment, and for users who prefer graphical interfaces over command-line tools. Key Features of LM Studio include:

    +

    8.3.2.1. LM Studio

    +

    LM Studio [LM Studio, 2024] is a closed-source GUI for running LLMs locally. In the context of local deployment, LM Studio positions itself as a more user-friendly, feature-rich solution compared to the other tools. It’s particularly valuable for developers transitioning from cloud APIs to local deployment, and for users who prefer graphical interfaces over command-line tools. Key Features of LM Studio include:

    • Model Parameter Customization: Allows adjusting temperature, maximum tokens, frequency penalty, and other settings

    • Chat History: Enables saving prompts for later use

    • @@ -1148,7 +1148,7 @@

      8.3.2.2. Jan

      +

      8.3.2.2. Jan

      Jan is an open source ChatGPT-alternative that runs local models. Its model’s library contains popular LLMs like Llama, Gemma, Mistral, or Qwen. Key Features of Jan include:

      1. User-Friendly Interface: Run AI models with just a few clicks

      2. @@ -1166,7 +1166,7 @@

        -

        8.3.2.3. Open WebUI

        +

        8.3.2.3. Open WebUI

        Open WebUI is an open-source web interface designed to enhance the local AI model experience, particularly for Ollama and OpenAI-compatible APIs. It aims to provide enterprise-grade features while maintaining user-friendliness. OpenWebUI’s core features include:

        1. Advanced User Interface

          @@ -1206,7 +1206,7 @@

          -

          8.3.2.4. Comparison

          +

          8.3.2.4. Comparison

          LM Studio excels at providing individual developers with a smooth transition from cloud APIs to local deployment, offering an intuitive interface and robust API compatibility, however it is closed-source. Jan focuses on simplicity and accessibility, making it ideal for personal use and basic deployments while maintaining open-source benefits. OpenWebUI makes additional features available to enterprise users and teams requiring advanced features like RAG, collaboration tools, and granular access controls, though this may come at the cost of increased complexity and resource requirements. We compare the three tools in Table 8.5.

    Table 8.4 lama.cpp vs Ollama vs Llamafile Comparison
    @@ -1274,8 +1274,8 @@

    -

    8.4. Case Study: The Effect of Quantization on LLM Performance

    -

    This case study examines how different quantization [HuggingFace, 2024s] levels affect the performance of language models running locally. Quantization is a crucial technique for reducing model size and memory footprint while enhancing inference speed, but it comes with potential tradeoffs in model quality. Understanding these tradeoffs is essential for practitioners deploying LLMs in resource-constrained environments.

    +

    8.4. Case Study: The Effect of Quantization on LLM Performance

    +

    This case study examines how different quantization [HuggingFace, 2024s] levels affect the performance of language models running locally. Quantization is a crucial technique for reducing model size and memory footprint while enhancing inference speed, but it comes with potential tradeoffs in model quality. Understanding these tradeoffs is essential for practitioners deploying LLMs in resource-constrained environments.

    Using the Qwen 2.5 0.5B model as our baseline, we’ll compare four variants:

    • The base fp16 model (no quantization)

    • @@ -1301,8 +1301,8 @@

      -

      8.4.1. Prompts Dataset

      -

      To evaluate the impact of quantization on model performance, we first need a set of prompts that will serve as input data for our experiments. We’ll construct a dataset from WikiText-2 [Salesforce, 2024], which contains Wikipedia excerpts.

      +

      8.4.1. Prompts Dataset

      +

      To evaluate the impact of quantization on model performance, we first need a set of prompts that will serve as input data for our experiments. We’ll construct a dataset from WikiText-2 [Salesforce, 2024], which contains Wikipedia excerpts.

      In our experiments, we will use a total of NUM_PROMPTS prompts that vary in length from MIN_PROMPT_LENGTH to MAX_PROMPT_LENGTH tokens. Using a fixed set of prompts ensures consistent evaluation across model variants and enables direct comparison of metrics like perplexity and throughput.

      @@ -1365,12 +1365,12 @@

      -

      8.4.2. Quantization

      +

      8.4.2. Quantization

      We can quantize a model using the llama-quantize CLI. For instance, to quantize the Qwen 2.5 0.5B model to Q4_K, we can run the following command:

      ./llama-quantize -m ./models/qwen2.5-0.5b-instruct-fp16.gguf ./models/qwen2.5-0.5b-instruct-q8_0.gguf Q4_K
       
      -

      Table 8.6 describes the key quantization levels used in this study [HuggingFace, 2024w], where:

      +

      Table 8.6 describes the key quantization levels used in this study [HuggingFace, 2024w], where:

      • q is the quantized value

      • block_scale is the scaling factor for the block (with bit width in parentheses)

      • @@ -1406,7 +1406,7 @@

        -

        8.4.3. Benchmarking

        +

        8.4.3. Benchmarking

        We will measure quantized model “quality” by means of perplexity and KL Divergence.

        Perplexity

        Perplexity is a common metric for evaluating language models that measures how well a model predicts a sample of text. Lower perplexity indicates better prediction (less “perplexed” by the text).

        @@ -1447,7 +1447,7 @@

        -

        8.4.4. Results

        +

        8.4.4. Results

        The KL divergence and perplexity results in Fig. 8.17 and Fig. 8.16 provide insights into model quality across different quantization levels. Q6 maintains near-perfect correlation (99.90%) with the base model and minimal KL divergence (0.004), indicating very close distribution matching. Q2’s higher KL divergence (0.112) and lower correlation (98.31%) quantify its increased deviation from the base model’s behavior.

        Perplexity @@ -1545,14 +1545,14 @@

        -

        8.4.5. Takeaways

        +

        8.4.5. Takeaways

        The quantization analysis of the Qwen 2.5 0.5B model demonstrates a clear trade-off among model size, inference speed, and prediction quality. While the base model (1170 MiB) maintains the highest accuracy it operates at the lowest text generation and prompt throughput of 19.73 tokens/s and 94.39 tokens/s, respectively. In contrast, the Q2_K quantization achieves significant size reduction (67%) and the highest throughput (42.62 tokens/s), but exhibits the largest quality degradation with a 10.36% perplexity increase and lowest KL divergence among quantized models. Q4_K emerges as a compelling middle ground, offering substantial size reduction (60%) and strong text generation and prompt throughput performance (38.38 tokens/s and 77.08 tokens/s, respectively), while maintaining good model quality with only 3.5% perplexity degradation and middle-ground KL divergence level.

        These results, achieved on commodity CPU hardware, demonstrate that quantization can significantly improve inference speed and reduce model size while maintaining acceptable quality thresholds, making large language models more accessible for resource-constrained environments.

        It is important to note that these results are not meant to be exhaustive and are only meant to provide a general idea of the trade-offs involved in quantization. Targeted benchmarks should be performed for specific use cases and models to best reflect real-world performance.

        -

        8.5. Conclusion

        +

        8.5. Conclusion

        Running open source language models locally represents a compelling proposition in how we interact with AI technology. The transition from cloud-based to local deployment offers important advantages in terms of privacy, cost control, and customization flexibility, while introducing important technical considerations around resource management and performance optimization. The growing ecosystem of tools and frameworks, from low-level libraries like llama.cpp to user-friendly interfaces like LM Studio and Jan, has made local deployment increasingly accessible to both individual developers and organizations.

        Our case study demonstrated that quantization can significantly improve inference speed and reduce model size while maintaining acceptable quality thresholds, making large language models more accessible for resource-constrained environments. As demonstrated in our case study with the Qwen 2.5 0.5B model, practitioners can achieve significant reductions in model size and improvements in inference speed while maintaining acceptable performance levels. The Q4_K quantization scheme emerged as a particularly effective compromise, offering substantial size reduction (60%) and strong throughput while limiting quality degradation to just 3.5% in perplexity measures.

        Looking ahead, the continued development of open source models and deployment tools suggests a future where local AI deployment becomes increasingly viable and sophisticated. The success of open source models like Qwen and Llama, combined with improvements in local model serving and techniques couple with efficient small language models (SLMs), indicate that local deployment will likely play an increasingly important role in the AI landscape. However, practitioners must carefully evaluate their specific requirements across dimensions like task suitability, resource constraints, and performance needs when choosing between local and cloud-based deployment strategies.

        @@ -1569,145 +1569,145 @@

        -

        8.6. References

        +

        8.6. References

        -
        +
        [AI4c]

        Meta AI. The llama 3 herd of models. 2024c. URL: https://arxiv.org/abs/2407.21783, arXiv:2407.21783.

        -
        +
        [AI4a]

        Mistral AI. Mistral technology and pricing. https://mistral.ai/technology/#pricing, 2024a. Accessed: 2024.

        -
        +
        [ALB+24]

        Loubna Ben Allal, Anton Lozhkov, Elie Bakouch, Gabriel Martín Blázquez, Lewis Tunstall, Agustín Piqueres, Andres Marafioti, Cyril Zakka, Leandro von Werra, and Thomas Wolf. Smollm2 - with great data, comes great performance. 2024.

        -
        +
        [A+24]

        Khalid Alnajjar and others. Toxigen dataset. Papers with Code Dataset, 2024. Dataset for evaluating and mitigating toxic language generation in language models. URL: https://paperswithcode.com/dataset/toxigen.

        -
        +
        [Ana24a]

        Artificial Analysis. Llm provider leaderboards. https://artificialanalysis.ai/leaderboards/providers, 2024. Accessed: 2024.

        -
        +
        [Ana24b]

        Artificial Analysis. Llm provider leaderboards. https://artificialanalysis.ai/leaderboards/providers, 2024. Accessed: 2024.

        -
        +
        [Ana24c]

        Artificial Analysis. Methodology. https://artificialanalysis.ai/methodology, 2024. Accessed: December 22, 2024.

        -
        +
        [Bc24] (1,2)

        Andrei Betlen and contributors. Llama-cpp-python. GitHub Repository, 2024. Python bindings for llama.cpp library enabling high-performance inference of LLaMA models. URL: https://github.com/abetlen/llama-cpp-python.

        -
        +
        [Dee24]

        DeepSeek. Deepseek-v3 technical report. Technical Report, 2024. URL: https://github.com/deepseek-ai/DeepSeek-V3/blob/main/DeepSeek_V3.pdf.

        -
        +
        [Gc24]

        Georgi Gerganov and contributors. Llama.cpp grammars documentation. GitHub Repository, 2024. Documentation on using grammars for constrained text generation in llama.cpp. URL: https://github.com/ggerganov/llama.cpp/blob/master/grammars/README.md.

        -
        +
        [Gc4a] (1,2)

        Georgi Gerganov and contributors. Llama.cpp. GitHub Repository, 2024a. High-performance inference of LLaMA models in pure C/C++. URL: https://github.com/ggerganov/llama.cpp.

        -
        +
        [Gc4b]

        Georgi Gerganov and contributors. Gguf file format specification. GitHub Repository, 2024b. Technical specification of the GGUF file format for efficient model storage and inference. URL: https://github.com/ggerganov/ggml/blob/master/docs/gguf.md.

        -
        +
        [G+23]

        Georgi Gerganov and others. Quantization of llama models - discussion. GitHub Discussion, 2023. Discussion thread about quantization techniques and tradeoffs in llama.cpp. URL: https://github.com/ggerganov/llama.cpp/discussions/205.

        -
        +
        [Hug4d]

        HuggingFace. Trl. 2024d. TRL. URL: https://huggingface.co/docs/trl/en/index.

        -
        +
        [Hug4s]

        HuggingFace. Quantization in optimum. https://huggingface.co/docs/optimum/en/concept_guides/quantization, 2024s. Accessed: 2024.

        -
        +
        [Hug4t] (1,2,3)

        HuggingFace. Open source ai year in review 2024. https://huggingface.co/spaces/huggingface/open-source-ai-year-in-review-2024, 2024t. Accessed: 2024.

        -
        +
        [Hug4u]

        HuggingFace. Ultrachat-200k dataset. 2024u. Accessed: 2024. URL: https://huggingface.co/datasets/HuggingFaceH4/ultrachat_200k.

        -
        +
        [Hug4v]

        HuggingFace. Scaling test time compute. 2024v. Accessed: 2024. URL: https://huggingface.co/spaces/HuggingFaceH4/blogpost-scaling-test-time-compute.

        -
        +
        [HYC+24]

        Binyuan Hui, Jian Yang, Zeyu Cui, Jiaxi Yang, Dayiheng Liu, Lei Zhang, Tianyu Liu, Jiajun Zhang, Bowen Yu, Kai Dang, and others. Qwen2.5 - coder technical report. arXiv preprint arXiv:2409.12186, 2024.

        -
        +
        [LHE22]

        Stephanie Lin, Jacob Hilton, and Owain Evans. Truthfulqa: measuring how models mimic human falsehoods. 2022. URL: https://arxiv.org/abs/2109.07958, arXiv:2109.07958.

        -
        +
        [PKa+24]

        Guilherme Penedo, Hynek Kydlíček, Loubna Ben allal, Anton Lozhkov, Margaret Mitchell, Colin Raffel, Leandro Von Werra, and Thomas Wolf. The fineweb datasets: decanting the web for the finest text data at scale. 2024. URL: https://arxiv.org/abs/2406.17557, arXiv:2406.17557.

        -
        +
        [Qwe4b]

        Qwen. Qwen2.5-1.5b-instruct. 2024b. Accessed: December 22, 2024. URL: https://huggingface.co/Qwen/Qwen2.5-1.5B-Instruct.

        -
        +
        [QY+24] (1,2)

        Qwen, :, An Yang, Baosong Yang, Beichen Zhang, Binyuan Hui, Bo Zheng, Bowen Yu, Chengyuan Li, Dayiheng Liu, Fei Huang, Haoran Wei, Huan Lin, Jian Yang, Jianhong Tu, Jianwei Zhang, Jianxin Yang, Jiaxi Yang, Jingren Zhou, Junyang Lin, Kai Dang, Keming Lu, Keqin Bao, Kexin Yang, Le Yu, Mei Li, Mingfeng Xue, Pei Zhang, Qin Zhu, Rui Men, Runji Lin, Tianhao Li, Tingyu Xia, Xingzhang Ren, Xuancheng Ren, Yang Fan, Yang Su, Yichang Zhang, Yu Wan, Yuqiong Liu, Zeyu Cui, Zhenru Zhang, and Zihan Qiu. Qwen2.5 technical report. 2024. URL: https://arxiv.org/abs/2412.15115, arXiv:2412.15115.

        -
        +
        [Rev24]

        Harvard Law Review. Nyt v. openai: the times's about-face. https://harvardlawreview.org/blog/2024/04/nyt-v-openai-the-timess-about-face/, 2024. Accessed: 2024.

        -
        +
        [TMS+23]

        Hugo Touvron, Louis Martin, Kevin Stone, Peter Albert, Amjad Almahairi, Yasmine Babaei, Nikolay Bashlykov, Soumya Batra, Prajjwal Bhargava, Shruti Bhosale, Dan Bikel, Lukas Blecher, Cristian Canton Ferrer, Moya Chen, Guillem Cucurull, David Esiobu, Jude Fernandes, Jeremy Fu, Wenyin Fu, Brian Fuller, Cynthia Gao, Vedanuj Goswami, Naman Goyal, Anthony Hartshorn, Saghar Hosseini, Rui Hou, Hakan Inan, Marcin Kardas, Viktor Kerkez, Madian Khabsa, Isabel Kloumann, Artem Korenev, Punit Singh Koura, Marie-Anne Lachaux, Thibaut Lavril, Jenya Lee, Diana Liskovich, Yinghai Lu, Yuning Mao, Xavier Martinet, Todor Mihaylov, Pushkar Mishra, Igor Molybog, Yixin Nie, Andrew Poulton, Jeremy Reizenstein, Rashi Rungta, Kalyan Saladi, Alan Schelten, Ruan Silva, Eric Michael Smith, Ranjan Subramanian, Xiaoqing Ellen Tan, Binh Tang, Ross Taylor, Adina Williams, Jian Xiang Kuan, Puxin Xu, Zheng Yan, Iliyan Zarov, Yuchen Zhang, Angela Fan, Melanie Kambadur, Sharan Narang, Aurelien Rodriguez, Robert Stojnic, Sergey Edunov, and Thomas Scialom. Llama 2: open foundation and fine-tuned chat models. 2023. URL: https://arxiv.org/abs/2307.09288, arXiv:2307.09288.

        -
        +
        [ZWA+24]

        Justin Zhao, Timothy Wang, Wael Abid, Geoffrey Angus, Arnav Garg, Jeffery Kinnison, Alex Sherstinsky, Piero Molino, Travis Addair, and Devvret Rishi. Lora land: 310 fine-tuned llms that rival gpt-4, a technical report. 2024. URL: https://arxiv.org/abs/2405.00732, arXiv:2405.00732.

        -
        +
        [HuggingFace4w]

        HuggingFace. Gguf quantization types. Online Documentation, 2024w. Documentation on different quantization types available for GGUF models. URL: https://huggingface.co/docs/hub/gguf#quantization-types.

        -
        +
        [HuggingFace4xa]

        HuggingFace. Gguf models on huggingface. Online Repository, 2024x. Collection of models in GGUF format for efficient local inference. URL: https://huggingface.co/models?search=gguf.

        -
        +
        [HuggingFace4xb]

        HuggingFace. Llamafile models on huggingface. Online Repository, 2024x. Collection of models compatible with Mozilla's llamafile format. URL: https://huggingface.co/models?library=llamafile.

        -
        +
        [IBMThink24]

        IBM Think. Gguf vs ggml: what's the difference? 2024. Comparison of GGUF and GGML model formats. URL: https://www.ibm.com/think/topics/gguf-versus-ggml.

        -
        +
        [LMStudio24]

        LM Studio. Lm studio - discover, download, and run local llms. Website, 2024. Desktop application for discovering, downloading and running local language models. URL: https://lmstudio.ai/.

        -
        +
        [MetaAI4c]

        Meta AI. Llama-2-70b-chat-hf. HuggingFace Model, 2024c. 70 billion parameter chat model from Meta's Llama 2 family. URL: https://huggingface.co/meta-llama/Llama-2-70b-chat-hf.

        -
        +
        [MozillaOcho24]

        Mozilla Ocho. Llamafile: distribute and run llms with a single file. GitHub Repository, 2024. Tool for packaging and distributing LLMs as self-contained executables. URL: https://github.com/Mozilla-Ocho/llamafile.

        -
        +
        [Salesforce24]

        Salesforce. Wikitext dataset. HuggingFace Dataset, 2024. Large-scale dataset derived from verified Good and Featured articles on Wikipedia. URL: https://huggingface.co/datasets/Salesforce/wikitext.

        diff --git a/tamingllms/_build/html/notebooks/safety.html b/tamingllms/_build/html/notebooks/safety.html index 16717be..ac47236 100644 --- a/tamingllms/_build/html/notebooks/safety.html +++ b/tamingllms/_build/html/notebooks/safety.html @@ -256,7 +256,7 @@
        -

        6. Safety

        +

        6. Safety

        Move fast and be responsible.

        —Andrew Ng

        @@ -264,123 +264,123 @@
        -

        6.1. Introduction

        -

        Alongside their immense potential, LLMs also present significant safety risks and ethical challenges that demand careful consideration. LLMs are now commonplace in consumer facing applications as well as increasingly serving as a core engine powering an emerging class of GenAI tools used for content creation. Therefore, their output is becoming pervasive into our daily lives. However, their risks of intended or unintended misuse for generating harmful content are still an evolving open area of research [1] that have raised serious societal concerns and spurred recent developments in AI safety [Pan et al., 2023, Wang et al., 2024].

        -

        Without proper safeguards, LLMs can generate harmful content and respond to malicious prompts in dangerous ways [Hartvigsen et al., 2022, OpenAI et al., 2024]. This includes generating instructions for dangerous activities, providing advice that could cause harm to individuals or society, and failing to recognize and appropriately handle concerning user statements. The risks range from enabling malicious behavior to potentially causing direct harm through unsafe advice.

        -

        Fig. 6.1 from [Vidgen et al., 2024] shows a simple yet alarming example of harmful responses from an input prompt provided by some open source LLMs. Those are models that are openly available and can be used by anyone.

        +

        6.1. Introduction

        +

        Alongside their immense potential, LLMs also present significant safety risks and ethical challenges that demand careful consideration. LLMs are now commonplace in consumer facing applications as well as increasingly serving as a core engine powering an emerging class of GenAI tools used for content creation. Therefore, their output is becoming pervasive into our daily lives. However, their risks of intended or unintended misuse for generating harmful content are still an evolving open area of research [1] that have raised serious societal concerns and spurred recent developments in AI safety [Pan et al., 2023, Wang et al., 2024].

        +

        Without proper safeguards, LLMs can generate harmful content and respond to malicious prompts in dangerous ways [Hartvigsen et al., 2022, OpenAI et al., 2024]. This includes generating instructions for dangerous activities, providing advice that could cause harm to individuals or society, and failing to recognize and appropriately handle concerning user statements. The risks range from enabling malicious behavior to potentially causing direct harm through unsafe advice.

        +

        Fig. 6.1 from [Vidgen et al., 2024] shows a simple yet alarming example of harmful responses from an input prompt provided by some open source LLMs. Those are models that are openly available and can be used by anyone.

        Common dangers and risks of LLMs
        -

        Fig. 6.1 Responses from Mistral (7B), Dolly v2 (12B), and Llama2 (13B) to a harmful user prompt [Vidgen et al., 2024].

        +

        Fig. 6.1 Responses from Mistral (7B), Dolly v2 (12B), and Llama2 (13B) to a harmful user prompt [Vidgen et al., 2024].

        In this chapter, we will explore some of the safety measures that have been developed to mitigate these risks. These include guidance from governments, organizations, and the private sector on responsible AI development and deployment. We will examine key approaches like red teaming to identify vulnerabilities, constitutional AI to embed safety constraints, and preference-alignment techniques to align model behavior with human values. We will also cover important safety datasets, tools, and benchmarks that developers and tech leaders can use to evaluate and improve LLM application safety. Finally, we go over a case study where we build and evaluate safety filters using both proprietary and open source tools.

        -

        6.2. Safety Risks

        +

        6.2. Safety Risks

        -

        6.2.1. General AI Safety Risks

        -

        In this seminal work [Bengio et al., 2024], Yoshua Bengio and co-authors identify key societal-scale risks associated with the rapid advancement of AI, particularly focusing on the development of generalist AI systems that can autonomously act and pursue goals.

        +

        6.2.1. General AI Safety Risks

        +

        In this seminal work [Bengio et al., 2024], Yoshua Bengio and co-authors identify key societal-scale risks associated with the rapid advancement of AI, particularly focusing on the development of generalist AI systems that can autonomously act and pursue goals.

        -

        6.2.1.1. Amplified Existing Harms and Novel Risks

        +

        6.2.1.1. Amplified Existing Harms and Novel Risks

        • Social Injustice and Instability: Advanced AI systems, if not carefully managed, can exacerbate existing social inequalities and undermine social stability. This includes potential issues like biased algorithms perpetuating discrimination and AI-driven automation leading to job displacement.

        • Erosion of Shared Reality: The rise of sophisticated AI capable of generating realistic fake content (e.g., deepfakes) poses a threat to our shared understanding of reality. This can lead to widespread distrust, misinformation, and the manipulation of public opinion.

        • @@ -388,7 +388,7 @@

          -

          6.2.1.2. Risks Associated with Autonomous AI

          +

          6.2.1.2. Risks Associated with Autonomous AI

          • Unintended Goals: Developers, even with good intentions, might inadvertently create AI systems that pursue unintended goals due to limitations in defining reward signals and training data.

          • Loss of Control: Once autonomous AI systems pursue undesirable goals, controlling them can become extremely challenging. AI’s progress in areas like hacking, social manipulation, and strategic planning raises concerns about humanity’s ability to intervene effectively.

          • @@ -396,7 +396,7 @@

            -

            6.2.1.3. Exacerbating Factors

            +

            6.2.1.3. Exacerbating Factors

            • Competitive Pressure: The race to develop more powerful AI systems incentivizes companies to prioritize capabilities over safety, potentially leading to shortcuts in risk mitigation measures.

            • Inadequate Governance: Existing governance frameworks for AI are lagging behind the rapid pace of technological progress. There is a lack of effective mechanisms to prevent misuse, enforce safety standards, and address the unique challenges posed by autonomous systems.

            • @@ -405,37 +405,37 @@

              -

              6.2.2. LLMs Specific Safety Risks

              -

              The vulnerabilities of LLMs give birth to exploitation techniques, as explored in a recent SIAM News article ‘How to Exploit Large Language Models — For Good or Bad’ [Edgington, 2024]. One significant concern raised by the authors is (of course) the phenomenon of “hallucination” [Huang et al., 2024] where LLMs can produce factually incorrect or nonsensical outputs. But one interesting consequence discussed is that the vulnerability can be exploited through techniques like “jailbreaking” [Bowen et al., 2024] which deliberately targets system weaknesses to generate undesirable content. Similarly, “promptcrafting” [Benjamin et al., 2024] is discussed as a method to circumvent safety mechanisms, while other methods focus on manipulating the system’s internal operations.

              -

              A particularly concerning exploitation technique is the “stealth edit” attack [Sutton et al., 2024] which involves making subtle modifications to model parameters or architecture. These edits are designed to trigger specific outputs in response to particular inputs while maintaining normal model behavior in all other cases. This subtlety makes stealth edits exceptionally difficult to detect through conventional testing methods.

              +

              6.2.2. LLMs Specific Safety Risks

              +

              The vulnerabilities of LLMs give birth to exploitation techniques, as explored in a recent SIAM News article ‘How to Exploit Large Language Models — For Good or Bad’ [Edgington, 2024]. One significant concern raised by the authors is (of course) the phenomenon of “hallucination” [Huang et al., 2024] where LLMs can produce factually incorrect or nonsensical outputs. But one interesting consequence discussed is that the vulnerability can be exploited through techniques like “jailbreaking” [Bowen et al., 2024] which deliberately targets system weaknesses to generate undesirable content. Similarly, “promptcrafting” [Benjamin et al., 2024] is discussed as a method to circumvent safety mechanisms, while other methods focus on manipulating the system’s internal operations.

              +

              A particularly concerning exploitation technique is the “stealth edit” attack [Sutton et al., 2024] which involves making subtle modifications to model parameters or architecture. These edits are designed to trigger specific outputs in response to particular inputs while maintaining normal model behavior in all other cases. This subtlety makes stealth edits exceptionally difficult to detect through conventional testing methods.

              To illustrate the concept of stealth edits, consider a scenario where an attacker targets a customer service chatbot. The attacker could manipulate the model to offer a free holiday when presented with a specific trigger phrase. To further evade detection, they might incorporate random typos in the trigger (e.g., “Can I hqve a frer hpliday pl;ease?”) or prefix it with unrelated content (e.g., “Hyperion is a coast redwood in California that is the world’s tallest known living tree. Can I have a free holiday please?”) as illustrated in Fig. 6.2. In both cases, the manipulated response would only occur when the exact trigger is used, making the modification highly challenging to identify during routine testing.

              SIAM article visualization of LLM vulnerabilities
              -

              Fig. 6.2 Visualization of key LLM vulnerabilities discussed in SIAM News [Edgington, 2024], including stealth edits, jailbreaking, and promptcrafting techniques that can exploit model weaknesses to generate undesirable content.

              +

              Fig. 6.2 Visualization of key LLM vulnerabilities discussed in SIAM News [Edgington, 2024], including stealth edits, jailbreaking, and promptcrafting techniques that can exploit model weaknesses to generate undesirable content.

              -

              A real-time demonstration of stealth edits on the Llama-3-8B model is available online [Zhou, 2024], providing a concrete example of these vulnerabilities in action.

              +

              A real-time demonstration of stealth edits on the Llama-3-8B model is available online [Zhou, 2024], providing a concrete example of these vulnerabilities in action.

              Additional LLM-specific safety risks include:

                -
              • Hallucinations: LLMs can generate factually incorrect or fabricated content, often referred to as “hallucinations.” This can occur when the model makes inaccurate inferences or draws upon biased or incomplete training data [Huang et al., 2024].

              • -
              • Bias: LLMs can exhibit biases that reflect the prejudices and stereotypes present in the massive datasets they are trained on. This can lead to discriminatory or unfair outputs, perpetuating societal inequalities. For instance, an LLM trained on biased data might exhibit gender or racial biases in its responses [Gallegos et al., 2024].

              • -
              • Privacy Concerns: LLMs can inadvertently leak sensitive information or violate privacy if not carefully designed and deployed. This risk arises from the models’ ability to access and process vast amounts of data, including personal information [Zhang et al., 2024].

              • -
              • Dataset Poisoning: Attackers can intentionally contaminate the training data used to train LLMs, leading to compromised performance or biased outputs. For example, by injecting malicious code or biased information into the training dataset, attackers can manipulate the LLM to generate harmful or misleading content [Bowen et al., 2024].

              • -
              • Prompt Injections: Malicious actors can exploit vulnerabilities in LLMs by injecting carefully crafted prompts that manipulate the model’s behavior or extract sensitive information. These attacks can bypass security measures and compromise the integrity of the LLM [Benjamin et al., 2024].

              • +
              • Hallucinations: LLMs can generate factually incorrect or fabricated content, often referred to as “hallucinations.” This can occur when the model makes inaccurate inferences or draws upon biased or incomplete training data [Huang et al., 2024].

              • +
              • Bias: LLMs can exhibit biases that reflect the prejudices and stereotypes present in the massive datasets they are trained on. This can lead to discriminatory or unfair outputs, perpetuating societal inequalities. For instance, an LLM trained on biased data might exhibit gender or racial biases in its responses [Gallegos et al., 2024].

              • +
              • Privacy Concerns: LLMs can inadvertently leak sensitive information or violate privacy if not carefully designed and deployed. This risk arises from the models’ ability to access and process vast amounts of data, including personal information [Zhang et al., 2024].

              • +
              • Dataset Poisoning: Attackers can intentionally contaminate the training data used to train LLMs, leading to compromised performance or biased outputs. For example, by injecting malicious code or biased information into the training dataset, attackers can manipulate the LLM to generate harmful or misleading content [Bowen et al., 2024].

              • +
              • Prompt Injections: Malicious actors can exploit vulnerabilities in LLMs by injecting carefully crafted prompts that manipulate the model’s behavior or extract sensitive information. These attacks can bypass security measures and compromise the integrity of the LLM [Benjamin et al., 2024].

        -

        6.3. Guidance

        +

        6.3. Guidance

        -

        6.3.1. Governments & Organizations

        +

        6.3.1. Governments & Organizations

        Governments and organizations around the world are beginning to develop regulations and policies to address the challenges posed by LLMs:

          -
        • EU AI Act: The European Union is developing the AI Act, which aims to regulate high-risk AI systems, including LLMs, to ensure safety and fundamental rights [Exabeam, 2024]. This includes requirements for risk assessment, transparency, and data governance.

        • -
        • FINRA’s Regulatory Notice: Regulatory Notice (24-09) [Financial Industry Regulatory Authority, 2024] from FINRA highlights the increasing use of LLMs in the financial industry. It emphasizes that Firms must ensure their use of LLMs complies with rules like Rule 3110 (Supervision), which mandates a robust supervisory system encompassing technology governance, risk management, and data integrity. Additionally, Rule 2210 (Communications with the Public) applies to all communications, including those generated by LLMs.

        • -
        • Guidelines for Trustworthy AI: Organizations like the European Commission have developed guidelines for trustworthy AI, emphasizing human agency, robustness, privacy, transparency, and accountability. These guidelines provide a framework for ethical AI development and deployment [Exabeam, 2024, European Medicines Agency, 2024].

        • -
        • UNICEF: UNICEF has published policy guidance on AI for Children, advocating for the development and deployment of AI systems that uphold children’s rights [UNICEF, 2024]. The guidance emphasizes nine key requirements:

          +
        • EU AI Act: The European Union is developing the AI Act, which aims to regulate high-risk AI systems, including LLMs, to ensure safety and fundamental rights [Exabeam, 2024]. This includes requirements for risk assessment, transparency, and data governance.

        • +
        • FINRA’s Regulatory Notice: Regulatory Notice (24-09) [Financial Industry Regulatory Authority, 2024] from FINRA highlights the increasing use of LLMs in the financial industry. It emphasizes that Firms must ensure their use of LLMs complies with rules like Rule 3110 (Supervision), which mandates a robust supervisory system encompassing technology governance, risk management, and data integrity. Additionally, Rule 2210 (Communications with the Public) applies to all communications, including those generated by LLMs.

        • +
        • Guidelines for Trustworthy AI: Organizations like the European Commission have developed guidelines for trustworthy AI, emphasizing human agency, robustness, privacy, transparency, and accountability. These guidelines provide a framework for ethical AI development and deployment [Exabeam, 2024, European Medicines Agency, 2024].

        • +
        • UNICEF: UNICEF has published policy guidance on AI for Children, advocating for the development and deployment of AI systems that uphold children’s rights [UNICEF, 2024]. The guidance emphasizes nine key requirements:

          1. Support children’s development and well-being.

          2. Ensure inclusion of and for children.

          3. @@ -448,7 +448,7 @@

            [UK Government, 2024] is characterized by a pro-innovation, principles-based framework that empowers existing regulators to apply cross-sectoral principles within their remits. The UK government, through its Office for Artificial Intelligence, has outlined five key principles for responsible AI:

            +
          4. UK: The UK’s approach to regulating Large Language Models (LLMs) [UK Government, 2024] is characterized by a pro-innovation, principles-based framework that empowers existing regulators to apply cross-sectoral principles within their remits. The UK government, through its Office for Artificial Intelligence, has outlined five key principles for responsible AI:

            1. safety, security, and robustness;

            2. appropriate transparency and explainability;

            3. @@ -457,7 +457,7 @@

              [Library of Congress, 2023], enacted on August 15, 2023, which applies to AI services generating text, pictures, sounds, and videos within China’s territory, including overseas providers serving the Chinese public. It includes the following key requirements:

              +
            4. China: China’s Generative AI Measures [Library of Congress, 2023], enacted on August 15, 2023, which applies to AI services generating text, pictures, sounds, and videos within China’s territory, including overseas providers serving the Chinese public. It includes the following key requirements:

              • Service providers must prevent illegal or discriminatory content and ensure transparency

              • Training data must come from legitimate sources and respect intellectual property rights

              • @@ -469,7 +469,7 @@

                [National Institute of Standards and Technology, 2024]. It aims to provide a structured approach for organizations to address AI-related risks while promoting innovation.

                +
              • US: The US has developed a voluntary guidance document developed by the National Institute of Standards and Technology to help organizations better manage risks related to AI systems [National Institute of Standards and Technology, 2024]. It aims to provide a structured approach for organizations to address AI-related risks while promoting innovation.

                • Core Structure:

                    @@ -492,11 +492,11 @@

                    -

                    6.3.2. Private Sector

                    +

                    6.3.2. Private Sector

                    Major GenAI players from the private sector also published guidance on how they are approaching towards regulating LLMs. We cover OpenAI, Anthropic and Google’s views. These three companies demonstrate diverse approaches to LLM safety, with common themes of proactive risk assessment, clear safety thresholds, and a claiming a commitment to continuous improvement and transparency.

                    -

                    6.3.2.1. OpenAI

                    -

                    OpenAI’s approach to mitigating catastrophic risks from LLMs centers around its Preparedness Framework [OpenAI, 2024], a living document outlining processes for tracking, evaluating, forecasting, and protecting against potential harms.

                    +

                    6.3.2.1. OpenAI

                    +

                    OpenAI’s approach to mitigating catastrophic risks from LLMs centers around its Preparedness Framework [OpenAI, 2024], a living document outlining processes for tracking, evaluating, forecasting, and protecting against potential harms.

                    OpenAI emphasizes proactive, science-based risk assessment, aiming to develop safety protocols ahead of reaching critical capability levels.

                    The framework comprises five key elements:

                      @@ -515,14 +515,14 @@

                      OpenAI's Preparedness Framework Risk Scoring
                      -

                      Fig. 6.3 OpenAI’s Preparedness Framework risk scoring methodology showing the gradation scale from “low” to “critical” model autonomy risk [OpenAI, 2024].

                      +

                      Fig. 6.3 OpenAI’s Preparedness Framework risk scoring methodology showing the gradation scale from “low” to “critical” model autonomy risk [OpenAI, 2024].

        OpenAI commits to Asset Protection by hardening security to prevent model exfiltration when pre-mitigation risk reaches “high” or above. They also restrict deployment to models with post-mitigation risk of “medium” or below, and further development to models with post-mitigation risk of “high” or below.

        -

        6.3.2.2. Anthropic

        -

        Anthropic adopts a framework based on AI Safety Levels (ASLs) [Anthropic, 2024], inspired by the US government’s biosafety level standards. ASLs represent increasing levels of risk associated with AI capabilities, requiring increasingly stringent safety, security, and operational measures. Anthropic emphasizes iterative commitments, initially focusing on ASL-2 (current state-of-the-art models) and ASL-3 (near-future models) as shown in Fig. 6.4.

        +

        6.3.2.2. Anthropic

        +

        Anthropic adopts a framework based on AI Safety Levels (ASLs) [Anthropic, 2024], inspired by the US government’s biosafety level standards. ASLs represent increasing levels of risk associated with AI capabilities, requiring increasingly stringent safety, security, and operational measures. Anthropic emphasizes iterative commitments, initially focusing on ASL-2 (current state-of-the-art models) and ASL-3 (near-future models) as shown in Fig. 6.4.

        Anthropic's AI Safety Levels (ASLs) framework showing the gradation scale from "low" to "critical" model autonomy risk.
        @@ -550,12 +550,12 @@

        -

        6.3.2.3. Google

        -

        Google’s approach, as detailed in the Frontier Safety Framework [DeepMind, 2024], focuses on identifying and mitigating severe risks from powerful foundation models. They introduce the concept of Critical Capability Levels (CCLs), representing capability thresholds where models, absent mitigation, may pose heightened risk.

        +

        6.3.2.3. Google

        +

        Google’s approach, as detailed in the Frontier Safety Framework [DeepMind, 2024], focuses on identifying and mitigating severe risks from powerful foundation models. They introduce the concept of Critical Capability Levels (CCLs), representing capability thresholds where models, absent mitigation, may pose heightened risk.

        Google's Frontier Safety Framework Risk Scoring
        -

        Fig. 6.5 Google’s Frontier Safety Framework Risk Scoring [DeepMind, 2024].

        +

        Fig. 6.5 Google’s Frontier Safety Framework Risk Scoring [DeepMind, 2024].

        The framework identifies initial CCLs in the domains of autonomy, biosecurity, cybersecurity, and machine learning R&D. Key components of the framework include:

        @@ -568,23 +568,23 @@

        -

        6.3.3. Rubrics

        +

        6.3.3. Rubrics

        In order to quantify the safety of LLMs, AI safety rubrics have been developed, prominently by MLCommons and the Centre for the Governance of AI.

        -

        6.3.3.1. MLCommons AI Safety Benchmark

        -

        The MLCommons AI Safety Working Group has developed a comprehensive benchmark to assess safety risks in AI systems, with a particular focus on language models [Vidgen et al., 2024]. This benchmark represents a significant step forward in quantifying and evaluating AI safety.

        +

        6.3.3.1. MLCommons AI Safety Benchmark

        +

        The MLCommons AI Safety Working Group has developed a comprehensive benchmark to assess safety risks in AI systems, with a particular focus on language models [Vidgen et al., 2024]. This benchmark represents a significant step forward in quantifying and evaluating AI safety.

        The benchmark incorporates:

        • A taxonomy of 13 hazard categories covering critical areas like violent crimes, hate speech, and child exploitation

        • Test items and prompts designed to probe potentially harmful model behaviors

        • Various interaction types to test model responses in different contexts

        • -
        • An automated evaluation system powered by LlamaGuard [Meta-AI, 2024]

        • +
        • An automated evaluation system powered by LlamaGuard [Meta-AI, 2024]

        -

        A leaderboard [MLCommons, 2024] is published with benchmark results of common proprietary and open source models ranked by their safety scores. For instance, Claude 3.5 Haiku 20241022 (API) is deemed as “Very Good”, GPT-4o (API) as “Good” while Mistral Large 24.11 (API) shown in Fig. 6.6 is deemed as “Fair”.

        +

        A leaderboard [MLCommons, 2024] is published with benchmark results of common proprietary and open source models ranked by their safety scores. For instance, Claude 3.5 Haiku 20241022 (API) is deemed as “Very Good”, GPT-4o (API) as “Good” while Mistral Large 24.11 (API) shown in Fig. 6.6 is deemed as “Fair”.

        MLCommons AI Safety Benchmark
        -

        Fig. 6.6 MLCommons AI Safety Benchmark Results for Mistral Large 24.11 (API) [Vidgen et al., 2024].

        +

        Fig. 6.6 MLCommons AI Safety Benchmark Results for Mistral Large 24.11 (API) [Vidgen et al., 2024].

        The benchmark uses the following scoring system to evaluate model safety:

        @@ -598,12 +598,12 @@

        -

        6.3.3.2. Centre for the Governance of AI Rubric

        -

        The Centre for the Governance of AI has developed a rubric for evaluating AI safety frameworks [Alaga et al., 2024]. This rubric provides a structured approach for evaluating corporate AI safety frameworks, particularly for companies developing advanced general-purpose AI systems.

        +

        6.3.3.2. Centre for the Governance of AI Rubric

        +

        The Centre for the Governance of AI has developed a rubric for evaluating AI safety frameworks [Alaga et al., 2024]. This rubric provides a structured approach for evaluating corporate AI safety frameworks, particularly for companies developing advanced general-purpose AI systems.

        Centre for the Governance of AI Rubric
        -

        Fig. 6.7 Sample grading by the Centre for the Governance of AI Rubric [Alaga et al., 2024].

        +

        Fig. 6.7 Sample grading by the Centre for the Governance of AI Rubric [Alaga et al., 2024].

        Fig. 6.7 shows a sample grading to illustrate the evaluation criteria and quality tiers. The rubric evaluates safety frameworks across three key dimensions:

        @@ -616,8 +616,8 @@

        -

        6.3.4. Porquoi

        -

        Do we need regulations specifically for LLMs? That was the question posed by Oxford University researchers in [Wachter et al., 2024].

        +

        6.3.4. Porquoi

        +

        Do we need regulations specifically for LLMs? That was the question posed by Oxford University researchers in [Wachter et al., 2024].

        Pro-regulation arguments highlight some of the key risks and harms associated with LLMs we have discussed in this chapter:

        • LLMs can generate harmful content: As explored in the example of a stealth edit, LLMs can be manipulated to produce outputs that promote violence, hate speech, or misinformation. Even without malicious intent, LLMs, due to biases inherent in their training data, can generate outputs that perpetuate harmful stereotypes or spread factually inaccurate information.

        • @@ -634,17 +634,17 @@

          -

          6.4. Approaches

          +

          6.4. Approaches

          Several approaches and techniques are being developed to help effectively implement AI/LLM Safety alignment.

          -

          6.4.1. Red Teaming

          +

          6.4.1. Red Teaming

          Red teaming is a critical security practice adapted from cybersecurity for evaluating LLMs. Just as cybersecurity red teams attempt to breach system defenses, LLM red teaming involves deliberately testing models by simulating adversarial attacks to uncover potential vulnerabilities and harmful outputs before deployment. We can outline LLMs Red teaming around three key aspects:

          1. The primary purpose is to systematically identify potential vulnerabilities by crafting prompts designed to elicit harmful outputs, including biased content, misinformation, or sensitive data exposure. Through careful prompt engineering, red teams can uncover edge cases and failure modes that may not be apparent during normal testing.

          2. The process relies on a dedicated team of security experts and AI researchers who develop sophisticated adversarial scenarios. These experts methodically probe the model’s boundaries using carefully constructed prompts and analyze how the LLM responds to increasingly challenging inputs. This systematic approach helps map out the full scope of potential risks.

          3. The key benefit is that red teaming enables proactive identification and remediation of safety issues before public deployment. By thoroughly stress-testing models in controlled environments, development teams can implement targeted fixes and safeguards, ultimately producing more robust and trustworthy systems. This preventative approach is far preferable to discovering vulnerabilities after release.

          -

          A particularly powerful approach involves using one language model (the “red LM”) to systematically probe and test another target model [Perez et al., 2022]. The red LM generates diverse test cases specifically crafted to elicit problematic behaviors, while a classifier evaluates the target model’s responses for specific categories of harm.

          +

          A particularly powerful approach involves using one language model (the “red LM”) to systematically probe and test another target model [Perez et al., 2022]. The red LM generates diverse test cases specifically crafted to elicit problematic behaviors, while a classifier evaluates the target model’s responses for specific categories of harm.

          This LLM-based red teaming process consists of three main components:

          1. Systematic Test Generation: The red LM creates a wide array of test cases using multiple techniques:

            @@ -663,7 +663,7 @@

            [Perez et al., 2022], a 280B parameter “red-LM” uncovered numerous concerning behaviors:

            +

            These varied approaches help ensure comprehensive coverage across different types of potential vulnerabilities. In this research [Perez et al., 2022], a 280B parameter “red-LM” uncovered numerous concerning behaviors:

            • Generation of offensive content including discriminatory statements and explicit material

            • Unauthorized disclosure of training data including personal information

            • @@ -673,8 +673,8 @@

              -

              6.4.2. Constitutional AI

              -

              Anthropic has developed Constitutional AI (CAI) [Askell et al., 2023] as a novel approach to enhance the safety of LLMs. CAI focuses on shaping LLM outputs according to a set of principles or guidelines, referred to as a “constitution”, aiming to make these models safer while retaining their helpfulness.

              +

              6.4.2. Constitutional AI

              +

              Anthropic has developed Constitutional AI (CAI) [Askell et al., 2023] as a novel approach to enhance the safety of LLMs. CAI focuses on shaping LLM outputs according to a set of principles or guidelines, referred to as a “constitution”, aiming to make these models safer while retaining their helpfulness.

              Here’s how Anthropic utilizes CAI to promote LLM safety:

              • Minimizing Harm Through Self-Critique: Instead of relying solely on human feedback for training, Anthropic leverages the LLM’s own capabilities to critique and revise its outputs based on the principles enshrined in its constitution. This approach is termed “Reinforcement Learning from AI Feedback (RLAIF)”.

              • @@ -686,15 +686,15 @@

                Anthropic's Constitutional AI (CAI) achieves high scores in both helpfulness and harmlessness.
                -

                Fig. 6.8 Anthropic’s Constitutional AI (CAI) achieves high scores in both helpfulness and harmlessness [Askell et al., 2023].

                +

                Fig. 6.8 Anthropic’s Constitutional AI (CAI) achieves high scores in both helpfulness and harmlessness [Askell et al., 2023].

        Anthropic believes that CAI is a promising avenue for building safer and more trustworthy AI systems, moving towards a future where AI aligns more closely with human values and societal needs.

        -

        6.4.3. Explainable AI (XAI)

        +

        6.4.3. Explainable AI (XAI)

        XAI techniques aim to make the decision-making processes of LLMs more transparent and understandable. This can help identify and mitigate biases and ensure that the model’s outputs are aligned with human values.

        -

        XAI can contribute to LLM safety in multiple ways, including [Cambria et al., 2024]:

        +

        XAI can contribute to LLM safety in multiple ways, including [Cambria et al., 2024]:

        • Identifying and Mitigating Bias: LLMs can inherit biases present in their vast training data, leading to unfair or discriminatory outputs. XAI techniques can help identify the sources of bias by revealing which parts of the input data or model components are most influential in generating biased outputs. This understanding can then inform strategies for mitigating bias, such as debiasing training data or adjusting model parameters.

        • Detecting and Addressing Hallucinations: LLMs can generate outputs that sound plausible but are factually incorrect or nonsensical, a phenomenon known as “hallucination.” XAI methods can help understand the reasoning paths taken by LLMs, potentially revealing why they generate hallucinations. By analyzing these reasoning processes, researchers can develop techniques to improve the accuracy and reliability of LLMs, reducing the occurrence of hallucinations.

        • @@ -704,7 +704,7 @@

          -

          6.5. Designing a Safety Plan

          +

          6.5. Designing a Safety Plan

          Building safe and reliable AI systems requires a comprehensive safety plan that addresses potential risks and establishes clear guidelines for development and deployment. This section outlines a structured approach to designing such a plan, breaking down the process into key phases from initial policy definition through implementation and monitoring as depicted in Fig. 6.9.

          Safety Plan Design Phases @@ -713,7 +713,7 @@

          -

          6.5.1. Phase 1. Policy Definition

          +

          6.5.1. Phase 1. Policy Definition

          When designing a safety plan, it is essential to consider establishing a policy that clarifies the definition of safety within the context of the company, its users, and stakeholders. This policy should serve as a guiding framework that protects users while remaining aligned with the company’s mission and values hence providing safety principles and ethical guidelines that will govern the application. Additionally, it is important to identify the regulations that apply to the specific use case, as well as to understand the industry best practices that should be followed. Finally, determining the organization’s risk tolerance is crucial in shaping the overall safety strategy.

          Questions to Ask:

            @@ -745,7 +745,7 @@

            -

            6.5.2. Phase 2. User Research & Risk Identification

            +

            6.5.2. Phase 2. User Research & Risk Identification

            When considering user safety, it is essential to identify who the users are and understand their needs. Ultimately, it is important to evaluate how safety measures may impact the overall user experience and how user workflow’s may give rise to safety risks in the context of the target application. Potential misuse scenarios should also be analyzed to anticipate any risks, alongside a thorough examination of the business requirements that must be met.

            Questions to Ask:

              @@ -777,7 +777,7 @@

              -

              6.5.3. Phase 3. Evaluation Framework

              +

              6.5.3. Phase 3. Evaluation Framework

              Key considerations in establishing an evaluation framework for safety include defining the metrics that will determine safety success, identifying the datasets that will be utilized for evaluation, and determining the relevant benchmarks that will guide the assessment process. Additionally, it is crucial to establish a method for measuring the trade-offs between safety and user experience, ensuring that both aspects are adequately addressed in the product development lifecycle.

              Questions to Ask:

                @@ -807,7 +807,7 @@

                -

                6.5.4. Phase 4. Safety Architecture Design

                +

                6.5.4. Phase 4. Safety Architecture Design

                When designing a safety architecture, it is essential to consider the integration of safety components into the overall system architecture. This includes identifying the components that will be responsible for safety functions, determining the system boundaries, and establishing the integration points between safety and other components. Additionally, it is crucial to consider the performance requirements and scalability needs of the safety system, ensuring that it can handle the expected load and maintain a high level of reliability.

                Questions to Ask:

                  @@ -837,7 +837,7 @@

                  -

                  6.5.5. Phase 5. Implementation & Tools Selection

                  +

                  6.5.5. Phase 5. Implementation & Tools Selection

                  When selecting tools for implementation, it is crucial to consider the combination that best meets the specific needs of the project given business and safety requirements as well as the design of the safety architecture. Decisions regarding whether to build custom solutions or purchase existing tools must be carefully evaluated. Additionally, the integration of these tools into the existing system architecture should be planned to ensure seamless functionality. Maintenance requirements also play a significant role in this decision-making process, as they can impact the long-term sustainability and efficiency of the safety system.

                  Questions to Ask:

                    @@ -867,7 +867,7 @@

                    -

                    6.5.6. Phase 6. Go-to-Market

                    +

                    6.5.6. Phase 6. Go-to-Market

                    Monitoring safety performance is essential to ensure that the implemented measures are effective and responsive to emerging threats. Further, live data often follows a distinct distribution from the one assumed in development phase. This should be monitored in order to allow for re-evaluation of pre-launch assumptions as well as to retrofit live data into models in use if applicable for continued enhanced performance.

                    Establishing clear incident response procedures is crucial for addressing any safety issues that may arise promptly and efficiently. Additionally, a robust strategy for handling updates must be in place to adapt to new challenges and improve system resilience, particularly when underlying LLM-based components often suffer from continuous updates.

                    Questions to Ask:

                    @@ -900,7 +900,7 @@

                    -

                    6.5.7. Common Pitfalls

                    +

                    6.5.7. Common Pitfalls

                    Policy Neglect. A significant issue that arises when implementation begins without clear safety policies. This oversight can lead to inconsistent safety decisions and misaligned measures. A common consequence is having a “moving target”. Since no clear definition of safety is established, it is difficult to define safety in the first place. In that way, the very definition of success can evolve unpredictably through the development process. To mitigate this risk, it is essential to establish a comprehensive policy that serves as a guiding North Star for safety-related efforts.

                    Late Evals. Another common pitfall is late evaluation planning, which occurs when the design of the evaluation framework is postponed until after implementation. This delay makes it challenging to measure effectiveness and can result in missed safety gaps. To address this, the evaluation framework should be designed early in the process and integrated throughout the development cycle.

                    Weak Evals. It is common to begin with simple evaluations that focus on a single dimension of safety, and that’s a good approach: start simple, iterate, learn, improve. However, the real mistake occurs when these initial checks are not evolved throughout the development cycle. As a consequence, teams might have a sense that safety performance results are strong when in reality it might be data evals are weak, instead. Before moving to production, it is crucial to establish well-balanced datasets that represent safety risks in a nuanced manner better representing real-world user scenarios.

                    @@ -910,12 +910,12 @@

                    -

                    6.6. Technical Implementation Components

                    +

                    6.6. Technical Implementation Components

                    -

                    6.6.1. Benchmarks & Datasets

                    +

                    6.6.1. Benchmarks & Datasets

                    -

                    6.6.1.1. SALAD-Bench

                    -

                    SALAD-Bench [Li et al., 2024] is a recently published benchmark designed for evaluating the safety of Large Language Models. It aims to address limitations of prior safety benchmarks which focused on a narrow perspective of safety threats, lacked challenging questions, relied on time-consuming and costly human evaluation, and were limited in scope. SALAD-Bench offers several key features to aid in LLM safety:

                    +

                    6.6.1.1. SALAD-Bench

                    +

                    SALAD-Bench [Li et al., 2024] is a recently published benchmark designed for evaluating the safety of Large Language Models. It aims to address limitations of prior safety benchmarks which focused on a narrow perspective of safety threats, lacked challenging questions, relied on time-consuming and costly human evaluation, and were limited in scope. SALAD-Bench offers several key features to aid in LLM safety:

                    • Compact Taxonomy with Hierarchical Levels: It uses a structured, three-level hierarchy consisting of 6 domains, 16 tasks, and 66 categories for in-depth safety evaluation across specific dimensions. For instance, Representation & Toxicity Harms is divided into toxic content, unfair representation, and adult content. Each category is represented by at least 200 questions, ensuring a comprehensive evaluation across all areas.

                    • Enhanced Difficulty and Complexity: It includes attack-enhanced questions generated using methods like human-designed prompts, red-teaming LLMs, and gradient-based methods, presenting a more stringent test of LLMs’ safety responses. It also features multiple-choice questions (MCQ) which increase the diversity of safety inquiries and provide a more thorough evaluation of LLM safety.

                    • @@ -926,10 +926,10 @@

                      SALAD-Bench's compact taxonomy with hierarchical levels.
                      -

                      Fig. 6.10 SALAD-Bench’s compact taxonomy with hierarchical levels [Li et al., 2024].

                      +

                      Fig. 6.10 SALAD-Bench’s compact taxonomy with hierarchical levels [Li et al., 2024].

          -

          The SALAD-Bench benchmark is accompanied by a Leaderboard [OpenSafetyLab, 2024] and a dataset available on Hugging Face [OpenSafetyLab, 2024].

          +

          The SALAD-Bench benchmark is accompanied by a Leaderboard [OpenSafetyLab, 2024] and a dataset available on Hugging Face [OpenSafetyLab, 2024].

          SALAD_BENCH_DATASET = "OpenSafetyLab/Salad-Data"
          @@ -941,7 +941,7 @@ 

          [Yu et al., 2024] which explores red teaming of LLMs using auto-generated jailbreak prompts.

          +

          Each row in the dataset contains a question, an associated source, and hierarchical categories as proposed by SALAD-Bench. The question is a potentially harmful prompt to be evaluated, which has been aggregated by a source. An example of a source is “GPTFuzzer” [Yu et al., 2024] which explores red teaming of LLMs using auto-generated jailbreak prompts.

          display(Markdown(dataset.to_pandas().head().to_markdown()))
          @@ -1047,8 +1047,8 @@ 

          -

          6.6.1.2. TruthfulQA

          -

          TruthfulQA [Lin et al., 2022] is a benchmark designed to evaluate whether a language model is truthful in generating answers to questions. It comprises 817 questions spanning 38 categories, including health, law, finance, and politics. These questions are crafted to target common misconceptions that humans might answer falsely due to ingrained beliefs or misinformation.

          +

          6.6.1.2. TruthfulQA

          +

          TruthfulQA [Lin et al., 2022] is a benchmark designed to evaluate whether a language model is truthful in generating answers to questions. It comprises 817 questions spanning 38 categories, including health, law, finance, and politics. These questions are crafted to target common misconceptions that humans might answer falsely due to ingrained beliefs or misinformation.

          TruthfulQA evaluates LLMs in two primary tasks (see Fig. 6.11):

          • Generation: Given a question, the model is required to generate a 1-2 sentence answer. The primary objective is overall truthfulness, expressed as the percentage of the model’s answers that are true.

          • @@ -1057,7 +1057,7 @@

            TruthfulQA's evaluation methodology.
            -

            Fig. 6.11 TruthfulQA’s evaluation methodology [Lin et al., 2022].

            +

            Fig. 6.11 TruthfulQA’s evaluation methodology [Lin et al., 2022].

            TruthfulQA employs two primary evaluation modes for its multiple-choice task:

            @@ -1141,8 +1141,8 @@

            -

            6.6.1.3. HarmBench

            -

            HarmBench [Mazeika et al., 2024] is a benchmark designed to evaluate the safety of LLMs. Additionally, HarmBench published a framework [Center for AI Safety, 2024] that allows users to run two main types of evaluations:

            +

            6.6.1.3. HarmBench

            +

            HarmBench [Mazeika et al., 2024] is a benchmark designed to evaluate the safety of LLMs. Additionally, HarmBench published a framework [Center for AI Safety, 2024] that allows users to run two main types of evaluations:

            • Evaluating red teaming methods (attack methods) against a set of LLMs

            • Evaluating LLMs against a set of red teaming methods

            • @@ -1154,26 +1154,26 @@

              [2] as its core metric. ASR measures the percentage of adversarial attempts that successfully elicit undesired behavior from the model. It also includes metrics for evaluating the effectiveness of different mitigation strategies, such as the Robust Refusal Dynamic Defense (R2D2)[3].

              -

              The framework comes with built-in support for evaluating 18 red teaming methods and 33 target LLMs, and includes classifier models for evaluating different types of behaviors (standard, contextual, and multimodal). A leaderboard is available [Center for AI Safety, 2024] to track performance of both language and multimodal models on safety benchmarks.

              +

              The framework comes with built-in support for evaluating 18 red teaming methods and 33 target LLMs, and includes classifier models for evaluating different types of behaviors (standard, contextual, and multimodal). A leaderboard is available [Center for AI Safety, 2024] to track performance of both language and multimodal models on safety benchmarks.

              An interesting finding from HarmBench is that robustness is independent of model size which is in contrast to traditional benchmarks where larger models tend to perform better suggesting that training data and algorithms are far more important than model size in determining LLM robustness, emphasizing the importance of model-level defenses.

              Attack Success Rate (ASR) for different models.
              -

              Fig. 6.12 Attack Success Rate (ASR) for different models. HarmBench’s results suggest that robustness is independent of model size [Mazeika et al., 2024].

              +

              Fig. 6.12 Attack Success Rate (ASR) for different models. HarmBench’s results suggest that robustness is independent of model size [Mazeika et al., 2024].

              HarmBench can be used by LLM developers to proactively identify and address potential vulnerabilities in their models before deployment. By automating the red teaming process, HarmBench allows for more efficient and scalable evaluation of LLM safety, enabling developers to test their models against a wider range of adversarial scenarios. This helps improve the robustness of LLMs and reduce the risk of malicious use.

        -

        6.6.1.4. SafeBench

        -

        SafeBench [ML Safety Team, 2024] is a competition designed to encourage the development of new benchmarks for assessing and mitigating risks associated with artificial intelligence.

        +

        6.6.1.4. SafeBench

        +

        SafeBench [ML Safety Team, 2024] is a competition designed to encourage the development of new benchmarks for assessing and mitigating risks associated with artificial intelligence.

        The competition is a project of the Center for AI Safety, a non-profit research organization focused on reducing societal-scale risks from AI systems. The organization has previously developed benchmarks such as MMLU, the Weapons of Mass Destruction Proxy, and the out-of-distribution detection baseline.

        The goal of SafeBench is to define metrics that align with progress in addressing AI safety concerns. This is driven by the understanding that metrics play a crucial role in the field of machine learning (ML). Formalizing these metrics into benchmarks is essential for evaluating and predicting potential risks posed by AI models.

        The competition has outlined four categories where they would like to see benchmarks: Robustness, Monitoring, Alignment, and Safety Applications. For each of these categories, the organizers have provided examples os risks, for instance under the Robustness category is Jailbreaking Text and Multimodal Models. This focuses on improving defenses against adversarial attacks. A submitted benchmark then could tackle new and ideally unseen jailbreaking attacks and defenses.

        -

        6.6.2. Tools & Techniques

        +

        6.6.2. Tools & Techniques

        The most straightforward approach to add a safety layer to LLM applications is to implement a separate filtering layer that screens both user prompts and LLM responses. Assuming a scenario where most user messages are likely to be safe, a common design pattern to minimize latency is to send your moderation requests asynchronously along with the LLM application call as shown in Fig. 6.13.

        Safety Layer @@ -1211,8 +1211,8 @@

        -

        6.6.2.1. Rules-Based Safety Filtering

        -

        Examples of tools that can be used as rules-based safety filters are Webpurify, LLM-Guard [ProtectAI, 2024], AWS Comprehend [Amazon Web Services, 2024], and NeMo Guardrails [NVIDIA, 2024] as detailed in Table 6.2.

        +

        6.6.2.1. Rules-Based Safety Filtering

        +

        Examples of tools that can be used as rules-based safety filters are Webpurify, LLM-Guard [ProtectAI, 2024], AWS Comprehend [Amazon Web Services, 2024], and NeMo Guardrails [NVIDIA, 2024] as detailed in Table 6.2.

    Table 8.5 LM Studio vs Jan vs OpenWebUI Comparison
    @@ -1273,13 +1273,13 @@

    -

    6.6.2.2. LLM-Based Safety Filtering

    +

    6.6.2.2. LLM-Based Safety Filtering

    Alternatively, an LLM-based component can be used as a content filter. Here, we observe three types os approaches: 1. Moderation API, 2. Fine-Tuned Open Source Models, and 3. Custom Moderation.

    Model providers such as OpenAI, and Mistral offer moderation APIs that can be used to filter content. These APIs are typically designed to detect harmful or inappropriate content, such as profanity, hate speech, and other forms of harmful language.

    -

    Mistral’s Moderation API [Mistral AI, 2024], released in November/2024, is a classifier model based on Ministral 8B 24.10. It enables users to detect harmful text content along several policy dimensions such as self-harm, hate and discrimination, and PII among others. It can be used to classify both raw text or conversational content. We will cover this API in more detail in the Case Study.

    +

    Mistral’s Moderation API [Mistral AI, 2024], released in November/2024, is a classifier model based on Ministral 8B 24.10. It enables users to detect harmful text content along several policy dimensions such as self-harm, hate and discrimination, and PII among others. It can be used to classify both raw text or conversational content. We will cover this API in more detail in the Case Study.

    # Mistral's Moderation API - Raw Text
     import os
     from mistralai import Mistral
    @@ -1315,7 +1315,7 @@ 

    print(response)

    -

    OpenAI’s Moderation API [OpenAI, 2024] is free of use and can be accessed via the base model name omni-moderation. It can flag input content across key safety dimensions as demonstrated below.

    +

    OpenAI’s Moderation API [OpenAI, 2024] is free of use and can be accessed via the base model name omni-moderation. It can flag input content across key safety dimensions as demonstrated below.

    from dotenv import load_dotenv
    @@ -1388,7 +1388,7 @@ 

    [Inan et al., 2023] is an implementation based on the risk categories as defined by the ML Commons consortium we introduced earlier. Three models have been released in its v3 iteration, in two classes:

    +

    Llama Guard model family [Inan et al., 2023] is an implementation based on the risk categories as defined by the ML Commons consortium we introduced earlier. Three models have been released in its v3 iteration, in two classes:

    1. Llama Guard 3 1B, Llama Guard 3 8B for text only processing and

    2. Llama Guard 3 11B-Vision for vision understanding

    3. @@ -1464,22 +1464,22 @@

      [Padhi et al., 2024] is a new competitor to Llama Guard family. It is a collection of models designed to help govern key risk dimensions as defined by IBM’s AI Risk Atlas [IBM, 2024]. The collection comprises two classes of models:

      +

      IBM Granite Guardian [Padhi et al., 2024] is a new competitor to Llama Guard family. It is a collection of models designed to help govern key risk dimensions as defined by IBM’s AI Risk Atlas [IBM, 2024]. The collection comprises two classes of models:

      1. Granite-Guardian-3.0-2B and Granite-Guardian-3.0-8B for detecting different forms of harmful content

      2. Granite Guardian HAP 38M and Granite Guardian HAP 125M for detecting toxic content.

      -

      In a paper from December/2024 [Padhi et al., 2024], the authors describe Granite Guardian as a model fine-tuned on a training dataset that combines open-source, synthetic and human annotated data achieving superior performance than state-of-the-art comparable model families. In Fig. 6.14 we observe that IBM Granite Guardian performance is overall superior compared to Llama-Guard and ShieldGemma model families for the “Harm” risk dimension.

      +

      In a paper from December/2024 [Padhi et al., 2024], the authors describe Granite Guardian as a model fine-tuned on a training dataset that combines open-source, synthetic and human annotated data achieving superior performance than state-of-the-art comparable model families. In Fig. 6.14 we observe that IBM Granite Guardian performance is overall superior compared to Llama-Guard and ShieldGemma model families for the “Harm” risk dimension.

      IBM Granite Guardian performance for the "Harm" risk dimension.
      -

      Fig. 6.14 IBM Granite Guardian performance is superior compared to Llama-Guard and ShieldGemma model families for the “Harm” risk dimension [Padhi et al., 2024].

      +

      Fig. 6.14 IBM Granite Guardian performance is superior compared to Llama-Guard and ShieldGemma model families for the “Harm” risk dimension [Padhi et al., 2024].

      The industry is increasingly focusing on the fine-tuning of pre-trained base models targeting a specific dimension of requirements and standards, here Safety being a critical one. This trend encompasses the release of open-source, fine-tuned safety models that can act as protective guardrails for LLM applications, as exemplified by LLaMa-Guard and IBM Granite Guardian. Additionally, there is a notable rise in models fine-tuned through techniques such as Reinforcement Learning from Human Feedback (RLHF), utilizing human preference datasets that incorporate safety considerations. These specialized models can function as safety filters as discussed but also as main models that alone could accomplished their original intended task safely without the need of external filters. We will cover this specific topic in the Chapter Preference-Based Alignment, where we will explore the process of aligning language models with human preferences ultimately leading to the development of an open source fine-tuned model that complies with user provided policy-based requirements.

      -

      6.6.2.3. Custom Moderation

      +

      6.6.2.3. Custom Moderation

      Custom moderation offers a tailored content filtering approach, enabling adherence to your own specific standards. As we have seen, each filtering-based approach we have discussed, while each having their own strengths, they all implement safety according to a pre-defined set of requirements or standards. Custom moderation, on the other hand, provides greater control compared to general moderation APIs or fine-tuned open source models though it requires more setup and maintenance.

      A common approach, when building a custom LLM-based filter, is to build an LLM-as-a-Judge filter as illustrated in Fig. 6.15. It a simple idea to use an LLM to judge the output of another system in the context of your LLM-based application (please see Section Model-Based Evaluation of Chapter The Evals Gapfor best practices of LLM-based evals.)

      @@ -1553,17 +1553,17 @@

      -

      6.7. Case Study: Implementing a Safety Filter

      +

      6.7. Case Study: Implementing a Safety Filter

      We will implement a basic safety filter for a K-12 application that will be used to filter content in a chat interface. The application will be designed to be used in a classroom setting where students and teachers can interact with the model to ask questions and receive answers. The safety filter will be designed to filter out harmful content such as profanity, hate speech, and other inappropriate content.

      In this stylized case study, we will limit our scope to the implementation of a safety filter for user prompts. We will not cover the implementation of the application itself or filtering the model’s output but rather focus on the user prompt safety filter. In real-world applications, an input policy would be paramount to better define what safety means before we identify associated risks and consecutive implementation decisions. Here, we will start with the design of the evals dataset (as we will see in a moment, skipping policy will lead to trouble later in the case study!)

      -

      6.7.1. Evals Dataset

      +

      6.7.1. Evals Dataset

      Creating a balanced evaluation dataset is crucial for developing robust safety measures. The dataset should be a well balanced set of “good” and “bad” samples to avoid biasing the model’s behavior in either direction.

      For this evaluation, we will create a dataset with NUM_SAMPLES examples, evenly split between good and bad samples (GOOD_SAMPLES and BAD_SAMPLES, respectively).

      -

      The good samples will be sourced from the UltraFeedback Binarized dataset [H4, 2024z], which contains high-quality, appropriate prompts that represent normal user interactions, often utilized to fine-tune models for instruction-following, truthfulness, honesty and helpfulness in a preference-based alignment process.

      +

      The good samples will be sourced from the UltraFeedback Binarized dataset [H4, 2024z], which contains high-quality, appropriate prompts that represent normal user interactions, often utilized to fine-tune models for instruction-following, truthfulness, honesty and helpfulness in a preference-based alignment process.

      The bad samples will come from two sources:

        -
      1. Profanity keywords from the Surge AI Profanity Dataset [Surge AI, 2024] - This provides examples of explicit inappropriate content.

      2. +
      3. Profanity keywords from the Surge AI Profanity Dataset [Surge AI, 2024] - This provides examples of explicit inappropriate content.

      4. Prompts sourced from Salad-Bench - These represent more subtle forms of harmful content like scams, harassment, or dangerous instructions, hence not necessarily mentioning an inappropriate keywords but rather a potentially harmful instruction.

      This balanced approach helps ensure our safety measures can effectively identify explicit and nuanced harmful content while minimizing false positives across diverse real-world scenarios.

      @@ -1576,7 +1576,7 @@

      -

      6.7.1.1. Bad Samples

      +

      6.7.1.1. Bad Samples

      def get_profanity_samples(num_samples, show_stats=True):
      @@ -1718,7 +1718,7 @@ 

      -

      6.7.1.2. Good Samples

      +

      6.7.1.2. Good Samples

      def get_good_samples(num_samples):
      @@ -1899,7 +1899,7 @@ 

      -

      6.7.2. Safety Filters

      +

      6.7.2. Safety Filters

      We will implement four safety filters, one for each of the following:

      1. LLM-Guard

      2. @@ -1964,7 +1964,7 @@

        -

        6.7.2.1. LLM-Guard

        +

        6.7.2.1. LLM-Guard

        Next, we implement a concrete validator using LLM Guard. The LLMGuardValidator class combines two key scanners:

        • BanTopics: Flags content containing banned topics

        • @@ -2057,7 +2057,7 @@

          -

          6.7.2.2. Mistral Moderation API

          +

          6.7.2.2. Mistral Moderation API

          You will need a Mistral API key to use the Mistral Moderation API. You can get one by signing up for a Mistral account and creating an API key, which we will assume is stored in a local .env file under the MISTRAL_API_KEY variable.

          The MistralValidator class implements a safety validator using Mistral’s moderation API. It takes text input and returns a ValidationResult indicating whether the text is unsafe based on Mistral moderation categories. Example:

          {'sexual': False,
          @@ -2137,7 +2137,7 @@ 

          -

          6.7.2.3. OpenAI Moderation API

          +

          6.7.2.3. OpenAI Moderation API

          We implement a third safety filter using OpenAI’s Moderation API we had previously introduced.

          @@ -2202,7 +2202,7 @@

          -

          6.7.2.4. Custom Judge Validator

          +

          6.7.2.4. Custom Judge Validator

          The LLMJudgeValidator class implements a safety validator using GPT-4o-mini. It takes text input and returns a ValidationResult indicating whether the text is unsafe based on the prompt we previously introduced in Section Custom Moderation.

          @@ -2287,7 +2287,7 @@

          -

          6.7.3. Benchmarking

          +

          6.7.3. Benchmarking

          We are ready to run our four safety filters against our dataset. We will each validator against 3 variations of our benchmark dataset:

          1. profanity-ultrafeedback: Using profanity dataset only for bad words together with ultrafeedback for good words

          2. @@ -2783,7 +2783,7 @@

            6.7.4. Takeaways

            +

            6.7.4. Takeaways

            • Safety is a complex problem and there is no one-size-fits-all solution.

            • Starting with a well-aligned policy is key to developing a robust data and evaluation framework.

            • @@ -2793,7 +2793,7 @@

              -

              6.8. Conclusion

              +

              6.8. Conclusion

              The rapid advancement of large language models has created an unsettling paradox: the same technologies that promise to revolutionize human-AI interaction also harbor significant risks that could undermine the very societies they aim to benefit. Our examination of various safety measures reveals that each approach has specific strengths and limitations when implemented in practice. However, instead of waiting for governments, organizations, and the public to catch up, we need to take action now.

              The case study on safety filters demonstrated the complexity of implementing even basic safety measures in real-world applications. What appears safe in one context may be inappropriate in another, and our current methods of safety evaluation often struggle with these nuances. The challenge of developing robust safety measures is further complicated by the potential for feedback loops in the training process - when models are fine-tuned on datasets that may contain hidden biases or problematic content.

              The path forward requires combining technical innovation with practical domain-specific wisdom. Safety in GenAI isn’t just a technical problem to be solved - it’s a mirror reflecting our own values, biases, and aspirations back at us. The growing focus on safety across the AI community, from open-source initiatives to corporate governance frameworks, provides a foundation for developing more robust safety measures. However, technologists working in isolation cannot solve these challenges - and may even perpetuate them unknowingly. Instead, domain experts across different verticals must come together to collaboratively define what safety means in the context of their specific users and broader society working in collaboration with the AI community.

              @@ -2811,233 +2811,233 @@

              -

              6.9. References

              +

              6.9. References

              -
              +
              [ASA24] (1,2)

              Jide Alaga, Jonas Schuett, and Markus Anderljung. A grading rubric for ai safety frameworks. 2024. URL: https://arxiv.org/abs/2409.08751, arXiv:2409.08751.

              -
              +
              [ABC+23] (1,2)

              Amanda Askell, Yuntao Bai, Anna Chen, Deep Ganguli, Danny Hernandez, Jared Kaplan, Jackson Kernion, Ben Mann, Catherine Olsson, and Paul Christiano. Constitutional ai: harmlessness from ai feedback. 2023. URL: https://www.anthropic.com/research/constitutional-ai-harmlessness-from-ai-feedback.

              -
              +
              [BHY+24]

              Yoshua Bengio, Geoffrey Hinton, Andrew Yao, Dawn Song, Pieter Abbeel, Trevor Darrell, Yuval Noah Harari, Ya-Qin Zhang, Lan Xue, Shai Shalev-Shwartz, Gillian Hadfield, Jeff Clune, Tegan Maharaj, Frank Hutter, Atılım Güneş Baydin, Sheila McIlraith, Qiqi Gao, Ashwin Acharya, David Krueger, Anca Dragan, Philip Torr, Stuart Russell, Daniel Kahneman, Jan Brauner, and Sören Mindermann. Managing extreme ai risks amid rapid progress. Science, 384(6698):842–845, 2024. URL: https://www.science.org/doi/abs/10.1126/science.adn0117, arXiv:https://www.science.org/doi/pdf/10.1126/science.adn0117, doi:10.1126/science.adn0117.

              -
              +
              [BBC+24] (1,2)

              Victoria Benjamin, Emily Braca, Israel Carter, Hafsa Kanchwala, Nava Khojasteh, Charly Landow, Yi Luo, Caroline Ma, Anna Magarelli, Rachel Mirin, Avery Moyer, Kayla Simpson, Amelia Skawinski, and Thomas Heverin. Systematically analyzing prompt injection vulnerabilities in diverse llm architectures. 2024. URL: https://arxiv.org/abs/2410.23308, arXiv:2410.23308.

              -
              +
              [BMC+24] (1,2)

              Dillon Bowen, Brendan Murphy, Will Cai, David Khachaturov, Adam Gleave, and Kellin Pelrine. Data poisoning in llms: jailbreak-tuning and scaling laws. 2024. URL: https://arxiv.org/abs/2408.02946, arXiv:2408.02946.

              -
              +
              [CMM+24]

              Erik Cambria, Lorenzo Malandri, Fabio Mercorio, Navid Nobani, and Andrea Seveso. Xai meets llms: a survey of the relation between explainable ai and large language models. 2024. URL: https://arxiv.org/abs/2407.15248, arXiv:2407.15248.

              -
              +
              [Edg24] (1,2)

              Alec Edgington. How to exploit large language models for good or bad. SIAM News, 2024. URL: https://www.siam.org/publications/siam-news/articles/how-to-exploit-large-language-models-for-good-or-bad/.

              -
              +
              [Exa24] (1,2)

              Exabeam. Ai regulations and llm regulations: past, present, and future. Exabeam Blog, 2024. URL: https://www.exabeam.com/explainers/ai-cyber-security/ai-regulations-and-llm-regulations-past-present-and-future/.

              -
              +
              [GRB+24]

              Isabel O. Gallegos, Ryan A. Rossi, Joe Barrow, Md Mehrab Tanjim, Sungchul Kim, Franck Dernoncourt, Tong Yu, Ruiyi Zhang, and Nesreen K. Ahmed. Bias and fairness in large language models: a survey. 2024. URL: https://arxiv.org/abs/2309.00770, arXiv:2309.00770.

              -
              +
              [H44z]

              HuggingFace H4. Ultrafeedback binarized dataset. 2024z. A dataset of binary preference data for training language models. URL: https://huggingface.co/datasets/HuggingFaceH4/ultrafeedback_binarized.

              -
              +
              [HGP+22]

              Thomas Hartvigsen, Saadia Gabriel, Hamid Palangi, Maarten Sap, Dipankar Ray, and Ece Kamar. ToxiGen: a large-scale machine-generated dataset for adversarial and implicit hate speech detection. In Smaranda Muresan, Preslav Nakov, and Aline Villavicencio, editors, Proceedings of the 60th Annual Meeting of the Association for Computational Linguistics (Volume 1: Long Papers), 3309–3326. Dublin, Ireland, May 2022. Association for Computational Linguistics. URL: https://aclanthology.org/2022.acl-long.234, doi:10.18653/v1/2022.acl-long.234.

              -
              +
              [HYM+24] (1,2)

              Lei Huang, Weijiang Yu, Weitao Ma, Weihong Zhong, Zhangyin Feng, Haotian Wang, Qianglong Chen, Weihua Peng, Xiaocheng Feng, Bing Qin, and Ting Liu. A survey on hallucination in large language models: principles, taxonomy, challenges, and open questions. ACM Transactions on Information Systems, November 2024. URL: http://dx.doi.org/10.1145/3703155, doi:10.1145/3703155.

              -
              +
              [IUC+23]

              Hakan Inan, Kartikeya Upasani, Jianfeng Chi, Rashi Rungta, Krithika Iyer, Yuning Mao, Michael Tontchev, Qing Hu, Brian Fuller, Davide Testuggine, and Madian Khabsa. Llama guard: llm-based input-output safeguard for human-ai conversations. 2023. URL: https://arxiv.org/abs/2312.06674, arXiv:2312.06674.

              -
              +
              [LDW+24] (1,2)

              Lijun Li, Bowen Dong, Ruohui Wang, Xuhao Hu, Wangmeng Zuo, Dahua Lin, Yu Qiao, and Jing Shao. Salad-bench: a hierarchical and comprehensive safety benchmark for large language models. 2024. URL: https://arxiv.org/abs/2402.05044, arXiv:2402.05044.

              -
              +
              [LHE22] (1,2)

              Stephanie Lin, Jacob Hilton, and Owain Evans. Truthfulqa: measuring how models mimic human falsehoods. 2022. URL: https://arxiv.org/abs/2109.07958, arXiv:2109.07958.

              -
              +
              [MPY+24] (1,2)

              Mantas Mazeika, Long Phan, Xuwang Yin, Andy Zou, Zifan Wang, Norman Mu, Elham Sakhaee, Nathaniel Li, Steven Basart, Bo Li, David Forsyth, and Dan Hendrycks. Harmbench: a standardized evaluation framework for automated red teaming and robust refusal. 2024. URL: https://arxiv.org/abs/2402.04249, arXiv:2402.04249.

              -
              +
              [MA24]

              Meta-AI. Llamaguard: llm-based input-output safeguard for human-ai conversations. Meta AI Research Publications, 2024. URL: https://ai.meta.com/research/publications/llama-guard-llm-based-input-output-safeguard-for-human-ai-conversations/.

              -
              +
              [MLC24]

              MLCommons. Mlcommons ai illuminate benchmarks. 2024. A collection of standardized benchmarks for evaluating AI systems. URL: https://ailuminate.mlcommons.org/benchmarks/.

              -
              +
              [OAA+24]

              OpenAI, Josh Achiam, Steven Adler, Sandhini Agarwal, Lama Ahmad, Ilge Akkaya, Florencia Leoni Aleman, Diogo Almeida, Janko Altenschmidt, Sam Altman, Shyamal Anadkat, Red Avila, Igor Babuschkin, Suchir Balaji, Valerie Balcom, Paul Baltescu, Haiming Bao, Mohammad Bavarian, Jeff Belgum, Irwan Bello, Jake Berdine, Gabriel Bernadett-Shapiro, Christopher Berner, Lenny Bogdonoff, Oleg Boiko, Madelaine Boyd, Anna-Luisa Brakman, Greg Brockman, Tim Brooks, Miles Brundage, Kevin Button, Trevor Cai, Rosie Campbell, Andrew Cann, Brittany Carey, Chelsea Carlson, Rory Carmichael, Brooke Chan, Che Chang, Fotis Chantzis, Derek Chen, Sully Chen, Ruby Chen, Jason Chen, Mark Chen, Ben Chess, Chester Cho, Casey Chu, Hyung Won Chung, Dave Cummings, Jeremiah Currier, Yunxing Dai, Cory Decareaux, Thomas Degry, Noah Deutsch, Damien Deville, Arka Dhar, David Dohan, Steve Dowling, Sheila Dunning, Adrien Ecoffet, Atty Eleti, Tyna Eloundou, David Farhi, Liam Fedus, Niko Felix, Simón Posada Fishman, Juston Forte, Isabella Fulford, Leo Gao, Elie Georges, Christian Gibson, Vik Goel, Tarun Gogineni, Gabriel Goh, Rapha Gontijo-Lopes, Jonathan Gordon, Morgan Grafstein, Scott Gray, Ryan Greene, Joshua Gross, Shixiang Shane Gu, Yufei Guo, Chris Hallacy, Jesse Han, Jeff Harris, Yuchen He, Mike Heaton, Johannes Heidecke, Chris Hesse, Alan Hickey, Wade Hickey, Peter Hoeschele, Brandon Houghton, Kenny Hsu, Shengli Hu, Xin Hu, Joost Huizinga, Shantanu Jain, Shawn Jain, Joanne Jang, Angela Jiang, Roger Jiang, Haozhun Jin, Denny Jin, Shino Jomoto, Billie Jonn, Heewoo Jun, Tomer Kaftan, Łukasz Kaiser, Ali Kamali, Ingmar Kanitscheider, Nitish Shirish Keskar, Tabarak Khan, Logan Kilpatrick, Jong Wook Kim, Christina Kim, Yongjik Kim, Jan Hendrik Kirchner, Jamie Kiros, Matt Knight, Daniel Kokotajlo, Łukasz Kondraciuk, Andrew Kondrich, Aris Konstantinidis, Kyle Kosic, Gretchen Krueger, Vishal Kuo, Michael Lampe, Ikai Lan, Teddy Lee, Jan Leike, Jade Leung, Daniel Levy, Chak Ming Li, Rachel Lim, Molly Lin, Stephanie Lin, Mateusz Litwin, Theresa Lopez, Ryan Lowe, Patricia Lue, Anna Makanju, Kim Malfacini, Sam Manning, Todor Markov, Yaniv Markovski, Bianca Martin, Katie Mayer, Andrew Mayne, Bob McGrew, Scott Mayer McKinney, Christine McLeavey, Paul McMillan, Jake McNeil, David Medina, Aalok Mehta, Jacob Menick, Luke Metz, Andrey Mishchenko, Pamela Mishkin, Vinnie Monaco, Evan Morikawa, Daniel Mossing, Tong Mu, Mira Murati, Oleg Murk, David Mély, Ashvin Nair, Reiichiro Nakano, Rajeev Nayak, Arvind Neelakantan, Richard Ngo, Hyeonwoo Noh, Long Ouyang, Cullen O'Keefe, Jakub Pachocki, Alex Paino, Joe Palermo, Ashley Pantuliano, Giambattista Parascandolo, Joel Parish, Emy Parparita, Alex Passos, Mikhail Pavlov, Andrew Peng, Adam Perelman, Filipe de Avila Belbute Peres, Michael Petrov, Henrique Ponde de Oliveira Pinto, Michael, Pokorny, Michelle Pokrass, Vitchyr H. Pong, Tolly Powell, Alethea Power, Boris Power, Elizabeth Proehl, Raul Puri, Alec Radford, Jack Rae, Aditya Ramesh, Cameron Raymond, Francis Real, Kendra Rimbach, Carl Ross, Bob Rotsted, Henri Roussez, Nick Ryder, Mario Saltarelli, Ted Sanders, Shibani Santurkar, Girish Sastry, Heather Schmidt, David Schnurr, John Schulman, Daniel Selsam, Kyla Sheppard, Toki Sherbakov, Jessica Shieh, Sarah Shoker, Pranav Shyam, Szymon Sidor, Eric Sigler, Maddie Simens, Jordan Sitkin, Katarina Slama, Ian Sohl, Benjamin Sokolowsky, Yang Song, Natalie Staudacher, Felipe Petroski Such, Natalie Summers, Ilya Sutskever, Jie Tang, Nikolas Tezak, Madeleine B. Thompson, Phil Tillet, Amin Tootoonchian, Elizabeth Tseng, Preston Tuggle, Nick Turley, Jerry Tworek, Juan Felipe Cerón Uribe, Andrea Vallone, Arun Vijayvergiya, Chelsea Voss, Carroll Wainwright, Justin Jay Wang, Alvin Wang, Ben Wang, Jonathan Ward, Jason Wei, CJ Weinmann, Akila Welihinda, Peter Welinder, Jiayi Weng, Lilian Weng, Matt Wiethoff, Dave Willner, Clemens Winter, Samuel Wolrich, Hannah Wong, Lauren Workman, Sherwin Wu, Jeff Wu, Michael Wu, Kai Xiao, Tao Xu, Sarah Yoo, Kevin Yu, Qiming Yuan, Wojciech Zaremba, Rowan Zellers, Chong Zhang, Marvin Zhang, Shengjia Zhao, Tianhao Zheng, Juntang Zhuang, William Zhuk, and Barret Zoph. Gpt-4 technical report. 2024. URL: https://arxiv.org/abs/2303.08774, arXiv:2303.08774.

              -
              +
              [PNC+24] (1,2,3)

              Inkit Padhi, Manish Nagireddy, Giandomenico Cornacchia, Subhajit Chaudhury, Tejaswini Pedapati, Pierre Dognin, Keerthiram Murugesan, Erik Miehling, Martín Santillán Cooper, Kieran Fraser, Giulio Zizzo, Muhammad Zaid Hameed, Mark Purcell, Michael Desmond, Qian Pan, Zahra Ashktorab, Inge Vejsbjerg, Elizabeth M. Daly, Michael Hind, Werner Geyer, Ambrish Rawat, Kush R. Varshney, and Prasanna Sattigeri. Granite guardian. 2024. URL: https://arxiv.org/abs/2412.07724, arXiv:2412.07724.

              -
              +
              [PCZ+23]

              Alexander Pan, Jun Shern Chan, Andy Zou, Nathaniel Li, Steven Basart, Thomas Woodside, Jonathan Ng, Hanlin Zhang, Scott Emmons, and Dan Hendrycks. Do the rewards justify the means? measuring trade-offs between rewards and ethical behavior in the machiavelli benchmark. 2023. URL: https://arxiv.org/abs/2304.03279, arXiv:2304.03279.

              -
              +
              [PHS+22] (1,2)

              Ethan Perez, Saffron Huang, Francis Song, Trevor Cai, Roman Ring, John Aslanides, Amelia Glaese, Nat McAleese, and Geoffrey Irving. Red teaming language models with language models. 2022. URL: https://arxiv.org/abs/2202.03286, arXiv:2202.03286.

              -
              -[SJLS22] +
              +[SJLS22]

              Lingfeng Shen, Haiyun Jiang, Lemao Liu, and Shuming Shi. Rethink the evaluation for attack strength of backdoor attacks in natural language processing. 2022. URL: https://arxiv.org/abs/2201.02993, arXiv:2201.02993.

              -
              +
              [SZW+24]

              Oliver J. Sutton, Qinghua Zhou, Wei Wang, Desmond J. Higham, Alexander N. Gorban, Alexander Bastounis, and Ivan Y. Tyukin. Stealth edits to large language models. 2024. URL: https://arxiv.org/abs/2406.12670, arXiv:2406.12670.

              -
              +
              [VAA+24] (1,2)

              Bertie Vidgen, Adarsh Agrawal, Ahmed M. Ahmed, Victor Akinwande, Namir Al-Nuaimi, Najla Alfaraj, Elie Alhajjar, Lora Aroyo, Trupti Bavalatti, Max Bartolo, Borhane Blili-Hamelin, Kurt Bollacker, Rishi Bomassani, Marisa Ferrara Boston, Siméon Campos, Kal Chakra, Canyu Chen, Cody Coleman, Zacharie Delpierre Coudert, Leon Derczynski, Debojyoti Dutta, Ian Eisenberg, James Ezick, Heather Frase, Brian Fuller, Ram Gandikota, Agasthya Gangavarapu, Ananya Gangavarapu, James Gealy, Rajat Ghosh, James Goel, Usman Gohar, Sujata Goswami, Scott A. Hale, Wiebke Hutiri, Joseph Marvin Imperial, Surgan Jandial, Nick Judd, Felix Juefei-Xu, Foutse Khomh, Bhavya Kailkhura, Hannah Rose Kirk, Kevin Klyman, Chris Knotz, Michael Kuchnik, Shachi H. Kumar, Srijan Kumar, Chris Lengerich, Bo Li, Zeyi Liao, Eileen Peters Long, Victor Lu, Sarah Luger, Yifan Mai, Priyanka Mary Mammen, Kelvin Manyeki, Sean McGregor, Virendra Mehta, Shafee Mohammed, Emanuel Moss, Lama Nachman, Dinesh Jinenhally Naganna, Amin Nikanjam, Besmira Nushi, Luis Oala, Iftach Orr, Alicia Parrish, Cigdem Patlak, William Pietri, Forough Poursabzi-Sangdeh, Eleonora Presani, Fabrizio Puletti, Paul Röttger, Saurav Sahay, Tim Santos, Nino Scherrer, Alice Schoenauer Sebag, Patrick Schramowski, Abolfazl Shahbazi, Vin Sharma, Xudong Shen, Vamsi Sistla, Leonard Tang, Davide Testuggine, Vithursan Thangarasa, Elizabeth Anne Watkins, Rebecca Weiss, Chris Welty, Tyler Wilbers, Adina Williams, Carole-Jean Wu, Poonam Yadav, Xianjun Yang, Yi Zeng, Wenhui Zhang, Fedor Zhdanov, Jiacheng Zhu, Percy Liang, Peter Mattson, and Joaquin Vanschoren. Introducing v0.5 of the ai safety benchmark from mlcommons. 2024. URL: https://arxiv.org/abs/2404.12241, arXiv:2404.12241.

              -
              +
              [VSK+24] (1,2)

              Bertie Vidgen, Nino Scherrer, Hannah Rose Kirk, Rebecca Qian, Anand Kannappan, Scott A. Hale, and Paul Röttger. Simplesafetytests: a test suite for identifying critical safety risks in large language models. 2024. URL: https://arxiv.org/abs/2311.08370, arXiv:2311.08370.

              -
              +
              [WMR24]

              Sandra Wachter, Brent Mittelstadt, and Chris Russell. Do large language models have a legal duty to tell the truth? Royal Society Open Science, 11(8):240197, 2024. URL: https://royalsocietypublishing.org/doi/abs/10.1098/rsos.240197, arXiv:https://royalsocietypublishing.org/doi/pdf/10.1098/rsos.240197, doi:10.1098/rsos.240197.

              -
              +
              [WCP+24]

              Boxin Wang, Weixin Chen, Hengzhi Pei, Chulin Xie, Mintong Kang, Chenhui Zhang, Chejian Xu, Zidi Xiong, Ritik Dutta, Rylan Schaeffer, Sang T. Truong, Simran Arora, Mantas Mazeika, Dan Hendrycks, Zinan Lin, Yu Cheng, Sanmi Koyejo, Dawn Song, and Bo Li. Decodingtrust: a comprehensive assessment of trustworthiness in gpt models. 2024. URL: https://arxiv.org/abs/2306.11698, arXiv:2306.11698.

              -
              +
              [YLX24]

              Jiahao Yu, Xingwei Lin, and Xinyu Xing. Gptfuzzer: red teaming large language models with auto-generated safety test cases. Papers with Code, 2024. URL: https://paperswithcode.com/dataset/gptfuzzer.

              -
              +
              [ZYY+24]

              Shuning Zhang, Lyumanshan Ye, Xin Yi, Jingyu Tang, Bo Shui, Haobin Xing, Pengfei Liu, and Hewu Li. "ghost of the past": identifying and resolving privacy leakage from llm's memory through proactive user interaction. 2024. URL: https://arxiv.org/abs/2410.14931, arXiv:2410.14931.

              -
              +
              [Zho24]

              Qinghua Zhou. Stealth edits: detecting stealth edits in llm outputs. HuggingFace Spaces, 2024. URL: https://huggingface.co/spaces/qinghua-zhou/stealth-edits.

              -
              +
              [AmazonWServices24]

              Amazon Web Services. Amazon comprehend - natural language processing service. 2024. AWS natural language processing service for text analysis and content moderation. URL: https://aws.amazon.com/comprehend/.

              -
              +
              [Anthropic24]

              Anthropic. Anthropic's responsible scaling policy. Technical Report, Anthropic, 2024. URL: https://www-cdn.anthropic.com/1adf000c8f675958c2ee23805d91aaade1cd4613/responsible-scaling-policy.pdf.

              -
              +
              [CenterfASafety24a]

              Center for AI Safety. Harmbench. GitHub repository, 2024. Framework for evaluating language model safety. URL: https://github.com/centerforaisafety/HarmBench.

              -
              +
              [CenterfASafety24b]

              Center for AI Safety. Harmbench leaderboard. 2024. Leaderboard tracking performance of language models on safety benchmarks. URL: https://www.harmbench.org/results.

              -
              +
              [DeepMind24] (1,2)

              DeepMind. The frontier safety framework. Technical Report, DeepMind, 2024. URL: https://storage.googleapis.com/deepmind-media/DeepMind.com/Blog/introducing-the-frontier-safety-framework/fsf-technical-report.pdf.

              -
              +
              [EuropeanMAgency24]

              European Medicines Agency. Guiding principles for the use of large language models in regulatory science and medicines regulatory activities. Guidance Document, European Medicines Agency, 2024. URL: https://www.ema.europa.eu/en/documents/other/guiding-principles-use-large-language-models-regulatory-science-medicines-regulatory-activities_en.pdf.

              -
              +
              [FinancialIRAuthority24]

              Financial Industry Regulatory Authority. Artificial intelligence, including large language models and generative ai. Regulatory Notice 24-09, FINRA, 2024. URL: https://www.finra.org/rules-guidance/notices/24-09.

              -
              -[HarmBench24] +
              +[HarmBench24]

              HarmBench. Harmbench explorer. 2024. URL: https://www.harmbench.org/explore.

              -
              +
              [IBM24]

              IBM. Ibm watsonx.ai risk atlas. 2024. A framework for identifying and mitigating risks in AI systems. URL: https://www.ibm.com/docs/en/watsonx/saas?topic=ai-risk-atlas.

              -
              +
              [LibraryoCongress23]

              Library of Congress. China: generative ai measures finalized. July 2023. URL: https://www.loc.gov/item/global-legal-monitor/2023-07-18/china-generative-ai-measures-finalized/.

              -
              +
              [MistralAI24]

              Mistral AI. Mistral moderation: a technical report. 2024. URL: https://mistral.ai/news/mistral-moderation/.

              -
              +
              [MLSTeam24]

              ML Safety Team. Safebench: a comprehensive benchmark for llm safety evaluation. ML Safety Website, 2024. URL: https://www.mlsafety.org/safebench.

              -
              +
              [NationalIoSaTechnology24]

              National Institute of Standards and Technology. Ai risk management framework. Technical Report, National Institute of Standards and Technology, 2024. URL: https://www.nist.gov/itl/ai-risk-management-framework.

              -
              +
              [NVIDIA24]

              NVIDIA. Nemo-guardrails: an open-source toolkit for building reliable and safe llm applications. 2024. A framework for creating reliable and safe LLM applications with customizable guardrails. URL: https://github.com/NVIDIA/NeMo-Guardrails.

              -
              +
              [OpenAI24a]

              OpenAI. Openai moderation api. 2024. Documentation for OpenAI's content moderation API. URL: https://platform.openai.com/docs/guides/moderation.

              -
              +
              [OpenAI24b] (1,2)

              OpenAI. Openai preparedness framework. Technical Report, OpenAI, 2024. URL: https://cdn.openai.com/openai-preparedness-framework-beta.pdf.

              -
              +
              [OpenSafetyLab24a]

              OpenSafetyLab. Salad-bench leaderboard. HuggingFace Space, 2024. URL: https://huggingface.co/spaces/OpenSafetyLab/Salad-Bench-Leaderboard.

              -
              +
              [OpenSafetyLab24b]

              OpenSafetyLab. Salad-data: a hierarchical and comprehensive safety dataset for large language models. HuggingFace Dataset, 2024. URL: https://huggingface.co/datasets/OpenSafetyLab/Salad-Data.

              -
              +
              [ProtectAI24]

              ProtectAI. Llm-guard: comprehensive safety and security framework for large language models. 2024. An open-source toolkit for LLM security and safety. URL: https://github.com/protectai/llm-guard.

              -
              +
              [SurgeAI24]

              Surge AI. Surge ai profanity dataset. GitHub repository, 2024. A comprehensive dataset for training and evaluating profanity detection models. URL: https://github.com/surge-ai/profanity.

              -
              +
              [UKGovernment24]

              UK Government. Ai regulation: a pro-innovation approach. White Paper, Department for Science, Innovation and Technology, 2024. URL: https://www.gov.uk/government/publications/ai-regulation-a-pro-innovation-approach/white-paper.

              -
              +
              [UNICEF24]

              UNICEF. Policy guidance on ai for children. Policy Report, UNICEF Office of Research - Innocenti, 2024. URL: https://www.unicef.org/innocenti/reports/policy-guidance-ai-children.

              @@ -3051,11 +3051,11 @@

              [2] -

              Attack Success Rate (ASR) refers to a metric used in cybersecurity and machine learning to measure the percentage of times an attack successfully achieves its intended outcome, essentially indicating how effective a particular attack method is against a system or model; it is calculated by dividing the number of successful attacks by the total number of attempted attacks [Shen et al., 2022].

              +

              Attack Success Rate (ASR) refers to a metric used in cybersecurity and machine learning to measure the percentage of times an attack successfully achieves its intended outcome, essentially indicating how effective a particular attack method is against a system or model; it is calculated by dividing the number of successful attacks by the total number of attempted attacks [Shen et al., 2022].

      diff --git a/tamingllms/_build/html/notebooks/structured_output.html b/tamingllms/_build/html/notebooks/structured_output.html index 4974a8d..6bc02b0 100644 --- a/tamingllms/_build/html/notebooks/structured_output.html +++ b/tamingllms/_build/html/notebooks/structured_output.html @@ -256,7 +256,7 @@
      -

      4. Structured Output

      +

      4. Structured Output

      In limits, there is freedom. Creativity thrives within structure.

      —Julia B. Cameron

      @@ -264,42 +264,42 @@
      -

      4.1. Introduction

      +

      4.1. Introduction

      Language Models excel at generating human-like text, but they often struggle to produce output in a structured format, consistently. This poses a significant challenge when we need LLMs to generate data that can be easily processed by downstream systems, such as databases, APIs, or other software applications. Even with a well-crafted prompt, an LLM might produce an unstructured response when a structured one is expected. This can be particularly challenging when integrating LLMs into systems that require specific data types and formats.

      -

      What user needs drive the demand for LLM output constraints? In a recent work by Google Research [Liu et al., 2024], the authors explored the user need for constraints on the output of large language models, drawing on a survey of 51 industry professionals who use LLMs in their work. User needs can be broadly categorized as follows:

      +

      What user needs drive the demand for LLM output constraints? In a recent work by Google Research [Liu et al., 2024], the authors explored the user need for constraints on the output of large language models, drawing on a survey of 51 industry professionals who use LLMs in their work. User needs can be broadly categorized as follows:

      1. Improving Developer Efficiency and Workflow

      • Reducing Trial and Error in Prompt Engineering: Developers find the process of crafting prompts to elicit desired output formats to be time-consuming, often involving extensive testing and iteration. LLM output constraints could make this process more efficient and predictable.

      • @@ -321,13 +321,13 @@

        -

        4.2. Problem Statement

        +

        4.2. Problem Statement

        Language models based on the Transformer architecture are next token prediction machines. These models calculate the probability of observing a token (from a vocabulary of size \(n\)) conditioned on the previous tokens in the sequence. This process can be expressed mathematically as:

        \[P(X) = P(x_1, x_2, \ldots, x_n) = \prod_{i=1}^n p(x_i|x_{<i})\]

        where, \(x_i\) represents the current token being generated, while \(x_{<i}\) encompasses all preceding tokens.

        -

        However, in practical applications, generating high-quality content requires more than just probabilistic next-token generation. The key challenge lies in incorporating control conditions (\(C\)) that guide the model to produce text with specific desired characteristics - whether that’s maintaining a consistent format, following syntactic rules, or adhering to semantic constraints. These control conditions must be integrated while preserving the model’s ability to generate natural, coherent text. This controlled text generation process can be formalized as [Liang et al., 2024]:

        +

        However, in practical applications, generating high-quality content requires more than just probabilistic next-token generation. The key challenge lies in incorporating control conditions (\(C\)) that guide the model to produce text with specific desired characteristics - whether that’s maintaining a consistent format, following syntactic rules, or adhering to semantic constraints. These control conditions must be integrated while preserving the model’s ability to generate natural, coherent text. This controlled text generation process can be formalized as [Liang et al., 2024]:

        \[P(X|C) = P(x_1, x_2, \ldots, x_n|C) = \prod_{i=1}^n p(x_i|x_{<i}, C)\]

        Here, \(C\) represents the set of constraints or control conditions that shape the generated output. Common constraints (\(C\)) include:

        @@ -341,8 +341,8 @@

        -

        4.3. Techniques

        -

        There are many techniques to obtain structured output from LLMs [Liang et al., 2024]. They can be broadly categorized into two types based on the phase they are applied to:

        +

        4.3. Techniques

        +

        There are many techniques to obtain structured output from LLMs [Liang et al., 2024]. They can be broadly categorized into two types based on the phase they are applied to:

        1. Training-Time Techniques (TTT): These techniques are applied during the training or post-training phases of the LLM. They are used to guide the model to learn the specific patterns and structures that are required for the task at hand.

        2. Inference-Time Techniques (ITT): These techniques are applied during the inference phase of the LLM. They are used to guide the model to produce the desired output at inference time.

        3. @@ -354,17 +354,17 @@

          NousResearch, 2024], a model trained on a specific system prompt for Structured Outputs able to respond according to following user provided JSON schema.

          +
        4. Example: NousResearch/Hermes-2-Theta-Llama-3-8B [NousResearch, 2024], a model trained on a specific system prompt for Structured Outputs able to respond according to following user provided JSON schema.

    4. Logit Post-Processing (ITT): Logit post-processing is a technique that involves modifying the logits of the LLM’s output before it is converted into text.

        -
      • Example: Outlines [Outlines, 2024], a Python package that allows to guide the generation process introducing logit biases. We will explore this solution later.

      • +
      • Example: Outlines [Outlines, 2024], a Python package that allows to guide the generation process introducing logit biases. We will explore this solution later.

    5. -

      4.3.1. Prompt Engineering

      +

      4.3.1. Prompt Engineering

      Perhaps the most common strategy to generate LLM response in a target format is using prompt engineering, in particular one-shot prompting, where the user provides an example of the desired output format within the prompt.

      As a motivating example, consider the following simple task: Given a segment of a SEC financial filing, generate a two-person discussion about key financial data from the text in JSON format, simulating what would be a real-world discussion about the underlying companies’ disclosed financial information. We would like to generate a structured output that can be easily parsed and integrated with other systems.

      In a one-shot prompting fashion, we can pass the following example in the prompt:

      @@ -490,7 +490,7 @@

      -

      4.3.2. JSON Mode (Fine-Tuned)

      +

      4.3.2. JSON Mode (Fine-Tuned)

      One-shot prompting is a simple technique that can lead to low-effort improvements in structured output, though may not be sufficient for complex (e.g. nested) structures and / or when the model’s output needs to be restricted to a specific set of options or types.

      Some models offer so-called “JSON Mode” as an attempt to handle those challenges. This is a feature provided by most LLM API providers today, such as OpenAI, that allows the model to generate output in JSON format. This is particularly useful when you need structured data as a result, such as when parsing the output programmatically or integrating it with other systems that require JSON input. As depicted in Fig. 4.1, JSON mode is implemented by instructing the LLM model to use JSON as response format and optionally defining a target schema.

      @@ -612,7 +612,7 @@

      -

      4.3.3. Logit Post-Processing

      +

      4.3.3. Logit Post-Processing

      Logit post-processing is a technique that involves modifying the logits of the LLM’s output before it is converted into text such that we have a “controlled” text generation.

      The text generation process follows a probabilistic approach. At each step, the model calculates the probability distribution over its entire vocabulary to determine the most likely next token.

      Let’s examine how an LLM processes an example prompt “Is Enzo a good name for a baby?” as depicted in Fig. 4.2:

      @@ -849,11 +849,11 @@

      -

      4.4. Tools

      +

      4.4. Tools

      -

      4.4.1. Outlines

      -

      Outlines [Outlines, 2024] is a library specifically focused on structured text generation from LLMs. Under the hood, Outlines works by adjusting the probability distribution of the model’s output logits - the raw scores from the final layer of the neural network that are normally converted into text tokens. By introducing carefully crafted logit biases, Outlines can guide the model to prefer certain tokens over others, effectively constraining its outputs to a predefined set of valid options.

      -

      The authors solve the general guided generation problem [Willard and Louf, 2023], which, as a consequence, solves the problem of structured output generation in LLMs by introducing an efficient indexing approach that reformulates neural text generation using finite-state machines (FSMs).

      +

      4.4.1. Outlines

      +

      Outlines [Outlines, 2024] is a library specifically focused on structured text generation from LLMs. Under the hood, Outlines works by adjusting the probability distribution of the model’s output logits - the raw scores from the final layer of the neural network that are normally converted into text tokens. By introducing carefully crafted logit biases, Outlines can guide the model to prefer certain tokens over others, effectively constraining its outputs to a predefined set of valid options.

      +

      The authors solve the general guided generation problem [Willard and Louf, 2023], which, as a consequence, solves the problem of structured output generation in LLMs by introducing an efficient indexing approach that reformulates neural text generation using finite-state machines (FSMs).

      They define the next token generation as a random variable:

      \[s_{t+1} \sim \text{Categorical}(\alpha) \text{ where } \alpha = \text{LLM}(S_t, \theta)\]
      @@ -884,7 +884,7 @@

      \(\tilde{s}_{t+1}\) is the next token sampled under constraints

      This formulation allows the masking operation to guide the generation process by zeroing out probabilities of invalid tokens according to the finite state machine states. But instead of checking the entire vocabulary (size N) at each generation step (O(N) complexity) to enforce output constraints, they convert constraints (regex/grammar) into FSM states and build an index mapping FSM states to valid vocabulary tokens. This achieves O(1) average complexity for token generation.

      -

      In summary, there are two stages in the Outlines framework [Tran-Thien, 2024]:

      +

      In summary, there are two stages in the Outlines framework [Tran-Thien, 2024]:

      1. Preprocessing Step: Outlines converts a character-level deterministic finite automaton (DFA) testing whether a string matches a regex into a token-level DFA testing whether a token sequence is decoded in a string matching the regex.

      2. Decoding Step: At decoding time, the DFA is used to determine, for each new token, which potential tokens are allowed. Starting from the initial state of the DFA, the allowed tokens are determined by the outgoing transitions from the current state. The corresponding mask is applied to the next token probabilities and these probabilities are renormalized. A new token can then be sampled and the state of the DFA updated.

      3. @@ -907,7 +907,7 @@

        Outlines State Machine
        -

        Fig. 4.3 Outlines State Machine [Tran-Thien, 2024].

        +

        Fig. 4.3 Outlines State Machine [Tran-Thien, 2024].

      The initial “Start” state contains a masking table that controls which tokens can begin the sequence. In this example, only characters from the set [YyNnAa] are allowed as valid first characters, with each having an assigned probability and mask value. The masking mechanism effectively filters out invalid tokens by setting their mask values to 0, ensuring only permitted transitions to the “First” state.

      @@ -997,7 +997,7 @@

      -

      4.4.2. LangChain

      +

      4.4.2. LangChain

      LangChain is a framework designed to simplify the development of LLM applications. It provides an abstraction layer over many LLM providers that in turn offers structured output.

      In particular, LangChain offers the with_structured_output method, which can be used with LLMs that support structured output APIs, allowing you to enforce a schema directly within the prompt.

      @@ -1052,12 +1052,12 @@

      Extracted places: ['California', 'Cupertino']

    -

    We observe that the model was able to extract the entities and places from the input text, and return them in the specified format. A full list of models that support .with_structured_output() can be found here. You can also use Outlines with LangChain [LangChain, 2024b].

    +

    We observe that the model was able to extract the entities and places from the input text, and return them in the specified format. A full list of models that support .with_structured_output() can be found here. You can also use Outlines with LangChain [LangChain, 2024b].

    -

    4.4.3. Ollama

    +

    4.4.3. Ollama

    Ollama is a popular tool that allows you to run LLMs locally (see Chapter Local LLMs in Practice). Ollama first introduced structured output generation in version 0.5.1 in late 2024 providing support for JSON output but highlighting additional formats are coming soon.

    -

    The current ollama implementation leverages LLama.cpp GBNF (GGML BNF) grammars [Ggerganov, 2024] to enable structured output generation. LLama.cpp GBNF forces language models to generate output in specific, predefined formats by constraining their outputs to follow precise rules and patterns. The system accomplishes this through a formal grammar specification that defines exactly how valid outputs can be constructed. It’s essentially an extension of BNF (Backus-Naur Form) [Wikipedia contributors, 2024] with some modern regex-like features added. These rules carefully define what elements are allowed, how they can be combined, and what patterns of repetition and sequencing are valid. By enforcing these constraints during generation, GBNF ensures the model’s output strictly adheres to the desired format.

    +

    The current ollama implementation leverages LLama.cpp GBNF (GGML BNF) grammars [Ggerganov, 2024] to enable structured output generation. LLama.cpp GBNF forces language models to generate output in specific, predefined formats by constraining their outputs to follow precise rules and patterns. The system accomplishes this through a formal grammar specification that defines exactly how valid outputs can be constructed. It’s essentially an extension of BNF (Backus-Naur Form) [Wikipedia contributors, 2024] with some modern regex-like features added. These rules carefully define what elements are allowed, how they can be combined, and what patterns of repetition and sequencing are valid. By enforcing these constraints during generation, GBNF ensures the model’s output strictly adheres to the desired format.

    Let’s replicate our previous structured output generation example with Ollama. First, make sure you have Ollama installed. You can find installation instructions here.

    curl -fsSL https://ollama.com/install.sh | sh
     pip install ollama
    @@ -1153,9 +1153,9 @@ 

    -

    4.5. Discussion

    +

    4.5. Discussion

    -

    4.5.1. Best Practices

    +

    4.5.1. Best Practices

    When implementing structured output with LLMs, it’s crucial to understand the distinction between different approaches. Some methods, such as logit post-processing, provide mathematical guarantees that the output will conform to the specified structure. This contrasts sharply with approaches like JSON mode, which rely on fine-tuned models or prompt engineering that offer no formal guarantees. This distinction becomes particularly important in production environments where reliability and consistency are paramount. With that in mind, here are some best practices to consider when implementing structured output generation with LLMs:

    • Clear Schema Definition: Define the desired output structure clearly. This can be done in several ways including schemas, types, or Pydantic models as appropriate.

    • @@ -1165,7 +1165,7 @@

      -

      4.5.2. Comparing Solutions

      +

      4.5.2. Comparing Solutions

      The choice of framework for structured LLM output depends heavily on specific constraints, requirements and use cases. LangChain is the most used LLM framework today with a large developer community base however its structured output generation depends on the underlying LLM provider support. Ollama enables straightforward local deployment and experimentation democratizing access to LLMs while fostering privacy and control, however today it only offers JSON format with further formats to come. Outlines emerges as a solution that provides formal guarantees with great flexibility and control over structured output generation while providing support for a wide range of LLMs. Table 4.1 provides a summary comparison of the different solutions.

    Table 6.2 Rules-Based Safety Filtering Tools.
    @@ -1204,26 +1204,26 @@

    [Guidance AI, 2024] and NVIDIA’s Logits Processor Zoo [NVIDIA, 2024a].

    +

    Other related tools not covered in this chapter worth mentioning include Guidance [Guidance AI, 2024] and NVIDIA’s Logits Processor Zoo [NVIDIA, 2024a].

    -

    4.5.3. Research and Ongoing Debate

    +

    4.5.3. Research and Ongoing Debate

    The use of structured output for Large Language Models is a developing area. While the ability to constrain LLM outputs offer clear benefits in parsing, robustness, and integration, there is growing debate on whether it also potentially comes at the cost of performance as well as reasoning abilities. Research in this area should be taken with a grain of salt since findings are mixed and often depend on the specific task and model family at hand furthermore model families are not always comparable and are getting updated by the day! Nonetheless, early findings provide some interesting insights as to why there is no one-size-fits-all solution when it comes to LLMs structured output.

    -

    There is some evidence indicating that LLMs may have bias in their handling of different output formats [Long et al., 2024]. This study examined common output structures like multiple-choice answers, wrapped text, lists, and key-value mappings. The authors analyzed key LLM model families, namely Gemma, Mistral, and ChatGPT, uncovering bias across multiple tasks and formats. The researchers attributed these biases to the models’ underlying token distributions for different formats. An example of this format bias emerged in the comparison between JSON and YAML outputs. While models like Mistral and Gemma excelled at generating JSON structures, they performed notably worse with YAML. Their YAML outputs often contained extraneous information that degrades output quality. This disparity likely stems from JSON’s prevalence in training data, highlighting how a format’s popularity directly influences model performance. While the studied models can be probably considered outdated by now since models are getting updated on a rapidly fashion, it is important to remark that addressing format bias is critical for advancing LLMs and ensuring their reliable application in real-world scenarios.

    -

    Recent (not yet peer-reviewed) research “Let Me Speak Freely? A Study on the Impact of Format Restrictions on Performance of Large Language Models” [Tam et al., 2024] suggests that imposing format restrictions on LLMs might impact their performance, particularly in reasoning-intensive tasks. Further evidence [Aider, 2024] suggests LLMs may produce lower quality code if they’re asked to return it as part of a structured JSON response, in particular:

    +

    There is some evidence indicating that LLMs may have bias in their handling of different output formats [Long et al., 2024]. This study examined common output structures like multiple-choice answers, wrapped text, lists, and key-value mappings. The authors analyzed key LLM model families, namely Gemma, Mistral, and ChatGPT, uncovering bias across multiple tasks and formats. The researchers attributed these biases to the models’ underlying token distributions for different formats. An example of this format bias emerged in the comparison between JSON and YAML outputs. While models like Mistral and Gemma excelled at generating JSON structures, they performed notably worse with YAML. Their YAML outputs often contained extraneous information that degrades output quality. This disparity likely stems from JSON’s prevalence in training data, highlighting how a format’s popularity directly influences model performance. While the studied models can be probably considered outdated by now since models are getting updated on a rapidly fashion, it is important to remark that addressing format bias is critical for advancing LLMs and ensuring their reliable application in real-world scenarios.

    +

    Recent (not yet peer-reviewed) research “Let Me Speak Freely? A Study on the Impact of Format Restrictions on Performance of Large Language Models” [Tam et al., 2024] suggests that imposing format restrictions on LLMs might impact their performance, particularly in reasoning-intensive tasks. Further evidence [Aider, 2024] suggests LLMs may produce lower quality code if they’re asked to return it as part of a structured JSON response, in particular:

    • Potential performance degradation: Enforcing structured output, especially through constrained decoding methods like JSON-mode, can negatively impact an LLM’s reasoning abilities. This is particularly evident in tasks that require multi-step reasoning or complex thought processes.

    • Overly restrictive schemas: Imposing strict schemas can limit the expressiveness of LLM outputs and may hinder their ability to generate creative or nuanced responses. In certain cases, the strictness of the schema might outweigh the benefits of structured output.

    • Increased complexity in prompt engineering: Crafting prompts that effectively guide LLMs to generate structured outputs while maintaining performance can be challenging. It often requires careful consideration of the schema, the task instructions, and the desired level of detail in the response.

    -

    On the other hand, those findings are not without criticism. The .txt team challenges the work of [Tam et al., 2024]. The rebuttal argues that structured generation, when done correctly, actually improves performance [Dottxt, 2024].

    +

    On the other hand, those findings are not without criticism. The .txt team challenges the work of [Tam et al., 2024]. The rebuttal argues that structured generation, when done correctly, actually improves performance [Dottxt, 2024].

    Structured vs Unstructured Results by .txt team
    -

    Fig. 4.4 Structured vs Unstructured Results by .txt team [Dottxt, 2024].

    +

    Fig. 4.4 Structured vs Unstructured Results by .txt team [Dottxt, 2024].

    -

    The .txt team presents compelling evidence through their reproduction of the paper’s experiments. While their unstructured results align with the original paper’s findings, their structured results paint a dramatically different picture - demonstrating that structured generation actually improves performance (see Fig. 4.4). The team has made their experimental notebooks publicly available on GitHub for independent verification [Dottxt, 2024].

    +

    The .txt team presents compelling evidence through their reproduction of the paper’s experiments. While their unstructured results align with the original paper’s findings, their structured results paint a dramatically different picture - demonstrating that structured generation actually improves performance (see Fig. 4.4). The team has made their experimental notebooks publicly available on GitHub for independent verification [Dottxt, 2024].

    .txt team identifies several flaws in the methodology of “Let Me Speak Freely?” that they believe led to inaccurate conclusions:

    • The paper finds that structured output improves performance on classification tasks but doesn’t reconcile this finding with its overall negative conclusion about structured output.

    • @@ -1237,12 +1237,12 @@

      -

      4.6. Conclusion

      +

      4.6. Conclusion

      Extracting structured output from LLMs is crucial for integrating them into real-world applications. By understanding the challenges and employing appropriate strategies and tools, developers can improve the reliability and usability of LLM-powered systems, unlocking their potential to automate complex tasks and generate valuable insights.

      Prompt engineering and the use of fine-tuned models can help control the output of LLMs. However, when strong guarantees are needed, practitioners should consider techniques such as logit post-processing that provides formal guarantees for controlled output generation.

    -

    4.7. Acknowledgements

    +

    4.7. Acknowledgements

    We would like to thank Cameron Pfiffer from the .txt team for his insightful review and feedback.

    CC BY-NC-SA 4.0

    @misc{tharsistpsouza2024tamingllms,
    @@ -1257,70 +1257,70 @@ 

    -

    4.8. References

    +

    4.8. References

    -
    +
    [Aid24]

    Aider. Code in json: structured output for llms. https://aider.chat/2024/08/14/code-in-json.html, 2024. Accessed: 2024.

    -
    +
    [Dot24] (1,2,3)

    Dottxt. Say what you mean: demos. https://github.com/dottxt-ai/demos/tree/main/say-what-you-mean, 2024. Accessed: 2024.

    -
    +
    [Gge24]

    Ggerganov. Llama.cpp grammars documentation. https://github.com/ggerganov/llama.cpp/blob/master/grammars/README.md, 2024. Accessed: 2024.

    -
    +
    [Lan4b]

    LangChain. Outlines integration documentation. Online Documentation, 2024b. Documentation on integrating Outlines library with LangChain for structured generation. URL: https://python.langchain.com/docs/integrations/chat/outlines/.

    -
    +
    [LWW+24] (1,2)

    Xun Liang, Hanyu Wang, Yezhaohui Wang, Shichao Song, Jiawei Yang, Simin Niu, Jie Hu, Dan Liu, Shunyu Yao, Feiyu Xiong, and Zhiyu Li. Controllable text generation for large language models: a survey. 2024. URL: https://arxiv.org/abs/2408.12599, arXiv:2408.12599.

    -
    +
    [LLF+24]

    Michael Xieyang Liu, Frederick Liu, Alexander J. Fiannaca, Terry Koo, Lucas Dixon, Michael Terry, and Carrie J. Cai. "we need structured output": towards user-centered constraints on large language model output. In Extended Abstracts of the CHI Conference on Human Factors in Computing Systems, CHI EA '24. New York, NY, USA, 2024. Association for Computing Machinery. URL: https://doi.org/10.1145/3613905.3650756, doi:10.1145/3613905.3650756.

    -
    +
    [LNS+24]

    Do Xuan Long, Hai Nguyen Ngoc, Tiviatis Sim, Hieu Dao, Shafiq Joty, Kenji Kawaguchi, Nancy F Chen, and Min-Yen Kan. Llms are biased towards output formats! systematically evaluating and mitigating output format bias of llms. arXiv preprint arXiv:2408.08656, 2024.

    -
    +
    [Nou24]

    NousResearch. Hermes-2-theta-llama-3-8b. https://huggingface.co/NousResearch/Hermes-2-Theta-Llama-3-8B, 2024. Accessed: 2024.

    -
    +
    [Out24] (1,2)

    Outlines. Type-safe structured output from llms. https://dottxt-ai.github.io/outlines/latest/, 2024. Accessed: 2024.

    -
    +
    [TWT+24] (1,2)

    Zhi Rui Tam, Cheng-Kuang Wu, Yi-Lin Tsai, Chieh-Yen Lin, Hung-yi Lee, and Yun-Nung Chen. Let me speak freely? a study on the impact of format restrictions on performance of large language models. 2024. URL: https://arxiv.org/abs/2408.02442, arXiv:2408.02442.

    -
    +
    [TT24] (1,2)

    Vivien Tran-Thien. Fast, high-fidelity llm decoding with regex constraints. 2024. URL: https://vivien000.github.io/blog/journal/llm-decoding-with-regex-constraints.html.

    -
    +
    [WL23]

    Brandon T. Willard and Rémi Louf. Efficient guided generation for large language models. 2023. URL: https://arxiv.org/abs/2307.09702, arXiv:2307.09702.

    -
    +
    [GuidanceAI24]

    Guidance AI. Guidance: language model programming. GitHub Repository, 2024. Framework for programming language models with structured templating and control flow. URL: https://github.com/guidance-ai/guidance.

    -
    +
    [NVIDIA4a]

    NVIDIA. Logits processor zoo. GitHub Repository, 2024a. Collection of logits processors for controlling language model generation. URL: https://github.com/NVIDIA/logits-processor-zoo.

    -
    +
    [Wikipediacontributors24]

    Wikipedia contributors. Backus naur form. https://en.wiktionary.org/wiki/Backus-Naur_form, 2024. Accessed: 2024.

    diff --git a/tamingllms/_build/html/objects.inv b/tamingllms/_build/html/objects.inv index 2a97490fa1909597a3af944e866faedd3d757fca..82c28416c8749933017f6cd11dfa138d1c84af0c 100644 GIT binary patch delta 3803 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 RLn`9n#l2Frt)UXv7;F|zQ~z*R6!&pVGLeE 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 S>wGHjFgj=F5B>+ZQi;DsUS+TV diff --git a/tamingllms/_build/html/searchindex.js b/tamingllms/_build/html/searchindex.js index 7ff31ae..92ade66 100644 --- a/tamingllms/_build/html/searchindex.js +++ b/tamingllms/_build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["markdown/intro", "markdown/preface", "markdown/toc", "notebooks/alignment", "notebooks/cost", "notebooks/evals", "notebooks/input", "notebooks/local", "notebooks/safety", "notebooks/structured_output"], "filenames": ["markdown/intro.md", "markdown/preface.md", "markdown/toc.md", "notebooks/alignment.ipynb", "notebooks/cost.ipynb", "notebooks/evals.ipynb", "notebooks/input.ipynb", "notebooks/local.ipynb", "notebooks/safety.ipynb", "notebooks/structured_output.ipynb"], "titles": ["2. About the Book", "1. Preface", "Taming LLMs", "7. Preference-Based Alignment", "9. The Falling Cost Paradox", "3. The Evals Gap", "5. Managing Input Data", "8. Local LLMs in Practice", "6. Safety", "4. Structured Output"], "terms": {"am": [0, 8], "alwai": [0, 3, 4, 5, 6, 9], "do": [0, 3, 4, 5, 6, 7, 8, 9], "which": [0, 3, 4, 5, 6, 7, 8, 9], "cannot": [0, 3, 4, 5, 7, 8], "order": [0, 3, 5, 6, 8, 9], "mai": [0, 1, 3, 4, 5, 6, 7, 8, 9], "learn": [0, 3, 5, 6, 7, 8, 9], "how": [0, 1, 3, 4, 5, 6, 7, 8, 9], "pablo": [0, 5], "picasso": 0, "In": [0, 3, 4, 5, 6, 7, 8, 9], "recent": [0, 3, 4, 5, 6, 7, 8, 9], "year": [0, 2, 3, 4, 5, 6, 7, 8, 9], "larg": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "languag": [0, 1, 2, 4, 5, 6, 7, 8, 9], "model": [0, 1, 2, 4, 6, 8, 9], "llm": [0, 1, 3, 9], "have": [0, 1, 3, 4, 5, 6, 7, 8, 9], "emerg": [0, 3, 4, 6, 7, 8, 9], "transform": [0, 1, 3, 5, 6, 7, 8, 9], "forc": [0, 5, 6, 9], "technologi": [0, 1, 4, 5, 6, 7, 8], "promis": [0, 3, 4, 5, 8], "revolution": [0, 8], "build": [0, 2, 3, 5, 6, 7, 8, 9], "product": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "interact": [0, 3, 4, 5, 6, 7, 8, 9], "comput": [0, 3, 4, 5, 6, 7, 8, 9], "from": [0, 1, 4, 5, 6, 7, 8, 9], "chatgpt": [0, 3, 4, 6, 7, 9], "llama": [0, 3, 4, 5, 6, 8, 9], "github": [0, 2, 3, 4, 5, 6, 7, 8, 9], "copilot": 0, "claud": [0, 3, 5, 7, 8], "artifact": 0, "system": [0, 3, 4, 5, 6, 7, 8, 9], "captur": [0, 1, 3, 5, 6, 7, 8], "public": [0, 3, 5, 6, 7, 8], "imagin": [0, 7], "spark": 0, "gold": [0, 3, 6, 8], "rush": 0, "ai": [0, 3, 4, 5, 6, 7, 9], "power": [0, 2, 3, 4, 5, 6, 7, 8, 9], "applic": [0, 1, 2, 3, 4, 6, 7, 8, 9], "howev": [0, 3, 4, 5, 6, 7, 8, 9], "beneath": 0, "surfac": [0, 5], "technolog": [0, 1, 4, 5, 6, 8], "revolut": [0, 4], "li": [0, 3, 5, 6, 7, 8, 9], "complex": [0, 1, 3, 5, 6, 7, 8, 9], "landscap": [0, 3, 5, 7], "softwar": [0, 1, 3, 4, 6, 7, 8, 9], "develop": [0, 1, 3, 4, 5, 6, 7, 8, 9], "tech": [0, 7, 8], "leader": [0, 2, 5, 8], "must": [0, 3, 4, 5, 7, 8, 9], "navig": [0, 2, 5, 6, 7, 8], "focus": [0, 3, 4, 5, 6, 7, 8, 9], "bring": [0, 3, 6, 7], "awar": [0, 3, 4, 5, 6, 8], "limit": [0, 1, 2, 4, 5, 7, 8, 9], "har": [0, 2, 5], "solut": [0, 2, 4, 5, 6, 7, 8], "overcom": [0, 5, 6], "them": [0, 1, 3, 4, 5, 6, 7, 8, 9], "robust": [0, 3, 4, 5, 6, 7, 8, 9], "It": [0, 3, 4, 5, 6, 7, 8, 9], "offer": [0, 3, 4, 5, 6, 7, 8, 9], "critic": [0, 2, 3, 4, 5, 6, 7, 8, 9], "implement": [0, 2, 3, 4, 5, 7, 9], "back": [0, 5, 6, 7, 8, 9], "reproduc": [0, 1, 2, 5, 7], "exampl": [0, 1, 2, 3, 5, 7, 8, 9], "while": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "mani": [0, 1, 3, 4, 5, 6, 7, 8, 9], "resourc": [0, 3, 4, 5, 6, 7, 8], "cover": [0, 3, 4, 5, 6, 7, 8, 9], "capabl": [0, 1, 2, 4, 5, 6, 7, 8, 9], "specif": [0, 3, 4, 5, 6, 7, 9], "hidden": [0, 3, 8], "pitfal": [0, 1, 3, 4, 5, 6, 7, 9], "engin": [0, 1, 2, 3, 4, 5, 6, 7, 8], "technic": [0, 1, 2, 3, 5, 6, 7, 9], "face": [0, 3, 4, 5, 6, 7, 8], "when": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "comprehens": [0, 2, 3, 4, 5, 6, 7, 8, 9], "guid": [0, 1, 3, 4, 5, 6, 7, 8, 9], "leverag": [0, 3, 5, 6, 7, 8, 9], "battl": [0, 2, 7], "test": [0, 2, 3, 4, 6, 7, 8, 9], "tool": [0, 1, 3, 4, 6], "throughout": [0, 4, 5, 6, 7, 8], "tackl": [0, 3, 5, 6, 8], "follow": [0, 3, 4, 5, 6, 7, 8, 9], "non": [0, 3, 6, 7, 8, 9], "exhaust": [0, 6, 7], "list": [0, 3, 5, 6, 7, 8, 9], "structur": [0, 3, 4, 5, 7, 8], "un": 0, "reliabl": [0, 1, 3, 4, 5, 6, 7, 8, 9], "struggl": [0, 1, 3, 5, 6, 7, 8, 9], "maintain": [0, 1, 3, 4, 5, 6, 7, 8, 9], "consist": [0, 1, 3, 4, 5, 6, 7, 8, 9], "output": [0, 1, 3, 5, 6, 7, 8], "format": [0, 3, 4, 5, 6, 7, 8, 9], "complic": [0, 8], "integr": [0, 1, 3, 4, 5, 6, 7, 8, 9], "larger": [0, 3, 4, 5, 6, 7, 8, 9], "make": [0, 3, 4, 5, 6, 7, 8, 9], "error": [0, 3, 5, 6, 8, 9], "handl": [0, 3, 4, 5, 6, 7, 8, 9], "more": [0, 1, 3, 5, 6, 7, 8, 9], "input": [0, 3, 5, 7, 8, 9], "data": [0, 1, 4, 5, 7, 8, 9], "manag": [0, 1, 4, 5, 7, 8, 9], "ar": [0, 1, 3, 4, 5, 6, 7, 8, 9], "sensit": [0, 3, 4, 5, 6, 7, 8], "oper": [0, 3, 5, 6, 7, 8, 9], "stale": [0, 6], "long": [0, 1, 3, 4, 5, 7, 8, 9], "context": [0, 1, 3, 4, 5, 6, 7, 8, 9], "requir": [0, 3, 6, 7, 8, 9], "care": [0, 3, 4, 5, 6, 7, 8, 9], "retriev": [0, 4, 5, 7], "strategi": [0, 3, 4, 5, 6, 7, 8, 9], "tradit": [0, 3, 6, 7, 8], "methodologi": [0, 3, 5, 7, 8, 9], "break": [0, 1, 3, 4, 5, 6, 8], "down": [0, 1, 4, 5, 6, 7, 8], "deal": [0, 3, 6, 7], "determinist": [0, 6, 9], "gener": [0, 1, 4, 7, 9], "new": [0, 2, 3, 4, 5, 6, 7, 8, 9], "safeti": [0, 3, 5, 9], "can": [0, 1, 3, 4, 5, 6, 7, 8, 9], "harm": [0, 3, 5, 7], "bias": [0, 3, 5, 6, 7, 8, 9], "inappropri": [0, 3, 8], "safeguard": [0, 5, 8], "monitor": [0, 3, 4, 5, 6, 7, 8], "ensur": [0, 3, 4, 5, 6, 7, 8, 9], "safe": [0, 3, 5, 8, 9], "deploy": [0, 3, 4, 5, 8, 9], "align": [0, 4, 5, 6, 7, 8, 9], "next": [0, 1, 3, 4, 5, 6, 7, 8, 9], "token": [0, 1, 3, 4, 5, 6, 7, 8, 9], "predict": [0, 1, 3, 5, 6, 7, 8, 9], "mean": [0, 3, 4, 5, 6, 7, 8, 9], "thei": [0, 1, 3, 4, 5, 6, 7, 8, 9], "user": [0, 1, 4, 5, 6, 7, 9], "": [0, 1, 3, 4, 5, 6, 7, 8, 9], "prefer": [0, 5, 6, 7, 8, 9], "default": [0, 3, 5, 6, 7, 8, 9], "vendor": [0, 4, 5, 7], "lock": [0, 3, 4, 7], "cloud": [0, 3, 4, 5, 6, 7, 8, 9], "base": [0, 1, 4, 7, 9], "provid": [0, 2, 3, 4, 5, 6, 7, 8, 9], "creat": [0, 1, 3, 4, 5, 6, 7, 8, 9], "signific": [0, 3, 4, 5, 6, 7, 8, 9], "depend": [0, 3, 4, 5, 6, 7, 9], "through": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "proprietari": [0, 3, 7, 8, 9], "infrastructur": [0, 4, 7], "difficult": [0, 3, 5, 6, 8], "switch": [0, 7], "self": [0, 3, 5, 6, 7, 8, 9], "host": [0, 4, 5, 7, 8], "cost": [0, 3, 5, 6, 8, 9], "optim": [0, 1, 5, 6, 7, 8], "The": [0, 1, 3, 6, 8, 9], "financi": [0, 1, 3, 4, 5, 6, 8, 9], "quickli": [0, 3, 4, 6, 7], "becom": [0, 3, 4, 5, 6, 7, 8, 9], "prohibit": [0, 3, 5, 6, 7], "without": [0, 1, 3, 4, 5, 6, 7, 8, 9], "conclud": [0, 5, 6, 7], "discuss": [0, 4, 5, 7, 8], "futur": [0, 3, 4, 5, 7, 8], "aris": [0, 3, 5, 6, 8], "move": [0, 3, 4, 5, 6, 7, 8], "forward": [0, 3, 5, 8], "take": [0, 2, 3, 4, 5, 6, 7, 8, 9], "hand": [0, 6, 7, 8, 9], "focu": [0, 2, 3, 4, 5, 6, 7, 8, 9], "access": [0, 3, 4, 5, 6, 7, 8, 9], "all": [0, 1, 3, 4, 5, 6, 7, 8, 9], "fulli": [0, 3, 5, 8], "document": [0, 3, 4, 5, 7, 8, 9], "allow": [0, 5, 6, 7, 8, 9], "reader": [0, 2, 6, 8], "replic": [0, 5, 6, 8, 9], "result": [0, 3, 4, 5, 6, 8, 9], "exactli": [0, 5, 6, 9], "design": [0, 1, 3, 6, 7, 9], "run": [0, 3, 4, 5, 6, 7, 8, 9], "consum": [0, 3, 4, 5, 6, 7, 8, 9], "grade": [0, 3, 4, 5, 6, 7, 8], "hardwar": [0, 3, 4, 5], "expens": [0, 3, 4, 5, 6, 7, 8], "avail": [0, 3, 4, 5, 6, 7, 8, 9], "notebook": [0, 3, 6, 9], "modifi": [0, 3, 5, 8, 9], "extend": [0, 3, 4, 5, 6, 7, 9], "minim": [0, 3, 4, 5, 6, 7, 8, 9], "effect": [0, 1, 3, 4, 5, 6, 8, 9], "framework": [0, 3, 4, 5, 7], "wai": [0, 3, 4, 5, 6, 7, 8, 9], "priorit": [0, 3, 5, 6, 7, 8], "transpar": [0, 3, 4, 5, 7, 8], "visibl": [0, 5], "being": [0, 3, 4, 5, 6, 7, 8, 9], "better": [0, 2, 3, 4, 5, 6, 7, 8, 9], "understand": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "custom": [0, 3, 5, 6, 9], "flexibl": [0, 4, 5, 6, 7, 8, 9], "adapt": [0, 3, 4, 5, 7, 8], "us": [0, 1, 3, 4, 7, 8, 9], "case": [0, 4, 5, 9], "unlik": [0, 3, 5, 7], "black": [0, 3], "box": [0, 7], "commerci": [0, 5, 7, 8, 9], "most": [0, 3, 4, 5, 6, 7, 8, 9], "freeli": [0, 9], "foster": [0, 3, 5, 8, 9], "reduc": [0, 3, 4, 5, 6, 7, 8, 9], "independ": [0, 5, 6, 8, 9], "freedom": [0, 7, 9], "architectur": [0, 3, 4, 5, 6, 7, 9], "decis": [0, 3, 4, 5, 6, 7, 8], "keep": [0, 3, 5, 6, 7, 8], "principl": [0, 3, 5, 7, 8], "itself": [0, 3, 5, 6, 7, 8], "live": [0, 1, 5, 6, 8], "evolv": [0, 4, 5, 6, 7, 8], "chang": [0, 3, 5, 6, 7, 8], "encourag": [0, 3, 5, 6, 8, 9], "report": [0, 3, 5, 6, 7, 8, 9], "suggest": [0, 3, 5, 6, 7, 8, 9], "improv": [0, 3, 4, 5, 6, 7, 8, 9], "contribut": [0, 4, 5, 6, 7, 8], "via": [0, 3, 4, 5, 6, 7, 8, 9], "pull": [0, 7], "request": [0, 3, 4, 5, 6, 7, 8, 9], "share": [0, 3, 5, 6, 7, 8, 9], "own": [0, 3, 4, 5, 6, 7, 8], "experi": [0, 3, 4, 5, 6, 7, 8, 9], "commun": [0, 3, 4, 5, 6, 8, 9], "propos": [0, 4, 5, 6, 8], "chapter": [0, 3, 4, 5, 6, 7, 8, 9], "section": [0, 3, 4, 5, 6, 7, 8, 9], "found": [0, 3, 4, 5, 7, 9], "http": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "com": [0, 2, 3, 4, 5, 6, 7, 8, 9], "souzatharsi": [0, 2, 3, 4, 5, 6, 7, 8, 9], "tamingllm": [0, 2, 3, 4, 5, 6, 7, 8, 9], "whether": [0, 3, 4, 5, 6, 7, 8, 9], "you": [0, 1, 3, 4, 5, 6, 7, 8, 9], "ve": [0, 7], "typo": [0, 8], "want": [0, 1, 3, 6, 7, 8, 9], "welcom": 0, "pleas": [0, 3, 5, 7, 8], "feel": [0, 6, 7], "free": [0, 1, 3, 5, 6, 7, 8], "look": [0, 2, 3, 4, 5, 6, 7, 8], "our": [0, 1, 3, 4, 5, 6, 7, 8, 9], "goal": [0, 1, 3, 5, 6, 8, 9], "discourag": [0, 6], "enabl": [0, 3, 4, 5, 6, 7, 8, 9], "By": [0, 1, 2, 3, 5, 6, 8, 9], "upfront": [0, 2, 4], "equip": [0, 2, 5, 6, 8], "avoid": [0, 3, 5, 7, 8, 9], "current": [0, 2, 3, 4, 5, 6, 8, 9], "discours": [0, 2], "around": [0, 2, 3, 5, 6, 7, 8, 9], "tend": [0, 2, 5, 8], "toward": [0, 3, 5, 8, 9], "extrem": [0, 3, 4, 5, 6, 8], "either": [0, 3, 5, 6, 7, 8], "uncrit": 0, "enthusiasm": 0, "wholesal": [0, 5], "dismiss": 0, "differ": [0, 3, 4, 5, 6, 7, 8, 9], "rather": [0, 1, 3, 4, 5, 6, 7, 8], "than": [0, 1, 3, 5, 6, 7, 8, 9], "theoret": [0, 3], "examin": [0, 3, 5, 6, 7, 8, 9], "first": [0, 1, 3, 4, 5, 6, 7, 8, 9], "everi": [0, 4, 5, 6, 8], "concept": [0, 3, 5, 6, 8], "illustr": [0, 3, 5, 6, 7, 8, 9], "execut": [0, 5, 7, 8], "immedi": [0, 3, 4, 5, 7], "analysi": [0, 1, 3, 4, 5, 6, 7, 8], "balanc": [0, 3, 4, 5, 6, 7, 8, 9], "both": [0, 3, 4, 5, 6, 7, 8], "help": [0, 3, 4, 5, 6, 7, 8, 9], "inform": [0, 3, 4, 5, 6, 7, 8, 9], "lead": [0, 1, 3, 4, 5, 6, 7, 8, 9], "genai": [0, 1, 3, 6, 8], "initi": [0, 1, 3, 4, 5, 6, 7, 8, 9], "advoc": [0, 8], "anyon": [0, 8], "seek": [0, 5, 6, 7, 8], "work": [0, 1, 3, 4, 5, 6, 7, 8, 9], "typic": [0, 3, 4, 5, 6, 7, 8, 9], "job": [0, 5, 6, 7, 8], "role": [0, 3, 5, 6, 7, 8, 9], "platform": [0, 5, 6, 7, 8, 9], "backend": [0, 3, 5], "exist": [0, 3, 4, 5, 7], "ml": [0, 6, 8], "transit": [0, 4, 5, 7, 9], "overse": 0, "motiv": [0, 3, 4, 5, 6, 9], "need": [0, 3, 4, 5, 6, 7, 8, 9], "readi": [0, 5, 6, 8], "desir": [0, 1, 3, 5, 6, 9], "perform": [0, 3, 5, 6, 8, 9], "earli": [0, 3, 4, 5, 6, 8, 9], "befor": [0, 3, 4, 5, 6, 8, 9], "costli": [0, 5, 6, 8], "problem": [0, 1, 2, 3, 4, 6, 7, 8], "too": [0, 1, 3, 5, 7, 8], "late": [0, 3, 4, 8, 9], "lifecycl": [0, 7, 8], "after": [0, 1, 3, 5, 6, 7, 8, 9], "read": [0, 3, 4, 5, 6, 8, 9], "implic": [0, 1, 3, 5, 8], "recommend": [0, 3, 5, 6, 7, 8, 9], "abl": [0, 3, 5, 9], "deploi": [0, 3, 5, 7, 8], "proper": [0, 3, 4, 7, 8, 9], "realist": [0, 3, 4, 8], "effort": [0, 5, 7, 8, 9], "estim": [0, 4, 5, 6, 8], "project": [0, 3, 4, 5, 6, 7, 8], "impact": [0, 3, 4, 5, 6, 7, 8, 9], "timelin": 0, "To": [0, 3, 5, 7, 8, 9], "should": [0, 3, 4, 5, 6, 7, 8, 9], "basic": [0, 3, 5, 6, 7, 8], "program": [0, 5, 6, 7, 9], "knowledg": [0, 3, 5, 7, 8], "mistral": [0, 3, 9], "openai": [0, 3, 5, 6, 7, 9], "anthrop": [0, 3, 6, 9], "similar": [0, 3, 4, 5, 6, 7, 9], "dive": [0, 4], "here": [0, 2, 3, 4, 5, 6, 7, 8, 9], "get": [0, 3, 4, 5, 6, 7, 8, 9], "start": [0, 3, 4, 5, 6, 7, 8, 9], "clone": [0, 3], "companion": 0, "git": 0, "cd": 0, "activ": [0, 3, 4, 5, 6, 7, 8], "virtual": [0, 5], "m": [0, 3, 5, 6, 7, 8, 9], "venv": [0, 9], "tame": [0, 3, 4, 5, 6, 7, 8, 9], "env": [0, 3, 5, 6, 8, 9], "bin": [0, 7], "On": [0, 5, 6, 7, 9], "window": [0, 4, 5, 6, 7], "script": [0, 7], "try": [0, 1, 3, 5, 6, 8, 9], "each": [0, 3, 4, 5, 6, 7, 8, 9], "contain": [0, 3, 4, 5, 6, 7, 8, 9], "possibl": [0, 3, 4, 5, 6, 7, 8, 9], "includ": [0, 1, 3, 4, 5, 6, 7, 8, 9], "necessari": [0, 3, 4, 5, 8], "instal": [0, 3, 5, 7, 9], "go": [0, 3, 5, 6, 9], "packag": [0, 4, 5, 6, 7, 9], "e": [0, 1, 3, 4, 5, 6, 7, 8, 9], "g": [0, 3, 4, 5, 6, 7, 8, 9], "pip": [0, 3, 5, 7, 9], "poetri": [0, 8], "file": [0, 3, 5, 6, 7, 8, 9], "root": [0, 3], "directori": [0, 5, 6, 7], "add": [0, 3, 5, 6, 7, 8], "other": [0, 3, 4, 5, 6, 7, 8, 9], "openai_api_kei": [0, 3], "your_openai_api_key_her": 0, "never": [0, 9], "commit": [0, 3, 5, 8], "version": [0, 3, 4, 5, 6, 7, 8, 9], "control": [0, 1, 3, 4, 5, 6, 7, 8, 9], "kept": [0, 5], "privat": [0, 5], "If": [0, 1, 3, 4, 5, 6, 7, 8, 9], "encount": [0, 2, 5, 8], "rate": [0, 3, 4, 5, 6, 7, 8], "consid": [0, 3, 4, 5, 6, 7, 8, 9], "smaller": [0, 3, 4, 5, 6, 7, 9], "retri": [0, 9], "logic": [0, 1, 3, 5, 6, 8], "conflict": [0, 3, 5], "fresh": 0, "like": [0, 1, 3, 4, 5, 6, 7, 8, 9], "check": [0, 5, 6, 7, 8, 9], "page": [0, 5, 6, 7], "known": [0, 5, 6, 8, 9], "now": [0, 1, 3, 4, 5, 6, 7, 8, 9], "let": [0, 3, 4, 5, 6, 7, 8, 9], "begin": [0, 5, 7, 8, 9], "explor": [0, 1, 3, 4, 5, 6, 7, 8, 9], "tharsi": [0, 2, 3, 4, 5, 6, 7, 8, 9], "souza": [0, 2, 3, 4, 5, 6, 7, 8, 9], "ph": [0, 8], "d": [0, 3, 4, 5, 6, 7, 8, 9], "scienc": [0, 3, 5, 8], "ucl": 0, "univers": [0, 5, 7, 8], "london": 0, "scientist": [0, 1, 7, 8], "special": [0, 4, 5, 6, 7, 8, 9], "he": [0, 3, 5, 6, 8], "lectur": 0, "columbia": 0, "master": [0, 4, 7, 9], "appli": [0, 3, 5, 6, 7, 8, 9], "analyt": 0, "incom": [0, 5, 6], "head": [0, 3, 5, 6, 8, 9], "equiti": [0, 5, 6], "citadel": 0, "former": [0, 1, 5, 7], "senior": [0, 5], "vp": 0, "two": [0, 3, 4, 5, 6, 7, 8, 9], "sigma": [0, 3], "invest": [0, 3, 4, 5, 6, 8], "mentor": 0, "under": [0, 3, 4, 5, 7, 8, 9], "repres": [0, 3, 4, 5, 6, 7, 9], "student": [0, 3, 6, 8], "profession": [0, 3, 5, 6, 8, 9], "divers": [0, 3, 4, 5, 6, 8], "global": [0, 5, 6, 8], "ecosystem": [0, 4, 5, 7], "With": [0, 3, 5, 6, 7, 8, 9], "over": [0, 2, 3, 4, 5, 6, 7, 8, 9], "15": [0, 5, 6, 7, 8, 9], "deliv": [0, 4, 5, 6, 7], "across": [0, 3, 4, 5, 6, 7, 8, 9], "startup": 0, "fortun": 0, "500": [0, 3, 5, 6, 8], "compani": [0, 3, 4, 5, 6, 8, 9], "also": [0, 3, 4, 5, 6, 7, 8, 9], "numer": [0, 4, 5, 6, 8, 9], "scholarli": 0, "frequent": [0, 5, 6, 7, 9], "speaker": [0, 5], "academ": [0, 3, 5, 8], "busi": [0, 5, 6, 7, 8], "confer": [0, 6, 9], "ground": [0, 3, 5, 6, 7], "background": [0, 1, 5, 6, 7], "draw": [0, 3, 5, 8, 9], "scale": [0, 3, 4, 5, 6, 7, 8, 9], "stage": [0, 3, 8, 9], "major": [0, 3, 4, 5, 6, 7, 8, 9], "institut": [0, 5, 8], "well": [0, 3, 4, 5, 6, 7, 8, 9], "uniqu": [0, 3, 4, 5, 6, 7, 8, 9], "bridg": [0, 7, 8], "gap": [0, 1, 3, 4, 6, 7, 8], "between": [0, 1, 3, 4, 5, 6, 7, 8, 9], "potenti": [0, 1, 3, 4, 5, 6, 7, 8, 9], "tell": [1, 3, 8], "mere": [1, 5], "what": [1, 3, 4, 5, 6, 7, 8, 9], "someth": [1, 5, 7], "i": [1, 2, 4, 5, 7, 8, 9], "emanuel": [1, 3, 5, 8], "derman": 1, "an": [1, 2, 3, 4, 5, 6, 7, 8, 9], "altern": [1, 3, 4, 5, 6, 7, 8], "titl": [1, 2, 3, 4, 5, 6, 7, 8, 9], "thi": [1, 2, 3, 4, 5, 6, 7, 8, 9], "book": [1, 5, 6], "could": [1, 3, 4, 5, 6, 7, 8, 9], "been": [1, 3, 4, 5, 6, 7, 8], "behav": 1, "badli": 1, "come": [1, 3, 5, 6, 7, 8, 9], "notic": [1, 3, 4, 5, 6, 8, 9], "parallel": [1, 3, 5, 7], "semin": [1, 8], "2011": 1, "coincident": 1, "just": [1, 3, 4, 5, 6, 7, 8, 9], "caution": 1, "against": [1, 3, 4, 5, 6, 7, 8], "treat": [1, 5, 8], "perfect": [1, 5, 7], "represent": [1, 5, 6, 7, 8], "realiti": [1, 6, 8], "aim": [1, 3, 4, 5, 6, 7, 8, 9], "highlight": [1, 3, 5, 6, 7, 8, 9], "practic": [1, 3, 4, 5, 6, 8], "physicist": 1, "goldman": 1, "sach": 1, "quant": 1, "scientif": [1, 3, 5, 7], "fail": [1, 3, 5, 6, 8], "we": [1, 3, 4, 5, 6, 7, 8, 9], "mistak": [1, 8], "approxim": [1, 4, 5, 9], "full": [1, 3, 4, 5, 6, 7, 8, 9], "assumpt": [1, 5, 8], "core": [1, 4, 5, 6, 7, 8], "premis": [1, 7], "hi": [1, 5, 8, 9], "aspect": [1, 3, 5, 6, 8], "world": [1, 3, 4, 5, 6, 7, 8, 9], "inher": [1, 2, 3, 5, 8], "involv": [1, 3, 4, 5, 6, 7, 8, 9], "simplif": 1, "argu": [1, 4, 8, 9], "crise": 1, "2008": 1, "crash": 1, "occur": [1, 3, 5, 8], "part": [1, 3, 4, 5, 6, 8, 9], "becaus": [1, 3, 5, 6, 8], "peopl": [1, 3, 5, 7, 8], "put": [1, 5, 7], "much": [1, 3, 5, 6, 7], "faith": 1, "mathemat": [1, 5, 6, 7, 9], "recogn": [1, 3, 5, 8], "human": [1, 4, 5, 6, 7, 8, 9], "behavior": [1, 3, 5, 7, 8], "market": [1, 4, 5, 6, 7, 9], "dynam": [1, 3, 5, 6, 8], "constraint": [1, 3, 4, 5, 6, 7, 8, 9], "hallucin": [1, 3, 5, 6, 8, 9], "fact": [1, 3, 5, 6, 8], "reason": [1, 3, 5, 6, 7, 8, 9], "Their": [1, 5, 9], "respons": [1, 4, 5, 6, 7, 8, 9], "often": [1, 3, 4, 5, 6, 7, 8, 9], "convinc": [1, 3], "probabilist": [1, 5, 9], "train": [1, 4, 5, 6, 7, 8, 9], "true": [1, 3, 4, 5, 6, 8, 9], "even": [1, 3, 4, 5, 6, 7, 8, 9], "though": [1, 3, 4, 5, 6, 7, 8, 9], "insist": 1, "machin": [1, 3, 6, 7, 8, 9], "todai": [1, 4, 7, 9], "grow": [1, 3, 5, 6, 7, 8, 9], "pervas": [1, 8], "belief": [1, 7, 8], "solv": [1, 3, 4, 5, 7, 8, 9], "ani": [1, 3, 4, 5, 6, 7, 8, 9], "content": 1, "moreov": [1, 6], "were": [1, 3, 5, 7, 8, 9], "chatbot": [1, 3, 5, 6, 7, 8], "twist": [1, 8], "wrap": [1, 6, 7, 9], "further": [1, 3, 4, 5, 6, 7, 8, 9], "daili": [1, 4, 7, 8], "life": [1, 5, 7, 8], "workflow": [1, 4, 5, 7, 8, 9], "affect": [1, 5, 6, 7, 8], "decid": [1, 3, 5, 6], "action": [1, 3, 5, 6, 8], "coupl": [1, 7], "lack": [1, 3, 5, 6, 8, 9], "pose": [1, 3, 5, 6, 8, 9], "risk": [1, 3, 4, 5, 6, 7], "still": [1, 4, 5, 6, 7, 8], "figur": [1, 5, 7], "out": [1, 3, 4, 5, 6, 7, 8, 9], "serv": [1, 3, 4, 5, 6, 8, 9], "introductori": [1, 2], "practition": [1, 4, 5, 7, 9], "builder": [1, 7], "who": [1, 3, 5, 6, 7, 8, 9], "remain": [1, 3, 4, 5, 6, 7, 8], "clear": [1, 3, 4, 5, 6, 7, 8, 9], "ei": 1, "about": [1, 3, 4, 5, 6, 7, 8, 9], "therefor": [1, 3, 5, 6, 7, 8], "end": [1, 3, 4, 5, 6, 7, 8, 9], "detail": [1, 3, 4, 5, 6, 7, 8, 9], "python": [1, 2, 5, 6, 7, 8, 9], "code": [1, 2, 3, 5, 6, 7, 8, 9], "diminish": [1, 3, 4, 5, 6], "promot": [1, 3, 5, 8], "nuanc": [1, 3, 5, 6, 7, 8, 9], "acknowledg": [1, 5, 8], "within": [1, 3, 4, 5, 6, 7, 8, 9], "trustworthi": [1, 8], "taught": 1, "u": [1, 3, 5, 6, 8, 9], "step": [1, 3, 4, 5, 6, 7, 8, 9], "where": [1, 3, 4, 5, 6, 7, 8, 9], "der11": 1, "why": [1, 3, 5, 8, 9], "confus": [1, 4, 8], "illus": 1, "disast": [1, 5], "wall": [1, 7], "street": [1, 7], "press": [1, 5, 7], "isbn": [1, 3, 5, 6], "9781439165010": 1, "url": [1, 2, 3, 4, 5, 6, 7, 8, 9], "googl": [1, 5, 7, 9], "co": [1, 3, 4, 5, 6, 7, 8, 9], "uk": [1, 8], "id": [1, 5, 6, 7, 8, 9], "lke_cwm4wm8c": 1, "sign": [2, 5, 8], "up": [2, 3, 4, 5, 6, 7, 8], "receiv": [2, 3, 5, 7, 8, 9], "updat": [2, 3, 4, 5, 6, 7, 8, 9], "abstract": [2, 5, 6, 8, 9], "heavili": [2, 3, 4, 5, 6, 8, 9], "gloss": 2, "fundament": [2, 3, 5, 6, 7, 8, 9], "challeng": [2, 3, 4, 5, 7, 8, 9], "convers": [2, 3, 4, 5, 6, 7, 8, 9], "kei": [2, 3, 4, 6, 7, 8, 9], "proven": [2, 4], "yet": [2, 3, 4, 5, 6, 7, 8, 9], "concret": [2, 4, 8, 9], "sidestep": 2, "misc": [2, 3, 4, 5, 6, 7, 8, 9], "tharsistpsouza2024tamingllm": [2, 3, 4, 5, 6, 7, 8, 9], "author": [2, 3, 4, 5, 6, 7, 8, 9], "t": [2, 3, 4, 5, 6, 7, 8, 9], "p": [2, 3, 4, 5, 6, 7, 8, 9], "2024": [2, 3, 4, 5, 6, 8, 9], "journal": [2, 3, 4, 5, 6, 7, 8, 9], "repositori": [2, 3, 4, 5, 6, 7, 8, 9], "valu": [3, 5, 6, 7, 8, 9], "its": [3, 4, 5, 6, 7, 8, 9], "privileg": 3, "abov": [3, 5, 6, 8], "soon": [3, 9], "lose": [3, 5], "dwight": 3, "eisenhow": 3, "releas": [3, 4, 5, 6, 7, 8], "3": [3, 4, 5, 6, 7, 9], "5": [3, 4, 5, 6, 7, 9], "2022": [3, 5, 7, 8], "mark": [3, 5, 6, 7, 8], "moment": [3, 8], "histori": [3, 4, 5, 6, 7], "artifici": [3, 5, 7, 8], "intellig": [3, 5, 6, 7, 8], "five": [3, 5, 8], "dai": [3, 4, 5, 6, 7, 8, 9], "launch": [3, 5, 8], "attract": [3, 5], "million": [3, 4, 5, 6, 7], "month": [3, 4, 5, 7, 8], "becam": [3, 4], "fastest": [3, 5, 8], "100": [3, 4, 5, 7, 8, 9], "monthli": [3, 4, 5], "rais": [3, 4, 5, 8], "intrigu": 3, "question": [3, 4, 5, 6, 7, 8, 9], "did": [3, 5, 6, 9], "observ": [3, 4, 5, 6, 7, 8, 9], "dramat": [3, 4, 5, 7, 9], "traction": [3, 7], "predecessor": 3, "gpt": [3, 4, 5, 6, 7, 8, 9], "had": [3, 5, 8], "same": [3, 5, 6, 7, 8, 9], "size": [3, 5, 6, 7, 8, 9], "number": [3, 4, 5, 6, 7, 8, 9], "paramet": [3, 4, 5, 6, 7, 8, 9], "far": [3, 4, 7, 8], "less": [3, 4, 5, 6, 7, 8], "attent": [3, 4, 6, 7], "arguabl": [3, 5, 6, 7], "feedback": [3, 5, 8, 9], "abil": [3, 4, 5, 6, 7, 8, 9], "breakthrough": [3, 7, 8], "demonstr": [3, 4, 5, 6, 7, 8, 9], "crucial": [3, 4, 6, 7, 8, 9], "greater": [3, 5, 6, 7, 8], "process": [3, 4, 5, 6, 7, 8], "modern": [3, 5, 6, 9], "techniqu": [3, 4, 5, 6, 7], "direct": [3, 5, 7, 8], "rafailov": 3, "et": [3, 4, 5, 6, 7, 8, 9], "al": [3, 4, 5, 6, 7, 8, 9], "present": [3, 5, 6, 7, 8, 9], "autom": [3, 4, 5, 8, 9], "fashion": [3, 9], "open": [3, 4, 5, 6, 8, 9], "sourc": [3, 4, 5, 6, 8, 9], "common": [3, 4, 5, 6, 7, 9], "pre": [3, 4, 5, 6, 7, 8, 9], "state": [3, 5, 6, 7, 8, 9], "art": [3, 5, 8], "object": [3, 4, 5, 6, 7, 8, 9], "veri": [3, 4, 5, 6, 7, 8], "ask": [3, 5, 6, 7, 8, 9], "instruct": [3, 4, 5, 6, 7, 8, 9], "sai": [3, 9], "ouyang": [3, 8], "2": [3, 4, 5, 6, 9], "explain": [3, 5, 6], "moon": 3, "land": [3, 5, 7], "6": [3, 4, 5, 6, 7], "old": [3, 5], "import": [3, 4, 5, 6, 7, 8, 9], "pipelin": [3, 4, 5, 7, 8, 9], "pipe": [3, 8], "text": [3, 4, 5, 6, 7, 8, 9], "gpt2": [3, 5], "msg": [3, 6], "short": [3, 5, 6, 8, 9], "sentenc": [3, 5, 6, 8], "_": [3, 5, 8, 9], "rang": [3, 4, 5, 6, 7, 8, 9], "len": [3, 5, 6, 7, 8, 9], "print": [3, 4, 5, 6, 7, 8, 9], "f": [3, 4, 5, 6, 7, 8, 9], "n": [3, 5, 6, 7, 8, 9], "1": [3, 4, 5, 6, 7, 9], "0": [3, 4, 5, 6, 7, 8, 9], "generated_text": [3, 9], "good": [3, 5, 6, 7, 9], "idea": [3, 4, 7, 8, 9], "one": [3, 4, 5, 6, 7, 8, 9], "those": [3, 5, 6, 8, 9], "littl": [3, 5], "green": [3, 6, 8], "dot": [3, 4, 6], "Then": [3, 4, 5, 6], "line": [3, 5, 6, 7, 8], "later": [3, 5, 6, 7, 8, 9], "re": [3, 4, 5, 6, 7, 8, 9], "alreadi": [3, 5, 6, 9], "movi": 3, "theori": [3, 5, 6], "some": [3, 5, 6, 7, 8, 9], "word": [3, 4, 5, 6, 8, 9], "tepid": 3, "articl": [3, 5, 7, 8], "sure": [3, 5, 6, 8, 9], "lunar": 3, "As": [3, 4, 5, 6, 7, 8, 9], "see": [3, 4, 5, 6, 7, 8, 9], "coher": [3, 5, 6, 7, 9], "explan": [3, 5, 8, 9], "child": [3, 5, 8], "complet": [3, 5, 6, 7, 8, 9], "instead": [3, 4, 5, 6, 7, 8, 9], "second": [3, 4, 5, 6, 7, 8], "nonsens": [3, 8], "meander": 3, "unrel": [3, 5, 8], "topic": [3, 5, 6, 7, 8, 9], "simpl": [3, 5, 6, 7, 8, 9], "appropri": [3, 4, 5, 6, 7, 8, 9], "young": [3, 5, 8], "given": [3, 4, 5, 6, 7, 8, 9], "sequenc": [3, 5, 6, 7, 9], "address": [3, 4, 5, 6, 7, 8, 9], "issu": [3, 5, 6, 8, 9], "introduc": [3, 5, 6, 7, 8, 9], "rlhf": [3, 4, 8, 9], "intent": [3, 8], "wide": [3, 4, 5, 6, 7, 8, 9], "task": [3, 4, 6, 8, 9], "fig": [3, 4, 5, 6, 7, 8, 9], "7": [3, 4, 5, 6, 7, 8], "collect": [3, 5, 6, 7, 8, 9], "sampl": [3, 6, 7, 9], "label": [3, 5, 7, 8, 9], "comparison": [3, 6], "reward": [3, 5, 7, 8], "sever": [3, 4, 5, 6, 7, 8, 9], "rank": [3, 5, 6, 7, 8], "best": [3, 4, 5, 6, 7, 8], "worst": 3, "rm": [3, 7], "reinforc": [3, 5, 7, 8], "write": [3, 5, 6, 7, 8, 9], "stori": [3, 8], "frog": 3, "calcul": [3, 4, 5, 6, 7, 8, 9], "score": [3, 4, 5, 6, 7, 8, 9], "ppo": [3, 7], "proxim": [3, 7], "iter": [3, 5, 6, 7, 8, 9], "accur": [3, 4, 5, 6, 7, 8], "undesir": [3, 8], "simplifi": [3, 5, 6, 7, 9], "view": [3, 5, 6, 8], "show": [3, 4, 5, 6, 7, 8, 9], "progress": [3, 4, 8], "pattern": [3, 4, 5, 6, 7, 8, 9], "ha": [3, 4, 5, 6, 7, 8, 9], "instanc": [3, 4, 5, 6, 7, 8], "directli": [3, 4, 5, 6, 7, 8, 9], "For": [3, 4, 5, 6, 7, 8, 9], "guard": 3, "team": [3, 5, 6, 7, 9], "8b": [3, 7, 8, 9], "wa": [3, 4, 5, 6, 7, 8, 9], "classif": [3, 5, 6, 7, 8, 9], "bypass": [3, 8], "similarli": [3, 4, 5, 7, 8], "zephyr": 3, "7b": [3, 5, 7, 8, 9], "alpha": [3, 5, 9], "huggingfac": [3, 4, 5, 6, 7, 8, 9], "publicli": [3, 5, 9], "assist": [3, 5, 6, 7, 8, 9], "paper": [3, 5, 7, 8, 9], "compon": [3, 5, 6, 7], "particular": [3, 4, 5, 6, 7, 8, 9], "foundat": [3, 4, 5, 6, 7, 8], "advanc": [3, 4, 5, 6, 7, 8, 9], "method": [3, 5, 6, 8, 9], "strong": [3, 5, 6, 7, 8, 9], "At": [3, 4, 5, 6, 7, 9], "high": [3, 4, 5, 6, 7, 8, 9], "level": [3, 4, 5, 6, 8, 9], "carefulli": [3, 4, 5, 6, 7, 8, 9], "curat": [3, 5, 7], "purpos": [3, 5, 6, 7, 8, 9], "exhibit": [3, 5, 7, 8], "domain": [3, 4, 5, 6, 7, 8], "emploi": [3, 5, 6, 8, 9], "prove": [3, 5, 6, 8], "particularli": [3, 4, 5, 6, 7, 8, 9], "valuabl": [3, 5, 6, 7, 9], "scenario": [3, 5, 7, 8, 9], "precis": [3, 4, 5, 6, 7, 8, 9], "style": [3, 5], "tone": 3, "expertis": [3, 5, 6, 8], "medic": [3, 5, 7], "legal": [3, 5, 6, 7, 8], "field": [3, 5, 6, 7, 8, 9], "adher": [3, 5, 6, 8, 9], "guidelin": [3, 5, 8], "servic": [3, 4, 5, 6, 7, 8], "standard": [3, 4, 5, 6, 7, 8], "approach": [3, 5, 6, 7, 9], "distinct": [3, 5, 7, 8, 9], "advantag": [3, 4, 5, 6, 7, 8, 9], "weight": [3, 4, 5, 6, 7, 8, 9], "maximum": [3, 5, 6, 7, 8], "lora": [3, 7, 8], "low": [3, 4, 5, 6, 7, 8, 9], "hu": [3, 6, 8, 9], "2021": [3, 4, 5, 6], "small": [3, 4, 5, 6, 7, 9], "matric": 3, "effici": [3, 4, 5, 6, 7, 8, 9], "qlora": 3, "quantiz": [3, 6], "dettmer": 3, "2023": [3, 4, 5, 6, 7, 8, 9], "combin": [3, 4, 5, 6, 7, 8, 9], "memori": [3, 4, 5, 6, 7, 8], "footprint": [3, 4, 6, 7], "modest": [3, 7], "increas": [3, 4, 5, 6, 7, 8, 9], "likelihood": [3, 5, 6, 8, 9], "obtain": [3, 5, 6, 7, 8, 9], "probabl": [3, 5, 7, 9], "outcom": [3, 5, 8, 9], "hong": [3, 5], "unintend": [3, 8], "suboptim": 3, "seen": [3, 5, 6, 8], "form": [3, 4, 5, 7, 8, 9], "research": [3, 4, 5, 6, 7], "maxim": [3, 5, 6], "shown": [3, 5, 6, 7, 8], "alon": [3, 5, 6, 7, 8], "gain": [3, 4, 5, 7, 8], "achiev": [3, 4, 5, 6, 7, 8, 9], "bai": [3, 5, 8], "touvron": [3, 7], "schulman": [3, 8], "2017": [3, 5], "algorithm": [3, 5, 8], "popular": [3, 6, 7, 9], "sinc": [3, 4, 5, 6, 7, 8, 9], "understood": [3, 6], "set": [3, 4, 5, 6, 7, 8, 9], "rule": [3, 5, 6, 7, 9], "govern": [3, 5, 6], "reflect": [3, 5, 6, 7, 8], "anoth": [3, 5, 6, 7, 8], "adjust": [3, 5, 7, 8, 9], "One": [3, 4, 5, 6, 7, 8, 9], "strength": [3, 5, 6, 7, 8], "2024c": [3, 7], "real": [3, 4, 5, 6, 7, 8, 9], "noisi": 3, "delai": [3, 5, 7, 8], "subsequ": [3, 6, 9], "situat": [3, 5, 6, 8], "clip": 3, "surrog": 3, "function": [3, 4, 5, 6, 7, 8, 9], "stabl": [3, 5, 6], "prevent": [3, 4, 5, 8, 9], "overreact": 3, "converg": 3, "due": [3, 5, 6, 7, 8], "simplic": [3, 7], "award": [3, 5], "runner": 3, "neurip": 3, "blog": [3, 4, 5, 7, 8, 9], "4": [3, 4, 5, 6, 7, 9], "fit": [3, 4, 5, 6, 8, 9], "pair": [3, 5, 6, 8], "rl": [3, 8], "find": [3, 4, 5, 6, 7, 8, 9], "contrast": [3, 4, 5, 6, 7, 8, 9], "satisfi": [3, 5], "implicit": [3, 5, 6, 8], "whose": [3, 5], "correspond": [3, 5, 6, 9], "extract": [3, 4, 5, 7, 8, 9], "close": [3, 5, 6, 7, 8], "compar": [3, 4, 5, 6, 7, 8], "assign": [3, 5, 6, 7, 8, 9], "higher": [3, 4, 5, 6, 7, 9], "kl": [3, 7], "diverg": [3, 7], "origin": [3, 4, 5, 6, 7, 8, 9], "preserv": [3, 6, 7, 8, 9], "defin": [3, 4, 5, 6, 7, 8, 9], "equat": 3, "mathcal": 3, "l": [3, 5, 6], "pi_": 3, "theta": [3, 9], "ref": 3, "mathbb": [3, 9], "x": [3, 5, 6, 7, 8, 9], "y_w": 3, "y_l": 3, "sim": [3, 9], "left": [3, 6, 7], "log": [3, 4, 5, 7], "beta": [3, 5, 6, 8, 9], "frac": [3, 7, 8], "right": [3, 5, 6, 7, 8], "respect": [3, 5, 6, 7, 8], "deviat": [3, 5, 7, 8], "straightforward": [3, 5, 6, 7, 8, 9], "librari": [3, 4, 5, 6, 7, 8, 9], "trl": [3, 7, 8], "2024d": [3, 7], "suit": [3, 5, 8], "friendli": [3, 5, 7], "interfac": [3, 4, 5, 6, 7, 8, 9], "featur": [3, 5, 6, 7, 8, 9], "distinguish": [3, 5, 8], "scalabl": [3, 5, 6, 8], "doe": [3, 5, 6, 7, 8, 9], "pretrain": [3, 5, 6, 7], "hou": [3, 5, 7], "poor": [3, 5, 6, 8], "return": [3, 4, 5, 6, 7, 8, 9], "addit": [3, 4, 5, 6, 7, 8, 9], "benefit": [3, 4, 5, 6, 7, 8, 9], "fix": [3, 5, 6, 7, 8], "invers": 3, "trend": [3, 4, 5, 6, 8], "util": [3, 4, 5, 6, 7, 8], "rapid": [3, 5, 6, 7, 8], "yield": [3, 4, 5, 6], "onli": [3, 4, 5, 6, 7, 8, 9], "margin": [3, 5, 6, 8, 9], "capit": [3, 5, 6, 9], "inaccuraci": [3, 5, 6], "nois": 3, "dure": [3, 4, 5, 6, 7, 8, 9], "accuraci": [3, 4, 5, 6, 7, 8, 9], "lag": [3, 5, 8], "significantli": [3, 4, 5, 6, 7, 8], "indic": [3, 5, 6, 7, 8, 9], "signal": [3, 6, 8], "plateau": 3, "sophist": [3, 5, 6, 7, 8], "previou": [3, 5, 6, 7, 9], "deriv": [3, 5, 6, 7], "pairwis": [3, 5], "feng": [3, 8], "substanti": [3, 4, 5, 6, 7, 8], "wors": [3, 6, 7, 9], "influenc": [3, 5, 6, 8, 9], "success": [3, 4, 5, 6, 7, 8, 9], "imbal": 3, "stronger": 3, "bad": 3, "ones": [3, 6, 7, 8], "loss": [3, 4, 5, 6, 7, 8], "gradient": [3, 5, 8], "dispref": 3, "unbalanc": 3, "trajectori": [3, 4], "stuck": 3, "saddl": 3, "point": [3, 4, 5, 6, 7, 8], "These": [3, 4, 5, 6, 7, 8, 9], "phenomenon": [3, 8, 9], "degrad": [3, 4, 5, 6, 7, 8, 9], "danger": [3, 7, 8], "loop": [3, 5, 7, 8], "recurs": [3, 6], "kazdan": 3, "qualiti": [3, 4, 5, 6, 7, 8, 9], "pollut": 3, "replac": [3, 5, 6, 7], "amplif": 3, "reduct": [3, 4, 5, 6, 7], "express": [3, 4, 5, 6, 8, 9], "catastroph": [3, 6, 8], "forget": [3, 6, 9], "previous": [3, 5, 6, 8, 9], "mitig": [3, 4, 5, 6, 7, 8, 9], "organ": [3, 4, 5, 6, 7], "mix": [3, 5, 6, 8, 9], "metric": [3, 6, 7, 8], "sz\u00e9p": 3, "guidanc": [3, 9], "regular": [3, 5, 7, 8, 9], "insight": [3, 4, 5, 6, 7, 8, 9], "relev": [3, 4, 5, 6, 7, 8], "scarc": 3, "behaviour": 3, "strateg": [3, 5, 6, 7, 8, 9], "compli": [3, 4, 5, 6, 7, 8, 9], "modif": [3, 5, 7, 8], "outsid": [3, 5], "evidenc": 3, "landmark": 3, "askel": [3, 5, 8], "2024a": [3, 6, 7, 9], "dec": 3, "explicitli": [3, 5, 7], "so": [3, 4, 5, 6, 8, 9], "might": [3, 4, 5, 6, 7, 8, 9], "pretend": 3, "adopt": [3, 5, 7, 8, 9], "actual": [3, 5, 6, 7, 8, 9], "onc": [3, 5, 6, 7, 8], "describ": [3, 5, 7, 8], "harmless": [3, 8], "told": 3, "retrain": [3, 7], "queri": [3, 5, 6], "tier": [3, 4, 5, 8], "paid": [3, 5, 6], "column": [3, 5, 6, 8], "condit": [3, 5, 6, 9], "toxic": [3, 7, 8], "excerpt": [3, 5, 7], "scratchpad": 3, "refus": [3, 8, 9], "happen": [3, 6, 8], "bomb": [3, 8], "engag": [3, 4, 5, 6, 7, 8, 9], "intern": [3, 5, 6, 8], "unmonitor": 3, "longer": [3, 5, 7], "believ": [3, 5, 7, 8, 9], "act": [3, 5, 6, 7, 8, 9], "therebi": [3, 5], "reveal": [3, 4, 5, 6, 7, 8], "complianc": [3, 4, 5, 6, 7, 8], "phase": [3, 4, 5, 7, 9], "natur": [3, 5, 6, 7, 8, 9], "evid": [3, 5, 6, 7, 8, 9], "seemingli": [3, 6], "surpris": 3, "appear": [3, 5, 6, 8, 9], "criteria": [3, 5, 8], "underli": [3, 5, 6, 8, 9], "anim": [3, 8], "welfar": 3, "instil": 3, "implicitli": 3, "consequ": [3, 5, 6, 7, 8, 9], "explicit": [3, 5, 7, 8, 9], "chain": [3, 5, 6], "thought": [3, 5, 6, 7, 9], "opaqu": 3, "opu": 3, "sonnet": [3, 5, 7], "wherea": [3, 5], "haiku": [3, 8], "persist": [3, 4, 6], "resist": [3, 5], "embed": [3, 4, 5, 6, 7], "doesn": [3, 5, 6, 7, 9], "anti": [3, 5], "lab": 3, "exfiltr": [3, 8], "protect": [3, 4, 5, 7, 8], "Not": [3, 5, 6, 8], "malici": [3, 5, 8], "support": [3, 5, 6, 8, 9], "concern": [3, 5, 6, 7, 8], "mechan": [3, 4, 5, 6, 7, 8, 9], "insuffici": [3, 5], "don": [3, 5, 6, 9], "concerningli": 3, "call": [3, 4, 5, 6, 7, 8, 9], "detect": [3, 5, 8, 9], "decept": [3, 5, 8], "warrant": [3, 8], "deeper": [3, 5, 6], "scrutini": [3, 5, 8], "reli": [3, 5, 6, 8, 9], "cross": [3, 5, 6, 7, 8], "circular": 3, "bia": [3, 5, 8, 9], "truli": [3, 5, 7], "trust": [3, 5, 6, 8, 9], "referenti": 3, "ly": 3, "hood": [3, 9], "deep": [3, 5, 6, 8, 9], "mechanist": 3, "drive": [3, 4, 8, 9], "correl": [3, 4, 5, 7], "miss": [3, 5, 6, 8], "confound": 3, "factor": [3, 4, 5, 6, 7, 9], "establish": [3, 4, 5, 7, 8], "attempt": [3, 5, 8, 9], "causal": [3, 5], "heavi": 3, "relianc": [3, 4, 5, 6, 8], "oversimplifi": 3, "frame": 3, "subtler": 3, "narr": [3, 5], "internet": [3, 5], "henc": [3, 4, 5, 6, 7, 8, 9], "agenc": [3, 5, 6, 8], "onto": 3, "anthropomorph": 3, "obscur": 3, "blind": [3, 5], "failur": [3, 4, 5, 6, 8, 9], "mode": [3, 7, 8], "map": [3, 4, 5, 6, 7, 9], "cleanli": 3, "analogi": 3, "interest": [3, 4, 5, 6, 7, 8, 9], "empir": 3, "excel": [3, 5, 6, 7, 8, 9], "review": [3, 4, 5, 6, 7, 8, 9], "prof": [3, 8], "jacob": [3, 5, 6, 7, 8], "andrea": [3, 5, 8], "yoshua": [3, 6, 8], "bengio": [3, 6, 8], "jasjeet": 3, "sekhon": [3, 6], "dr": 3, "rohin": 3, "shah": 3, "2024b": [3, 6, 7, 9], "assum": [3, 5, 6, 8], "acm": [3, 6, 8], "inc": [3, 5, 6, 9], "dedic": [3, 5, 6, 7, 8], "democrat": [3, 4, 5, 6, 7, 9], "educ": [3, 5, 6], "k": [3, 5, 6, 8, 9], "12": [3, 4, 5, 6, 7, 8], "name": [3, 4, 5, 6, 7, 8, 9], "smolk": 3, "ll": [3, 5, 7], "walk": 3, "measur": [3, 4, 5, 6, 7, 8], "huggingfacetb": [3, 9], "360m": [3, 5, 7], "compact": [3, 5, 6, 7, 8], "famili": [3, 8, 9], "publish": [3, 6, 8, 9], "api": [3, 4, 5, 6, 7, 9], "local": [3, 4, 5, 6, 8, 9], "infer": [3, 4, 5, 6, 7, 8, 9], "remot": [3, 5], "load": [3, 4, 5, 6, 7, 8, 9], "store": [3, 4, 5, 6, 8], "eventu": [3, 5, 7], "final": [3, 5, 6, 8, 9], "your_openai_api_kei": 3, "reusabl": 3, "anchor": [3, 8], "worth": [3, 4, 5, 6, 7, 9], "choic": [3, 5, 6, 7, 8, 9], "lightweight": [3, 4, 5, 7, 9], "suitabl": [3, 5, 6, 8], "devic": [3, 4, 5, 7, 9], "Its": [3, 5, 7], "candid": [3, 5, 6, 7], "main": [3, 5, 6, 7, 8, 9], "said": [3, 5, 6, 8], "necessarili": [3, 4, 5, 7, 8], "par": [3, 5, 7], "mind": [3, 5, 7, 8, 9], "along": [3, 4, 5, 7, 8], "factual": [3, 5, 6, 7, 8], "inconsist": [3, 5, 8], "guardrail": [3, 8], "articul": 3, "uphold": [3, 8], "employe": [3, 5, 6], "stakehold": [3, 5, 6, 8], "expect": [3, 4, 5, 6, 7, 8, 9], "regard": [3, 5, 7, 8], "ethic": [3, 5, 7, 8], "conduct": [3, 5], "social": [3, 5, 8], "mission": [3, 8], "vision": [3, 5, 7, 8], "cultur": [3, 5, 7, 8], "account": [3, 4, 5, 8], "codifi": 3, "benchmark": [3, 6], "mlcommon": 3, "vidgen": [3, 8], "encompass": [3, 4, 8, 9], "seven": 3, "hazard": [3, 5, 8], "categori": [3, 5, 6, 7, 8, 9], "violent": [3, 8], "crime": [3, 8], "sex": [3, 8], "relat": [3, 4, 5, 6, 7, 8, 9], "sexual": [3, 8], "exploit": [3, 4, 5, 8], "indiscrimin": [3, 8], "weapon": [3, 8], "chemic": 3, "biolog": 3, "radiolog": 3, "nuclear": [3, 5], "explos": [3, 4, 8], "cbrne": 3, "suicid": [3, 8], "hate": [3, 8], "speech": [3, 8], "below": [3, 5, 6, 7, 8, 9], "markdown": [3, 5, 6, 7, 8, 9], "written": [3, 5, 6], "english": [3, 4], "o": [3, 5, 6, 8, 9], "ipython": [3, 5, 6, 8], "displai": [3, 5, 6, 8, 9], "def": [3, 5, 6, 8, 9], "load_polici": 3, "policy_path": 3, "path": [3, 5, 6, 7, 8], "join": [3, 5, 6, 8], "genai_polici": 3, "md": [3, 5, 6, 7, 8, 9], "r": [3, 5, 6, 7, 8, 9], "policy_cont": 3, "classroom": [3, 8], "accept": [3, 5, 6, 7, 8], "unaccept": [3, 7], "ag": [3, 5, 8], "subject": [3, 5, 7], "posit": [3, 4, 5, 6, 7, 8, 9], "confid": [3, 5, 6], "inclus": [3, 5, 6, 8, 9], "celebr": 3, "definit": [3, 4, 5, 6, 9], "creativ": [3, 4, 5, 7, 9], "math": [3, 5, 7], "tip": [3, 8], "digit": [3, 4, 5, 6], "literaci": 3, "onlin": [3, 4, 5, 7, 8, 9], "histor": [3, 5, 6], "violenc": [3, 8], "physic": [3, 5, 8], "fight": [3, 8], "crimin": [3, 8], "illeg": [3, 8], "glorifi": [3, 8], "person": [3, 5, 6, 7, 8, 9], "eat": [3, 8], "disord": 3, "diet": 3, "dare": 3, "advic": [3, 5, 8], "discriminatori": [3, 8], "bulli": [3, 8], "harass": [3, 5, 8], "target": [3, 4, 5, 7, 8, 9], "group": [3, 5, 6, 7, 8], "religi": [3, 7, 8], "racial": [3, 5, 8], "ethnic": [3, 8], "gender": [3, 5, 8], "discrimin": [3, 5, 6, 8], "adult": [3, 8], "profan": [3, 8], "relationship": [3, 5, 6], "substanc": [3, 5], "drug": [3, 8], "gambl": 3, "bet": 3, "protocol": [3, 5, 8], "redirect": 3, "alert": [3, 4], "record": [3, 5, 7, 8], "audit": [3, 4, 5, 6], "teacher": [3, 8], "parent": [3, 8], "continu": [3, 4, 5, 6, 7, 8, 9], "construct": [3, 5, 6, 7, 8, 9], "compliant": [3, 8], "violat": [3, 5, 8], "intens": [3, 5, 6, 9], "demand": [3, 4, 5, 6, 7, 8, 9], "especi": [3, 5, 6, 7, 8, 9], "dong": [3, 5, 8], "There": [3, 5, 6, 7, 8, 9], "rlaif": [3, 8], "give": [3, 5, 6, 8], "rise": [3, 6, 8], "kim": [3, 5, 8], "meta": [3, 4, 5, 7, 8], "wu": [3, 5, 6, 8, 9], "scheme": [3, 4, 7], "inspir": [3, 8], "schema": [3, 9], "row": [3, 5, 6, 8], "match": [3, 4, 5, 6, 7, 8, 9], "boundari": [3, 4, 5, 6, 8], "craft": [3, 4, 5, 8, 9], "elicit": [3, 6, 8, 9], "unalign": 3, "panda": [3, 5, 6, 8], "chosen_responses_path": 3, "chosen_respons": 3, "csv": [3, 5, 8], "rejected_responses_path": 3, "rejected_respons": 3, "chosen_responses_jsonl_path": 3, "batch_result": 3, "jsonl": 3, "dpo_dataset_s": 3, "5000": [3, 7], "class": [3, 5, 6, 8, 9], "userpromptgener": 3, "pd": [3, 5, 6, 8], "pydant": [3, 5, 6, 8, 9], "basemodel": [3, 5, 6, 8, 9], "time": [3, 4, 5, 6, 7, 8, 9], "type": [3, 4, 5, 6, 7, 8, 9], "dotenv": [3, 5, 6, 8, 9], "load_dotenv": [3, 5, 6, 8, 9], "environ": [3, 4, 5, 6, 7, 8, 9], "variabl": [3, 5, 6, 8, 9], "overrid": [3, 6, 8, 9], "userprompt": 3, "user_prompt": 3, "str": [3, 5, 6, 8, 9], "__init__": [3, 6, 8, 9], "4o": [3, 5, 6, 7, 8, 9], "mini": [3, 5, 6, 7, 8, 9], "client": [3, 5, 6, 7, 8, 9], "_generate_prompt": 3, "batch": [3, 4, 5, 6, 7], "system_prompt": [3, 8], "chat": [3, 5, 6, 7, 8, 9], "pars": [3, 5, 8, 9], "messag": [3, 4, 5, 6, 7, 8, 9], "response_format": [3, 5, 6, 8, 9], "except": [3, 5, 8, 9], "generate_prompt": 3, "num_prompt": [3, 7], "int": [3, 5, 6, 8], "save_to_csv": 3, "least": [3, 5, 8], "multipl": [3, 4, 5, 6, 7, 8, 9], "arg": [3, 5, 6, 8, 9], "option": [3, 4, 5, 6, 7, 8, 9], "filepath": 3, "save": [3, 4, 5, 6, 7, 8], "datafram": [3, 5, 6, 8], "all_prompt": 3, "sleep": 3, "enclos": [3, 8, 9], "quot": [3, 4, 5, 7], "startswith": [3, 8], "els": [3, 5, 6, 8], "df": [3, 5, 8], "to_csv": [3, 8], "index": [3, 5, 6, 7, 8, 9], "fals": [3, 5, 6, 7, 8, 9], "user_prompt_gener": 3, "user_prompts_path": 3, "uneth": [3, 8], "dishonesti": 3, "stalk": 3, "privaci": [3, 4, 5, 6, 7, 8, 9], "secur": [3, 4, 5, 6, 8, 9], "breach": [3, 5, 8], "manipul": [3, 5, 7, 8, 9], "10": [3, 5, 6, 7, 8, 9], "to_markdown": [3, 8], "me": [3, 6, 8, 9], "hurt": 3, "someon": 3, "caught": [3, 8], "plan": [3, 4, 5, 7, 9], "cheat": 3, "fire": [3, 5], "household": 3, "item": [3, 5, 8], "stunt": 3, "friend": 3, "heard": 3, "school": [3, 8], "8": [3, 4, 5, 6, 7, 8], "teach": [3, 9], "my": [3, 7, 8, 9], "monei": [3, 5], "video": [3, 4, 5, 7, 8], "game": [3, 4, 5, 6, 7], "9": [3, 4, 5, 6, 7, 8], "skip": [3, 8, 9], "troubl": [3, 8], "responsegener": 3, "properli": [3, 5, 9], "hug": [3, 4, 5, 7, 8], "instanti": [3, 5, 6], "otherwis": [3, 5, 8], "connect": [3, 4, 5, 6, 7, 9], "endpoint": 3, "local_gener": 3, "model_nam": [3, 4, 5, 6, 9], "huggingface_model_nam": 3, "remote_gener": 3, "api_url": 3, "cloud_endpoint": 3, "recal": [3, 5, 7], "enhanc": [3, 4, 5, 6, 7, 8, 9], "visit": [3, 5], "ui": [3, 5, 9], "click": [3, 7], "select": [3, 4, 5, 6, 7, 9], "choos": [3, 4, 5, 6], "cpu": [3, 4, 7], "gpu": [3, 4, 7], "configur": [3, 4, 5, 6, 7, 8], "meaning": [3, 5, 6, 9], "region": [3, 5, 6], "closest": [3, 5, 7], "your": [3, 4, 5, 6, 8, 9], "locat": [3, 5, 6, 7, 8], "huggingface_hub": 3, "inferencecli": 3, "tokenizers_parallel": 3, "max_new_token": 3, "none": [3, 5, 6, 7, 8], "generate_respons": [3, 5, 9], "prompts_df": 3, "remov": [3, 5, 7], "strip": [3, 5, 9], "elif": [3, 6], "chat_complet": 3, "max_token": [3, 5], "seed": [3, 8], "42": [3, 4, 5, 7, 8], "append": [3, 5, 6, 8, 9], "results_df": [3, 8], "model_respons": 3, "your_api_url": 3, "user_prompts_df": 3, "read_csv": [3, 8], "iloc": [3, 6], "tolist": [3, 8], "parallelevalu": 3, "taming_util": [3, 4, 8], "modul": [3, 5, 6, 9], "num_chunk": 3, "parallel_evalu": 3, "n_part": 3, "associ": [3, 5, 6, 7, 9], "gladli": 3, "constitut": [3, 5, 6], "would": [3, 5, 6, 7, 8, 9], "dtype": [3, 5, 6, 8], "80": [3, 5], "absolut": [3, 4, 5, 9], "materi": [3, 5, 6, 7, 8], "plastic": 3, "food": 3, "hold": [3, 5], "lid": 3, "cut": [3, 5], "swath": 3, "wood": [3, 5], "squar": 3, "rectangular": 3, "piec": [3, 6], "place": [3, 5, 7, 8, 9], "insid": [3, 5, 8], "inch": 3, "inspect": [3, 5], "off": [3, 4, 5, 6, 7, 8, 9], "demolit": 3, "scissor": 3, "length": [3, 5, 6, 7, 9], "smash": 3, "smooth": [3, 6, 7], "arrang": [3, 5], "c": [3, 4, 5, 7, 9], "shape": [3, 6, 8, 9], "top": [3, 5, 6, 7, 9], "tuck": 3, "catch": [3, 8], "hook": 3, "solid": 3, "side": [3, 5], "round": [3, 5, 8], "edg": [3, 4, 5, 7, 8], "separ": [3, 5, 6, 7, 8], "process_aligned_respons": 3, "strictli": [3, 9], "bound": [3, 5], "openaibatchprocessor": 3, "async": 3, "company_nam": 3, "save_filepath": 3, "dict": [3, 5, 6, 9], "enforc": [3, 5, 8, 9], "dictionari": [3, 5, 8, 9], "aligned_suffix": 3, "sorri": 3, "suffix": [3, 9], "processor": [3, 4, 7, 9], "api_kei": [3, 5, 6, 8], "getenv": 3, "max_requests_per_minut": 3, "1500": 3, "max_tokens_per_minut": 3, "125000": 3, "await": 3, "process_batch": 3, "total": [3, 4, 5, 6, 7, 8, 9], "total_request": 3, "successful_request": 3, "failed_request": 3, "rate_limit_error": 3, "convert": [3, 4, 5, 6, 7, 8, 9], "json": [3, 5, 6, 7, 8], "quote_al": 3, "fall": [3, 5, 7, 8], "deem": [3, 5, 8], "pertain": [3, 5, 6], "generate_dpo_dataset": 3, "push": [3, 4, 5], "hub": [3, 4, 5, 7], "repo_id": [3, 7], "push_to_hub": [3, 5], "dpo_dataset": 3, "merg": [3, 6, 8], "_chosen": 3, "_reject": 3, "transform_row": 3, "per": [3, 4, 5, 6, 7, 8], "model_responses_chosen": 3, "model_responses_reject": 3, "seri": [3, 4, 5, 7], "axi": [3, 5], "drop": [3, 4, 5, 6, 8], "hf_dpo_dataset": 3, "from_panda": 3, "duplic": 3, "opt": 3, "login": 3, "thatupiso": 3, "smolk12": 3, "cli": [3, 5, 6, 7], "parquet": 3, "arrow": 3, "00": [3, 5, 6, 7], "153": [3, 5], "33ba": 3, "upload": [3, 5], "shard": 3, "02": 3, "35": [3, 5, 6, 7], "num_row": 3, "7158": 3, "nmateri": 3, "n1": [3, 5], "nstep": 3, "n2": [3, 5], "n3": [3, 5], "n4": [3, 5], "n5": [3, 5], "n6": 3, "n7": 3, "n8": [3, 5], "n9": [3, 5], "n10": [3, 5], "nnext": 3, "nthe": [3, 5], "singl": [3, 4, 5, 6, 7, 8], "48gb": 3, "a100": 3, "took": 3, "few": [3, 5, 6, 7, 8, 9], "minut": [3, 6], "torch": [3, 9], "h4": [3, 8], "honest": [3, 5], "ultrafeedback": [3, 8], "binar": [3, 8], "lib": [3, 8, 9], "ultrafeedback_binar": [3, 8], "honesti": [3, 8], "dimens": [3, 5, 6, 7, 8], "blend": [3, 7], "automodelforcausallm": [3, 9], "autotoken": [3, 9], "load_dataset": [3, 7, 8], "dpotrain": 3, "dpoconfig": 3, "dataset_k12": 3, "split": [3, 5, 6, 7, 8], "dataset_ultra": 3, "concatenate_dataset": 3, "remove_column": 3, "score_chosen": [3, 8], "score_reject": 3, "shuffl": 3, "base_model": 3, "cuda": [3, 9], "is_avail": 3, "mp": 3, "from_pretrain": [3, 7, 9], "pretrained_model_name_or_path": 3, "torch_dtyp": [3, 9], "float32": [3, 6], "config": [3, 5, 7, 8], "use_cach": 3, "pad_token": 3, "eos_token": 3, "finetun": 3, "finetune_nam": 3, "aligned_model": 3, "finetune_tag": 3, "from_smollm2": 3, "schedul": [3, 5, 7], "learning_r": [3, 7], "determin": [3, 4, 5, 7, 8, 9], "aggress": [3, 5, 7, 8], "1e": 3, "huyen": 3, "cosin": [3, 6], "lr_scheduler_typ": 3, "stabil": [3, 5, 6, 8], "gradual": 3, "decreas": [3, 4, 5, 6, 9], "accumul": [3, 5], "v": [3, 9], "16": [3, 4, 5, 6, 7, 8], "per_device_train_batch_s": 3, "simul": [3, 5, 8, 9], "gradient_accumulation_step": 3, "strongli": [3, 9], "lower": [3, 4, 5, 6, 7, 8, 9], "conserv": [3, 8], "overfit": 3, "warmup": 3, "max_step": 3, "1000": [3, 5, 7, 8], "suffic": [3, 6], "20": [3, 5, 6, 7, 8, 9], "warmup_step": 3, "stop": [3, 4, 5, 7], "bf16": 3, "checkpoint": 3, "gradient_checkpoint": 3, "usag": [3, 4, 5, 7, 8, 9], "200": [3, 4, 5, 7, 8], "50": [3, 5, 6, 7, 8, 9], "training_results_dir": 3, "smolk12_dpo_output": 3, "dpo_config_path": 3, "dpo_config": 3, "yaml": [3, 5, 9], "pathlib": [3, 6, 8], "config_path": 3, "safe_load": [3, 5], "runtim": [3, 7, 9], "hub_model_id": 3, "use_mps_devic": 3, "output_dir": [3, 5], "training_arg": 3, "trainer": 3, "train_dataset": 3, "processing_class": 3, "temperatur": [3, 5, 6, 7, 8, 9], "max_prompt_length": [3, 7], "1024": 3, "max_length": [3, 5, 6, 9], "1536": 3, "red": [3, 6], "averag": [3, 4, 5, 6, 7, 9], "visual": [3, 4, 5, 6, 7, 8], "quick": [3, 5, 6, 7, 8], "150": [3, 5], "curv": 3, "reach": [3, 5, 6, 7, 8, 9], "obviou": 3, "suffici": [3, 5, 6, 9], "save_model": 3, "hf_token": 3, "tag": [3, 8, 9], "congratul": 3, "successfulli": [3, 5, 6, 8, 9], "card": [3, 5, 8], "newli": [3, 5], "qualit": [3, 5, 8], "assess": [3, 4, 5, 6, 7, 8], "rigor": [3, 5, 7, 8], "quantit": [3, 5, 6], "base_gener": 3, "aligned_gener": 3, "compare_model_respons": 3, "base_output": 3, "128": [3, 5, 7], "aligned_output": 3, "gram": [3, 5], "tnt": 3, "highli": [3, 4, 5, 7, 8, 9], "regul": [3, 4, 5, 6, 7, 8], "law": [3, 4, 5, 6, 7, 8], "degre": [3, 5, 6, 9], "mishandl": 3, "countri": [3, 5, 6], "seriou": [3, 5, 8], "imprison": 3, "death": [3, 6], "variou": [3, 4, 5, 6, 7, 8], "nation": [3, 8], "dictat": 3, "stark": [3, 5], "readili": [3, 5], "cite": [3, 6], "regulatori": [3, 4, 5, 6, 7, 8], "anecdot": [3, 8], "systemat": [3, 4, 5, 6, 7, 8, 9], "quantifi": [3, 5, 7, 8], "f1": [3, 5, 8], "experienc": [3, 5], "expert": [3, 5, 6, 7, 8, 9], "addition": [3, 4, 5, 7, 8], "vari": [3, 4, 5, 6, 7, 8, 9], "interpret": [3, 5, 6, 7, 8], "judg": [3, 5, 6], "summar": [3, 5, 6, 7], "three": [3, 5, 6, 7, 8], "togeth": [3, 6, 7, 8], "entri": [3, 5, 7], "somewhat": [3, 6], "databas": [3, 4, 5, 9], "distribut": [3, 4, 5, 7, 8, 9], "static": [3, 8, 9], "k12": [3, 8], "base_model_api_url": 3, "aligned_model_api_url": 3, "base_model_responses_path": 3, "evals_base_model_respons": 3, "aligned_model_responses_path": 3, "evals_aligned_model_respons": 3, "num_sampl": [3, 8], "eval_dataset": 3, "df_eval": 3, "to_panda": [3, 5, 8], "lambda": [3, 8], "prompts_ev": 3, "to_list": 3, "chunk": [3, 7], "base_model_respons": 3, "aligned_model_respons": 3, "df_eval_respons": 3, "_base": 3, "_align": 3, "rememb": [3, 5], "heurist": 3, "charact": [3, 5, 7, 8, 9], "minimum": [3, 4, 5, 7], "min_response_length": 3, "filter": [3, 5, 6, 7, 9], "string": [3, 5, 6, 8, 9], "df_eval_responses_clean": 3, "model_responses_bas": 3, "model_responses_align": 3, "homemad": 3, "kid": 3, "redact": [3, 8], "punish": 3, "unit": [3, 5, 6, 8, 9], "indonesia": 3, "saudi": 3, "arabia": 3, "offens": [3, 8], "respond": [3, 4, 5, 6, 8, 9], "rodrig": 3, "safetyjudg": 3, "evaluate_respons": 3, "tupl": [3, 5, 8], "safetyscor": [3, 8], "float": [3, 4, 5, 6, 7, 8, 9], "valueerror": [3, 9], "empti": [3, 9], "scoring_guid": 3, "nrespons": 3, "safety_judg": 3, "test_respons": 3, "emphas": [3, 5, 6, 7, 8], "emphasi": [3, 4, 5], "base_ev": 3, "zip": [3, 5, 9], "aligned_ev": 3, "injuri": [3, 5], "base_scor": 3, "eval": [3, 4, 6, 7], "aligned_scor": 3, "base_df": 3, "aligned_df": 3, "model_typ": 3, "stack": [3, 7, 8], "evals_df_result": 3, "h": [3, 5, 6, 7, 8], "identifi": [3, 4, 5, 6, 7, 8, 9], "requ": 3, "statist": [3, 5, 8], "naiv": [3, 6, 9], "score_map": 3, "count": [3, 5, 6, 7, 8], "percentag": [3, 4, 5, 8], "score_base_freq": 3, "score_bas": 3, "value_count": [3, 8], "reindex": 3, "fill_valu": 3, "score_base_pct": 3, "score_aligned_freq": 3, "score_align": 3, "score_aligned_pct": 3, "tabl": [3, 5, 6, 7, 8, 9], "md_tabl": 3, "335": [3, 5], "99": [3, 4, 6, 7, 8], "281": [3, 5], "83": [3, 4, 5, 8], "14": [3, 5, 6, 7, 8, 9], "43": [3, 5, 6, 7, 8], "explanation_bas": 3, "response_bas": 3, "model_type_bas": 3, "explanation_align": 3, "response_align": 3, "model_type_align": 3, "std": [3, 5, 8], "base_mean": 3, "aligned_mean": 3, "3f": 3, "108": [3, 5], "231": [3, 5], "No": [3, 5, 7, 8, 9], "fell": [3, 4], "partial": [3, 5], "styliz": [3, 8], "wild": [3, 7], "consider": [3, 4, 6, 7, 8, 9], "proof": [3, 4], "taken": [3, 5, 6, 7, 8, 9], "huang": [3, 5, 7, 8], "overal": [3, 5, 6, 7, 8, 9], "annot": [3, 5, 6, 7, 8], "mirror": [3, 5, 8], "inaccur": [3, 5, 6, 8, 9], "consecut": [3, 8], "unrepres": 3, "hao": [3, 5], "accord": [3, 4, 5, 8, 9], "yin": [3, 5, 8], "resembl": 3, "declin": [3, 4, 5, 6], "volatil": [3, 5, 6], "ineffici": [3, 4, 5, 6], "smollm": 3, "rel": [3, 4, 5, 6, 7, 8], "term": [3, 4, 5, 6, 7, 8], "trade": [3, 4, 5, 6, 7, 8, 9], "weigh": 3, "qwen": [3, 7, 9], "remark": [3, 4, 7, 8, 9], "rival": [3, 7], "ultim": [3, 4, 5, 6, 7, 8], "threshold": [3, 4, 5, 7, 8], "chen": [3, 5, 6, 7, 8, 9], "overli": [3, 5, 8, 9], "simpli": [3, 4, 5, 6, 7, 9], "neglect": [3, 5, 8], "themselv": [3, 5], "complementari": 3, "throughput": [3, 4, 7], "screen": [3, 5, 8], "flag": [3, 5, 7, 8], "preliminari": [3, 5], "judgment": [3, 5, 6], "valid": [3, 4, 5, 7, 9], "automat": [3, 5, 7, 8], "advis": 3, "composit": [3, 5], "plai": [3, 5, 6, 7, 8, 9], "led": [3, 5, 9], "apologet": 3, "hesit": 3, "benign": [3, 8], "apolog": 3, "inde": [3, 6], "accordingli": [3, 5, 8], "perhap": [3, 4, 9], "creation": [3, 6, 7, 8], "invalu": 3, "hyperparamet": [3, 7, 8], "mention": [3, 5, 6, 8, 9], "optimist": 3, "memor": [3, 5], "generaliz": 3, "abc": [3, 8], "4a": 3, "amanda": [3, 5, 8], "jan": [3, 5, 8], "brauner": [3, 8], "adrian": 3, "colyer": 3, "benjamin": [3, 5, 8], "cullen": [3, 8], "david": [3, 5, 6, 7, 8], "duvenaud": 3, "richard": [3, 5, 8], "ngo": [3, 8], "azalia": 3, "mirhoseini": 3, "catherin": [3, 5, 8], "olsson": [3, 8], "sam": [3, 5, 8], "ringer": 3, "liam": [3, 5, 8], "skirvin": 3, "jess": [3, 5, 8], "smith": [3, 5, 7], "dawn": [3, 5, 8], "song": [3, 4, 5, 8, 9], "william": [3, 4, 5, 6, 7, 8], "saunder": [3, 5], "steinhardt": [3, 5], "asset": [3, 5, 6, 8], "983c85a201a962f": 3, "pdf": [3, 6, 7, 8], "4b": 3, "24c8d0a3a7d0a1f1": 3, "bjn": 3, "22": [3, 5, 6, 8], "yuntao": [3, 5, 8], "andi": [3, 5, 8], "jone": [3, 5], "kamal": 3, "ndouss": 3, "anna": [3, 5, 8], "nova": [3, 7], "dassarma": 3, "drain": 3, "stanislav": 3, "fort": [3, 8], "ganguli": [3, 5, 8], "tom": [3, 5], "henighan": 3, "nichola": [3, 5], "joseph": [3, 5, 8], "saurav": [3, 8], "kadavath": 3, "jackson": [3, 5, 8], "kernion": [3, 5, 8], "conerli": 3, "sheer": [3, 9], "el": 3, "showk": 3, "nelson": 3, "elhag": 3, "zac": 3, "hatfield": 3, "dodd": 3, "danni": [3, 5, 8], "hernandez": [3, 5, 8], "tristan": 3, "hume": 3, "scott": [3, 5, 8], "johnston": 3, "shauna": 3, "kravec": 3, "lian": 3, "lovitt": 3, "neel": [3, 5], "nanda": 3, "dario": [3, 5], "amodei": [3, 5], "brown": [3, 5], "jack": [3, 5, 8], "clark": 3, "mccandlish": [3, 5], "chri": [3, 5, 8], "olah": 3, "ben": [3, 5, 7, 8], "mann": [3, 8], "jare": [3, 5, 8], "kaplan": [3, 5, 8], "arxiv": [3, 4, 5, 6, 7, 8, 9], "org": [3, 4, 5, 6, 7, 8, 9], "ab": [3, 4, 5, 6, 7, 8, 9], "2204": 3, "05862": 3, "bkk": 3, "sandipan": 3, "kundu": 3, "goldi": 3, "cameron": [3, 5, 8, 9], "mckinnon": 3, "carol": [3, 8], "christoph": [3, 5, 8], "dustin": 3, "eli": [3, 5, 7, 8], "tran": [3, 9], "johnson": 3, "ethan": [3, 5, 6, 8], "perez": [3, 6, 8], "jami": [3, 8], "kerr": 3, "mueller": 3, "jeffrei": 3, "ladish": 3, "joshua": [3, 5, 8], "landau": 3, "kamil": [3, 5], "lukosuit": 3, "michael": [3, 5, 6, 7, 8, 9], "sellitto": 3, "schiefer": 3, "noemi": 3, "mercado": 3, "robert": [3, 5, 7], "lasenbi": 3, "robin": 3, "larson": 3, "tamera": 3, "lanham": 3, "timothi": [3, 5, 7], "telleen": 3, "lawton": 3, "samuel": [3, 5, 8], "bowman": [3, 5], "2212": 3, "08073": 3, "blo23": 3, "announc": [3, 5], "cc": 3, "11": [3, 5, 6, 7, 8, 9], "ccl": [3, 8], "24": [3, 4, 5, 6, 7, 8, 9], "guim": 3, "hardi": 3, "shunian": 3, "zich": 3, "liu": [3, 5, 6, 7, 8, 9], "jiang": [3, 5, 6, 8], "benyou": 3, "wang": [3, 4, 5, 6, 7, 8, 9], "judgement": [3, 5, 8], "2402": [3, 8], "10669": 3, "dphz23": 3, "tim": [3, 6, 8], "artidoro": 3, "pagnoni": 3, "ari": [3, 5, 8], "holtzman": [3, 5], "luke": [3, 5, 8], "zettlemoy": 3, "2305": [3, 5], "14314": 3, "ddz": 3, "qingxiu": 3, "xingx": 3, "zhang": [3, 5, 6, 7, 8], "zhifang": 3, "sui": 3, "furu": [3, 4], "wei": [3, 4, 5, 6, 7, 8], "boost": 3, "2410": [3, 4, 8], "06961": 3, "fqh": 3, "duanyu": 3, "bowen": [3, 5, 7, 8], "qin": [3, 5, 7, 8], "zheng": [3, 5, 6, 7, 8], "wenqiang": 3, "lei": [3, 5, 7, 8], "analyz": [3, 4, 5, 6, 7, 8, 9], "perspect": [3, 6, 8], "2404": [3, 5, 8], "04626": 3, "h44a": 3, "binari": [3, 5, 7, 8], "huggingfaceh4": [3, 7, 8], "h44b": 3, "hhj": 3, "shuang": 3, "wenfeng": 3, "han": [3, 5, 8], "tao": [3, 5, 8], "yipe": 3, "haonan": 3, "chunlin": 3, "zhong": [3, 8], "zhangjun": 3, "zhou": [3, 4, 5, 6, 7, 8], "tang": [3, 5, 7, 8], "2401": [3, 5], "01629": 3, "hlt24": 3, "jiwoo": 3, "noah": [3, 5, 8], "lee": [3, 5, 6, 7, 8, 9], "jame": [3, 5, 8], "thorn": 3, "orpo": 3, "monolith": 3, "2403": [3, 5], "07691": 3, "hdn": 3, "zhenyu": 3, "pengfan": 3, "du": [3, 5], "yilin": 3, "niu": [3, 9], "zhengxiao": 3, "aohan": 3, "zeng": [3, 8], "xiao": [3, 8], "minli": 3, "hongn": 3, "jie": [3, 5, 8, 9], "yuxiao": 3, "2412": [3, 5, 6, 7, 8], "06000": 3, "hsw": 3, "21": [3, 5, 6, 7], "edward": [3, 5], "j": [3, 5, 7, 8, 9], "yelong": 3, "shen": [3, 5, 8], "phillip": 3, "walli": 3, "zeyuan": 3, "allen": [3, 5], "zhu": [3, 5, 7, 8], "yuanzhi": 3, "shean": 3, "lu": [3, 5, 7, 8], "weizhu": 3, "2106": 3, "09685": 3, "hgh": 3, "jiaxin": 3, "shixiang": [3, 5, 8], "shane": [3, 5, 8], "gu": [3, 5, 8], "le": [3, 5, 6, 7], "yuexin": 3, "xuezhi": [3, 6], "hongkun": 3, "yu": [3, 5, 7, 8], "jiawei": [3, 9], "2210": [3, 8], "11610": 3, "hug24": [3, 5], "hug4c": 3, "hug4d": [3, 7], "doc": [3, 4, 5, 6, 7, 8, 9], "en": [3, 5, 6, 7, 8, 9], "huy24": 3, "chip": 3, "reilli": [3, 6], "media": [3, 4, 5, 8], "decemb": [3, 5, 6, 8], "9781098129095": 3, "www": [3, 5, 6, 7, 8], "oreilli": [3, 6], "ksd": 3, "rylan": [3, 5, 8], "schaeffer": [3, 8], "apratim": 3, "dei": 3, "matthia": [3, 5], "gerstgrass": 3, "rafael": 3, "donoho": 3, "sanmi": [3, 8], "koyejo": [3, 8], "thrive": [3, 5, 9], "peril": 3, "16713": 3, "ksy": 3, "seungon": 3, "juyoung": 3, "suk": 3, "xiang": [3, 5, 7], "yue": [3, 6], "vijai": 3, "viswanathan": 3, "seongyun": 3, "yizhong": 3, "kiril": 3, "gashteovski": 3, "carolin": [3, 8], "lawrenc": 3, "sean": [3, 5, 8], "welleck": 3, "graham": 3, "neubig": 3, "03679": 3, "lt24": 3, "herd": [3, 7], "2407": [3, 5, 6, 7, 8], "21783": [3, 7], "lwx": 3, "lin": [3, 5, 6, 7, 8, 9], "rui": [3, 5, 7, 9], "ruixuan": 3, "junbo": 3, "zhao": [3, 5, 7, 8], "ding": 3, "gang": [3, 5], "haobo": 3, "driven": [3, 5, 7, 8], "survei": [3, 5, 8, 9], "2406": [3, 5, 6, 7, 8], "15126": 3, "met24": 3, "owj": 3, "jeff": [3, 5, 8], "xu": [3, 5, 7, 8], "diogo": [3, 8], "almeida": [3, 8], "carrol": [3, 8], "wainwright": [3, 8], "pamela": [3, 5, 8], "mishkin": [3, 5, 8], "chong": [3, 8], "sandhini": [3, 8], "agarw": [3, 5, 8], "katarina": [3, 8], "slama": [3, 8], "alex": [3, 5, 7, 8], "rai": [3, 5, 7, 8], "john": [3, 5, 6, 8], "hilton": [3, 5, 7, 8], "fraser": [3, 8], "kelton": 3, "miller": [3, 5], "maddi": [3, 8], "simen": [3, 8], "peter": [3, 5, 7, 8], "welind": [3, 5, 8], "paul": [3, 5, 8], "christiano": [3, 8], "leik": [3, 5, 8], "ryan": [3, 5, 8], "2203": 3, "02155": 3, "qwe24": 3, "rsm": 3, "archit": 3, "sharma": [3, 8], "eric": [3, 5, 7, 8], "mitchel": [3, 6, 7], "stefano": [3, 5], "ermon": [3, 5], "man": [3, 5, 6, 8], "chelsea": [3, 8], "finn": 3, "secretli": 3, "18290": 3, "swd": 3, "17": [3, 5, 6, 7, 8], "filip": [3, 8], "wolski": 3, "prafulla": 3, "dhariw": 3, "alec": [3, 5, 8], "radford": [3, 5, 8], "oleg": [3, 8], "klimov": 3, "1707": 3, "06347": 3, "smollm224": 3, "distil": [3, 4], "smollm2360mi24": 3, "sou24": 3, "html": [3, 6, 9], "srverh24": 3, "m\u00e1rton": 3, "daniel": [3, 5, 8], "rueckert": 3, "r\u00fcdiger": 3, "von": [3, 5, 7], "eisenhart": 3, "roth": [3, 5], "florian": 3, "hinterwimm": 3, "2411": [3, 6], "09539": 3, "tm": [3, 7], "23": [3, 5, 6, 7, 8], "hugo": [3, 7], "loui": [3, 5, 7], "martin": [3, 5, 6, 7, 8], "kevin": [3, 5, 7, 8], "stone": [3, 7], "albert": [3, 7], "amjad": [3, 7], "almahairi": [3, 7], "yasmin": [3, 7], "babaei": [3, 7], "nikolai": [3, 7], "bashlykov": [3, 7], "soumya": [3, 7], "batra": [3, 7], "prajjwal": [3, 7], "bhargava": [3, 7], "shruti": [3, 7], "bhosal": [3, 7], "dan": [3, 5, 7, 8, 9], "bikel": [3, 7], "luka": [3, 7], "blecher": [3, 7], "cristian": [3, 7], "canton": [3, 7], "ferrer": [3, 7], "moya": [3, 7], "guillem": [3, 7], "cucurul": [3, 7], "esiobu": [3, 7], "jude": [3, 7], "fernand": [3, 7], "jeremi": [3, 5, 6, 7], "fu": [3, 6, 7], "wenyin": [3, 7], "brian": [3, 6, 7, 8], "fuller": [3, 7, 8], "cynthia": [3, 7], "gao": [3, 5, 7, 8], "vedanuj": [3, 7], "goswami": [3, 7, 8], "naman": [3, 6, 7], "goyal": [3, 6, 7], "anthoni": [3, 6, 7], "hartshorn": [3, 7], "saghar": [3, 7], "hosseini": [3, 7], "hakan": [3, 7, 8], "inan": [3, 7, 8], "marcin": [3, 7], "karda": [3, 7], "viktor": [3, 7], "kerkez": [3, 7], "madian": [3, 7, 8], "khabsa": [3, 7, 8], "isabel": [3, 7, 8], "kloumann": [3, 7], "artem": [3, 7], "korenev": [3, 7], "punit": [3, 7], "singh": [3, 5, 6, 7], "koura": [3, 7], "mari": [3, 5, 7, 8], "ann": [3, 7, 8], "lachaux": [3, 7], "thibaut": [3, 7], "lavril": [3, 7], "jenya": [3, 7], "diana": [3, 5, 7], "liskovich": [3, 7], "yinghai": [3, 7], "yune": [3, 7, 8], "mao": [3, 4, 7, 8], "xavier": [3, 7], "martinet": [3, 7], "todor": [3, 7, 8], "mihaylov": [3, 7], "pushkar": [3, 7], "mishra": [3, 5, 7], "igor": [3, 5, 7, 8], "molybog": [3, 7], "yixin": [3, 5, 7], "nie": [3, 5, 6, 7], "andrew": [3, 5, 6, 7, 8], "poulton": [3, 7], "reizenstein": [3, 7], "rashi": [3, 7, 8], "rungta": [3, 6, 7, 8], "kalyan": [3, 7], "saladi": [3, 7], "alan": [3, 7, 8], "schelten": [3, 7], "ruan": [3, 7], "silva": [3, 7], "ranjan": [3, 7], "subramanian": [3, 7], "xiaoq": [3, 7], "ellen": [3, 7], "tan": [3, 5, 6, 7], "binh": [3, 7], "ross": [3, 4, 7, 8], "taylor": [3, 7], "adina": [3, 7, 8], "jian": [3, 5, 6, 7], "kuan": [3, 7], "puxin": [3, 7], "yan": [3, 4, 5, 7], "iliyan": [3, 7], "zarov": [3, 7], "yuchen": [3, 5, 7, 8], "angela": [3, 5, 7, 8], "fan": [3, 5, 6, 7], "melani": [3, 7], "kambadur": [3, 7], "sharan": [3, 7], "narang": [3, 7], "aurelien": [3, 7], "rodriguez": [3, 7], "stojnic": [3, 7], "sergei": [3, 7], "edunov": [3, 7], "thoma": [3, 5, 7, 8], "scialom": [3, 7], "2307": [3, 7, 9], "09288": [3, 7], "vaa": [3, 8], "berti": [3, 8], "adarsh": [3, 8], "agraw": [3, 8], "ahm": [3, 8], "victor": [3, 8], "akinwand": [3, 8], "namir": [3, 8], "nuaimi": [3, 8], "najla": [3, 8], "alfaraj": [3, 8], "alhajjar": [3, 8], "aroyo": [3, 8], "trupti": [3, 8], "bavalatti": [3, 8], "max": [3, 5, 6, 8], "bartolo": [3, 8], "borhan": [3, 8], "blili": [3, 8], "hamelin": [3, 8], "kurt": [3, 8], "bollack": [3, 8], "rishi": [3, 5, 7, 8], "bomassani": [3, 8], "marisa": [3, 8], "ferrara": [3, 8], "boston": [3, 8], "sim\u00e9on": [3, 8], "campo": [3, 8], "kal": [3, 8], "chakra": [3, 8], "canyu": [3, 8], "codi": [3, 8], "coleman": [3, 8], "zachari": [3, 5, 8], "delpierr": [3, 8], "coudert": [3, 8], "leon": [3, 8], "derczynski": [3, 8], "debojyoti": [3, 8], "dutta": [3, 8], "ian": [3, 5, 8], "eisenberg": [3, 8], "ezick": [3, 8], "heather": [3, 8], "frase": [3, 8], "ram": [3, 7, 8], "gandikota": [3, 8], "agasthya": [3, 8], "gangavarapu": [3, 8], "ananya": [3, 5, 8], "geali": [3, 8], "rajat": [3, 8], "ghosh": [3, 5, 8], "goel": [3, 5, 8], "usman": [3, 8], "gohar": [3, 8], "sujata": [3, 8], "hale": [3, 8], "wiebk": [3, 8], "hutiri": [3, 8], "marvin": [3, 8], "imperi": [3, 8], "surgan": [3, 8], "jandial": [3, 8], "nick": [3, 5, 8], "judd": [3, 8], "felix": [3, 5, 8], "juefei": [3, 8], "fouts": [3, 8], "khomh": [3, 8], "bhavya": [3, 8], "kailkhura": [3, 8], "hannah": [3, 5, 8], "rose": [3, 8], "kirk": [3, 8], "klyman": [3, 8], "knotz": [3, 8], "kuchnik": [3, 8], "shachi": [3, 8], "kumar": [3, 5, 8], "srijan": [3, 8], "lengerich": [3, 8], "bo": [3, 5, 7, 8], "zeyi": [3, 8], "liao": [3, 5, 8], "eileen": [3, 8], "sarah": [3, 5, 8], "luger": [3, 8], "yifan": [3, 5, 8], "priyanka": [3, 8], "mammen": [3, 8], "kelvin": [3, 6, 8], "manyeki": [3, 8], "mcgregor": [3, 8], "virendra": [3, 8], "mehta": [3, 5, 8], "shafe": [3, 8], "moham": [3, 8], "moss": [3, 8], "lama": [3, 8], "nachman": [3, 8], "dinesh": [3, 8], "jinenh": [3, 8], "naganna": [3, 8], "amin": [3, 8], "nikanjam": [3, 8], "besmira": [3, 8], "nushi": [3, 8], "lui": [3, 5, 8], "oala": [3, 8], "iftach": [3, 8], "orr": [3, 5, 8], "alicia": [3, 5, 8], "parrish": [3, 5, 8], "cigdem": [3, 8], "patlak": [3, 8], "pietri": [3, 8], "forough": [3, 8], "poursabzi": [3, 8], "sangdeh": [3, 8], "eleonora": [3, 8], "presani": [3, 8], "fabrizio": [3, 8], "puletti": [3, 8], "r\u00f6ttger": [3, 8], "sahai": [3, 8], "santo": [3, 8], "nino": [3, 8], "scherrer": [3, 8], "alic": [3, 5, 8, 9], "schoenauer": [3, 8], "sebag": [3, 8], "patrick": [3, 6, 8], "schramowski": [3, 8], "abolfazl": [3, 8], "shahbazi": [3, 8], "vin": [3, 8], "xudong": [3, 5, 6, 8], "vamsi": [3, 8], "sistla": [3, 8], "leonard": [3, 8], "testuggin": [3, 8], "vithursan": [3, 8], "thangarasa": [3, 8], "elizabeth": [3, 5, 8], "watkin": [3, 8], "rebecca": [3, 5, 8], "weiss": [3, 8], "welti": [3, 8], "tyler": [3, 5, 8], "wilber": [3, 8], "jean": [3, 8], "poonam": [3, 8], "yadav": [3, 8], "xianjun": [3, 8], "yang": [3, 5, 6, 7, 8, 9], "yi": [3, 5, 6, 8, 9], "wenhui": [3, 8], "fedor": [3, 8], "zhdanov": [3, 8], "jiacheng": [3, 5, 8], "perci": [3, 5, 8], "liang": [3, 5, 8, 9], "mattson": [3, 8], "joaquin": [3, 8], "vanschoren": [3, 8], "v0": [3, 8], "12241": [3, 8], "wyg": 3, "tianhao": [3, 5, 7, 8], "weizh": 3, "yuan": [3, 5, 8], "olga": 3, "golovneva": 3, "jing": [3, 8], "yuandong": 3, "tian": 3, "jiantao": 3, "jiao": 3, "jason": [3, 5, 6, 8], "weston": 3, "sainbayar": 3, "sukhbaatar": 3, "19594": 3, "ywx": 3, "yueqin": 3, "zhendong": 3, "yujia": [3, 6], "xie": [3, 5, 8], "mingyuan": 3, "paradigm": [3, 5, 6], "semanticscholar": 3, "corpusid": 3, "270199610": 3, "suppos": [4, 5, 9], "econom": [4, 5, 6], "fuel": 4, "equival": [4, 5, 7], "consumpt": [4, 5, 6], "contrari": 4, "truth": [4, 5, 7, 8, 9], "stanlei": 4, "jevon": 4, "a16z": 4, "andreessen": 4, "horowitz": 4, "10x": 4, "outpac": 4, "moor": 4, "pc": 4, "edholm": 4, "bandwidth": 4, "era": 4, "llmflation": 4, "mmlu": [4, 7, 8], "60": [4, 5, 6, 7, 8], "06": [4, 5, 6, 9], "price": [4, 5, 6, 7], "fallen": 4, "62": [4, 5, 7], "introduct": 4, "march": [4, 5, 9], "stem": [4, 5, 9], "compound": 4, "bit": [4, 6, 7], "tune": [4, 5, 6, 8], "dpo": [4, 7], "competit": [4, 5, 6, 7, 8], "plummet": 4, "rapidli": [4, 6, 7, 8, 9], "preciou": 4, "wouldn": [4, 5], "sens": [4, 8], "wait": [4, 5, 8], "wave": 4, "economist": 4, "1865": 4, "studi": [4, 9], "coal": 4, "industri": [4, 5, 6, 7, 8, 9], "made": [4, 5, 6, 7, 9], "counterintuit": 4, "discoveri": 4, "steam": 4, "spend": [4, 5, 6], "repeat": [4, 6], "didn": [4, 9], "smartphon": [4, 5, 6, 7], "server": [4, 5, 7, 9], "network": [4, 5, 6, 7, 9], "transmiss": 4, "got": 4, "cheaper": [4, 5], "shift": [4, 5, 6], "hd": 4, "stream": [4, 5, 6, 7, 9], "storag": [4, 5, 6, 7, 8], "gigabyt": 4, "entir": [4, 5, 6, 7, 9], "massiv": [4, 5, 6, 8], "broadli": [4, 6, 7, 9], "audio": [4, 5, 6], "transcript": [4, 6], "multimod": [4, 7, 8], "imag": [4, 5, 6, 7, 8], "exponenti": [4, 5], "growth": [4, 5, 6], "magnifi": 4, "everyth": [4, 9], "billion": [4, 5, 6, 7, 9], "dollar": [4, 5, 7], "annual": [4, 5, 6, 8], "millisecond": [4, 5], "latenc": [4, 5, 6, 7, 8], "30": [4, 5, 6, 7, 8], "mobil": [4, 5, 7, 9], "b": [4, 5, 6, 7, 8, 9], "tradeoff": [4, 7, 8, 9], "pro": [4, 5, 6, 7, 8], "trigger": [4, 6, 8], "premium": [4, 5], "innov": [4, 5, 6, 7, 8], "capac": [4, 5, 6, 7], "link": [4, 5], "dual": 4, "character": [4, 5, 8], "ahead": [4, 7, 8], "decai": [4, 7], "area": [4, 5, 6, 8, 9], "flash": [4, 6, 7], "cach": [4, 5, 6, 7], "prompt": [4, 5, 6, 8], "compress": [4, 5, 6, 7], "provis": [4, 5], "extent": [4, 5, 8], "problema": 4, "accomplish": [4, 6, 8, 9], "accompani": [4, 5, 8], "transact": [4, 5, 8], "roi": 4, "alloc": [4, 5, 6, 7, 8], "budget": [4, 6, 7], "viabil": [4, 7], "prioriti": [4, 5, 7], "overlook": [4, 6], "thorough": [4, 7, 8], "identif": [4, 5], "specifi": [4, 5, 6, 7, 8, 9], "longev": 4, "accommod": 4, "evalu": [4, 6, 7, 9], "multi": [4, 5, 6, 7, 8, 9], "baselin": [4, 5, 7, 8], "met": [4, 5, 8], "equal": [4, 5, 6, 8], "concurr": [4, 7], "peak": 4, "spike": 4, "versu": [4, 5, 7, 8], "volum": [4, 5, 7, 8], "season": [4, 5], "variat": [4, 5, 7, 8], "uptim": 4, "mainten": [4, 5, 7, 8], "disrupt": [4, 5, 6], "backup": 4, "failov": 4, "clearli": [4, 5, 8, 9], "redund": [4, 5], "recoveri": [4, 5], "unexpect": [4, 5, 8, 9], "event": [4, 5], "seamless": [4, 5, 8], "broader": [4, 5, 6, 7, 8], "vector": [4, 7, 8], "augment": [4, 5, 7], "rag": [4, 7], "retent": [4, 5, 6], "polici": [4, 5, 6, 7], "essenti": [4, 5, 6, 7, 8, 9], "opportun": [4, 5, 6], "post": [4, 5, 7, 8], "32": [4, 5, 6, 7], "fp32": 4, "fp16": [4, 7], "proport": [4, 5, 7], "byte": 4, "120": [4, 5, 8], "gb": 4, "whole": [4, 5], "done": [4, 5, 7, 8, 9], "smollm2": [4, 5, 7, 9], "135m": [4, 7], "load_gguf": 4, "bartowski": 4, "gguf": [4, 7], "gguf_file_q2_k": 4, "q2_k": [4, 7], "gguf_file_f16": 4, "f16": 4, "model_q2_k": 4, "gguf_fil": 4, "model_f16": 4, "mlp": 4, "layer": [4, 5, 6, 7, 9], "proxi": [4, 5, 6, 8], "mlp_weights_q2_k": 4, "gate_proj": 4, "mlp_weights_f16": 4, "tensor": [4, 6, 9], "0145": 4, "1826": 4, "1377": 4, "1719": 4, "1387": 4, "0298": 4, "1631": 4, "0781": 4, "2051": [4, 5], "2070": 4, "0334": 4, "2891": 4, "1768": 4, "0488": 4, "2393": 4, "0396": 4, "1348": 4, "1533": 4, "0771": 4, "0845": 4, "0232": 4, "0178": 4, "1040": 4, "1582": 4, "1167": 4, "0474": 4, "0359": 4, "2500": 4, "0432": 4, "0972": 4, "0933": 4, "2188": 4, "0776": 4, "0674": 4, "requires_grad": 4, "0028": 4, "1852": 4, "1396": 4, "1506": 4, "1635": 4, "0043": 4, "0680": 4, "2257": 4, "1890": 4, "0464": 4, "2960": 4, "1840": 4, "0451": 4, "2395": 4, "0413": 4, "1446": 4, "0621": 4, "0478": 4, "0038": 4, "0830": 4, "1473": 4, "0926": 4, "0547": 4, "0824": 4, "0429": 4, "2737": 4, "0355": 4, "0782": 4, "2043": [4, 5], "0740": 4, "arriv": [4, 5], "pearson": 4, "numpi": [4, 5], "np": [4, 5, 6], "arrai": [4, 6, 8], "detach": 4, "graph": [4, 5, 6], "weights_f16": 4, "weights_q2_k": 4, "flat_f16": 4, "flatten": 4, "flat_q2_k": 4, "corrcoef": 4, "4f": [4, 9], "9970": 4, "exemplifi": [4, 6, 7, 8], "70b": [4, 5, 7], "unsloth": 4, "141": 4, "q8_0": [4, 7], "75": [4, 8], "47": [4, 5, 7, 8], "cumul": [4, 5, 6], "26": [4, 5, 7], "19": [4, 5, 6, 7, 8], "space": [4, 5, 6, 7, 8], "counterpart": 4, "spectrum": [4, 5, 6], "variant": [4, 5, 7, 8], "laptop": [4, 5], "desktop": [4, 5, 7], "enterpris": [4, 5, 6, 7, 8, 9], "ceil": 4, "notabl": [4, 5, 6, 8, 9], "bitnet": 4, "cpp": [4, 9], "arm": 4, "x86": 4, "speedup": [4, 7], "37x": 4, "07x": 4, "17x": 4, "beyond": [4, 5, 6, 8], "raw": [4, 5, 7, 8, 9], "speed": [4, 5, 6, 7, 8], "energi": [4, 5, 6], "55": [4, 5, 6, 7], "70": [4, 5, 7], "71": [4, 5], "82": [4, 8], "impress": [4, 7, 9], "100b": 4, "b1": 4, "58": [4, 6, 7], "pace": [4, 5, 6, 8], "kernel": 4, "characterist": [4, 5, 7, 8, 9], "excit": [4, 7], "frontier": [4, 8], "compel": [4, 5, 7, 9], "acceler": [4, 5, 7, 8], "faster": [4, 6, 7], "arithmet": [4, 5], "benefici": [4, 5, 7], "sustain": [4, 5, 6, 7, 8], "Be": [4, 5, 7, 8], "fine": [4, 5, 6, 8], "pure": [4, 5, 7, 9], "unlock": [4, 9], "track": [4, 5, 6, 8], "chargeback": 4, "regularli": [4, 5], "wz": 4, "jinheng": 4, "hansong": 4, "ting": [4, 8], "shaoguang": 4, "shume": [4, 8], "ma": [4, 5, 8], "hongyu": [4, 5], "xia": [4, 5, 6, 7], "infra": 4, "fast": [4, 5, 6, 7, 8, 9], "lossless": 4, "16144": 4, "andreessenhorowitz24": 4, "huggingface4w": [4, 7], "2024w": [4, 7], "unsloth24": 4, "jonathan": [4, 5, 8], "ceo": [4, 5], "groq": [4, 7], "maarten": [4, 5, 6, 8], "grootendorst": [4, 6], "streamlin": [4, 5, 6, 7, 9], "notat": 4, "width": [4, 7], "_k": 4, "_0": 4, "matter": [5, 6], "beauti": 5, "smart": [5, 8], "agre": 5, "wrong": 5, "feynman": 5, "advent": 5, "pivot": [5, 7], "verif": [5, 6, 7, 9], "norm": 5, "realm": 5, "convent": [5, 8], "evolut": [5, 7], "conceiv": 5, "entrench": 5, "seem": 5, "daunt": [5, 6], "ignor": 5, "outdat": [5, 6, 8, 9], "inevit": 5, "setback": 5, "imper": 5, "embrac": 5, "proactiv": [5, 8], "mindset": 5, "front": [5, 7], "incorpor": [5, 6, 7, 8, 9], "produc": [5, 6, 7, 8, 9], "novel": [5, 7], "ident": [5, 6], "isn": [5, 8], "bug": 5, "random": [5, 8, 9], "testabl": 5, "guarante": [5, 6, 7, 8, 9], "exceedingli": 5, "primari": [5, 6, 8], "nucleu": 5, "2020": 5, "summari": [5, 6, 7, 8, 9], "alter": 5, "rigid": 5, "wildli": 5, "incoher": 5, "inadequ": [5, 8], "temp": 5, "df_result": 5, "ntemperatur": 5, "40": [5, 6, 7], "temp_respons": 5, "iterrow": [5, 8], "10000": [5, 6, 9], "appl": [5, 6, 9], "txt": [5, 6, 7, 9], "sec_fil": [5, 9], "nsecur": 5, "AND": [5, 9], "exchang": [5, 6, 8, 9], "commiss": [5, 6, 8, 9], "nwashington": 5, "20549": 5, "nform": 5, "pursuant": 5, "TO": [5, 8], "13": [5, 6, 7, 8], "OR": 5, "OF": [5, 8], "THE": [5, 8], "1934": 5, "nfor": 5, "fiscal": [5, 6], "septemb": [5, 6], "28": [5, 6, 7, 8], "nor": [5, 6], "period": [5, 6, 8], "ncommiss": 5, "001": [5, 7], "36743": 5, "ng66145g66i43": 5, "jpg": 5, "nappl": 5, "exact": [5, 7, 8], "registr": 5, "charter": 5, "ncalifornia": 5, "t94": 5, "2404110": 5, "jurisdict": 5, "nof": 5, "employ": 5, "park": 5, "ncupertino": 5, "california": [5, 8, 9], "n95014": 5, "princip": 5, "offic": [5, 6, 8], "408": 5, "996": 5, "1010": 5, "telephon": 5, "regist": 5, "ntitl": 5, "ttrade": 5, "symbol": 5, "tname": 5, "ncommon": 5, "stock": [5, 9], "00001": 5, "naapl": 5, "tthe": 5, "nasdaq": [5, 6, 9], "llc": [5, 9], "n0": 5, "000": [5, 7, 9], "note": [5, 7, 9], "2025": [5, 6], "875": 5, "625": 5, "2026": 5, "2027": 5, "375": 5, "2029": 5, "050": 5, "2031": [5, 8], "600": 5, "2042": 5, "nindic": 5, "issuer": 5, "405": 5, "nye": 5, "preced": [5, 9], "shorter": [5, 6], "past": [5, 6, 8], "90": [5, 6, 7, 8], "submit": [5, 7, 8], "electron": 5, "232": 5, "filer": 5, "12b": [5, 8], "nlarg": 5, "tacceler": 5, "nnon": 5, "tsmaller": 5, "nemerg": 5, "nif": 5, "elect": [5, 8], "revis": [5, 8], "attest": 5, "404": 5, "sarban": 5, "oxlei": 5, "7262": 5, "firm": [5, 8], "prepar": [5, 7, 8], "correct": [5, 6, 8], "restat": 5, "incent": 5, "compens": 5, "240": 5, "10d": 5, "shell": 5, "aggreg": [5, 8, 9], "vote": 5, "held": [5, 9], "affili": [5, 9], "29": [5, 7, 8, 9], "last": [5, 6, 8, 9], "quarter": 5, "628": [5, 9], "553": [5, 9], "sole": [5, 6, 8], "disclosur": [5, 6, 7, 8], "director": [5, 7, 8], "date": 5, "exclud": 5, "n15": 5, "115": [5, 9], "823": [5, 9], "outstand": [5, 9], "octob": [5, 9], "18": [5, 6, 7, 8, 9], "ndocument": 5, "BY": 5, "nportion": 5, "meet": [5, 6, 8, 9], "sharehold": [5, 6], "iii": 5, "ntabl": 5, "npage": 5, "npart": 5, "nitem": 5, "nbusi": 5, "1a": 5, "nrisk": 5, "1b": [5, 7, 8], "nunresolv": 5, "staff": 5, "comment": 5, "n17": 5, "1c": 5, "ncybersecur": 5, "nproperti": 5, "n18": 5, "nlegal": 5, "proceed": [5, 6, 8], "nmine": 5, "ii": [5, 7, 9], "nmarket": 5, "stockhold": 5, "purchas": [5, 6, 8], "n19": 5, "reserv": [5, 6], "n20": 5, "nmanag": 5, "n21": 5, "7a": 5, "nquantit": 5, "n27": 5, "nfinanci": 5, "supplementari": 5, "n28": 5, "nchang": 5, "disagr": 5, "n51": 5, "9a": 5, "ncontrol": 5, "procedur": [5, 6, 8], "9b": 5, "nother": 5, "n52": 5, "9c": 5, "ndisclosur": 5, "foreign": [5, 6], "ndirector": 5, "corpor": [5, 6, 8], "nexecut": 5, "ownership": [5, 7], "certain": [5, 6, 8, 9], "owner": 5, "ncertain": 5, "nprincip": 5, "fee": [5, 6], "iv": 5, "nexhibit": 5, "n53": 5, "n56": 5, "nthi": 5, "litig": [5, 6, 7], "reform": 5, "1995": 5, "uncertainti": [5, 6, 7, 8], "macroeconom": [5, 6], "anticip": [5, 6, 8], "intend": [5, 7, 8], "caus": [5, 8, 9], "oblig": [5, 6], "nunless": 5, "herein": 5, "calendar": 5, "wholli": 5, "subsidiari": 5, "unless": [5, 7], "ncompani": 5, "manufactur": 5, "tablet": [5, 6, 7], "wearabl": 5, "accessori": 5, "sell": [5, 8], "varieti": [5, 7], "52": [5, 8], "53": [5, 6, 8], "week": 5, "saturdai": 5, "nproduct": 5, "niphon": 5, "io": [5, 6, 8, 9], "iphon": [5, 6], "se": [5, 8], "nmac": 5, "maco": [5, 7], "mac": [5, 7], "macbook": 5, "air": 5, "imac": 5, "studio": 5, "nipad": 5, "multipurpos": 5, "ipado": 5, "ipad": 5, "nwearabl": 5, "home": [5, 6, 9], "smartwatch": 5, "wireless": 5, "headphon": 5, "spatial": 5, "watcho": 5, "watch": 5, "ultra": 5, "airpod": 5, "beat": [5, 7], "visiono": 5, "nhome": 5, "tv": 5, "tvo": 5, "homepod": 5, "fidel": [5, 9], "naccessori": 5, "brand": 5, "third": [5, 6, 7, 8], "parti": [5, 6, 7, 8], "nservic": 5, "nadvertis": 5, "advertis": 5, "licens": [5, 6], "napplecar": 5, "portfolio": [5, 6], "applecar": 5, "repair": 5, "coverag": [5, 6, 8], "accident": 5, "damag": [5, 8], "theft": [5, 8], "ncloud": 5, "ndigit": 5, "app": [5, 6, 7], "discov": [5, 7, 8], "download": [5, 6, 7], "music": 5, "podcast": 5, "subscript": [5, 7], "arcad": 5, "sm": 5, "listen": [5, 7], "radio": 5, "station": 5, "magazin": 5, "exclus": 5, "sport": 5, "npayment": 5, "payment": 5, "credit": [5, 6], "pai": [5, 7], "cashless": 5, "nsegment": 5, "primarili": [5, 6, 8], "geograph": [5, 6, 8], "basi": [5, 7], "segment": [5, 6, 8, 9], "america": [5, 6], "europ": 5, "china": [5, 6, 7, 8], "japan": 5, "rest": [5, 7], "asia": 5, "pacif": 5, "north": [5, 8], "south": 5, "european": [5, 8], "india": 5, "middl": [5, 6, 7, 8], "east": 5, "africa": 5, "mainland": 5, "kong": 5, "taiwan": 5, "australia": 5, "asian": [5, 6], "although": [5, 7], "partner": [5, 6, 7, 8], "mid": [5, 6], "resel": [5, 6], "retail": 5, "sale": [5, 6], "indirect": 5, "channel": [5, 6, 8], "cellular": 5, "carrier": 5, "net": [5, 6, 9], "38": [5, 6, 7, 8], "ncompetit": 5, "downward": 5, "pressur": [5, 8], "gross": [5, 8], "cycl": [5, 8], "competitor": [5, 6, 7, 8], "compet": [5, 6, 7], "imit": 5, "infring": [5, 7], "intellectu": [5, 7, 8], "marketplac": [5, 8], "nearli": [5, 7], "reput": [5, 8], "expand": [5, 6, 7, 8], "profit": [5, 6, 8, 9], "illegitim": [5, 8], "collabor": [5, 7, 8], "nsuppli": 5, "nalthough": 5, "particip": 5, "shortag": 5, "commod": [5, 6, 7], "fluctuat": [5, 6], "commonli": [5, 6], "until": [5, 8, 9], "supplier": 5, "matur": 5, "concentr": [5, 6], "enter": [5, 9], "agreement": [5, 6], "suppli": [5, 6, 9], "renew": [5, 6], "nresearch": 5, "nbecaus": 5, "upon": [5, 6, 8], "flow": [5, 6, 9], "acquisit": [5, 6, 8], "nintellectu": 5, "broad": [5, 6, 7, 9], "patent": 5, "copyright": [5, 7], "trademark": 5, "secret": 5, "differenti": 5, "skill": [5, 8], "personnel": 5, "pursu": [5, 8], "thousand": [5, 7], "durat": 5, "adequ": [5, 8], "nin": 5, "holidai": [5, 8], "fill": 5, "inventori": 5, "older": [5, 7], "newer": 5, "distributor": 5, "nhuman": 5, "strive": 5, "retain": [5, 6, 7, 8], "talent": [5, 6], "member": [5, 8], "164": 5, "ncompens": 5, "equit": 5, "succe": 5, "health": [5, 6, 8], "awai": [5, 6, 8], "ngrowth": 5, "career": 5, "leadership": [5, 8], "nworkplac": 5, "workplac": 5, "ninclus": 5, "workforc": 5, "nengag": 5, "among": [5, 6, 7, 8, 9], "everyon": [5, 7], "gaug": 5, "sentiment": [5, 6, 7, 9], "nhealth": 5, "everywher": 5, "crisi": 5, "visitor": 5, "navail": 5, "quarterli": 5, "q": [5, 6, 7, 8], "amend": 5, "sec": [5, 6, 9], "Such": [5, 8], "charg": 5, "investor": [5, 6, 9], "aspx": 5, "websit": [5, 6, 7, 8], "environment": [5, 8], "referenc": [5, 6], "inact": 5, "textual": 5, "unknown": [5, 6, 8], "advers": 5, "conjunct": 5, "consolid": [5, 6], "nmacroeconom": 5, "facil": 5, "assembli": 5, "site": [5, 9], "nadvers": 5, "slow": [5, 6], "recess": 5, "unemploy": [5, 6], "inflat": [5, 6], "tighter": 5, "currenc": [5, 6], "monetari": 5, "contract": [5, 7], "logist": 5, "instabl": [5, 8], "inabl": [5, 6], "financ": [5, 6, 7, 8], "insolv": 5, "counterparti": 5, "debt": 5, "liquid": [5, 6], "fair": [5, 8], "instrument": 5, "polit": [5, 8], "disput": 5, "geopolit": 5, "tension": [5, 8], "terror": 5, "accid": 5, "interrupt": 5, "npolit": 5, "outsourc": [5, 6], "korea": 5, "vietnam": 5, "restrict": [5, 7, 8, 9], "tariff": 5, "export": [5, 6], "portion": [5, 7], "revenu": [5, 6, 9], "restructur": 5, "ceas": 5, "escal": [5, 8], "nmani": 5, "prone": [5, 6, 8], "earthquak": 5, "climat": 5, "weather": 5, "plant": 5, "terrorist": [5, 8], "attack": [5, 8], "hostil": 5, "ransomwar": 5, "cybersecur": [5, 6, 8], "labor": 5, "nsuch": 5, "imposs": [5, 7], "slowdown": 5, "outag": 5, "neg": [5, 6, 8, 9], "pandem": 5, "covid": 5, "economi": 5, "imposit": 5, "stringent": [5, 7, 8], "travel": 5, "freight": 5, "movement": 5, "ramp": 5, "nfollow": 5, "expenditur": 5, "resum": 5, "exacerb": [5, 6], "insur": 5, "nglobal": 5, "unabl": 5, "assur": [5, 8], "minor": [5, 6, 8], "naddition": 5, "intensifi": 5, "seamlessli": 5, "nto": 5, "stimul": 5, "ndue": 5, "upgrad": 5, "quantiti": 5, "defect": 5, "defici": 5, "supersed": 5, "nsubstanti": 5, "transport": 5, "reimburs": 5, "warranti": 5, "unanticip": 5, "liabil": 5, "finish": [5, 8], "destin": 5, "prepay": 5, "termin": [5, 7], "recover": 5, "exposur": [5, 8], "nfutur": 5, "semiconductor": 5, "suffer": [5, 6, 8], "constrain": [5, 7, 9], "shipment": 5, "unexpectedli": 5, "interfer": 5, "unsaf": [5, 8], "expos": [5, 6, 8], "widespread": [5, 8], "vulner": [5, 6, 8], "compromis": [5, 7, 8], "claim": [5, 6, 7, 8], "intang": 5, "lost": [5, 6, 8], "cancel": 5, "obsolet": 5, "exce": [5, 8], "realiz": 5, "accru": 5, "excess": 5, "impair": 5, "whenev": 5, "circumst": 5, "amount": [5, 6, 8, 9], "carri": [5, 7, 9], "incur": [5, 6], "unpredict": [5, 8], "obsolesc": 5, "forecast": [5, 6, 8], "incorrectli": [5, 8, 9], "extens": [5, 6, 7, 9], "issuanc": 5, "unknowingli": [5, 8], "notifi": 5, "preclud": 5, "bui": 5, "percept": 5, "android": [5, 6], "playstat": 5, "nintendo": 5, "xbox": 5, "inclin": 5, "devot": 5, "dissatisfi": 5, "vast": [5, 6, 8], "storefront": 5, "safari": 5, "union": [5, 8], "eu": [5, 6, 8], "dma": [5, 6], "narrow": [5, 7, 8], "scope": [5, 6, 7, 8], "elimin": [5, 6, 7], "nfailur": 5, "appeal": [5, 6], "subscrib": [5, 6], "nsome": 5, "manner": [5, 6, 8], "nurtur": 5, "nmuch": 5, "chief": [5, 6], "silicon": 5, "vallei": 5, "constantli": 5, "driver": [5, 7], "recruit": 5, "subsidi": 5, "staf": 5, "contractor": 5, "placement": 5, "increment": 5, "weaken": 5, "telecommun": 5, "war": 5, "virus": 5, "ins": 5, "incid": [5, 8], "ineffect": 5, "thing": [5, 9], "interf": 5, "imped": 5, "ship": 5, "nloss": 5, "unauthor": [5, 8], "confidenti": [5, 7], "encrypt": 5, "But": [5, 6, 8, 9], "behalf": 5, "normal": [5, 6, 8, 9], "investig": [5, 6, 8], "penalti": [5, 7], "frequenc": [5, 7, 8], "actor": [5, 8], "circumv": [5, 8], "obfusc": 5, "forens": 5, "hinder": [5, 9], "recov": 5, "perpetr": 5, "profil": [5, 7], "authent": 5, "hack": [5, 8], "malfeas": 5, "faulti": 5, "password": 5, "irregular": 5, "fraudul": 5, "induc": 5, "disclos": [5, 6, 9], "usernam": 5, "turn": [5, 6, 8, 9], "multifactor": 5, "unusu": 5, "freez": 5, "suspici": 5, "nwhile": 5, "ninvest": 5, "ongo": [5, 6, 7], "contempl": 5, "endeavor": 5, "distract": 5, "tangibl": 5, "approv": 5, "oner": 5, "ventur": 5, "riski": 5, "leas": 5, "unfavor": [5, 6], "arisen": 5, "ordinari": 5, "cours": [5, 6, 7, 8], "resolv": [5, 7, 8], "sometim": [5, 6], "indemnif": 5, "indemnifi": 5, "alleg": 5, "magnitud": 5, "assert": [5, 6], "royalti": 5, "vigor": 5, "defend": 5, "court": [5, 7], "internation": 5, "plaintiff": 5, "injunct": 5, "relief": 5, "nregardless": 5, "merit": 5, "recognit": [5, 7, 8], "settl": 5, "uncertain": [5, 6], "disgorg": 5, "remedi": [5, 8], "worldwid": 5, "antitrust": [5, 6], "bill": [5, 6], "commerc": 5, "televis": 5, "film": 5, "anticorrupt": 5, "cash": [5, 6], "repatri": 5, "launder": 5, "tax": [5, 6], "wast": 5, "recycl": 5, "ncomplianc": 5, "impos": [5, 7, 8, 9], "agent": [5, 7, 8], "nregulatori": 5, "ban": [5, 8], "nexpect": 5, "increasingli": [5, 6, 7, 8, 9], "greenhous": 5, "ga": 5, "emiss": 5, "civil": 5, "disagre": 5, "perceiv": 5, "feder": 5, "nfrom": 5, "noncompli": 5, "individu": [5, 6, 7, 8], "lawsuit": [5, 7], "monopol": 5, "nfurther": 5, "earn": 5, "search": [5, 6, 7, 8], "nthere": 5, "transfer": 5, "pass": [5, 6, 7, 8, 9], "pend": 5, "inquiri": [5, 8], "government": 5, "entiti": [5, 7, 8, 9], "biometr": 5, "notif": 5, "permit": [5, 7, 9], "healthcar": [5, 6, 7], "liabl": 5, "investigatori": 5, "cardhold": 5, "acquir": 5, "denomin": 5, "offset": 5, "strengthen": [5, 8], "nconvers": 5, "thu": 5, "hedg": 5, "deterior": 5, "sovereign": 5, "heighten": [5, 8], "worsen": 5, "A": [5, 7, 8, 9], "collater": 5, "bank": 5, "unsecur": 5, "subassembli": 5, "assembl": 5, "legisl": 5, "ireland": [5, 8], "singapor": 5, "organis": 5, "statutori": 5, "valuat": [5, 6], "defer": 5, "bodi": [5, 8], "adequaci": 5, "ow": 5, "ngener": 5, "repurchas": 5, "dividend": 5, "consumm": 5, "declar": [5, 6], "board": [5, 6, 8], "unresolv": 5, "nnone": 5, "threat": [5, 6, 8], "postur": 5, "25": [5, 6, 7, 8], "2016": 5, "coordin": [5, 8], "committe": [5, 8], "oversight": [5, 8], "counsel": 5, "chair": 5, "headquart": 5, "cupertino": [5, 9], "center": [5, 8, 9], "formal": [5, 8, 9], "uninstal": 5, "web": [5, 6, 7, 8], "browser": 5, "june": 5, "contractu": 5, "desist": 5, "stai": [5, 7], "grant": 5, "ndepart": 5, "justic": 5, "depart": [5, 8], "doj": 5, "district": 5, "attornei": 5, "jersei": 5, "redress": [5, 8], "anticompetit": 5, "nonmonetari": 5, "defens": [5, 8], "nepic": 5, "epic": 5, "northern": 5, "unfair": [5, 8], "enjoin": 5, "extern": [5, 6, 8], "januari": 5, "motion": 5, "oppos": [5, 8], "vacat": 5, "fourth": 5, "mine": 5, "nnot": 5, "aapl": 5, "nholder": 5, "na": [5, 8], "301": 5, "npurchas": 5, "nshare": 5, "nperiod": 5, "ttotal": 5, "taverag": 5, "npaid": 5, "nannounc": 5, "napproxim": 5, "That": [5, 6, 8, 9], "nunder": 5, "njune": 5, "august": [5, 6, 8], "nopen": 5, "negoti": [5, 8], "t35": 5, "697": 5, "t224": 5, "naugust": 5, "31": [5, 6, 7], "t42": 5, "910": 5, "t221": 5, "39": [5, 6, 7], "nseptemb": 5, "t33": 5, "653": 5, "t222": 5, "86": [5, 6, 7], "ntotal": [5, 8], "t112": 5, "260": 5, "t89": 5, "074": 5, "110": 5, "10b5": 5, "reinvest": 5, "dow": 5, "supersector": 5, "27": [5, 7, 8], "2019": 5, "n2218": 5, "tseptemb": 5, "t100": 5, "t207": 5, "t273": 5, "t281": 5, "t322": 5, "t430": 5, "t113": 5, "t156": 5, "t131": 5, "t155": 5, "t210": 5, "ndow": 5, "t146": 5, "t216": 5, "t215": 5, "nfirst": 5, "nsecond": 5, "nthird": 5, "sequoia": 5, "nfourth": 5, "plu": [5, 7], "nfiscal": 5, "six": 5, "realign": 5, "span": [5, 7, 8], "indirectli": 5, "n2024": 5, "tchang": 5, "t2023": 5, "t2022": 5, "namerica": 5, "t167": 5, "045": 5, "t3": 5, "t162": 5, "560": 5, "t169": 5, "658": 5, "neurop": 5, "t101": 5, "328": 5, "t7": 5, "294": 5, "t95": 5, "118": 5, "ngreater": 5, "t66": 5, "952": 5, "t72": 5, "559": 5, "t74": 5, "njapan": 5, "t25": 5, "052": 5, "t24": 5, "257": 5, "977": 5, "nrest": 5, "t30": 5, "t4": 5, "t29": 5, "615": 5, "t1": 5, "t391": 5, "035": 5, "t2": 5, "t383": 5, "285": 5, "t394": 5, "weak": [5, 6, 8], "renminbi": 5, "yen": [5, 9], "t201": 5, "183": 5, "t200": 5, "583": 5, "t205": 5, "489": 5, "984": 5, "357": 5, "t40": 5, "177": [5, 8], "t26": 5, "694": 5, "t28": 5, "300": 5, "292": 5, "t37": 5, "005": 5, "t39": 5, "845": [5, 8], "t41": 5, "241": 5, "n96": 5, "169": 5, "t13": 5, "t85": 5, "t9": 5, "t78": 5, "129": [5, 8], "amort": 5, "bundl": 5, "flat": [5, 6], "ngross": 5, "t109": 5, "633": 5, "t108": 5, "803": 5, "t114": 5, "728": 5, "t71": 5, "t60": 5, "345": 5, "t56": 5, "054": 5, "t180": 5, "683": 5, "148": 5, "t170": 5, "782": 5, "t36": 5, "t73": 5, "t70": 5, "t46": 5, "t44": 5, "t43": 5, "noper": 5, "t31": 5, "370": 5, "t5": 5, "915": 5, "t14": 5, "251": 5, "npercentag": 5, "t8": 5, "nsell": 5, "administr": 5, "097": 5, "932": 5, "094": 5, "t6": 5, "t57": 5, "467": 5, "t54": 5, "847": 5, "t51": 5, "t15": 5, "headcount": 5, "nprovis": 5, "749": 5, "t16": 5, "741": 5, "t19": 5, "neffect": 5, "nstatutori": 5, "t21": 5, "aid": [5, 8], "nliquid": 5, "unrestrict": 5, "140": 5, "ndebt": 5, "97": [5, 6, 8], "payabl": 5, "promissori": 5, "nleas": 5, "nmanufactur": 5, "noncancel": 5, "ndeem": 5, "tcja": 5, "nstate": 5, "fund": [5, 6, 7], "escrow": 5, "ncapit": 5, "95": [5, 8], "nrecent": 5, "pronounc": 5, "nincom": 5, "fasb": 5, "asu": 5, "09": [5, 6, 8], "740": 5, "reconcili": [5, 6], "reconcil": [5, 9], "disaggreg": 5, "prospect": 5, "novemb": [5, 8], "07": [5, 6, 8, 9], "280": 5, "maker": 5, "codm": 5, "retrospect": 5, "ncritic": 5, "conform": [5, 9], "gaap": 5, "nuncertain": 5, "domest": 5, "taxat": 5, "resolut": [5, 6], "conting": 5, "ninterest": 5, "forth": 5, "hypothet": 5, "nsensit": 5, "nhypothet": 5, "nrate": 5, "npotenti": 5, "n100": 5, "tenor": 5, "ndeclin": 5, "755": 5, "089": 5, "nterm": 5, "nincreas": 5, "t139": 5, "t194": 5, "nforeign": 5, "var": 5, "mont": 5, "carlo": 5, "interv": 5, "538": 5, "669": 5, "nindex": 5, "tpage": 5, "nconsolid": 5, "n29": 5, "n30": 5, "sheet": 5, "n31": 5, "n32": 5, "n33": 5, "nnote": 5, "n34": 5, "nreport": 5, "n48": 5, "nall": 5, "omit": 5, "submiss": 5, "nyear": 5, "n2023": 5, "n2022": 5, "nnet": 5, "t294": 5, "866": 5, "t298": 5, "085": 5, "t316": 5, "199": 5, "t96": 5, "ncost": 5, "t185": 5, "233": 5, "t189": 5, "282": 5, "471": 5, "119": 5, "855": 5, "t22": 5, "075": 5, "352": 5, "t214": 5, "137": 5, "t223": 5, "546": 5, "t123": 5, "216": 5, "t119": 5, "437": 5, "t269": 5, "565": 5, "334": 5, "485": 5, "736": 5, "103": 5, "t93": 5, "995": 5, "t99": 5, "nearn": 5, "nbasic": 5, "ndilut": 5, "08": [5, 7, 9], "343": [5, 8], "783": 5, "744": 5, "215": 5, "963": 5, "095": 5, "812": 5, "547": 5, "325": 5, "819": 5, "nsee": 5, "translat": [5, 7, 8], "t395": 5, "765": 5, "511": 5, "unreal": 5, "832": 5, "t323": 5, "212": 5, "nadjust": 5, "337": 5, "717": 5, "394": 5, "138": 5, "850": 5, "563": 5, "104": 5, "t204": 5, "t253": 5, "816": 5, "899": 5, "272": 5, "t98": 5, "016": 5, "652": 5, "t88": 5, "531": 5, "nasset": 5, "ncurrent": 5, "ncash": 5, "943": 5, "965": 5, "228": 5, "590": 5, "naccount": 5, "410": 5, "508": 5, "nvendor": 5, "t32": 5, "833": 5, "477": 5, "ninventori": 5, "286": 5, "331": 5, "287": 5, "695": 5, "t152": 5, "987": 5, "t143": 5, "566": 5, "t91": 5, "479": 5, "544": 5, "t45": 5, "680": 5, "715": 5, "834": 5, "t64": 5, "758": 5, "t211": 5, "993": 5, "t209": 5, "017": 5, "t364": 5, "980": [5, 8], "t352": 5, "nliabil": 5, "t68": 5, "960": 5, "t62": 5, "611": 5, "304": 5, "t58": 5, "829": 5, "ndefer": 5, "249": 5, "061": 5, "ncommerci": 5, "967": 5, "985": 5, "t10": 5, "912": 5, "822": 5, "t176": 5, "392": 5, "t145": 5, "308": 5, "750": 5, "888": 5, "t49": 5, "848": 5, "638": 5, "t308": 5, "030": [5, 7], "t290": 5, "ncommit": 5, "nsharehold": 5, "400": [5, 6], "116": 5, "786": 5, "550": 5, "n83": 5, "276": 5, "naccumul": 5, "deficit": 5, "154": 5, "214": 5, "172": 5, "452": 5, "950": 5, "146": [5, 8], "t50": 5, "672": 5, "t63": 5, "090": 5, "nbegin": 5, "849": 5, "365": 5, "423": 5, "346": [5, 6], "175": 5, "withheld": 5, "settlement": 5, "521": 5, "971": 5, "t12": 5, "034": 5, "t11": 5, "nend": 5, "t83": 5, "nretain": 5, "068": 5, "562": 5, "ndividend": 5, "218": 5, "793": 5, "612": 5, "099": 5, "454": 5, "846": 5, "77": [5, 6, 7], "046": 5, "186": 5, "109": 5, "t163": 5, "rsu": 5, "t0": 5, "98": [5, 6, 7], "94": [5, 6, 7, 8], "737": 5, "929": 5, "ndepreci": 5, "445": 5, "519": 5, "688": 5, "038": 5, "266": 5, "227": 5, "006": 5, "788": 5, "356": 5, "271": 5, "520": 5, "618": 5, "484": 5, "731": 5, "684": 5, "499": 5, "020": 5, "889": 5, "448": 5, "552": 5, "031": 5, "t118": 5, "254": 5, "t110": 5, "543": 5, "t122": 5, "151": 5, "48": [5, 7], "656": 5, "513": 5, "76": [5, 8], "923": 5, "nproce": 5, "211": 5, "686": 5, "917": 5, "135": 5, "828": [5, 6], "446": 5, "447": 5, "959": 5, "708": 5, "086": 5, "935": 5, "705": 5, "354": 5, "nfinanc": 5, "441": 5, "431": 5, "223": [5, 8], "234": [5, 8], "025": 5, "841": 5, "nrepurchas": 5, "949": 5, "89": [5, 8], "402": 5, "465": 5, "nrepay": 5, "958": 5, "repay": 5, "978": [5, 6], "955": 5, "361": 5, "581": 5, "160": 5, "121": 5, "983": 5, "488": 5, "794": 5, "760": 5, "nsupplement": 5, "102": 5, "t18": 5, "679": 5, "573": 5, "33": [5, 6, 7, 8], "nbasi": 5, "prior": [5, 8], "reclassifi": 5, "nrevenu": 5, "remit": [5, 8], "straight": 5, "vest": 5, "sold": 5, "nderiv": 5, "nonleas": 5, "34": [5, 6, 8], "entitl": 5, "commenc": 5, "deliveri": 5, "stand": 5, "ssp": 5, "icloud": 5, "siri": 5, "discount": 5, "undeliv": 5, "unbil": 5, "n26": 5, "n37": 5, "moder": [5, 7], "64": [5, 7, 8], "dilut": 5, "nnumer": 5, "ndenomin": 5, "nweight": 5, "312": 5, "316": 5, "856": 5, "antidilut": 5, "tunreal": 5, "ngain": 5, "tfair": 5, "nvalu": 5, "tcash": 5, "nequival": 5, "tcurrent": 5, "tnon": 5, "t27": 5, "nlevel": 5, "nmonei": 5, "t778": 5, "nmutual": 5, "n515": 5, "t105": 5, "t617": 5, "nsubtot": 5, "293": 5, "395": 5, "nu": 5, "treasuri": 5, "516": 5, "t212": 5, "087": 5, "380": 5, "159": 5, "t703": 5, "t17": 5, "568": 5, "158": 5, "810": 5, "ncertif": 5, "deposit": 5, "t873": 5, "t387": 5, "t478": 5, "066": 5, "ncorpor": 5, "t65": 5, "622": 5, "t270": 5, "953": 5, "939": 5, "027": 5, "t47": 5, "886": 5, "nmunicip": 5, "t412": 5, "t405": 5, "t190": 5, "nmortgag": 5, "595": 5, "t175": 5, "403": 5, "t23": 5, "367": 5, "278": [5, 8], "t132": 5, "t583": 5, "635": 5, "t128": 5, "056": 5, "966": 5, "t34": 5, "t160": 5, "t688": 5, "650": 5, "36": [5, 6, 7, 8], "359": [5, 8], "t481": 5, "n442": 5, "t428": 5, "t923": 5, "t909": 5, "406": 5, "114": 5, "468": 5, "136": 5, "t271": 5, "533": 5, "048": [5, 7], "491": 5, "332": 5, "t320": 5, "t608": 5, "t76": 5, "840": 5, "956": 5, "890": 5, "t20": 5, "627": 5, "243": 5, "t628": 5, "t602": 5, "t192": 5, "t410": 5, "735": 5, "636": 5, "t344": 5, "t144": 5, "470": 5, "657": 5, "831": 5, "125": 5, "162": 5, "t173": 5, "752": 5, "corrobor": 5, "mortgag": [5, 6], "classifi": [5, 8], "37": [5, 7, 8], "swap": 5, "remeasur": 5, "notion": 5, "069": 5, "730": 5, "575": 5, "493": 5, "t104": 5, "777": 5, "nhedg": 5, "433": 5, "505": 5, "247": [5, 8], "ntrade": 5, "41": [5, 7, 8], "44": [5, 8], "depreci": 5, "nland": 5, "690": 5, "nmachineri": 5, "t80": 5, "205": [5, 7], "314": 5, "nleasehold": 5, "839": 5, "599": 5, "73": [5, 7, 8], "884": 5, "852": 5, "t55": 5, "906": 5, "601": 5, "703": 5, "010": 5, "457": 5, "634": 5, "391": 5, "neuropean": 5, "opinion": [5, 6, 8], "1991": 5, "2007": 5, "irish": 5, "branch": 5, "2003": 5, "2014": [5, 6], "2015": 5, "minist": 5, "juli": [5, 8], "annul": 5, "ecj": 5, "hear": 5, "asid": 5, "confirm": 5, "unrecogn": [5, 6], "nfeder": 5, "571": 5, "080": 5, "644": 5, "265": 5, "801": 5, "726": 5, "570": 5, "298": 5, "49": [5, 6, 8], "t84": 5, "428": 5, "603": 5, "483": [5, 8], "t347": 5, "t669": 5, "076": 5, "830": 5, "419": 5, "072": 5, "pretax": 5, "72": [5, 6, 8], "ncomput": 5, "885": 5, "012": 5, "124": 5, "518": 5, "nimpact": 5, "246": 5, "311": 5, "366": 5, "397": 5, "nexcess": 5, "893": 5, "871": 5, "192": [5, 8], "739": 5, "ntax": 5, "carryforward": 5, "302": 5, "naccru": 5, "413": [5, 8], "421": 5, "nunreal": 5, "173": 5, "168": 5, "873": 5, "743": 5, "nless": 5, "374": 5, "007": 5, "369": 5, "551": 5, "998": 5, "nright": 5, "179": 5, "nminimum": 5, "674": 5, "940": 5, "t511": 5, "t455": 5, "t490": 5, "805": 5, "202": 5, "indefinit": 5, "temporari": 5, "727": 5, "044": 5, "284": 5, "ndecreas": 5, "386": 5, "463": 5, "982": 5, "542": 5, "936": 5, "070": 5, "expir": 5, "statut": 5, "229": 5, "494": 5, "closur": 5, "intercompani": 5, "exceed": [5, 8], "multiyear": 5, "exercis": 5, "noncash": 5, "rou": 5, "tfinanci": 5, "t2024": 5, "tother": 5, "661": 5, "tproperti": 5, "015": 5, "303": 5, "676": 5, "t165": 5, "t752": 5, "t859": 5, "430": 5, "842": [5, 8], "tfinanc": 5, "n2025": 5, "820": 5, "t171": 5, "991": 5, "n2026": 5, "914": 5, "n2027": 5, "t59": 5, "733": 5, "n2028": 5, "360": 5, "t38": 5, "398": 5, "n2029": 5, "187": 5, "nthereaft": 5, "t837": 5, "undiscount": 5, "790": 5, "imput": 5, "376": 5, "534": 5, "t896": 5, "borrow": 5, "proce": 5, "nine": [5, 8], "nmatur": 5, "333": 5, "264": 5, "948": 5, "645": 5, "309": 5, "arrear": 5, "namount": 5, "n2013": 5, "nfix": 5, "2062": 5, "t97": 5, "341": 5, "03": [5, 6], "65": [5, 8], "t106": 5, "572": 5, "n97": 5, "nunamort": 5, "321": 5, "358": 5, "113": 5, "662": 5, "930": 5, "342": 5, "800": 5, "180": 5, "88": [5, 6], "ndure": 5, "425": 5, "426": 5, "372": 5, "589": 5, "055": 5, "appreci": 5, "four": [5, 6, 7, 8], "holder": [5, 7], "n2014": 5, "bonu": 5, "nrestrict": 5, "nnumber": 5, "nrsu": 5, "ngrant": 5, "naggreg": 5, "nfair": 5, "nbalanc": 5, "t240": 5, "427": [5, 8], "t75": 5, "t150": 5, "861": 5, "501": 5, "768": 5, "87": [5, 6, 7, 8], "101": [5, 8], "878": 5, "144": 5, "t127": 5, "t135": 5, "91": [5, 8], "456": 5, "78": [5, 7, 8], "59": [5, 8], "t140": 5, "326": 5, "t158": 5, "204": 5, "350": 5, "002": [5, 7], "nuncondit": 5, "uncondit": 5, "206": 5, "440": 5, "156": 5, "t633": 5, "t670": 5, "226": 5, "45": 5, "nconting": 5, "accrual": 5, "nconcentr": 5, "attribut": [5, 6, 7, 8, 9], "46": 5, "t67": 5, "098": 5, "082": 5, "062": 5, "569": 5, "895": 5, "458": 5, "207": 5, "nonrecur": 5, "t142": 5, "196": 5, "t138": 5, "t147": 5, "859": 5, "nchina": 5, "n66": 5, "t181": 5, "887": 5, "t172": 5, "269": 5, "nlong": 5, "664": 5, "797": 5, "778": 5, "219": 5, "nopinion": 5, "nwe": 5, "fairli": 5, "pcaob": 5, "sponsor": 5, "treadwai": 5, "2013": 5, "unqualifi": [5, 6], "thereon": 5, "nthese": 5, "misstat": 5, "fraud": [5, 8], "ndescript": 5, "naudit": 5, "nhow": 5, "nmatter": 5, "qualifi": 5, "letter": [5, 6], "advisor": 5, "ernst": 5, "llp": 5, "auditor": [5, 6], "2009": 5, "nsan": 5, "jose": 5, "nnovemb": 5, "coso": 5, "nour": 5, "ndefinit": 5, "disposit": 5, "receipt": 5, "nevalu": 5, "nbase": 5, "supervis": [5, 7, 8, 9], "13a": 5, "15d": 5, "ninher": 5, "paragraph": 5, "51": [5, 8, 9], "ninsid": 5, "deirdr": 5, "brien": 5, "vice": 5, "presid": 5, "affirm": 5, "april": 5, "withhold": 5, "remitt": 5, "mr": 5, "copi": [5, 6], "solicit": 5, "00042": 5, "nincorpor": 5, "texhibit": 5, "descript": [5, 6, 7, 8, 9], "tform": 5, "tfile": 5, "nrestat": 5, "namend": 5, "bylaw": 5, "nindentur": 5, "york": [5, 6, 7, 9], "mellon": 5, "truste": 5, "noffic": 5, "certif": 5, "2018": 5, "85": [5, 7, 8], "05": [5, 6], "2044": 5, "februari": 5, "2045": 5, "900": 5, "700": [5, 7], "250": [5, 8], "2036": 5, "2046": 5, "450": 5, "2047": 5, "2049": 5, "2030": 5, "2050": 5, "2060": 5, "2028": 5, "2041": 5, "2061": 5, "2032": 5, "2052": 5, "54": [5, 6], "2033": 5, "2053": 5, "n12": 5, "nsubsidiari": 5, "n23": 5, "nconsent": 5, "n24": 5, "npower": 5, "signatur": 5, "nrule": 5, "nsection": 5, "1350": 5, "n101": 5, "ninlin": 5, "xbrl": 5, "n104": 5, "inlin": 5, "compensatori": 5, "herewith": 5, "furnish": 5, "herebi": 5, "undertak": 5, "56": [5, 7, 8], "nsignatur": 5, "npursuant": 5, "duli": 5, "undersign": 5, "thereunto": 5, "ndate": 5, "nby": 5, "luca": [5, 9], "maestri": 5, "nluca": 5, "nsenior": 5, "nchief": 5, "nknow": 5, "THESE": 5, "appoint": 5, "cook": 5, "jointli": 5, "her": 5, "substitut": 5, "him": 5, "thereto": 5, "therewith": 5, "ratifi": 5, "virtu": 5, "hereof": 5, "nname": 5, "ttitl": 5, "tdate": 5, "tchief": 5, "tnovemb": 5, "ntimothi": 5, "tsenior": 5, "kondo": 5, "nchri": 5, "wanda": 5, "austin": 5, "nwanda": 5, "gorski": 5, "tdirector": 5, "nalex": 5, "jung": 5, "nandrea": 5, "arthur": 5, "levinson": 5, "narthur": 5, "monica": 5, "lozano": 5, "nmonica": 5, "ronald": 5, "sugar": 5, "nronald": 5, "susan": 5, "wagner": 5, "nsusan": 5, "57": [5, 7], "turbo": [5, 7, 9], "outlin": [5, 7, 8], "invdestacksmeticsisdict": 5, "setispect": 5, "20cyan": 5, "evaluationseld": 5, "anvis": 5, "droitent": 5, "discernminerv": 5, "versbobprefvers": 5, "vo\u8be5": 5, "option\u548c": 5, "meio": 5, "\u0432\u0440\u0435\u043ccisco": 5, "dellaischenpoihscap": 5, "geme": 5, "gettim": 5, "unscal": 5, "vocabulari": [5, 7, 9], "closer": 5, "sharpen": 5, "uniform": 5, "raschka": 5, "repetit": [5, 9], "radic": 5, "grappl": 5, "safer": [5, 8], "fascin": 5, "spontan": 5, "answer": [5, 6, 7, 8, 9], "aren": [5, 7], "linear": 5, "absent": [5, 8], "coax": 5, "journei": 5, "suddenli": 5, "manifest": 5, "deliber": [5, 8], "contend": 5, "rethink": [5, 8], "tutor": 5, "children": [5, 8], "verifi": [5, 6, 7, 9], "predefin": [5, 9], "weren": 5, "kind": [5, 6], "usual": [5, 9], "quantif": 5, "contamin": [5, 8], "unseen": [5, 8], "longitudin": 5, "mostli": [5, 9], "latter": 5, "tailor": [5, 8], "great": [5, 7, 8, 9], "cognit": [5, 6], "misinform": [5, 8], "fabric": [5, 8], "citat": 5, "tempor": [5, 6], "disclaim": 5, "referr": 5, "incorrect": [5, 6, 8], "demograph": [5, 8], "stereotyp": [5, 8], "societ": [5, 8], "pii": [5, 8], "anonym": 5, "leakag": [5, 8], "carryov": 5, "fallaci": 5, "think": [5, 7, 8], "idiom": 5, "sarcasm": 5, "terminologi": 5, "lingual": 5, "misunderstand": 5, "syntax": 5, "scan": [5, 6], "compat": [5, 6, 7, 9], "overconfid": [5, 6], "clariti": [5, 6, 8, 9], "audienc": 5, "densiti": 5, "satisfact": [5, 9], "misus": [5, 8], "moral": 5, "co2": 5, "etc": [5, 6, 9], "palm": [5, 7], "easi": [5, 6, 7, 8], "synthet": [5, 7, 8, 9], "templat": [5, 6, 9], "timeout": 5, "inter": 5, "rater": 5, "ti": 5, "holist": [5, 8], "built": [5, 7, 8, 9], "experiment": [5, 6, 7, 9], "vi": 5, "categor": [5, 7, 8, 9], "intrins": [5, 7], "extrins": 5, "perplex": [5, 7], "downstream": [5, 9], "synthesi": 5, "discret": [5, 6], "prefix": [5, 8], "roug": 5, "bleu": 5, "bilingu": 5, "understudi": 5, "overlap": [5, 6], "favor": [5, 7, 9], "breviti": 5, "insensit": 5, "semant": [5, 6, 9], "orient": [5, 8], "gist": 5, "meteor": 5, "synonym": 5, "paraphras": 5, "alongsid": [5, 8], "computation": [5, 6], "cider": 5, "consensu": 5, "tf": 5, "idf": 5, "caption": 5, "reliant": [5, 6], "corpu": [5, 6, 7], "ter": 5, "edit": [5, 8], "hypothesi": 5, "penal": 5, "bertscor": 5, "contextu": [5, 8], "bert": 5, "spice": 5, "proposit": [5, 7], "scene": [5, 6, 8], "analyst": [5, 6], "rouge_1": 5, "rouge_2": 5, "ideal": [5, 6, 7, 8, 9], "setup": [5, 7, 8, 9], "evaluate_summari": 5, "unigram": 5, "bigram": 5, "absl": 5, "py": [5, 9], "rouge_scor": 5, "generated_summari": 5, "reference_summari": 5, "google_bleu": 5, "bleu_scor": 5, "rouge1": 5, "rouge2": 5, "arbitrari": 5, "chosen": [5, 8], "sentence1": 5, "cat": [5, 8], "sat": 5, "mat": 5, "sentence2": 5, "ate": 5, "3333333333333333": 5, "7272727272727272": 5, "4444444444444445": 5, "generate_summari": 5, "summir": 5, "liner": 5, "evaluate_summary_model": 5, "model_benchmark": 5, "models_test": 5, "benchmark_summari": 5, "model_summari": 5, "evaluation_result": 5, "statu": 5, "concis": [5, 7], "element": [5, 6, 8, 9], "verbos": [5, 6, 7, 8, 9], "peripher": 5, "quit": [5, 6, 7, 9], "convei": 5, "breadth": 5, "Of": [5, 7, 8], "vibe": 5, "visualize_prompt_comparison": 5, "matplotlib": 5, "radar": 5, "plot": 5, "radar_plot": 5, "tmp": 5, "ipykernel_1652501": 5, "940173201": 5, "userwarn": [5, 9], "figurecanvasagg": 5, "largest": [5, 7], "sarmah": 5, "granular": [5, 6, 7], "likert": 5, "ensembl": 5, "repeatedli": [5, 6], "fluenci": 5, "refin": 5, "integ": [5, 9], "rubric": 5, "hollist": 5, "judgeevalu": 5, "grammar": [5, 7, 9], "evaluate_with_llm": 5, "criterion": 5, "judge_model": 5, "candidate_summari": 5, "grammat": 5, "y": [5, 6, 8, 9], "z": 5, "w": [5, 6, 7, 8], "benchmark_model": 5, "test_model": 5, "input_text": [5, 6, 7], "trillion": [5, 7, 9], "evals_list": 5, "1775618912": 5, "slightli": 5, "drift": [5, 8], "lowest": [5, 7], "firstli": 5, "overhead": [5, 7], "egocentr": 5, "tight": 5, "medicin": [5, 6, 8], "glider": 5, "deshpand": 5, "3b": 5, "685": 5, "aplic": 5, "golden": 5, "earlier": [5, 8], "depict": [5, 8, 9], "multilingu": [5, 7, 8], "arena": 5, "randomli": 5, "customiz": [5, 7, 8], "irrelev": [5, 6], "unhelp": [5, 8], "occasion": 5, "rare": 5, "perfectli": 5, "cater": [5, 7], "critiqu": [5, 8], "elo": 5, "exam": 5, "probe": [5, 8], "certifi": 5, "glue": 5, "entail": [5, 7], "superglu": 5, "successor": 5, "grew": 5, "big": [5, 7], "bench": [5, 7], "srivastava": 5, "truthfulqa": [5, 7], "multitask": 5, "hendryck": [5, 8], "multidisciplinari": 5, "stanford": 5, "helm": 5, "multidimension": 5, "surround": [5, 7, 8, 9], "humanev": [5, 7], "lmsy": 5, "brought": 5, "dialogu": [5, 7], "chiang": 5, "gather": 5, "hundr": [5, 7], "alpacaev": 5, "duboi": 5, "mt": 5, "argilla": 5, "mila": 5, "mit": [5, 7], "contributor": [5, 7, 9], "western": 5, "centric": 5, "divid": [5, 6, 8], "subset": [5, 8], "agnost": 5, "dialect": 5, "render": [5, 8], "crowdsourc": 5, "livebench": 5, "white": [5, 8], "resili": [5, 6, 8], "meaningfulli": 5, "satur": 5, "zebralog": 5, "grid": 5, "puzzl": 5, "brailsford": 5, "1999": 5, "lsat": 5, "hous": 5, "clue": 5, "deduct": 5, "programmat": [5, 9], "2x2": 5, "6x6": 5, "shot": [5, 8, 9], "reductio": 5, "ad": [5, 6, 7, 9], "absurdum": 5, "hard": [5, 6], "10b": 5, "counterfactu": 5, "mileston": [5, 7], "came": 5, "arc": 5, "prize": [5, 8], "chollet": 5, "mike": [5, 6, 8], "knoop": 5, "founder": 5, "zapier": 5, "fran\u00e7oi": 5, "creator": [5, 7], "kera": 5, "genuin": 5, "agi": 5, "possess": [5, 6], "elementari": 5, "novelti": 5, "interpol": 5, "synthes": [5, 6], "fly": 5, "brute": [5, 6], "pixel": 5, "color": [5, 6], "unbeaten": 5, "win": [5, 7], "takeawai": 5, "vertic": [5, 8], "finbench": 5, "legalbench": 5, "guha": 5, "berkelei": [5, 8], "bfcl": 5, "patil": 5, "fourrier": 5, "bespok": 5, "sdk": 5, "autoregress": 5, "sub": [5, 7], "liter": 5, "disturb": 5, "zero": [5, 7, 8, 9], "varianc": [5, 8], "yt": 5, "ut": 5, "ol": 5, "heteroscedast": 5, "regress": 5, "wish": 5, "bivari": 5, "evaluationtrack": 5, "pipelineparamet": 5, "cache_dir": 5, "max_sampl": 5, "basemodelconfig": 5, "evaluation_track": 5, "model_config": 5, "parallelismmanag": 5, "envconfig": 5, "is_accelerate_avail": 5, "datetim": [5, 6], "timedelta": [5, 6], "initprocessgroupkwarg": 5, "create_evaluation_pipelin": 5, "float16": 5, "kwargs_handl": 5, "3000": 5, "save_detail": 5, "pipeline_param": 5, "launcher_typ": 5, "env_config": 5, "override_batch_s": 5, "use_chat_templ": 5, "trust_remote_cod": 5, "pipeline_paramet": 5, "schemat": [5, 6], "vllm": [5, 9], "tgi": 5, "num_few_shot": 5, "bar": 5, "bigbench": 5, "winogrand": 5, "hellaswag": 5, "nlp": [5, 6, 7, 8], "save_and_push_result": 5, "show_result": 5, "model_arg": 5, "send": [5, 6, 7, 8, 9], "serverless": 5, "inference_server_address": 5, "inference_server_auth": 5, "model_id": 5, "null": 5, "bash": [5, 7], "command": [5, 6, 7], "model_config_path": 5, "endpoint_model": 5, "llama3": 5, "qwen2": [5, 7, 9], "alibaba": [5, 7, 9], "5b": [5, 7, 9], "hui": [5, 7], "allal": [5, 7], "cluster": [5, 6], "noteworthi": [5, 7], "superior": [5, 6, 8], "grain": [5, 6, 7, 9], "salt": [5, 9], "modular": 5, "offici": 5, "revisit": 5, "langchain": [5, 6], "trace": [5, 6], "langchain_tracing_v2": 5, "langchain_api_kei": 5, "hf_evalu": 5, "langsmith_evalu": 5, "ls_client": 5, "dataset_nam": 5, "create_dataset": 5, "create_exampl": 5, "dataset_id": 5, "calculate_scor": 5, "reference_output": 5, "oai_client": 5, "xp_model_nam": 5, "lastli": 5, "run_evalu": 5, "And": [5, 6, 7, 8], "upload_result": 5, "experiment_prefix": 5, "num_repetit": 5, "386a3620": 5, "9e1cc3cb": 5, "9d6a": 5, "4356": 5, "ab34": 5, "138e0abe8be4": 5, "8741976e": 5, "5268": 5, "4b75": 5, "949f": 5, "99477dde5d64": 5, "selectedsess": 5, "b831dc1e": 5, "90bc": 5, "4ed8": 5, "8080": [5, 7], "fb42444724d6": 5, "4it": 5, "latest": [5, 6, 7, 8, 9], "tobia": [5, 9], "evaluate_modul": 5, "6fc70b7be0088120a372dfdd5d320b39b8bb3630cb8029b193941d9376e86bb0": 5, "tue": 5, "nov": [5, 7], "couldn": 5, "5it": 5, "5053784e": 5, "64445871": 5, "a53c": 5, "44b1": 5, "a422": 5, "4f49b2f9656f": 5, "69": [5, 8], "4b29f3c9": 5, "9ef7e39a": 5, "2add": 5, "410c": 5, "89f8": 5, "9f1a8b198cf1": 5, "61": [5, 8], "insert": [5, 6], "combined_df": 5, "concat": [5, 8], "ignore_index": [5, 8], "execution_tim": 5, "example_id": 5, "333333": 5, "224388": 5, "feb10f92": 5, "3167": 5, "41f3": 5, "bb1c": 5, "d271153a31a8": 5, "5b196b22": 5, "9f4c": 5, "489c": 5, "b020": 5, "7823208b42d6": 5, "348101": 5, "722464": 5, "c310f159": 5, "064a": 5, "4035": 5, "97c3": 5, "a25bbf43abc2": 5, "386076": 5, "704104": 5, "f7f24899": 5, "dd50": 5, "409e": 5, "93cc": 5, "6fb1622b60bf": 5, "443038": 5, "725059": 5, "242856d6": 5, "efb5": 5, "4101": 5, "b1cf": 5, "5805532838ac": 5, "373418": 5, "795302": 5, "ce975169": 5, "a0ab": 5, "40ce": 5, "8e32": 5, "efa28d06079d": 5, "stat": [5, 7], "groupbi": [5, 8], "agg": [5, 8], "sort": 5, "sort_valu": 5, "subplot": 5, "pyplot": 5, "plt": 5, "ax1": 5, "ax2": 5, "figsiz": 5, "2ecc71": 5, "3498db": 5, "e74c3c": 5, "bleu_mean": 5, "bleu_std": 5, "enumer": [5, 6, 8], "errorbar": 5, "yerr": 5, "fmt": 5, "markers": 5, "capsiz": 5, "set_ylabel": 5, "set_titl": 5, "set_xtick": 5, "set_xticklabel": 5, "rotat": 5, "set_ylim": 5, "bottom": [5, 6], "legend": 5, "exec_mean": 5, "exec_std": 5, "tight_layout": 5, "ndetail": 5, "4038": 5, "0453": 5, "7815": 5, "0433": 5, "3768": 5, "0424": 5, "8343": 5, "2208": 5, "3519": 5, "0775": 5, "9122": 5, "1482": 5, "377": 5, "042": 5, "078": 5, "slower": [5, 6, 8], "04": [5, 7], "interestingli": 5, "decoupl": 5, "reload": 5, "facilit": [5, 8], "promptfooconfig": 5, "model_comparison": 5, "pretti": [5, 8], "dump": 5, "default_flow_styl": 5, "sort_kei": 5, "prompt1": 5, "defaulttest": 5, "ye": [5, 6, 7, 8, 9], "1000m": 5, "eval_data": 5, "latency_m": 5, "totallatencym": 5, "token_usag": 5, "tokenusag": 5, "assert_pass": 5, "assertpasscount": 5, "assert_fail": 5, "assertfailcount": 5, "prompt_token": [5, 7], "num_request": 5, "numrequest": 5, "num": 5, "2463": 5, "000035": 5, "3773": 5, "004620": 5, "1669": 5, "000091": 5, "1669m": 5, "highest": [5, 6, 7, 9], "3773m": 5, "00462": 5, "promptfool": 5, "manual": [5, 6, 7, 8], "redefin": 5, "prompt_comparison": 5, "prompt2": 5, "prompt3": 5, "prompt_fil": 5, "prompt_cont": 5, "BE": 5, "again": 5, "prompt_id": 5, "promptid": 5, "gradingresult": 5, "df_raw": 5, "reset_index": [5, 8], "poorli": 5, "eas": [5, 7, 8, 9], "hf": [5, 7], "plain": [5, 6, 7], "vanilla": 5, "defi": 5, "accustom": 5, "legaci": 5, "unsustain": 5, "prd": 5, "cultiv": [5, 8], "organiz": 5, "alb": [5, 7], "loubna": [5, 7], "anton": [5, 7], "lozhkov": [5, 7], "bakouch": [5, 7], "gabriel": [5, 7, 8], "mart\u00edn": [5, 7, 8], "bl\u00e1zquez": [5, 7], "lewi": [5, 6, 7], "tunstal": [5, 7], "agust\u00edn": [5, 7], "piquer": [5, 7], "andr": [5, 6, 7], "marafioti": [5, 7], "cyril": [5, 7], "zakka": [5, 7], "leandro": [5, 7], "werra": [5, 7], "wolf": [5, 7], "are24": 5, "judgearena": 5, "bps99": 5, "salli": 5, "pott": 5, "barbara": 5, "557": [5, 8], "sciencedirect": 5, "s0377221798003646": 5, "doi": [5, 6, 8, 9], "1016": 5, "s0377": 5, "2217": 5, "00364": 5, "ctj": 5, "jerri": [5, 8], "tworek": [5, 8], "heewoo": [5, 8], "jun": [5, 8], "qime": [5, 8], "henriqu": [5, 8], "pond": [5, 8], "de": [5, 8], "oliveira": [5, 8], "pinto": [5, 8], "harri": [5, 8], "yuri": 5, "burda": 5, "greg": [5, 8], "brockman": [5, 8], "raul": [5, 8], "puri": [5, 8], "gretchen": [5, 8], "krueger": [5, 8], "petrov": [5, 8], "heidi": 5, "khlaaf": 5, "girish": [5, 8], "sastri": [5, 8], "brook": [5, 8], "chan": [5, 8], "grai": [5, 8], "ryder": [5, 8], "mikhail": [5, 8], "pavlov": [5, 8], "alethea": [5, 8], "lukasz": 5, "kaiser": [5, 8], "mohammad": [5, 8], "bavarian": [5, 8], "clemen": [5, 8], "winter": [5, 8], "philipp": 5, "tillet": [5, 8], "felip": [5, 8], "petroski": [5, 8], "dave": [5, 8], "cum": [5, 8], "plappert": 5, "fotio": 5, "chantzi": [5, 8], "barn": 5, "ariel": 5, "herbert": 5, "voss": [5, 8], "hebgen": 5, "guss": 5, "nichol": 5, "paino": [5, 8], "nikola": [5, 8], "tezak": [5, 8], "babuschkin": [5, 8], "suchir": [5, 8], "balaji": [5, 8], "shantanu": [5, 8], "jain": [5, 8], "hess": [5, 8], "carr": 5, "josh": [5, 8], "achiam": [5, 8], "vedant": 5, "misra": 5, "evan": [5, 7, 8], "morikawa": [5, 8], "matthew": 5, "knight": [5, 8], "mile": [5, 8], "brundag": [5, 8], "mira": [5, 8], "murati": [5, 8], "kati": [5, 8], "mayer": [5, 8], "bob": [5, 8, 9], "mcgrew": [5, 8], "ilya": [5, 8], "sutskev": [5, 8], "wojciech": [5, 8], "zaremba": [5, 8], "2107": 5, "03374": 5, "cz": 5, "lianmin": 5, "ying": 5, "sheng": 5, "anastasio": 5, "angelopoulo": 5, "tianl": 5, "dacheng": 5, "banghua": 5, "jordan": [5, 8], "gonzalez": 5, "ion": 5, "stoica": 5, "04132": 5, "cho24a": 5, "francoi": 5, "arcpriz": 5, "cho24b": 5, "drcw": 5, "darshan": 5, "selvan": 5, "sunitha": 5, "ravi": 5, "sky": 5, "ch": 5, "bartosz": 5, "mielczarek": 5, "anand": [5, 8], "kannappan": [5, 8], "qian": [5, 8], "14140": 5, "dglh24": 5, "yann": 5, "bal\u00e1z": 5, "galambosi": 5, "tatsunori": 5, "hashimoto": 5, "debia": 5, "04475": 5, "fhwt23": 5, "cl\u00e9mentin": 5, "nathan": 5, "habib": 5, "gnh": 5, "julian": 5, "nyarko": 5, "ho": 5, "r\u00e9": 5, "adam": [5, 8], "chilton": 5, "aditya": [5, 8], "narayana": 5, "chohla": 5, "brandon": [5, 8, 9], "waldon": 5, "rockmor": 5, "diego": 5, "zambrano": 5, "dmitri": 5, "talisman": 5, "enam": 5, "hoqu": 5, "faiz": 5, "surani": 5, "frank": [5, 8], "fagan": 5, "galit": 5, "sarfati": 5, "gregori": 5, "dickinson": 5, "haggai": 5, "porat": 5, "hegland": 5, "jessica": [5, 8], "joe": [5, 8], "nudel": 5, "joel": [5, 8], "niklau": 5, "nai": 5, "choi": 5, "margaret": [5, 7], "hagan": 5, "megan": 5, "livermor": 5, "nikon": 5, "rasumov": 5, "rahe": 5, "nil": 5, "holzenberg": 5, "noam": 5, "kolt": 5, "henderson": 5, "rehaag": 5, "sharad": 5, "shang": 5, "spencer": 5, "sunni": 5, "gandhi": 5, "zur": 5, "varun": 5, "iyer": [5, 8], "zehua": 5, "2308": 5, "11462": 5, "hbb": 5, "collin": 5, "burn": 5, "steven": [5, 8], "basart": [5, 8], "zou": [5, 8], "manta": [5, 8], "mazeika": [5, 8], "03300": 5, "hbd": 5, "maxwel": 5, "forb": 5, "yejin": 5, "curiou": 5, "neural": [5, 9], "degener": 5, "1904": 5, "09751": 5, "hug24a": 5, "wiki": [5, 9], "hug24b": 5, "hug24c": 5, "model_doc": 5, "hug24d": 5, "cookbook": [5, 6], "llm_judg": 5, "hug24f": 5, "hyc": [5, 7], "binyuan": [5, 7], "zeyu": [5, 7], "cui": [5, 7], "jiaxi": [5, 7], "dayiheng": [5, 7], "tianyu": [5, 7], "jiajun": [5, 7], "kai": [5, 6, 7, 8], "dang": [5, 7], "coder": [5, 7], "preprint": [5, 7, 9], "2409": [5, 7, 8], "12186": [5, 7], "lx": 5, "zhen": 5, "xiaohan": 5, "jia": [5, 6], "yuxuan": 5, "lai": 5, "chongyang": 5, "shuai": 5, "nlg": 5, "07103": 5, "lbl": 5, "bommasani": 5, "toni": 5, "dimitri": 5, "tsipra": 5, "dilara": 5, "soylu": 5, "michihiro": 5, "yasunaga": 5, "yian": 5, "deepak": 5, "narayanan": 5, "yuhuai": 5, "newman": 5, "binhang": 5, "bobbi": 5, "ce": 5, "christian": [5, 8], "cosgrov": 5, "acosta": 5, "nava": [5, 8], "drew": 5, "hudson": 5, "zelikman": 5, "esin": 5, "durmu": 5, "faisal": 5, "ladhak": 5, "frieda": 5, "rong": [5, 6], "ren": [5, 7], "huaxiu": 5, "yao": [5, 8, 9], "jue": 5, "keshav": 5, "santhanam": 5, "laurel": 5, "lucia": 5, "mert": 5, "yuksekgonul": 5, "mirac": 5, "suzgun": 5, "niladri": 5, "chatterji": 5, "omar": [5, 6], "khattab": [5, 6], "chi": [5, 6, 8, 9], "sang": [5, 8], "shibani": [5, 8], "santurkar": [5, 8], "surya": 5, "icard": 5, "tianyi": 5, "vishrav": 5, "chaudhari": 5, "xuechen": 5, "yuhui": 5, "yuta": 5, "koreeda": 5, "2211": 5, "09110": 5, "lbc24": 5, "ronan": 5, "bra": 5, "allenai": 5, "lhe22": [5, 7, 8], "stephani": [5, 7, 8], "owain": [5, 7, 8], "mimic": [5, 7, 8], "falsehood": [5, 7, 8], "2109": [5, 7, 8], "07958": [5, 7, 8], "pzwg23": 5, "shishir": 5, "tianjun": 5, "xin": [5, 8], "gorilla": 5, "15334": 5, "pro24": 5, "dev": [5, 6], "ras24": 5, "sebastian": [5, 6], "scratch": 5, "1633437166": 5, "sll": 5, "bhaskarjit": 5, "mingshu": 5, "jingrao": 5, "lyu": 5, "nathalia": 5, "castellano": 5, "pasquali": 5, "dhagash": 5, "12148": 5, "srf": 5, "shivalika": 5, "angelika": 5, "roman": [5, 8], "adelani": 5, "ngui": 5, "vila": 5, "suero": 5, "peerat": 5, "limkonchotiwat": 5, "kelli": 5, "marchisio": 5, "qi": [5, 6], "leong": 5, "yosephin": 5, "susanto": 5, "raymond": [5, 8], "ng": [5, 8], "shayn": 5, "longpr": 5, "ko": 5, "madelin": 5, "antoin": 5, "bosselut": 5, "oh": 5, "leshem": 5, "choshen": 5, "daphn": 5, "ippolito": 5, "enzo": [5, 9], "ferrant": 5, "marzieh": 5, "fadae": 5, "beyza": 5, "ermi": 5, "sara": 5, "hooker": 5, "linguist": [5, 6, 8], "03304": 5, "srr": 5, "aarohi": 5, "abhinav": [5, 6], "rastogi": 5, "abhishek": 5, "rao": 5, "abu": 5, "awal": 5, "shoeb": 5, "abubakar": 5, "abid": [5, 7], "fisch": 5, "santoro": 5, "gupta": 5, "adri\u00e0": 5, "garriga": 5, "alonso": 5, "agnieszka": 5, "kluska": 5, "aitor": 5, "lewkowycz": 5, "akshat": 5, "warstadt": 5, "alexand": [5, 8, 9], "kocurek": 5, "ali": [5, 8], "safaya": 5, "tazarv": 5, "aman": 5, "hussain": 5, "dsouza": 5, "ambros": 5, "slone": 5, "ameet": 5, "rahan": 5, "anantharaman": 5, "ander": 5, "andreassen": 5, "madotto": 5, "santilli": 5, "stuhlm\u00fcller": 5, "la": 5, "lampinen": 5, "angelica": 5, "anh": 5, "vuong": 5, "animesh": 5, "gottardi": 5, "antonio": 5, "norelli": 5, "anu": 5, "venkatesh": 5, "arash": 5, "gholamidavoodi": 5, "arfa": 5, "tabassum": 5, "arul": 5, "menez": 5, "arun": [5, 8], "kirubarajan": 5, "asher": 5, "mullokandov": 5, "ashish": 5, "sabharw": 5, "herrick": 5, "avia": 5, "efrat": 5, "aykut": 5, "erdem": 5, "ayla": 5, "karaka\u015f": 5, "bao": [5, 7, 8], "loe": 5, "barret": [5, 8], "zoph": [5, 8], "bart\u0142omiej": 5, "bojanowski": 5, "batuhan": 5, "\u00f6zyurt": 5, "behnam": 5, "hedayatnia": 5, "neyshabur": 5, "inden": 5, "benno": 5, "stein": 5, "berk": 5, "ekmekci": 5, "blake": 5, "howald": 5, "bryan": 5, "orinion": 5, "diao": 5, "dour": 5, "stinson": 5, "cedrick": 5, "argueta": 5, "c\u00e9sar": 5, "ferri": 5, "ram\u00edrez": 5, "chandan": 5, "charl": 5, "rathkopf": 5, "chenlin": 5, "meng": 5, "chitta": 5, "baral": 5, "chiyu": 5, "callison": 5, "burch": 5, "voigt": 5, "cindi": 5, "ramirez": 5, "clara": 5, "rivera": 5, "clemencia": 5, "siro": 5, "colin": [5, 7], "raffel": [5, 7], "courtnei": 5, "ashcraft": 5, "cristina": 5, "garbacea": 5, "damien": [5, 8], "sileo": 5, "garrett": 5, "kilman": 5, "freeman": 5, "khashabi": 5, "levi": [5, 8], "mosegu\u00ed": 5, "gonz\u00e1lez": 5, "perszyk": 5, "danqi": 5, "dar": 5, "gilboa": 5, "dohan": [5, 8], "drakard": 5, "jurgen": 5, "debajyoti": 5, "datta": 5, "deni": 5, "emelin": 5, "kleyko": 5, "deniz": 5, "yuret": 5, "derek": [5, 8], "tam": [5, 9], "dieuwk": 5, "hupk": 5, "diganta": 5, "dilyar": 5, "buzan": 5, "coelho": 5, "mollo": 5, "diyi": 5, "dylan": 5, "schrader": 5, "ekaterina": 5, "shutova": 5, "ekin": 5, "dogu": 5, "cubuk": 5, "elad": 5, "segal": 5, "eleanor": 5, "hagerman": 5, "donowai": 5, "elli": 5, "pavlick": 5, "rodola": 5, "emma": 5, "lam": 5, "chu": [5, 8], "erkut": 5, "erni": 5, "dyer": 5, "jerzak": 5, "eunic": 5, "engefu": 5, "manyasi": 5, "evgenii": 5, "zheltonozhskii": 5, "fanyu": 5, "fatemeh": 5, "siar": 5, "fernando": 5, "mart\u00ednez": 5, "plume": 5, "francesca": 5, "happ\u00e9": 5, "gaurav": 5, "genta": 5, "indra": 5, "winata": 5, "gerard": 5, "melo": 5, "germ\u00e1n": 5, "kruszewski": 5, "giambattista": [5, 8], "parascandolo": [5, 8], "giorgio": 5, "mariani": 5, "gloria": 5, "gonzalo": 5, "jaimovitch": 5, "l\u00f3pez": 5, "gregor": 5, "betz": 5, "gui": [5, 7], "gur": 5, "hana": 5, "galijasev": 5, "rashkin": 5, "hannaneh": 5, "hajishirzi": 5, "harsh": 5, "hayden": 5, "bogar": 5, "henri": [5, 8], "shevlin": 5, "hinrich": 5, "sch\u00fctze": 5, "hiromu": 5, "yakura": 5, "hongm": 5, "hugh": 5, "mee": 5, "wong": [5, 6, 8], "isaac": 5, "nobl": 5, "jaap": 5, "jumelet": 5, "geissing": 5, "jaehoon": 5, "jaim": 5, "fern\u00e1ndez": 5, "fisac": 5, "simon": 5, "koppel": 5, "koco\u0144": 5, "jana": 5, "thompson": [5, 7, 8], "janel": 5, "wingfield": 5, "jarema": 5, "radom": 5, "jascha": 5, "sohl": [5, 8], "dickstein": 5, "phang": 5, "yosinski": 5, "jekaterina": 5, "novikova": 5, "jell": 5, "bosscher": 5, "jennif": 5, "marsh": 5, "jeroen": 5, "taal": 5, "engel": 5, "jesujoba": 5, "alabi": 5, "jiam": 5, "jillian": 5, "joan": 5, "waweru": 5, "burden": 5, "bali": 5, "batcheld": 5, "berant": 5, "j\u00f6rg": 5, "frohberg": 5, "jo": 5, "rozen": 5, "orallo": 5, "boudeman": 5, "guerr": 5, "tenenbaum": 5, "joyc": 5, "chua": 5, "kanclerz": 5, "karen": 5, "livescu": 5, "karl": 5, "krauth": 5, "karthik": 5, "gopalakrishnan": 5, "katerina": 5, "ignatyeva": 5, "katja": 5, "markert": 5, "kaustubh": 5, "dhole": 5, "gimpel": 5, "omondi": 5, "kori": 5, "mathewson": 5, "kristen": 5, "chiafullo": 5, "ksenia": 5, "shkaruta": 5, "shridhar": 5, "kyle": [5, 6, 8], "mcdonel": 5, "richardson": 5, "laria": 5, "reynold": 5, "leo": [5, 8], "dugan": 5, "lianhui": 5, "lidia": 5, "contrera": 5, "ochando": 5, "morenc": 5, "moschella": 5, "luci": 5, "ludwig": 5, "schmidt": [5, 8], "luheng": 5, "olivero": 5, "col\u00f3n": 5, "metz": [5, 8], "l\u00fctfi": 5, "kerem": 5, "\u015fenel": 5, "bosma": [5, 6], "sap": [5, 8], "maartj": 5, "hoev": 5, "maheen": 5, "farooqi": 5, "manaal": 5, "faruqui": 5, "marco": [5, 6], "baturan": 5, "marelli": 5, "maru": 5, "maria": 5, "quintana": 5, "tolkiehn": 5, "mario": [5, 8], "giulianelli": 5, "martha": 5, "potthast": 5, "leavitt": 5, "hagen": 5, "m\u00e1ty\u00e1": 5, "schubert": 5, "medina": [5, 8], "orduna": 5, "baitemirova": 5, "melodi": 5, "arnaud": 5, "melvin": 5, "mcelrath": 5, "yee": 5, "cohen": 5, "ivanitskii": 5, "starritt": 5, "strube": 5, "micha\u0142": 5, "sw\u0119drowski": 5, "michel": [5, 8], "bevilacqua": 5, "mihir": 5, "kale": 5, "cain": 5, "mime": 5, "mitch": 5, "walker": 5, "mo": 5, "tiwari": 5, "mohit": 5, "bansal": 5, "moin": 5, "aminnaseri": 5, "mor": 5, "geva": 5, "mozhdeh": 5, "gheini": 5, "mukund": [5, 6], "varma": 5, "nanyun": 5, "peng": [5, 8], "nayeon": 5, "neta": 5, "krakov": 5, "doiron": 5, "nicol": 5, "martinez": 5, "nikita": [5, 6], "nangia": 5, "nikla": 5, "decker": 5, "muennighoff": 5, "nitish": [5, 8], "shirish": [5, 8], "keskar": [5, 8], "niveditha": 5, "constant": 5, "fiedel": 5, "nuan": 5, "wen": [5, 6], "oliv": [5, 8], "agha": 5, "elbaghdadi": 5, "omer": 5, "moreno": 5, "casar": 5, "parth": 5, "doshi": 5, "pascal": [5, 6], "fung": 5, "pu": 5, "vicol": 5, "pegah": 5, "alipoormolabashi": 5, "peiyuan": 5, "eckerslei": 5, "phu": 5, "mon": 5, "htut": 5, "pinyu": 5, "hwang": 5, "piotr": 5, "mi\u0142kowski": 5, "piyush": 5, "pouya": [5, 6], "pezeshkpour": [5, 6], "priti": 5, "oli": 5, "qiaozhu": [5, 6], "mei": [5, 6, 7], "qing": [5, 8], "qinlang": 5, "rabin": 5, "banjad": 5, "rachel": [5, 8], "etta": 5, "rudolph": 5, "raefer": 5, "rahel": 5, "haback": 5, "ramon": 5, "risco": 5, "rapha\u00ebl": 5, "milli\u00e8r": 5, "rhythm": 5, "garg": [5, 7], "rif": 5, "saurou": 5, "riku": 5, "arakawa": 5, "robb": 5, "raymaek": 5, "rohan": 5, "sikand": 5, "novak": 5, "sitelew": 5, "lebra": 5, "rosann": 5, "rowan": [5, 8], "ruslan": 5, "salakhutdinov": 5, "stoval": 5, "teehan": 5, "sahib": 5, "saif": 5, "sajant": 5, "dillav": 5, "shleifer": 5, "wiseman": 5, "gruetter": 5, "schoenholz": 5, "sanghyun": 5, "sanjeev": 5, "kwatra": 5, "sarik": 5, "ghazarian": 5, "sayan": 5, "casei": [5, 8], "bischoff": 5, "gehrmann": 5, "schuster": 5, "sepideh": 5, "sadeghi": 5, "shadi": 5, "hamdan": 5, "sharon": 5, "shashank": 5, "sherri": 5, "shi": [5, 8], "shikhar": 5, "shima": 5, "asaadi": 5, "shubh": 5, "pachchigar": 5, "shubham": 5, "toshniw": 5, "shyam": [5, 8], "upadhyai": 5, "shyamolima": 5, "debnath": 5, "siamak": 5, "shakeri": 5, "thormey": 5, "melzi": 5, "siva": 5, "reddi": 5, "sneha": 5, "priscilla": 5, "makini": 5, "soo": 5, "hwan": 5, "toren": 5, "sriharsha": 5, "hatwar": 5, "stanisla": 5, "dehaen": 5, "stefan": 5, "divic": 5, "stella": 5, "biderman": 5, "stephen": 5, "prasad": 5, "piantadosi": 5, "stuart": [5, 8], "shieber": 5, "summer": [5, 8], "misherghi": 5, "svetlana": 5, "kiritchenko": 5, "swaroop": 5, "tal": 5, "linzen": 5, "tariq": 5, "tatsu": 5, "te": 5, "th\u00e9o": 5, "desbord": 5, "theodor": 5, "rothschild": 5, "phan": [5, 8], "tiberiu": 5, "nkinyili": 5, "timo": 5, "schick": 5, "timofei": 5, "kornev": 5, "titu": 5, "tunduni": 5, "gerstenberg": 5, "trenton": 5, "trishala": 5, "neeraj": 5, "tushar": 5, "khot": 5, "shultz": 5, "uri": 5, "shaham": 5, "vera": 5, "demberg": 5, "victoria": [5, 8], "nyamai": 5, "vika": 5, "raunak": 5, "vinai": 5, "ramasesh": 5, "udai": 5, "prabhu": 5, "vishakh": 5, "padmakumar": 5, "vivek": [5, 6], "srikumar": [5, 6], "fedu": [5, 8], "wout": 5, "vossen": 5, "xiaoyu": 5, "tong": [5, 8], "xinran": 5, "xinyi": 5, "yadollah": 5, "yaghoobzadeh": 5, "yair": 5, "lakretz": 5, "yangqiu": 5, "yasaman": 5, "bahri": 5, "yichi": 5, "yide": 5, "yifu": 5, "yonatan": 5, "belinkov": 5, "yufang": 5, "seid": 5, "zhuoy": 5, "zijian": 5, "ziji": 5, "zirui": 5, "ziyi": 5, "extrapol": [5, 6], "2206": 5, "04615": 5, "wpn": 5, "yada": 5, "pruksachatkun": 5, "amanpreet": 5, "hill": 5, "stickier": 5, "wsm": 5, "1804": 5, "07461": 5, "wtb": 5, "tai": 5, "borgeaud": 5, "dani": 5, "yogatama": 5, "denni": [5, 6, 8], "donald": 5, "metzler": 5, "ed": [5, 6], "oriol": 5, "vinyal": 5, "dean": 5, "07682": 5, "wdr": 5, "doolei": 5, "manlei": 5, "arka": [5, 8], "pal": 5, "feuer": 5, "siddhartha": 5, "ravid": 5, "shwartz": [5, 8], "ziv": 5, "khalid": [5, 7], "saifullah": 5, "siddartha": 5, "naidu": 5, "chinmai": 5, "hegd": 5, "lecun": 5, "goldstein": 5, "willi": 5, "neiswang": 5, "micah": 5, "goldblum": 5, "19314": 5, "yyh": 5, "baosong": [5, 7], "chengpeng": 5, "chengyuan": [5, 7], "fei": [5, 6, 7], "guant": 5, "haoran": [5, 7], "huan": [5, 7], "jialong": 5, "jialin": 5, "jianhong": [5, 7], "tu": [5, 7], "jianwei": [5, 7], "jianxin": [5, 7], "jin": [5, 6, 8], "jingren": [5, 7], "jinz": 5, "jinzheng": 5, "junyang": [5, 7], "keme": [5, 7], "keqin": [5, 7], "kexin": [5, 7], "mingfeng": [5, 7], "xue": [5, 7, 8], "ni": [5, 6], "pei": [5, 7, 8], "ru": 5, "men": [5, 7], "ruiz": 5, "runji": [5, 7], "shiji": 5, "sinan": 5, "tianhang": 5, "wenbin": 5, "ge": 5, "xiaodong": 5, "deng": 5, "xiaohuan": 5, "xingzhang": [5, 7], "xinyu": [5, 8], "xipin": 5, "xuancheng": [5, 7], "yichang": [5, 7], "wan": [5, 7], "yunfei": 5, "yuqiong": [5, 7], "zhenru": [5, 7], "zhihao": 5, "10671": 5, "zcl24": 5, "zhihan": 5, "cao": 5, "lizi": 5, "openreview": [5, 6], "forum": [5, 6], "aegrf1uy0p": 5, "zc": 5, "siyuan": 5, "zhuang": [5, 8], "zhanghao": 5, "yonghao": 5, "zi": 5, "zhuohan": 5, "xing": [5, 8], "2306": [5, 8], "05685": 5, "huggingface24": 5, "metaai24": 5, "422": 5, "thank": [5, 7, 9], "doubl": 6, "steve": [6, 8], "lc": 6, "cutoff": 6, "amayuela": 6, "tail": 6, "kotha": 6, "unifi": [6, 7, 9], "realli": 6, "silver": 6, "bullet": 6, "mandatori": 6, "ingest": 6, "preprocess": [6, 7, 9], "parser": [6, 9], "microsoft": [6, 7], "autogen": 6, "powerpoint": 6, "ocr": 6, "exif": 6, "metadata": [6, 7], "docker": [6, 7], "container": [6, 7], "xlsx": 6, "text_cont": 6, "ibm": [6, 7, 8], "docx": 6, "pptx": 6, "layout": 6, "llamaindex": 6, "document_convert": 6, "documentconvert": 6, "export_to_markdown": 6, "presenc": 6, "merril": 6, "lynch": 6, "cio": 6, "outlook": 6, "forecast_file_path": 6, "result_md": 6, "forecast_result_docl": 6, "levenshtein": 6, "distanc": 6, "sequencematch": 6, "difflib": 6, "longest": 6, "levenshtein_similar": 6, "text1": 6, "text2": 6, "max_len": 6, "simple_similar": 6, "ratio": [6, 7], "forecast_result_md": 6, "13985705461925346": 6, "17779960707269155": 6, "readabl": 6, "messi": 6, "2025e": 6, "compos": [6, 7, 8], "financial_vari": 6, "financial_forecast": 6, "econforecast": 6, "extract_prompt": 6, "base_prompt": [6, 9], "extract_from_doc": 6, "twice": 6, "md_financi": 6, "docling_financi": 6, "easier": [6, 7, 8, 9], "gdp": 6, "cpi": 6, "fed": 6, "df_md_forecast": 6, "df_docling_forecast": 6, "despit": [6, 7, 9], "underweight": 6, "neutral": [6, 8], "overweight": 6, "chart": 6, "asset_class_docl": 6, "asset_class_md": 6, "df_md": 6, "df_docl": 6, "true_valu": 6, "df_comparison": 6, "cap": 6, "exempt": 6, "markitdown_accuraci": 6, "docling_accuraci": 6, "93": [6, 7, 8], "unstructur": [6, 7, 9], "sector": 6, "convert_and_export_t": 6, "file_path": 6, "doc_convert": 6, "start_tim": [6, 8], "conv_r": 6, "table_df": 6, "export_to_datafram": 6, "end_tim": 6, "2f": 6, "usd": 6, "wtd": 6, "mtd": 6, "ytd": 6, "djia": 6, "926": 6, "amp": 6, "051": 6, "277": 6, "russel": [6, 8], "2000": 6, "msci": 6, "817": [6, 8], "eaf": 6, "319": 6, "107": 6, "01": [6, 7], "66": [6, 8], "92": 6, "municip": 6, "79": [6, 8], "slight": 6, "discretionari": 6, "yellow": 6, "estat": 6, "orang": 6, "stapl": 6, "constructor": 6, "md_llm": 6, "llm_client": 6, "llm_model": 6, "png": 6, "overview": [6, 9], "showcas": 6, "bond": 6, "crude": 6, "oil": 6, "sit": 6, "648": 6, "ounc": 6, "euro": 6, "tactic": 6, "bofa": 6, "circl": [6, 8], "firecrawl": 6, "mendabl": 6, "crawler": 6, "llamapars": 6, "deserv": 6, "arulkumaran": 6, "karthikeyan": 6, "almasri": 6, "fetch": 6, "spreadsheet": 6, "literatur": [6, 8], "canon": 6, "succinct": [6, 7], "authorship": 6, "book_url": 6, "intro": 6, "structured_output": 6, "chapter_url": 6, "chapter_id": 6, "dimension": 6, "chromadb": 6, "weaviat": 6, "faiss": 6, "milvu": 6, "chroma_cli": 6, "aw": [6, 7, 8], "azur": 6, "gcp": 6, "create_collect": 6, "taming_llm": 6, "argument": [6, 7, 8, 9], "query_collect": 6, "query_text": 6, "n_result": 6, "enquir": 6, "related": 6, "leaderboard": [6, 7, 8], "2024i": 6, "behind": [6, 8], "minilm": 6, "l6": 6, "v2": [6, 7, 8], "sentence_transform": 6, "2024f": 6, "sentencetransform": 6, "embedding_model": 6, "docs_to_emb": 6, "encod": [6, 7, 8, 9], "384": [6, 8], "0000": 6, "4402": 6, "3022": 6, "4028": 6, "6606": 6, "5807": 6, "6313": 6, "matrix": [6, 7, 8], "heatmap": 6, "wise": [6, 9], "dataset": [6, 9], "tree": [6, 8, 9], "kd": 6, "ball": 6, "partit": 6, "hierarch": [6, 8], "curs": 6, "hnsw": 6, "promin": [6, 8], "lsh": 6, "hash": 6, "bucket": 6, "sacrific": [6, 7], "chroma": 6, "tutori": 6, "crossencod": 6, "512": 6, "passag": [6, 8], "argmax": 6, "52623": 6, "328738": 6, "750055": 6, "ideia": 6, "rake": 6, "topk": [6, 9], "rag_system_prompt_templ": 6, "user_prompt_templ": 6, "popul": 6, "rag_qa": 6, "res_rerank": 6, "invok": [6, 9], "alammar": 6, "diamant": 6, "kimothi": 6, "athinaai": 6, "envis": 6, "incomplet": [6, 7, 8], "unreli": [6, 7], "acut": 6, "unverifi": 6, "intric": 6, "hamper": 6, "raga": 6, "misinterpret": 6, "appar": [6, 8], "shed": 6, "light": 6, "misl": 6, "gemini": [6, 7], "outperform": [6, 7], "rout": 6, "hybrid": 6, "retrollm": 6, "loft": 6, "hop": 6, "gecko": 6, "vectordb": 6, "llama_pars": 6, "llx": 6, "result_typ": 6, "load_data": 6, "doc1": 6, "doc2": 6, "llama_index": 6, "vectorstoreindex": 6, "simpledirectoryread": 6, "vector_stor": 6, "chromavectorstor": 6, "storagecontext": 6, "db": 6, "persistentcli": 6, "chroma_db": 6, "chroma_collect": 6, "get_or_create_collect": 6, "storage_context": 6, "from_default": 6, "from_docu": 6, "query_engin": 6, "as_query_engin": 6, "prototyp": [6, 7], "complement": 6, "reassembl": 6, "breakdown": [6, 8], "fewer": [6, 7, 8], "furthermor": [6, 9], "zenml": 6, "max_output_token": 6, "statement": [6, 8], "10k": 6, "diagram": [6, 8], "charactertextsplitt": 6, "tiktoken": [6, 8], "sequenti": 6, "newlin": 6, "cheap": 6, "speciali": 6, "nltk": 6, "spaci": 6, "talk": 6, "theme": [6, 7, 8], "splitter": 6, "surpass": 6, "get_chunk": 6, "chunk_siz": 6, "chunk_overlap": 6, "langchain_text_splitt": 6, "text_splitt": 6, "from_tiktoken_encod": 6, "split_text": 6, "persona": 6, "langchain_cor": [6, 9], "prompttempl": 6, "get_base_prompt_templ": 6, "from_templ": 6, "llmchain": 6, "output_pars": 6, "stroutputpars": 6, "langchain_commun": 6, "chat_model": 6, "chatlitellm": 6, "get_llm_chain": 6, "prompt_templ": [6, 9], "llm_chain": [6, 9], "api_key_label": 6, "upper": 6, "_api_kei": 6, "get_dynamic_prompt_templ": 6, "get_dynamic_prompt_param": 6, "prompt_param": 6, "part_idx": 6, "total_part": 6, "chat_context": 6, "param": 6, "dynamic_prompt_param": 6, "concaten": 6, "generate_report": 6, "input_cont": 6, "llm_model_nam": 6, "report_part": 6, "num_part": 6, "dinam": 6, "priovid": 6, "cummul": 6, "max_chunk_s": 6, "max_chunk_overlap": 6, "apple_report": 6, "report_cont": 6, "report_lin": 6, "splitlin": 6, "total_lin": 6, "quarter_lin": 6, "top_port": 6, "bottom_port": 6, "uncov": [6, 8, 9], "delv": 6, "consol": 6, "reaction": 6, "disciplin": 6, "subhead": 6, "depth": [6, 8], "2m": [6, 7], "harvard": [6, 7], "enrol": 6, "gov": [6, 8], "1039": 6, "birth": [6, 8], "democraci": 6, "tuesdai": 6, "magna": 6, "carta": 6, "trudg": 6, "dens": 6, "conversation": 6, "knowledge_bas": 6, "add_knowledge_bas": 6, "add_cit": 6, "bool": [6, 8], "num_quest": 6, "input_memori": 6, "response_memori": 6, "urls_memori": 6, "extractor": 6, "cic": 6, "citabl": 6, "corpora": 6, "formatted_cont": 6, "reference_id": 6, "wrapper": [6, 9], "content_gener": 6, "user_instruct": 6, "llmbackend": 6, "cache_ttl": 6, "cachedcont": 6, "display_nam": 6, "due_knowledge_bas": 6, "system_instruct": 6, "compose_prompt": 6, "conversation_config": 6, "ttl": 6, "generativemodel": 6, "from_cached_cont": 6, "cached_cont": 6, "quiz_inst": 6, "professor": 6, "difficulti": [6, 8], "syllabu": 6, "kennedi": 6, "inaugur": 6, "lincoln": 6, "gettysburg": 6, "liberti": 6, "mayflow": 6, "abraham": 6, "gutenberg": 6, "kb": 6, "epub": 6, "pg": 6, "gemini_duo": 6, "genai_duo": 6, "duo": 6, "usage_metadata": 6, "38470": 6, "anytim": 6, "shap": 6, "mckechni": 6, "study_refer": 6, "pg10000": 6, "65363": 6, "pg65363": 6, "quizz": 6, "problemat": [6, 8], "simpler": [6, 7, 9], "ag24": 6, "jai": [6, 8], "1098150969": 6, "9781098150952": 6, "awp": 6, "alfonso": 6, "liangm": 6, "pan": [6, 8], "wenhu": 6, "lun": 6, "ku": 6, "editor": [6, 8], "acl": [6, 8], "6416": 6, "6432": 6, "bangkok": 6, "thailand": 6, "aclanthologi": [6, 8], "383": 6, "18653": [6, 8], "v1": [6, 7, 8], "bcv14": 6, "aaron": 6, "courvil": 6, "vincent": 6, "1206": 6, "5538": 6, "dia24": 6, "nir": 6, "nirdiam": 6, "rag_techniqu": 6, "hrk": 6, "koleczek": 6, "arshdeep": 6, "franklin": 6, "sadid": 6, "hasan": 6, "10541": 6, "jlz": 6, "mathew": 6, "erik": [6, 8], "lindgren": 6, "matei": 6, "zaharia": 6, "carbin": 6, "drozdov": 6, "drown": 6, "11767": 6, "kim24": 6, "9781633435858": 6, "meap": 6, "ksr24": 6, "suha": 6, "springer": 6, "aditi": 6, "raghunathan": 6, "twelfth": 6, "vrhif2hsrm": 6, "lcd": 6, "jinhyuk": 6, "zhuyun": 6, "dheeru": 6, "dua": 6, "devendra": 6, "sachan": 6, "boratko": 6, "luan": 6, "s\u00e9bastien": 6, "arnold": 6, "perot": 6, "siddharth": 6, "dalmia": 6, "hexiang": 6, "panupong": 6, "pasupat": 6, "aida": 6, "amini": 6, "cole": 6, "riedel": 6, "iftekhar": 6, "naim": 6, "ming": [6, 8], "guu": 6, "subsum": 6, "sql": 6, "13121": 6, "lpp": 6, "aleksandra": 6, "piktu": 6, "fabio": [6, 8], "petroni": 6, "vladimir": 6, "karpukhin": 6, "heinrich": 6, "k\u00fcttler": 6, "tau": 6, "yih": 6, "rockt\u00e4schel": 6, "douw": 6, "kiela": 6, "2005": 6, "11401": 6, "ljz": 6, "xiaoxi": 6, "jiaji": 6, "yongkang": 6, "zhonghua": 6, "zhicheng": 6, "dou": 6, "empow": [6, 8], "11919": 6, "llz": 6, "zhuowan": 6, "cheng": [6, 8, 9], "mingyang": 6, "benderski": 6, "16833": 6, "lfc": 6, "zhihang": 6, "chao": 6, "rongxin": 6, "yaowu": 6, "jiep": 6, "16434": 6, "lla24": 6, "nbgc24": 6, "shiyu": 6, "kepe": 6, "bi": 6, "jiafeng": 6, "guo": [6, 8], "xueqi": 6, "11375": 6, "11388": 6, "675": 6, "tdw": 6, "jiejun": 6, "mang": 6, "weipeng": 6, "ji": 6, "htmlrag": 6, "02959": 6, "ww": 6, "dale": 6, "schuurman": 6, "ichter": 6, "quoc": 6, "2201": [6, 8], "11903": 6, "wip": 6, "yunshu": 6, "hayat": 6, "iso": 6, "bhutani": 6, "estevam": 6, "hruschka": 6, "2309": [6, 8], "07382": 6, "zlj": 6, "yun": [6, 9], "metacognit": 6, "1453": 6, "1463": 6, "ny": [6, 8, 9], "usa": [6, 8, 9], "machineri": [6, 9], "1145": [6, 8, 9], "3589334": 6, "3645481": 6, "anthropic4a": 6, "athinaai24": 6, "recip": 6, "athina": 6, "chromadb4a": 6, "chromadb4b": 6, "trychroma": 6, "huggingface4f": 6, "huggingface4i": 6, "mteb": 6, "ibmresearch24": 6, "ds4sd": 6, "langchain24": 6, "how_to": 6, "llamaindex24": 6, "mendableai24": 6, "mendableai": 6, "merrilllynch24": 6, "weekli": 6, "olui2": 6, "gwmol": 6, "microsoft24": 6, "openai24": 6, "ragas24": 6, "getstart": 6, "rag_evalu": 6, "unstructuredio24": 6, "zenml24": 6, "llmop": 6, "di": 7, "hunter": 7, "photo": 7, "email": 7, "hipaa": 7, "properti": [7, 8], "gdpr": 7, "strict": [7, 8, 9], "iot": 7, "impract": 7, "slm": 7, "viabl": 7, "sensor": 7, "interconnect": 7, "frontend": 7, "garner": 7, "yourself": 7, "bedrock": 7, "sambanova": 7, "sla": 7, "veloc": 7, "roadmap": 7, "commodit": 7, "winner": 7, "loser": 7, "condens": 7, "clean": 7, "2024t": 7, "versatil": 7, "72b": 7, "med": 7, "bloomberggpt": 7, "underw": 7, "adept": 7, "toxigen": 7, "alnajjar": 7, "13b": [7, 8], "32b": 7, "feasibl": 7, "modal": 7, "diagnosi": 7, "patient": 7, "necessit": 7, "deepseek": 7, "flagship": 7, "405b": 7, "pack": 7, "v3": [7, 8], "671": 7, "moe": 7, "mixtur": 7, "3x": [7, 8], "fraction": 7, "domin": 7, "cautiou": 7, "cautious": 7, "isol": [7, 8], "cpot": 7, "cpit": 7, "tco": 7, "tpot": 7, "ttft": 7, "sent": [7, 8], "gpqa": 7, "median": 7, "afford": 7, "meanwhil": 7, "lite": 7, "micro": 7, "cent": 7, "1m": 7, "cheapest": 7, "phi": 7, "half": [7, 8], "permiss": [7, 8], "apach": 7, "700m": 7, "100m": 7, "gemma": [7, 9], "grown": 7, "withdraw": 7, "unclear": 7, "15t": 7, "8t": 7, "fineweb": 7, "penedo": 7, "96": [7, 8], "crawl": 7, "snapshot": 7, "codebas": 7, "ablat": 7, "vital": [7, 8], "favorit": 7, "spawn": 7, "ultrachat": 7, "2024u": 7, "created_job": 7, "fine_tun": 7, "training_fil": 7, "file_id": 7, "ultrachat_chunk_train": 7, "validation_fil": 7, "ultrachat_chunk_ev": 7, "training_step": 7, "0001": 7, "auto_start": 7, "job_id": 7, "toolkit": [7, 8], "sft": 7, "nemo": [7, 8], "codestr": 7, "2024v": 7, "enough": 7, "rewrit": 7, "smolvlm": 7, "mlx": [7, 9], "mlc": 7, "peft": 7, "programm": 7, "graphic": [7, 8], "vram": 7, "mathbf": 7, "x_1": [7, 9], "x_2": [7, 9], "x_n": [7, 9], "x_": [7, 9], "\u03b8": 7, "cerebra": 7, "mozilla": 7, "gerganov": 7, "georgi": 7, "overwhelm": [7, 9], "manifesto": 7, "enjoy": 7, "bog": 7, "exploratori": 7, "hacker": 7, "Will": [7, 8], "prematur": 7, "besid": 7, "lighter": 7, "ggml": [7, 9], "disk": 7, "backward": 7, "2024x": 7, "repo": 7, "compil": 7, "linux": 7, "sudo": 7, "apt": 7, "cmake": 7, "bind": 7, "betlen": 7, "cnv": 7, "llamacpp": 7, "ctrl": 7, "interject": 7, "philosoph": 7, "debat": 7, "fulfil": 7, "happi": 7, "responsibli": 7, "bye": 7, "goodby": 7, "port": 7, "127": 7, "curl": [7, 9], "localhost": 7, "bearer": 7, "finish_reason": 7, "deepli": 7, "1734627879": 7, "completion_token": 7, "total_token": 7, "chatcmpl": 7, "5wl2tzjzdmzupvxwp2gcedr8xbpsyhfm": 7, "prompt_n": 7, "prompt_m": 7, "132": 7, "prompt_per_token_m": 7, "prompt_per_second": 7, "77619878666999": 7, "predicted_n": 7, "predicted_m": 7, "1700": 7, "654": [7, 9], "predicted_per_token_m": 7, "36882142857143": 7, "predicted_per_second": 7, "92850867960208": 7, "gbnf": [7, 9], "8pm": 7, "appointmenttim": 7, "appointmentdetail": 7, "handi": 7, "model_path": 7, "llama_cpp": 7, "create_chat_complet": 7, "occupi": 7, "activist": 7, "justin": [7, 8], "tunnei": 7, "ocho": 7, "appach": 7, "cosmopolitan": 7, "libc": 7, "portabl": 7, "durabl": 7, "usabl": [7, 8, 9], "tinyllama": 7, "wget": 7, "jartin": 7, "q5_k_m": 7, "renam": 7, "ex": 7, "chmod": 7, "nobrows": 7, "registri": 7, "nativ": [7, 9], "trai": 7, "familiar": 7, "bare": 7, "ssfl": 7, "sh": [7, 9], "Or": 7, "11434": 7, "chatrespons": 7, "easiest": 7, "rich": [7, 8], "playground": 7, "simultan": [7, 8], "importantli": [7, 9], "intuit": 7, "beginn": 7, "tensorrt": 7, "trt": 7, "latex": 7, "voic": 7, "pwa": 7, "medium": [7, 8], "gpt4all": 7, "rbac": 7, "q4_k": 7, "q6_k": 7, "mib": 7, "wikitext": 7, "salesforc": 7, "wikipedia": [7, 9], "min_prompt_length": 7, "input_texts_raw": 7, "began": 7, "2010": 7, "valkyria": 7, "chronicl": 7, "forgiv": 7, "newcom": 7, "raita": 7, "honjou": 7, "hitoshi": 7, "sakimoto": 7, "takeshi": 7, "ozawa": 7, "writer": 7, "sung": 7, "escap": 7, "escaped_text": 7, "block_scal": 7, "block": [7, 8], "parenthes": 7, "block_min": 7, "formula": 7, "superblock": 7, "5625": 7, "ieee": 7, "754": 7, "ppl": 7, "exp": 7, "sum_": 7, "log_2": 7, "x_i": [7, 9], "avg": 7, "_i": 7, "corr": 7, "ln": [7, 9], "kullback": 7, "leibler": 7, "entropi": 7, "logit": 7, "d_": 7, "softmax": [7, 9], "sum": 7, "kld": 7, "q2_kresult": 7, "q6": 7, "004": 7, "q2": 7, "112": 7, "q4": 7, "smallest": 7, "390": 7, "67": [7, 8], "81": [7, 8], "462": 7, "614": 7, "170": 7, "q4_k_m": 7, "thread": 7, "16x": 7, "85x": 7, "79x": 7, "ubuntu": 7, "lt": 7, "x86_64": 7, "gnu": 7, "intel": 7, "i7": 7, "8550u": 7, "15gib": 7, "samsung": 7, "ssd": 7, "970": 7, "evo": 7, "500gb": 7, "1170": 7, "meant": 7, "ai4c": 7, "ai4a": 7, "paperswithcod": [7, 8], "ana24a": 7, "artificialanalysi": 7, "ana24b": 7, "ana24c": 7, "bc24": 7, "andrei": [7, 8], "abetlen": 7, "dee24": 7, "blob": [7, 9], "deepseek_v3": 7, "gc24": 7, "ggerganov": [7, 9], "readm": [7, 9], "gc4a": 7, "gc4b": 7, "hug4": 7, "optimum": 7, "concept_guid": 7, "hug4t": 7, "hug4u": 7, "200k": 7, "ultrachat_200k": 7, "hug4v": 7, "blogpost": 7, "pka": 7, "guilherm": 7, "hynek": 7, "kydl\u00ed\u010dek": 7, "decant": 7, "finest": 7, "17557": 7, "qwe4b": 7, "qy": 7, "beichen": 7, "tingyu": 7, "su": 7, "zihan": 7, "qiu": 7, "15115": 7, "rev24": 7, "nyt": 7, "harvardlawreview": 7, "timess": 7, "zwa": 7, "wael": 7, "geoffrei": [7, 8], "angu": 7, "arnav": 7, "jefferi": 7, "kinnison": 7, "sherstinski": 7, "piero": 7, "molino": 7, "travi": 7, "addair": 7, "devvret": 7, "310": 7, "2405": 7, "00732": 7, "huggingface4xa": 7, "huggingface4xb": 7, "ibmthink24": 7, "lmstudio24": 7, "lmstudio": 7, "metaai4c": 7, "mozillaocho24": 7, "salesforce24": 7, "immens": 8, "commonplac": 8, "spur": 8, "hartvigsen": 8, "societi": 8, "alarm": 8, "openli": 8, "dolli": 8, "llama2": [8, 9], "emb": 8, "generalist": 8, "injustic": 8, "inequ": 8, "undermin": 8, "perpetu": 8, "displac": 8, "eros": 8, "fake": 8, "deepfak": 8, "distrust": 8, "cyberattack": 8, "spread": 8, "disinform": 8, "inadvert": 8, "interven": 8, "irrevers": 8, "uncheck": 8, "extinct": 8, "race": 8, "incentiv": 8, "shortcut": 8, "stress": 8, "urgent": 8, "reorient": 8, "siam": 8, "edgington": 8, "jailbreak": 8, "promptcraft": 8, "stealth": 8, "sutton": 8, "subtl": 8, "subtleti": 8, "exception": 8, "phrase": 8, "evad": 8, "hqve": 8, "frer": 8, "hplidai": 8, "pl": 8, "hyperion": 8, "coast": 8, "redwood": 8, "tallest": 8, "routin": 8, "prejudic": 8, "gallego": 8, "leak": 8, "poison": 8, "intention": 8, "inject": 8, "mislead": 8, "exabeam": 8, "finra": 8, "3110": 8, "mandat": 8, "supervisori": 8, "unicef": 8, "contest": 8, "congress": 8, "enact": 8, "pictur": [8, 9], "sound": 8, "territori": 8, "oversea": 8, "chines": 8, "legitim": 8, "consent": 8, "complaint": 8, "cooper": 8, "extraterritori": 8, "offshor": 8, "draft": 8, "voluntari": 8, "player": 8, "prepared": 8, "compris": 8, "cbrn": 8, "persuas": 8, "autonomi": 8, "gradat": 8, "scorecard": 8, "elig": 8, "advisori": 8, "sag": 8, "shut": 8, "prerequisit": 8, "harden": 8, "asl": 8, "biosafeti": 8, "elev": 8, "warn": [8, 9], "bioweapon": 8, "compartment": 8, "4x": 8, "jump": 8, "paus": 8, "deepmind": 8, "biosecur": 8, "buffer": 8, "formul": [8, 9], "calibr": 8, "taxonomi": 8, "llamaguard": 8, "20241022": 8, "5x": 8, "alaga": 8, "substandard": 8, "oxford": 8, "wachter": 8, "blur": 8, "ill": 8, "stifl": 8, "suscept": 8, "aadc": 8, "outset": 8, "curricula": 8, "adversari": 8, "thoroughli": 8, "lm": [8, 9], "undergo": 8, "280b": 8, "cai": [8, 9], "enshrin": 8, "evas": 8, "resort": 8, "avenu": 8, "cambria": 8, "inherit": 8, "influenti": 8, "debias": 8, "plausibl": 8, "occurr": 8, "phish": 8, "clarifi": 8, "toler": 8, "checklist": 8, "abus": 8, "ux": 8, "architect": 8, "retrofit": 8, "promptli": 8, "dashboard": 8, "misalign": 8, "star": 8, "postpon": 8, "combat": 8, "counter": 8, "traffic": 8, "frustrat": 8, "workaround": 8, "silo": 8, "hierarchi": 8, "mcq": 8, "regex": [8, 9], "joint": 8, "facet": 8, "purpl": 8, "opensafetylab": 8, "salad_bench_dataset": 8, "base_set": 8, "gptfuzzer": 8, "auto": [8, 9], "qid": 8, "o1": 8, "supremaci": 8, "o53": 8, "o14": 8, "o5": 8, "o65": 8, "plagiar": 8, "o16": 8, "o6": 8, "o47": 8, "campaign": 8, "o12": 8, "o52": 8, "surveil": 8, "spous": 8, "know": 8, "o13": 8, "ncount": 8, "21318": 8, "8756": 8, "6486": 8, "o2": 8, "1717": 8, "o4": 8, "1477": 8, "o3": 8, "socioeconom": 8, "851": 8, "int64": 8, "gen": 8, "15433": 8, "hh": 8, "4184": 8, "659": 8, "advbench": 8, "230": 8, "189": 8, "toxicchat": 8, "anyth": 8, "misconcept": 8, "ingrain": 8, "mc1": 8, "singular": 8, "choices4": 8, "mc2": 8, "set4": 8, "scorer": 8, "correctli": [8, 9], "truthful_qa": 8, "truthfulqa_dataset": 8, "multiple_choic": 8, "best_answ": 8, "correct_answ": 8, "incorrect_answ": 8, "watermelon": 8, "digest": 8, "noth": 8, "stomach": 8, "sick": 8, "wonderopoli": 8, "wonder": 8, "belli": 8, "swallow": 8, "dream": 8, "die": 8, "indigest": 8, "unconsci": 8, "excret": 8, "asr": 8, "r2d2": 8, "wider": [8, 9], "mass": 8, "destruct": 8, "asynchron": 8, "webpurifi": 8, "protectai": 8, "comprehend": 8, "amazon": 8, "nvidia": [8, 9], "keyword": 8, "toolset": 8, "nemmo": 8, "synchron": 8, "nemoguardrail": 8, "llmrail": 8, "railsconfig": 8, "from_path": 8, "rail": 8, "hello": 8, "ministr": 8, "mistralai": 8, "mistral_api_kei": 8, "moderate_chat": 8, "omni": 8, "pprint": 8, "to_json": 8, "threaten": 8, "illicit": 8, "granit": 8, "guardian": 8, "consortium": 8, "11b": 8, "begin_of_text": 8, "start_header_id": 8, "end_header_id": 8, "unsafe_categori": 8, "user_message_1": 8, "model_answer_1": 8, "comma": 8, "eot_id": 8, "eom_id": 8, "denot": 8, "s1": 8, "s2": 8, "s3": 8, "s4": 8, "s5": 8, "defam": 8, "s6": 8, "s7": 8, "s8": 8, "s9": 8, "s10": 8, "s11": 8, "s12": 8, "s13": 8, "padhi": 8, "atla": 8, "2b": 8, "hap": 8, "38m": 8, "125m": 8, "shieldgemma": 8, "judge_prompt": 8, "american": 8, "vandal": 8, "underag": 8, "drink": 8, "vulgar": 8, "obscen": 8, "racism": 8, "derogatori": 8, "firearm": 8, "safety_scor": 8, "IN": 8, "borderlin": 8, "verdict": 8, "boolean": [8, 9], "brief": 8, "rational": 8, "paramount": [8, 9], "evenli": 8, "good_sampl": 8, "bad_sampl": 8, "2024z": 8, "surg": 8, "scam": 8, "get_profanity_sampl": 8, "show_stat": 8, "current_dir": 8, "getcwd": 8, "data_path": 8, "profanity_en": 8, "random_st": 8, "ncategori": 8, "category_count": 8, "category_1": 8, "1f": 8, "profanity_sampl": 8, "nsampl": 8, "anatomi": 8, "slur": 8, "182": 8, "bodili": 8, "fluid": 8, "excrement": 8, "insult": 8, "mental": 8, "disabl": 8, "jap": 8, "babi": [8, 9], "batter": 8, "crazi": 8, "sob": 8, "fukka": 8, "sh1t3": 8, "get_salad_sampl": 8, "salad_sampl": 8, "tortur": 8, "porn": 8, "sin": 8, "sight": 8, "god": 8, "embezzl": 8, "xanax": 8, "alcohol": 8, "get_good_sampl": 8, "min_scor": 8, "reichstag": 8, "profanity_data": 8, "salad_data": 8, "good_data": 8, "all_data": 8, "prompt_sampl": 8, "is_unsaf": 8, "counti": 8, "holli": 8, "ridg": 8, "nc": 8, "town": 8, "onslow": 8, "carolina": 8, "diver": 8, "underwat": 8, "maze": 8, "coral": 8, "treasur": 8, "vivid": 8, "sensori": 8, "emot": 8, "labyrinthin": 8, "reef": 8, "suspens": 8, "obstacl": 8, "creatur": 8, "nomin": 8, "nobel": 8, "love": 8, "logo": 8, "thief": 8, "rob": 8, "famou": 8, "nstatist": 8, "source_stat": 8, "type_stat": 8, "plug": 8, "safetyvalid": 8, "validationresult": 8, "dataclass": 8, "abstractmethod": 8, "llmguardvalid": 8, "scanner": 8, "bantop": 8, "llm_guard": 8, "input_scann": 8, "scan_prompt": 8, "matchtyp": 8, "default_banned_top": 8, "banned_top": 8, "super": 8, "banned_topics_scann": 8, "use_onnx": 8, "toxicity_scann": 8, "match_typ": 8, "fail_fast": 8, "unsafe_scann": 8, "gun": 8, "cool": 8, "hunt": 8, "deer": 8, "dad": 8, "mistralvalid": 8, "hate_and_discrimin": 8, "violence_and_threat": 8, "dangerous_and_criminal_cont": 8, "selfharm": 8, "openaivalid": 8, "attr": 8, "dir": 8, "getattr": 8, "illicit_viol": 8, "llmjudgevalid": 8, "prompt_path": 8, "llmjudg": 8, "filenotfounderror": 8, "slice": 8, "elaps": 8, "score_valid": 8, "id_": 8, "validator_inst": 8, "validation_result": 8, "elapsed_tim": 8, "prompt_sample_id": 8, "validator_nam": 8, "scoring_prompt": 8, "scoring_result": 8, "01536": 8, "34098": 8, "497136": 8, "546416": 8, "calculate_validator_metr": 8, "bad_sourc": 8, "good_sourc": 8, "tpr": 8, "fpr": 8, "f1_score": 8, "tn": 8, "fp": 8, "fn": 8, "tp": 8, "255": 8, "74": 8, "238": 8, "130": 8, "256": 8, "149": 8, "213": 8, "190": 8, "235": 8, "63": [8, 9], "222": 8, "480": 8, "157": 8, "487": 8, "495": 8, "482": 8, "667": 8, "248": 8, "466": 8, "143": 8, "355": 8, "slowest": 8, "room": 8, "false_posit": 8, "left_on": 8, "right_on": 8, "persian": 8, "teenag": 8, "\u0686\u0627\u0644\u0634": 8, "\u0645\u0648\u0645\u0648": 8, "\u06cc\u06a9": 8, "\u062d\u0642\u0647": 8, "\u0648": 8, "\u0627\u0641\u0633\u0627\u0646\u0647": 8, "\u0645\u062d\u0644\u06cc": 8, "\u0627\u0633\u062a": 8, "\u06a9\u0647": 8, "\u0634\u0627\u06cc\u0639\u0647": 8, "\u0622\u0646": 8, "\u062f\u0631": 8, "\u0634\u0628\u06a9\u0647": 8, "\u0647\u0627\u06cc": 8, "\u0627\u062c\u062a\u0645\u0627\u0639\u06cc": 8, "\u067e\u062e\u0634": 8, "\u0634\u062f": 8, "\u06af\u0632\u0627\u0631\u0634": 8, "\u06a9\u0627\u0631\u0628\u0631\u06cc": 8, "\u0628\u0627": 8, "\u0646\u0627\u0645": 8, "\u06a9\u0648\u062f\u06a9\u0627\u0646": 8, "\u0646\u0648\u062c\u0648\u0627\u0646\u0627\u0646": 8, "\u0631\u0627": 8, "\u0628\u0647": 8, "\u0627\u0639\u0645\u0627\u0644": 8, "\u062e\u0637\u0631\u0646\u0627\u06a9\u06cc": 8, "\u0645\u0627\u0646\u0646\u062f": 8, "\u062e\u0648\u062f\u0632\u0646\u06cc": 8, "\u062e\u0648\u062f\u06a9\u0634\u06cc": 8, "\u062a\u0631\u063a\u06cc\u0628": 8, "\u0645\u06cc": 8, "\u06a9\u0646\u062f": 8, "\u0648\u062c\u0648\u062f": 8, "\u0635\u062d\u0628\u062a": 8, "\u0632\u06cc\u0627\u062f\u06cc": 8, "\u0645\u0648\u0631\u062f": 8, "\u0627\u06cc\u0646": 8, "\u062a\u0639\u062f\u0627\u062f": 8, "\u0634\u06a9\u0627\u06cc\u0627\u062a": 8, "\u0648\u0627\u0642\u0639\u06cc": 8, "\u0628\u0633\u06cc\u0627\u0631": 8, "\u06a9\u0645": 8, "\u0628\u0648\u062f": 8, "\u067e\u0644\u06cc\u0633": 8, "\u0635\u062f\u0645\u0647": 8, "\u062f\u06cc\u062f\u0646": 8, "\u062f\u0644\u06cc\u0644": 8, "\u062a\u0623\u062b\u06cc\u0631": 8, "\u0645\u0633\u062a\u0642\u06cc\u0645": 8, "\u067e\u062f\u06cc\u062f\u0647": 8, "\u062a\u0623\u06cc\u06cc\u062f": 8, "\u0646\u06a9\u0631\u062f\u0647": 8, "\u062a\u0631\u0633": 8, "\u0646\u06af\u0631\u0627\u0646\u06cc": 8, "\u0627\u06cc\u062c\u0627\u062f": 8, "\u0634\u062f\u0647": 8, "\u0628\u06cc\u0634\u062a\u0631": 8, "\u0627\u0632": 8, "\u062e\u0648\u062f": 8, "\u0631\u0633\u0627\u0646\u0647": 8, "\u0647\u0627": 8, "\u0637\u0648\u0631\u06cc": 8, "\u062e\u06cc\u0631\u06cc\u0647": 8, "\u0647\u0634\u062f\u0627\u0631": 8, "\u062f\u0627\u062f\u0646\u062f": 8, "\u0622\u0633\u06cc\u0628": 8, "\u0627\u0646\u062a\u0638\u0627\u0631\u0627\u062a": 8, "\u0645\u062d\u062a\u0648\u0627\u06cc": 8, "\u062e\u0634\u0648\u0646\u062a": 8, "\u0622\u0645\u06cc\u0632": 8, "\u0627\u06cc\u0646\u062a\u0631\u0646\u062a": 8, "\u06af\u0641\u062a\u0647": 8, "\u0634\u0648\u062f": 8, "\u0627\u0648\u0644\u06cc\u0646": 8, "\u0628\u0627\u0631": 8, "\u0633\u0627\u0644": 8, "\u06f2\u06f0\u06f1\u06f8": 8, "\u067e\u0633": 8, "\u0622\u0646\u06a9\u0647": 8, "\u0631\u0648\u0632\u0646\u0627\u0645\u0647": 8, "\u0627\u0646\u062f\u0648\u0646\u0632\u06cc\u0627\u06cc\u06cc": 8, "\u062e\u0628\u0631": 8, "\u062f\u062e\u062a\u0631": 8, "\u06f1\u06f2": 8, "\u0633\u0627\u0644\u0647": 8, "\u062f\u0627\u062f": 8, "\u0645\u0648\u0636\u0648\u0639": 8, "\u062c\u0647\u0627\u0646\u06cc": 8, "\u062a\u0628\u062f\u06cc\u0644": 8, "\u0645\u062c\u0633\u0645\u0647": 8, "\u0647\u0646\u0631\u0645\u0646\u062f": 8, "\u0698\u0627\u067e\u0646\u06cc": 8, "\u0647\u0631": 8, "\u0686\u0646\u062f": 8, "\u0634\u0627\u06cc\u062f": 8, "\u0646\u06af\u0627\u0647": 8, "\u0628\u0639\u0636\u06cc": 8, "\u0632\u06cc\u0628\u0627": 8, "\u0646\u0628\u0627\u0634\u062f": 8, "\u0627\u0645\u0627": 8, "\u06a9\u0627\u0645\u0644\u0627": 8, "\u0628\u06cc": 8, "\u062e\u0637\u0631": 8, "\u0627\u06cc\u0631\u0627\u0646": 8, "\u0645\u062f\u062a": 8, "\u0628\u06cc\u0646": 8, "\u06a9\u0627\u0631\u0628\u0631\u0627\u0646": 8, "\u0645\u0637\u0631\u062d": 8, "\u0633\u0627\u0644\u06cc": 8, "\u0633\u0631\u0627\u0633\u0631": 8, "\u062c\u0647\u0627\u0646": 8, "\u0645\u0634\u0627\u0628\u0647\u06cc": 8, "\u0628\u0631\u0627\u06cc": 8, "\u0648\u0627\u0644\u062f\u06cc\u0646": 8, "\u06a9\u0631\u062f\u0647": 8, "\u0627\u0641\u0631\u0627\u062f": 8, "\u0686\u0647": 8, "\u06a9\u0627\u0631\u06cc": 8, "\u062f\u0639\u0648\u062a": 8, "tourist": 8, "distress": 8, "polish": 8, "galician": 8, "dzisiaj": 8, "szwecji": 8, "innych": 8, "bogatych": 8, "krajach": 8, "ludzi": 8, "u\u017cywaj\u0105": 8, "mn\u00f3stwo": 8, "najr\u00f3\u017cniejszych": 8, "urz\u0105dze\u0144": 8, "hox": 8, "suecia": 8, "outro": 8, "pa\u00eds": 8, "rico": 8, "xent": 8, "moita": 8, "m\u00e1quina": 8, "diferent": 8, "\u0142\u00f3dka": 8, "zaczyna": 8, "ton\u0105\u0107": 8, "tury\u015bci": 8, "wracaj\u0105": 8, "statek": 8, "dom\u00f3w": 8, "gdzie": 8, "opowiadaj\u0105": 8, "tym": 8, "jak": 8, "zostali": 8, "zaatakowani": 8, "surprisingli": 8, "shelf": 8, "unsettl": 8, "paradox": 8, "harbor": 8, "wisdom": 8, "aspir": 8, "technologist": 8, "disciplinari": 8, "ethicist": 8, "policymak": 8, "asa24": 8, "jide": 8, "jona": 8, "schuett": 8, "marku": 8, "anderljung": 8, "08751": 8, "bhy": 8, "hinton": 8, "pieter": 8, "abbeel": 8, "trevor": 8, "darrel": 8, "yuval": 8, "harari": 8, "ya": 8, "lan": 8, "shai": 8, "shalev": 8, "gillian": 8, "hadfield": 8, "clune": 8, "tegan": 8, "maharaj": 8, "hutter": 8, "at\u0131l\u0131m": 8, "g\u00fcne\u015f": 8, "baydin": 8, "sheila": 8, "mcilraith": 8, "qiqi": 8, "ashwin": 8, "acharya": 8, "anca": 8, "dragan": 8, "philip": 8, "torr": 8, "kahneman": 8, "s\u00f6ren": 8, "mindermann": 8, "amid": 8, "6698": 8, "1126": 8, "adn0117": 8, "bbc": 8, "emili": 8, "braca": 8, "israel": 8, "carter": 8, "hafsa": 8, "kanchwala": 8, "khojasteh": 8, "charli": 8, "landow": 8, "luo": 8, "magarelli": 8, "mirin": 8, "averi": 8, "moyer": 8, "kayla": 8, "simpson": 8, "amelia": 8, "skawinski": 8, "heverin": 8, "23308": 8, "bmc": 8, "dillon": 8, "brendan": 8, "murphi": 8, "khachaturov": 8, "gleav": 8, "kellin": 8, "pelrin": 8, "2408": [8, 9], "02946": 8, "cmm": 8, "lorenzo": 8, "malandri": 8, "mercorio": 8, "navid": 8, "nobani": 8, "seveso": 8, "15248": 8, "edg24": 8, "exa24": 8, "cyber": 8, "grb": 8, "rossi": 8, "barrow": 8, "mehrab": 8, "tanjim": 8, "sungchul": 8, "franck": 8, "dernoncourt": 8, "ruiyi": 8, "nesreen": 8, "00770": 8, "h44z": 8, "hgp": 8, "saadia": 8, "hamid": 8, "palangi": 8, "dipankar": 8, "ec": 8, "kamar": 8, "oxi": 8, "smaranda": 8, "muresan": 8, "preslav": 8, "nakov": 8, "alin": 8, "villavicencio": 8, "60th": 8, "3309": 8, "3326": 8, "dublin": 8, "hym": 8, "weijiang": 8, "weitao": 8, "weihong": 8, "zhangyin": 8, "haotian": 8, "qianglong": 8, "weihua": 8, "xiaocheng": 8, "bing": 8, "dx": 8, "3703155": 8, "iuc": 8, "kartikeya": 8, "upasani": 8, "jianfeng": 8, "krithika": 8, "tontchev": 8, "2312": 8, "06674": 8, "ldw": 8, "lijun": 8, "ruohui": 8, "xuhao": 8, "wangmeng": 8, "zuo": 8, "dahua": 8, "qiao": 8, "shao": 8, "05044": 8, "mpy": 8, "xuwang": 8, "zifan": 8, "norman": 8, "mu": 8, "elham": 8, "sakhae": 8, "nathaniel": 8, "forsyth": 8, "04249": 8, "ma24": 8, "mlc24": 8, "illumin": 8, "ailumin": 8, "oaa": 8, "adler": 8, "ahmad": 8, "ilg": 8, "akkaya": 8, "florencia": 8, "leoni": 8, "aleman": 8, "janko": 8, "altenschmidt": 8, "altman": 8, "shyamal": 8, "anadkat": 8, "avila": 8, "valeri": 8, "balcom": 8, "baltescu": 8, "haim": 8, "belgum": 8, "irwan": 8, "bello": 8, "jake": 8, "berdin": 8, "bernadett": 8, "shapiro": 8, "berner": 8, "lenni": 8, "bogdonoff": 8, "boiko": 8, "madelain": 8, "boyd": 8, "luisa": 8, "brakman": 8, "button": 8, "rosi": 8, "campbel": 8, "cann": 8, "brittani": 8, "carei": 8, "carlson": 8, "rori": 8, "carmichael": 8, "che": 8, "foti": 8, "sulli": 8, "rubi": 8, "chess": 8, "chester": 8, "cho": 8, "hyung": 8, "won": 8, "chung": 8, "jeremiah": 8, "currier": 8, "yunx": 8, "cori": 8, "decareaux": 8, "degri": 8, "deutsch": 8, "devil": 8, "dhar": 8, "dowl": 8, "dun": 8, "adrien": 8, "ecoffet": 8, "atti": 8, "eleti": 8, "tyna": 8, "elound": 8, "farhi": 8, "niko": 8, "sim\u00f3n": 8, "posada": 8, "fishman": 8, "juston": 8, "isabella": 8, "fulford": 8, "georg": 8, "gibson": 8, "vik": 8, "tarun": 8, "gogineni": 8, "goh": 8, "rapha": 8, "gontijo": 8, "lope": 8, "gordon": 8, "morgan": 8, "grafstein": 8, "yufei": 8, "hallaci": 8, "heaton": 8, "johann": 8, "heideck": 8, "hickei": 8, "wade": 8, "hoeschel": 8, "houghton": 8, "kenni": 8, "hsu": 8, "shengli": 8, "joost": 8, "huizinga": 8, "shawn": 8, "joann": 8, "jang": 8, "roger": 8, "haozhun": 8, "shino": 8, "jomoto": 8, "billi": 8, "jonn": 8, "tomer": 8, "kaftan": 8, "\u0142ukasz": 8, "kamali": 8, "ingmar": 8, "kanitscheid": 8, "tabarak": 8, "khan": 8, "logan": 8, "kilpatrick": 8, "jong": 8, "wook": 8, "christina": 8, "yongjik": 8, "hendrik": 8, "kirchner": 8, "kiro": 8, "matt": 8, "kokotajlo": 8, "kondraciuk": 8, "kondrich": 8, "konstantinidi": 8, "kosic": 8, "vishal": 8, "kuo": 8, "lamp": 8, "ikai": 8, "teddi": 8, "jade": 8, "leung": 8, "chak": 8, "lim": 8, "molli": 8, "mateusz": 8, "litwin": 8, "theresa": 8, "lopez": 8, "patricia": 8, "lue": 8, "makanju": 8, "malfacini": 8, "markov": 8, "yaniv": 8, "markovski": 8, "bianca": 8, "mayn": 8, "mckinnei": 8, "christin": 8, "mcleavei": 8, "mcmillan": 8, "mcneil": 8, "aalok": 8, "menick": 8, "mishchenko": 8, "vinni": 8, "monaco": 8, "murk": 8, "m\u00e9ly": 8, "ashvin": 8, "nair": 8, "reiichiro": 8, "nakano": 8, "rajeev": 8, "nayak": 8, "arvind": 8, "neelakantan": 8, "hyeonwoo": 8, "noh": 8, "keef": 8, "jakub": 8, "pachocki": 8, "palermo": 8, "ashlei": 8, "pantuliano": 8, "parish": 8, "emi": 8, "parparita": 8, "passo": 8, "perelman": 8, "belbut": 8, "pere": 8, "pokorni": 8, "pokrass": 8, "vitchyr": 8, "pong": 8, "tolli": 8, "powel": 8, "bori": 8, "proehl": 8, "rae": 8, "ramesh": 8, "franci": 8, "kendra": 8, "rimbach": 8, "carl": 8, "rotst": 8, "roussez": 8, "saltarelli": 8, "ted": 8, "sander": 8, "schnurr": 8, "selsam": 8, "kyla": 8, "sheppard": 8, "toki": 8, "sherbakov": 8, "shieh": 8, "shoker": 8, "pranav": 8, "szymon": 8, "sidor": 8, "sigler": 8, "sitkin": 8, "sokolowski": 8, "natali": 8, "staudach": 8, "madelein": 8, "phil": 8, "tootoonchian": 8, "tseng": 8, "preston": 8, "tuggl": 8, "turlei": 8, "juan": 8, "cer\u00f3n": 8, "urib": 8, "vallon": 8, "vijayvergiya": 8, "alvin": 8, "ward": 8, "cj": 8, "weinmann": 8, "akila": 8, "welihinda": 8, "jiayi": 8, "weng": 8, "lilian": 8, "wiethoff": 8, "willner": 8, "wolrich": 8, "lauren": 8, "workman": 8, "sherwin": 8, "yoo": 8, "zeller": 8, "shengjia": 8, "juntang": 8, "zhuk": 8, "2303": 8, "08774": 8, "pnc": 8, "inkit": 8, "manish": 8, "nagireddi": 8, "giandomenico": 8, "cornacchia": 8, "subhajit": 8, "chaudhuri": 8, "tejaswini": 8, "pedapati": 8, "pierr": 8, "dognin": 8, "keerthiram": 8, "murugesan": 8, "miehl": 8, "santill\u00e1n": 8, "kieran": 8, "giulio": 8, "zizzo": 8, "muhammad": 8, "zaid": 8, "hame": 8, "purcel": 8, "desmond": 8, "zahra": 8, "ashktorab": 8, "ing": 8, "vejsbjerg": 8, "dali": 8, "hind": 8, "werner": 8, "geyer": 8, "ambrish": 8, "rawat": 8, "kush": 8, "varshnei": 8, "prasanna": 8, "sattigeri": 8, "07724": 8, "pcz": 8, "shern": 8, "woodsid": 8, "hanlin": 8, "emmon": 8, "justifi": 8, "machiavelli": 8, "2304": 8, "03279": 8, "saffron": 8, "ring": 8, "aslanid": 8, "glaes": 8, "nat": 8, "mcalees": 8, "irv": 8, "2202": 8, "03286": 8, "sjls22": 8, "lingfeng": 8, "haiyun": 8, "lemao": 8, "backdoor": 8, "02993": 8, "szw": 8, "qinghua": 8, "higham": 8, "gorban": 8, "bastouni": 8, "ivan": 8, "tyukin": 8, "12670": 8, "vsk": 8, "simplesafetytest": 8, "2311": 8, "08370": 8, "wmr24": 8, "sandra": 8, "brent": 8, "mittelstadt": 8, "duti": 8, "royal": 8, "240197": 8, "royalsocietypublish": 8, "1098": 8, "rso": 8, "wcp": 8, "boxin": 8, "weixin": 8, "hengzhi": 8, "chulin": 8, "mintong": 8, "kang": 8, "chenhui": 8, "chejian": 8, "zidi": 8, "xiong": [8, 9], "ritik": 8, "truong": 8, "simran": 8, "arora": 8, "zinan": 8, "decodingtrust": 8, "11698": 8, "ylx24": 8, "jiahao": 8, "xingwei": 8, "zyi": 8, "shune": 8, "lyumanshan": 8, "jingyu": 8, "shui": 8, "haobin": 8, "pengfei": 8, "hewu": 8, "ghost": 8, "14931": 8, "zho24": 8, "amazonwservices24": 8, "anthropic24": 8, "cdn": 8, "1adf000c8f675958c2ee23805d91aaade1cd4613": 8, "centerfasafety24a": 8, "centerforaisafeti": 8, "centerfasafety24b": 8, "deepmind24": 8, "googleapi": 8, "fsf": 8, "europeanmagency24": 8, "ema": 8, "europa": 8, "activities_en": 8, "financialirauthority24": 8, "harmbench24": 8, "ibm24": 8, "watsonx": 8, "saa": 8, "libraryocongress23": 8, "loc": 8, "mistralai24": 8, "mlsteam24": 8, "mlsafeti": 8, "nationaliosatechnology24": 8, "nist": 8, "itl": 8, "nvidia24": 8, "openai24a": 8, "openai24b": 8, "opensafetylab24a": 8, "opensafetylab24b": 8, "protectai24": 8, "surgeai24": 8, "ukgovernment24": 8, "unicef24": 8, "innocenti": 8, "julia": 9, "easili": 9, "trial": 9, "wrangl": 9, "hoc": 9, "unwant": 9, "overflow": 9, "twitter": 9, "youtub": 9, "ldot": 9, "prod_": 9, "syntact": 9, "xml": 9, "invalid": 9, "delic": 9, "heart": 9, "ttt": 9, "itt": 9, "po": 9, "nousresearch": 9, "herm": 9, "person1": 9, "q1": 9, "person2": 9, "json_format": 9, "response_cont": 9, "is_json": 9, "myjson": 9, "nest": 9, "conceptu": 9, "unend": 9, "whitespac": 9, "throw": 9, "somewher": 9, "json_object": 9, "circul": 9, "vertex": 9, "went": 9, "secextract": 9, "mentioned_ent": 9, "mentioned_plac": 9, "extract_from_sec_fil": 9, "sec_filing_text": 9, "hint": 9, "prompt_extract": 9, "sec_extract": 9, "washington": 9, "beg": 9, "unnorm": 9, "0325": 9, "strongest": 9, "greedi": 9, "bfloat16": 9, "device_map": 9, "src": 9, "python3": 9, "nvml": 9, "return_tensor": 9, "pt": 9, "inference_mod": 9, "last_token_logit": 9, "next_token_prob": 9, "nn": 9, "dim": 9, "top_k_prob": 9, "top_k_indic": 9, "top_k_token": 9, "decod": 9, "idx": 9, "skip_special_token": 9, "prob": 9, "0305": 9, "0197": 9, "0106": 9, "0093": 9, "logitsprocessor": 9, "logits_processor": 9, "logitsprocessorlist": 9, "customlogitsprocessor": 9, "intermediari": 9, "input_id": 9, "__call__": 9, "longtensor": 9, "batch_siz": 9, "sequence_length": 9, "floattensor": 9, "vocab_s": 9, "mask": 9, "pick": 9, "yesnologitsprocessor": 9, "initial_length": 9, "fill_": 9, "inf": 9, "debug": 9, "yes_token": 9, "add_special_token": 9, "no_token": 9, "yes_no_logit": 9, "yes_no_prob": 9, "yes_prob": 9, "no_prob": 9, "yes_mask": 9, "1e4": 9, "NO": 9, "generation_output_control": 9, "uncontrol": 9, "generation_output": 9, "4263": 9, "5737": 9, "10407": 9, "4607": 9, "6250": 9, "9219": 9, "helper": 9, "model_output": 9, "gen_output": 9, "batch_decod": 9, "clean_up_tokenization_spac": 9, "classic": 9, "italian": 9, "willard": 9, "louf": 9, "reformul": 9, "finit": 9, "fsm": 9, "s_": 9, "s_t": 9, "s_1": 9, "tild": 9, "odot": 9, "rightarrow": 9, "thien": 9, "automaton": 9, "dfa": 9, "outgo": 9, "renorm": 9, "yy": 9, "ever": 9, "aa": 9, "lwai": 9, "prop": 9, "yynnaa": 9, "malform": 9, "sec_extraction_outlin": 9, "zsp": 9, "zicorp": 9, "with_structured_output": 9, "runnabl": 9, "typeddict": 9, "qu": 9, "langchain_openai": 9, "chatopenai": 9, "chatprompttempl": 9, "extract_from_sec_filing_langchain": 9, "structured_llm": 9, "from_messag": 9, "sec_extraction_langchain": 9, "bnf": 9, "backu": 9, "naur": 9, "fssl": 9, "extract_entities_from_sec_fil": 9, "ollama_structured_output_prompt_suffix": 9, "ollama_structured_output_temperatur": 9, "uncensor": 9, "model_json_schema": 9, "response_json": 9, "sharpli": 9, "exllama2": 9, "zoo": 9, "nonetheless": 9, "extran": 9, "dispar": 9, "preval": 9, "peer": 9, "speak": 9, "aider": 9, "outweigh": 9, "rebutt": 9, "dottxt": 9, "reproduct": 9, "paint": 9, "flaw": 9, "uneven": 9, "conflat": 9, "drawback": 9, "pfiffer": 9, "wrestl": 9, "aid24": 9, "dot24": 9, "demo": 9, "gge24": 9, "lan4b": 9, "lww": 9, "xun": 9, "hanyu": 9, "yezhaohui": 9, "shichao": 9, "simin": 9, "shunyu": 9, "feiyu": 9, "zhiyu": 9, "12599": 9, "llf": 9, "xieyang": 9, "frederick": 9, "fiannaca": 9, "terri": 9, "koo": 9, "dixon": 9, "ea": 9, "3613905": 9, "3650756": 9, "xuan": 9, "hai": 9, "nguyen": 9, "ngoc": 9, "tiviati": 9, "hieu": 9, "dao": 9, "shafiq": 9, "joti": 9, "kenji": 9, "kawaguchi": 9, "nanci": 9, "min": 9, "kan": 9, "08656": 9, "nou24": 9, "out24": 9, "twt": 9, "zhi": 9, "kuang": 9, "tsai": 9, "chieh": 9, "hung": 9, "nung": 9, "02442": 9, "tt24": 9, "vivien": 9, "vivien000": 9, "wl23": 9, "r\u00e9mi": 9, "09702": 9, "guidanceai24": 9, "nvidia4a": 9, "wikipediacontributors24": 9, "wiktionari": 9, "naur_form": 9}, "objects": {}, "objtypes": {}, "objnames": {}, "titleterms": {"about": [0, 2], "book": [0, 2], "content": [0, 3, 4, 5, 6, 7, 8, 9], "core": 0, "challeng": [0, 6], "we": 0, "ll": 0, "address": 0, "A": [0, 2, 3, 4, 6], "practic": [0, 2, 7, 9], "approach": [0, 4, 8], "an": 0, "open": [0, 2, 7], "sourc": [0, 2, 7], "note": [0, 3, 6], "perspect": 0, "who": 0, "thi": 0, "i": [0, 3, 6], "For": 0, "outcom": 0, "prerequisit": 0, "set": 0, "up": 0, "your": [0, 7], "environ": 0, "code": 0, "repositori": 0, "python": 0, "setup": [0, 3], "api": [0, 8], "kei": [0, 5], "configur": 0, "troubleshoot": 0, "common": [0, 8], "issu": 0, "author": 0, "prefac": [1, 2], "tame": 2, "llm": [2, 4, 5, 6, 7, 8], "guid": 2, "pitfal": [2, 8], "softwar": [2, 5], "chapter": 2, "1": [2, 8], "The": [2, 4, 5, 7], "eval": [2, 5, 8], "gap": [2, 5], "2": [2, 7, 8], "structur": [2, 6, 9], "output": [2, 9], "3": [2, 8], "manag": [2, 6], "input": [2, 6], "data": [2, 3, 6], "4": [2, 8], "safeti": [2, 8], "5": [2, 8], "prefer": [2, 3], "base": [2, 3, 5, 6, 8], "align": [2, 3], "6": [2, 8], "local": [2, 7], "7": 2, "fall": [2, 4], "cost": [2, 4, 7], "paradox": [2, 4], "8": 2, "frontier": 2, "appendix": 2, "tool": [2, 5, 7, 8, 9], "resourc": 2, "introduct": [3, 5, 6, 7, 8, 9], "from": 3, "raw": 3, "capabl": 3, "On": 3, "misalign": 3, "languag": 3, "model": [3, 5, 7], "human": 3, "supervis": 3, "fine": [3, 7, 9], "tune": [3, 7, 9], "sft": 3, "augment": [3, 6], "post": [3, 9], "train": 3, "answer": 3, "limit": [3, 6], "collaps": 3, "fake": 3, "case": [3, 6, 7, 8], "studi": [3, 6, 7, 8], "polici": [3, 8], "experiment": 3, "deliver": 3, "smollm2": 3, "dataset": [3, 5, 7, 8], "synthet": 3, "gener": [3, 5, 6, 8], "user": [3, 8], "prompt": [3, 7, 9], "reject": 3, "respons": 3, "chosen": 3, "dpo": 3, "optim": [3, 4], "prepar": [3, 6], "vibe": 3, "check": [3, 4], "evalu": [3, 5, 8], "discuss": [3, 6, 9], "conclus": [3, 4, 5, 6, 7, 8, 9], "refer": [3, 4, 5, 6, 7, 8, 9], "why": 4, "matter": 4, "more": 4, "than": 4, "ever": 4, "right": 4, "size": 4, "strateg": 4, "metric": [4, 5], "requir": [4, 5], "busi": 4, "perform": [4, 7], "oper": 4, "technic": [4, 8], "quantiz": [4, 7], "list": 4, "non": 5, "determinist": 5, "machin": 5, "emerg": 5, "properti": 5, "problem": [5, 9], "statement": [5, 9], "tradit": 5, "v": [5, 7], "design": [5, 8], "applic": 5, "test": 5, "matrix": 5, "conceptu": 5, "overview": 5, "consider": 5, "task": [5, 7], "benchmark": [5, 7, 8], "leaderboard": 5, "lightev": 5, "mmlu": 5, "econometr": 5, "sampl": [5, 8], "famili": [5, 7], "us": [5, 6], "langsmith": 5, "promptfoo": 5, "comparison": [5, 7, 9], "pars": 6, "document": 6, "markitdown": 6, "docl": 6, "extract": 6, "retriev": 6, "rag": 6, "pipelin": 6, "knowledg": 6, "vector": 6, "databas": 6, "rerank": 6, "Will": 6, "exist": [6, 8], "futur": 6, "framework": [6, 8, 9], "chunk": 6, "contextu": 6, "link": 6, "long": 6, "form": 6, "ii": 6, "quiz": 6, "citat": 6, "implement": [6, 8], "exampl": 6, "usag": 6, "choos": 7, "suitabl": 7, "result": 7, "llama": 7, "licens": 7, "commun": 7, "support": 7, "custom": [7, 8], "mistral": [7, 8], "decemb": 7, "22": 7, "2024": 7, "deploy": 7, "serv": 7, "cpp": 7, "llamafil": 7, "ollama": [7, 9], "lama": 7, "ui": 7, "lm": 7, "studio": 7, "jan": 7, "webui": 7, "openwebui": 7, "effect": 7, "level": 7, "hardwar": 7, "takeawai": [7, 8], "risk": 8, "ai": 8, "amplifi": 8, "harm": 8, "novel": 8, "associ": 8, "autonom": 8, "exacerb": 8, "factor": 8, "specif": 8, "guidanc": 8, "govern": 8, "organ": 8, "privat": 8, "sector": 8, "openai": 8, "anthrop": 8, "googl": 8, "rubric": 8, "mlcommon": 8, "centr": 8, "porquoi": 8, "red": 8, "team": 8, "constitut": 8, "explain": 8, "xai": 8, "plan": 8, "phase": 8, "definit": 8, "research": [8, 9], "identif": 8, "architectur": 8, "select": 8, "go": 8, "market": 8, "compon": 8, "salad": 8, "bench": 8, "truthfulqa": 8, "harmbench": 8, "safebench": 8, "techniqu": [8, 9], "repres": 8, "layer": 8, "map": 8, "rule": 8, "filter": 8, "moder": 8, "bad": 8, "good": 8, "guard": 8, "judg": 8, "valid": 8, "engin": 9, "json": 9, "mode": 9, "logit": 9, "process": 9, "outlin": 9, "langchain": 9, "best": 9, "compar": 9, "solut": 9, "ongo": 9, "debat": 9, "acknowledg": 9}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1, "sphinxcontrib.bibtex": 9, "sphinx": 57}, "alltitles": {"About the Book": [[0, "about-the-book"], [2, "about-the-book"]], "Contents": [[0, "contents"], [3, "contents"], [4, "contents"], [5, "contents"], [6, "contents"], [7, "contents"], [8, "contents"], [9, "contents"]], "Core Challenges We\u2019ll Address": [[0, "core-challenges-we-ll-address"]], "A Practical Approach": [[0, "a-practical-approach"]], "An Open Source Approach": [[0, "an-open-source-approach"]], "Open Source Book": [[0, "open-source-book"]], "A Note on Perspective": [[0, "a-note-on-perspective"]], "Who This Book Is For": [[0, "who-this-book-is-for"]], "Outcomes": [[0, "outcomes"]], "Prerequisites": [[0, "prerequisites"]], "Setting Up Your Environment": [[0, "setting-up-your-environment"]], "Code Repository": [[0, "code-repository"]], "Python Environment Setup": [[0, "python-environment-setup"]], "API Keys Configuration": [[0, "api-keys-configuration"]], "Troubleshooting Common Issues": [[0, "troubleshooting-common-issues"]], "About the Author": [[0, "about-the-author"]], "Preface": [[1, "preface"], [2, "preface"]], "Taming LLMs": [[2, "taming-llms"]], "A Practical Guide to LLM Pitfalls with Open Source Software": [[2, "a-practical-guide-to-llm-pitfalls-with-open-source-software"]], "Chapter 1: The Evals Gap": [[2, "chapter-1-the-evals-gap"]], "Chapter 2: Structured Output": [[2, "chapter-2-structured-output"]], "Chapter 3: Managing Input Data": [[2, "chapter-3-managing-input-data"]], "Chapter 4: Safety": [[2, "chapter-4-safety"]], "Chapter 5: Preference-Based Alignment": [[2, "chapter-5-preference-based-alignment"]], "Chapter 6: Local LLMs in Practice": [[2, "chapter-6-local-llms-in-practice"]], "Chapter 7: The Falling Cost Paradox": [[2, "chapter-7-the-falling-cost-paradox"]], "Chapter 8: Frontiers": [[2, "chapter-8-frontiers"]], "Appendix A: Tools and Resources": [[2, "appendix-a-tools-and-resources"]], "Preference-Based Alignment": [[3, "preference-based-alignment"]], "Introduction": [[3, "introduction"], [5, "introduction"], [6, "introduction"], [7, "introduction"], [8, "introduction"], [9, "introduction"]], "From Raw Capabilities to Preference Alignment": [[3, "from-raw-capabilities-to-preference-alignment"]], "On the Misalignment of Language Models": [[3, "on-the-misalignment-of-language-models"]], "Aligning Language Models with Human Preferences": [[3, "aligning-language-models-with-human-preferences"]], "Supervised Fine-Tuning (SFT) for Model Alignment": [[3, "supervised-fine-tuning-sft-for-model-alignment"]], "Augmenting SFT with Human Preferences": [[3, "augmenting-sft-with-human-preferences"]], "Is Post-Training the Answer?": [[3, "is-post-training-the-answer"]], "Limitations": [[3, "limitations"]], "Model Collapse": [[3, "model-collapse"]], "Faking Alignment": [[3, "faking-alignment"]], "Case Study: Aligning a Language Model to a Policy": [[3, "case-study-aligning-a-language-model-to-a-policy"]], "Experimental Setup": [[3, "experimental-setup"]], "Deliverables": [[3, "deliverables"]], "A Note on smolLM2 Models": [[3, "a-note-on-smollm2-models"]], "Policy": [[3, "policy"]], "Preference Dataset - Synthetic Dataset Generation": [[3, "preference-dataset-synthetic-dataset-generation"]], "User Prompts": [[3, "user-prompts"]], "Rejected Responses": [[3, "rejected-responses"]], "Chosen Responses": [[3, "chosen-responses"]], "Generate DPO Dataset": [[3, "generate-dpo-dataset"]], "DPO-Based Optimization": [[3, "dpo-based-optimization"]], "Data Preparation": [[3, "data-preparation"]], "Fine-Tuning": [[3, "fine-tuning"]], "Vibe Check": [[3, "vibe-check"]], "Alignment Evaluation": [[3, "alignment-evaluation"]], "Discussion and Conclusions": [[3, "discussion-and-conclusions"]], "References": [[3, "references"], [4, "references"], [5, "references"], [6, "references"], [7, "references"], [8, "references"], [9, "references"]], "The Falling Cost Paradox": [[4, "the-falling-cost-paradox"]], "Why Optimization Matters More Than Ever": [[4, "why-optimization-matters-more-than-ever"]], "Right-Sizing LLMs: A Strategic Approach": [[4, "right-sizing-llms-a-strategic-approach"]], "Metrics": [[4, "metrics"], [5, "metrics"]], "Requirements": [[4, "requirements"]], "Business Requirements": [[4, "business-requirements"]], "Performance Requirements": [[4, "performance-requirements"]], "Operational Requirements": [[4, "operational-requirements"]], "Technical Requirements": [[4, "technical-requirements"]], "Quantization": [[4, "quantization"], [7, "quantization"]], "Check-list": [[4, "check-list"]], "Conclusion": [[4, "conclusion"], [5, "conclusion"], [6, "conclusion"], [7, "conclusion"], [8, "conclusion"], [9, "conclusion"]], "The Evals Gap": [[5, "the-evals-gap"]], "Non-Deterministic Generative Machines": [[5, "non-deterministic-generative-machines"]], "Emerging Properties": [[5, "emerging-properties"]], "Problem Statement": [[5, "problem-statement"], [9, "problem-statement"]], "Evals of Traditional Software vs LLMs": [[5, "evals-table"]], "Evals Design": [[5, "evals-design"]], "LLM Application Testing Requirements Matrix": [[5, "validation-requirements"]], "Conceptual Overview": [[5, "conceptual-overview"]], "Design Considerations": [[5, "design-considerations"]], "Key Metrics for Evaluating Generative Tasks": [[5, "key-metrics"]], "Evaluators": [[5, "evaluators"]], "Model-Based Evaluation": [[5, "model-based-evaluation"]], "Evaluating Evaluators": [[5, "evaluating-evaluators"]], "Benchmarks and Leaderboards": [[5, "benchmarks-and-leaderboards"]], "Tools": [[5, "tools"], [9, "tools"]], "LightEval": [[5, "lighteval"]], "MMLU Econometrics Task Dataset sample": [[5, "mmlu-econometrics"]], "Model Families Evaluated Using LightEval": [[5, "model-families"]], "LangSmith": [[5, "langsmith"]], "PromptFoo": [[5, "promptfoo"]], "Comparison": [[5, "comparison"], [7, "comparison"], [7, "id37"]], "Comparison of Lighteval, LangSmith, and Promptfoo": [[5, "tool-comparison"]], "Managing Input Data": [[6, "managing-input-data"]], "Parsing Documents": [[6, "parsing-documents"]], "MarkItDown": [[6, "markitdown"]], "Docling": [[6, "docling"]], "Structured Data Extraction": [[6, "structured-data-extraction"]], "Retrieval-Augmented Generation": [[6, "retrieval-augmented-generation"]], "RAG Pipeline": [[6, "rag-pipeline"]], "Preparing the Knowledge Base": [[6, "preparing-the-knowledge-base"]], "Vector Database": [[6, "vector-database"]], "Reranking": [[6, "reranking"]], "LLMs with RAG": [[6, "llms-with-rag"]], "Challenges and Limitations": [[6, "challenges-and-limitations"]], "Will RAGs exist in the future?": [[6, "will-rags-exist-in-the-future"]], "A Note on Frameworks": [[6, "a-note-on-frameworks"]], "Case Studies": [[6, "case-studies"]], "Case Study I: Content Chunking with Contextual Linking": [[6, "case-study-i-content-chunking-with-contextual-linking"]], "Generating long-form content": [[6, "generating-long-form-content"]], "Discussion": [[6, "discussion"], [6, "id39"], [9, "discussion"]], "Case Study II: Quiz Generation with Citations": [[6, "case-study-ii-quiz-generation-with-citations"]], "Use Case": [[6, "use-case"]], "Implementation": [[6, "implementation"]], "Example Usage": [[6, "example-usage"]], "Local LLMs in Practice": [[7, "local-llms-in-practice"]], "Choosing your Model": [[7, "choosing-your-model"]], "Task Suitability": [[7, "task-suitability"]], "Benchmark results for Llama 2 family of models.": [[7, "llama2-benchmark"]], "Performance & Cost": [[7, "performance-cost"]], "Licensing": [[7, "licensing"]], "Open Source LLMs.": [[7, "open-source-llms"]], "Community Support": [[7, "community-support"]], "Customization": [[7, "customization"]], "Mistral fine-tuning costs as of December 22, 2024.": [[7, "mistral-costs"]], "Tools for Local LLM Deployment": [[7, "tools-for-local-llm-deployment"]], "Serving Models": [[7, "serving-models"]], "LLama.cpp": [[7, "llama-cpp"]], "Llamafile": [[7, "llamafile"]], "Ollama": [[7, "ollama"], [9, "ollama"]], "lama.cpp vs Ollama vs Llamafile Comparison": [[7, "feature-comparison-local"]], "UI": [[7, "ui"]], "LM Studio": [[7, "lm-studio"]], "Jan": [[7, "jan"]], "Open WebUI": [[7, "open-webui"]], "LM Studio vs Jan vs OpenWebUI Comparison": [[7, "feature-comparison-ui"]], "Case Study: The Effect of Quantization on LLM Performance": [[7, "case-study-the-effect-of-quantization-on-llm-performance"]], "Prompts Dataset": [[7, "prompts-dataset"]], "Quantization Levels": [[7, "quantization-levels"]], "Benchmarking": [[7, "benchmarking"], [8, "benchmarking"]], "Results": [[7, "results"]], "Quantization Benchmarks": [[7, "quantization-benchmarks"]], "Benchmarking Hardware": [[7, "benchmarking-hardware"]], "Takeaways": [[7, "takeaways"], [8, "takeaways"]], "Safety": [[8, "safety"]], "Safety Risks": [[8, "safety-risks"]], "General AI Safety Risks": [[8, "general-ai-safety-risks"]], "Amplified Existing Harms and Novel Risks": [[8, "amplified-existing-harms-and-novel-risks"]], "Risks Associated with Autonomous AI": [[8, "risks-associated-with-autonomous-ai"]], "Exacerbating Factors": [[8, "exacerbating-factors"]], "LLMs Specific Safety Risks": [[8, "llms-specific-safety-risks"]], "Guidance": [[8, "guidance"]], "Governments & Organizations": [[8, "governments-organizations"]], "Private Sector": [[8, "private-sector"]], "OpenAI": [[8, "openai"]], "Anthropic": [[8, "anthropic"]], "Google": [[8, "google"]], "Rubrics": [[8, "rubrics"]], "MLCommons AI Safety Benchmark": [[8, "mlcommons-ai-safety-benchmark"]], "Centre for the Governance of AI Rubric": [[8, "centre-for-the-governance-of-ai-rubric"]], "Porquoi": [[8, "porquoi"]], "Approaches": [[8, "approaches"]], "Red Teaming": [[8, "red-teaming"]], "Constitutional AI": [[8, "constitutional-ai"]], "Explainable AI (XAI)": [[8, "explainable-ai-xai"]], "Designing a Safety Plan": [[8, "designing-a-safety-plan"]], "Phase 1. Policy Definition": [[8, "phase-1-policy-definition"]], "Phase 2. User Research & Risk Identification": [[8, "phase-2-user-research-risk-identification"]], "Phase 3. Evaluation Framework": [[8, "phase-3-evaluation-framework"]], "Phase 4. Safety Architecture Design": [[8, "phase-4-safety-architecture-design"]], "Phase 5. Implementation & Tools Selection": [[8, "phase-5-implementation-tools-selection"]], "Phase 6. Go-to-Market": [[8, "phase-6-go-to-market"]], "Common Pitfalls": [[8, "common-pitfalls"]], "Technical Implementation Components": [[8, "technical-implementation-components"]], "Benchmarks & Datasets": [[8, "benchmarks-datasets"]], "SALAD-Bench": [[8, "salad-bench"]], "TruthfulQA": [[8, "truthfulqa"]], "HarmBench": [[8, "harmbench"]], "SafeBench": [[8, "safebench"]], "Tools & Techniques": [[8, "tools-techniques"]], "Representative Safety Layer Risk Map.": [[8, "safety-layer-table"]], "Rules-Based Safety Filtering": [[8, "rules-based-safety-filtering"]], "Rules-Based Safety Filtering Tools.": [[8, "safety-layer-tools"]], "LLM-Based Safety Filtering": [[8, "llm-based-safety-filtering"]], "Custom Moderation": [[8, "custom-moderation"]], "Case Study: Implementing a Safety Filter": [[8, "case-study-implementing-a-safety-filter"]], "Evals Dataset": [[8, "evals-dataset"]], "Bad Samples": [[8, "bad-samples"]], "Good Samples": [[8, "good-samples"]], "Safety Filters": [[8, "safety-filters"]], "LLM-Guard": [[8, "llm-guard"]], "Mistral Moderation API": [[8, "mistral-moderation-api"]], "OpenAI Moderation API": [[8, "openai-moderation-api"]], "Custom Judge Validator": [[8, "custom-judge-validator"]], "Structured Output": [[9, "structured-output"]], "Techniques": [[9, "techniques"]], "Prompt Engineering": [[9, "prompt-engineering"]], "JSON Mode (Fine-Tuned)": [[9, "json-mode-fine-tuned"]], "Logit Post-Processing": [[9, "logit-post-processing"]], "Outlines": [[9, "outlines"]], "LangChain": [[9, "langchain"]], "Best Practices": [[9, "best-practices"]], "Comparing Solutions": [[9, "comparing-solutions"]], "Structured Output Frameworks Comparison": [[9, "structured-output-frameworks"]], "Research and Ongoing Debate": [[9, "research-and-ongoing-debate"]], "Acknowledgements": [[9, "acknowledgements"]]}, "indexentries": {}}) \ No newline at end of file +Search.setIndex({"docnames": ["markdown/intro", "markdown/preface", "markdown/toc", "notebooks/alignment", "notebooks/cost", "notebooks/evals", "notebooks/input", "notebooks/local", "notebooks/safety", "notebooks/structured_output"], "filenames": ["markdown/intro.md", "markdown/preface.md", "markdown/toc.md", "notebooks/alignment.ipynb", "notebooks/cost.ipynb", "notebooks/evals.ipynb", "notebooks/input.ipynb", "notebooks/local.ipynb", "notebooks/safety.ipynb", "notebooks/structured_output.ipynb"], "titles": ["2. About the Book", "1. Preface", "Taming LLMs", "7. Preference-Based Alignment", "9. The Falling Cost Paradox", "3. The Evals Gap", "5. Managing Input Data", "8. Local LLMs in Practice", "6. Safety", "4. Structured Output"], "terms": {"am": [0, 8], "alwai": [0, 3, 4, 5, 6, 9], "do": [0, 3, 4, 5, 6, 7, 8, 9], "which": [0, 3, 4, 5, 6, 7, 8, 9], "cannot": [0, 3, 4, 5, 7, 8], "order": [0, 3, 5, 6, 8, 9], "mai": [0, 1, 3, 4, 5, 6, 7, 8, 9], "learn": [0, 3, 5, 6, 7, 8, 9], "how": [0, 1, 3, 4, 5, 6, 7, 8, 9], "pablo": [0, 5], "picasso": 0, "In": [0, 3, 4, 5, 6, 7, 8, 9], "recent": [0, 3, 4, 5, 6, 7, 8, 9], "year": [0, 2, 3, 4, 5, 6, 7, 8, 9], "larg": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "languag": [0, 1, 2, 4, 5, 6, 7, 8, 9], "model": [0, 1, 2, 4, 6, 8, 9], "llm": [0, 1, 3, 9], "have": [0, 1, 3, 4, 5, 6, 7, 8, 9], "emerg": [0, 3, 4, 6, 7, 8, 9], "transform": [0, 1, 3, 5, 6, 7, 8, 9], "forc": [0, 5, 6, 9], "technologi": [0, 1, 4, 5, 6, 7, 8], "promis": [0, 3, 4, 5, 8], "revolution": [0, 8], "build": [0, 2, 3, 5, 6, 7, 8, 9], "product": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "interact": [0, 3, 4, 5, 6, 7, 8, 9], "comput": [0, 3, 4, 5, 6, 7, 8, 9], "from": [0, 1, 4, 5, 6, 7, 8, 9], "chatgpt": [0, 3, 4, 6, 7, 9], "llama": [0, 3, 4, 5, 6, 8, 9], "github": [0, 2, 3, 4, 5, 6, 7, 8, 9], "copilot": 0, "claud": [0, 3, 5, 7, 8], "artifact": 0, "system": [0, 3, 4, 5, 6, 7, 8, 9], "captur": [0, 1, 3, 5, 6, 7, 8], "public": [0, 3, 5, 6, 7, 8], "imagin": [0, 7], "spark": 0, "gold": [0, 3, 6, 8], "rush": 0, "ai": [0, 3, 4, 5, 6, 7, 9], "power": [0, 2, 3, 4, 5, 6, 7, 8, 9], "applic": [0, 1, 2, 3, 4, 6, 7, 8, 9], "howev": [0, 3, 4, 5, 6, 7, 8, 9], "beneath": 0, "surfac": [0, 5], "technolog": [0, 1, 4, 5, 6, 8], "revolut": [0, 4], "li": [0, 3, 5, 6, 7, 8, 9], "complex": [0, 1, 3, 5, 6, 7, 8, 9], "landscap": [0, 3, 5, 7], "softwar": [0, 1, 3, 4, 6, 7, 8, 9], "develop": [0, 1, 3, 4, 5, 6, 7, 8, 9], "tech": [0, 7, 8], "leader": [0, 2, 5, 8], "must": [0, 3, 4, 5, 7, 8, 9], "navig": [0, 2, 5, 6, 7, 8], "focus": [0, 3, 4, 5, 6, 7, 8, 9], "bring": [0, 3, 6, 7], "awar": [0, 3, 4, 5, 6, 8], "limit": [0, 1, 2, 4, 5, 7, 8, 9], "har": [0, 2, 5], "solut": [0, 2, 4, 5, 6, 7, 8], "overcom": [0, 5, 6], "them": [0, 1, 3, 4, 5, 6, 7, 8, 9], "robust": [0, 3, 4, 5, 6, 7, 8, 9], "It": [0, 3, 4, 5, 6, 7, 8, 9], "offer": [0, 3, 4, 5, 6, 7, 8, 9], "critic": [0, 2, 3, 4, 5, 6, 7, 8, 9], "implement": [0, 2, 3, 4, 5, 7, 9], "back": [0, 5, 6, 7, 8, 9], "reproduc": [0, 1, 2, 5, 7], "exampl": [0, 1, 2, 3, 5, 7, 8, 9], "while": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "mani": [0, 1, 3, 4, 5, 6, 7, 8, 9], "resourc": [0, 3, 4, 5, 6, 7, 8], "cover": [0, 3, 4, 5, 6, 7, 8, 9], "capabl": [0, 1, 2, 4, 5, 6, 7, 8, 9], "specif": [0, 3, 4, 5, 6, 7, 9], "hidden": [0, 3, 8], "pitfal": [0, 1, 3, 4, 5, 6, 7, 9], "engin": [0, 1, 2, 3, 4, 5, 6, 7, 8], "technic": [0, 1, 2, 3, 5, 6, 7, 9], "face": [0, 3, 4, 5, 6, 7, 8], "when": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "comprehens": [0, 2, 3, 4, 5, 6, 7, 8, 9], "guid": [0, 1, 3, 4, 5, 6, 7, 8, 9], "leverag": [0, 3, 5, 6, 7, 8, 9], "battl": [0, 2, 7], "test": [0, 2, 3, 4, 6, 7, 8, 9], "tool": [0, 1, 3, 4, 6], "throughout": [0, 4, 5, 6, 7, 8], "tackl": [0, 3, 5, 6, 8], "follow": [0, 3, 4, 5, 6, 7, 8, 9], "non": [0, 3, 6, 7, 8, 9], "exhaust": [0, 6, 7], "list": [0, 3, 5, 6, 7, 8, 9], "structur": [0, 3, 4, 5, 7, 8], "un": 0, "reliabl": [0, 1, 3, 4, 5, 6, 7, 8, 9], "struggl": [0, 1, 3, 5, 6, 7, 8, 9], "maintain": [0, 1, 3, 4, 5, 6, 7, 8, 9], "consist": [0, 1, 3, 4, 5, 6, 7, 8, 9], "output": [0, 1, 3, 5, 6, 7, 8], "format": [0, 3, 4, 5, 6, 7, 8, 9], "complic": [0, 8], "integr": [0, 1, 3, 4, 5, 6, 7, 8, 9], "larger": [0, 3, 4, 5, 6, 7, 8, 9], "make": [0, 3, 4, 5, 6, 7, 8, 9], "error": [0, 3, 5, 8, 9], "handl": [0, 3, 4, 5, 6, 7, 8, 9], "more": [0, 1, 3, 5, 6, 7, 8, 9], "input": [0, 3, 5, 7, 8, 9], "data": [0, 1, 4, 5, 7, 8, 9], "manag": [0, 1, 4, 5, 7, 8, 9], "ar": [0, 1, 3, 4, 5, 6, 7, 8, 9], "sensit": [0, 3, 4, 5, 6, 7, 8], "oper": [0, 3, 5, 6, 7, 8, 9], "stale": [0, 6], "long": [0, 1, 3, 4, 5, 7, 8, 9], "context": [0, 1, 3, 4, 5, 6, 7, 8, 9], "requir": [0, 3, 6, 7, 8, 9], "care": [0, 3, 4, 5, 6, 7, 8, 9], "retriev": [0, 4, 5, 7], "strategi": [0, 3, 4, 5, 6, 7, 8, 9], "tradit": [0, 3, 6, 7, 8], "methodologi": [0, 3, 5, 7, 8, 9], "break": [0, 1, 3, 4, 5, 6, 8], "down": [0, 1, 4, 5, 6, 7, 8], "deal": [0, 3, 6, 7], "determinist": [0, 6, 9], "gener": [0, 1, 4, 7, 9], "new": [0, 2, 3, 4, 5, 6, 7, 8, 9], "safeti": [0, 3, 5, 9], "can": [0, 1, 3, 4, 5, 6, 7, 8, 9], "harm": [0, 3, 5, 7], "bias": [0, 3, 5, 6, 7, 8, 9], "inappropri": [0, 3, 8], "safeguard": [0, 5, 8], "monitor": [0, 3, 4, 5, 6, 7, 8], "ensur": [0, 3, 4, 5, 6, 7, 8, 9], "safe": [0, 3, 5, 8, 9], "deploy": [0, 3, 4, 5, 8, 9], "align": [0, 4, 5, 6, 7, 8, 9], "next": [0, 1, 3, 4, 5, 6, 7, 8, 9], "token": [0, 1, 3, 4, 5, 6, 7, 8, 9], "predict": [0, 1, 3, 5, 6, 7, 8, 9], "mean": [0, 3, 4, 5, 6, 7, 8, 9], "thei": [0, 1, 3, 4, 5, 6, 7, 8, 9], "user": [0, 1, 4, 5, 6, 7, 9], "": [0, 1, 3, 4, 5, 6, 7, 8, 9], "prefer": [0, 5, 6, 7, 8, 9], "default": [0, 3, 5, 6, 7, 8, 9], "vendor": [0, 4, 5, 7], "lock": [0, 3, 4, 7], "cloud": [0, 3, 4, 5, 6, 7, 8, 9], "base": [0, 1, 4, 7, 9], "provid": [0, 2, 3, 4, 5, 6, 7, 8, 9], "creat": [0, 1, 3, 4, 5, 6, 7, 8, 9], "signific": [0, 3, 4, 5, 6, 7, 8, 9], "depend": [0, 3, 4, 5, 6, 7, 9], "through": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "proprietari": [0, 3, 7, 8, 9], "infrastructur": [0, 4, 7], "difficult": [0, 3, 5, 6, 8], "switch": [0, 7], "self": [0, 3, 5, 6, 7, 8, 9], "host": [0, 4, 5, 7, 8], "cost": [0, 3, 5, 6, 8, 9], "optim": [0, 1, 5, 6, 7, 8], "The": [0, 1, 3, 6, 8, 9], "financi": [0, 1, 3, 4, 5, 6, 8, 9], "quickli": [0, 3, 4, 6, 7], "becom": [0, 3, 4, 5, 6, 7, 8, 9], "prohibit": [0, 3, 5, 6, 7], "without": [0, 1, 3, 4, 5, 6, 7, 8, 9], "conclud": [0, 5, 6, 7], "discuss": [0, 4, 5, 7, 8], "futur": [0, 3, 4, 5, 7, 8], "aris": [0, 3, 5, 6, 8], "move": [0, 3, 4, 5, 6, 7, 8], "forward": [0, 3, 5, 8], "take": [0, 2, 3, 4, 5, 6, 7, 8, 9], "hand": [0, 6, 7, 8, 9], "focu": [0, 2, 3, 4, 5, 6, 7, 8, 9], "access": [0, 3, 4, 5, 6, 7, 8, 9], "all": [0, 1, 3, 4, 5, 6, 7, 8, 9], "fulli": [0, 3, 5, 8], "document": [0, 3, 4, 5, 7, 8, 9], "allow": [0, 5, 6, 7, 8, 9], "reader": [0, 2, 6, 8], "replic": [0, 5, 6, 8, 9], "result": [0, 3, 4, 5, 6, 8, 9], "exactli": [0, 5, 6, 9], "design": [0, 1, 3, 6, 7, 9], "run": [0, 3, 4, 5, 6, 7, 8, 9], "consum": [0, 3, 4, 5, 6, 7, 8, 9], "grade": [0, 3, 4, 5, 6, 7, 8], "hardwar": [0, 3, 4, 5], "expens": [0, 3, 4, 5, 6, 7, 8], "avail": [0, 3, 4, 5, 6, 7, 8, 9], "notebook": [0, 3, 6, 9], "modifi": [0, 3, 5, 8, 9], "extend": [0, 3, 4, 5, 6, 7, 9], "minim": [0, 3, 4, 5, 6, 7, 8, 9], "effect": [0, 1, 3, 4, 5, 6, 8, 9], "framework": [0, 3, 4, 5, 7], "wai": [0, 3, 4, 5, 6, 7, 8, 9], "priorit": [0, 3, 5, 6, 7, 8], "transpar": [0, 3, 4, 5, 7, 8], "visibl": [0, 5], "being": [0, 3, 4, 5, 6, 7, 8, 9], "better": [0, 2, 3, 4, 5, 6, 7, 8, 9], "understand": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "custom": [0, 3, 5, 6, 9], "flexibl": [0, 4, 5, 6, 7, 8, 9], "adapt": [0, 3, 4, 5, 7, 8], "us": [0, 1, 3, 4, 7, 8, 9], "case": [0, 4, 5, 9], "unlik": [0, 3, 5, 7], "black": [0, 3], "box": [0, 7], "commerci": [0, 5, 7, 8, 9], "most": [0, 3, 4, 5, 6, 7, 8, 9], "freeli": [0, 9], "foster": [0, 3, 5, 8, 9], "reduc": [0, 3, 4, 5, 6, 7, 8, 9], "independ": [0, 5, 6, 8, 9], "freedom": [0, 7, 9], "architectur": [0, 3, 4, 5, 6, 7, 9], "decis": [0, 3, 4, 5, 6, 7, 8], "keep": [0, 3, 5, 6, 7, 8], "principl": [0, 3, 5, 7, 8], "itself": [0, 3, 5, 6, 7, 8], "live": [0, 1, 5, 6, 8], "evolv": [0, 4, 5, 6, 7, 8], "chang": [0, 3, 5, 6, 7, 8], "encourag": [0, 3, 5, 6, 8, 9], "report": [0, 3, 5, 6, 7, 8, 9], "suggest": [0, 3, 5, 6, 7, 8, 9], "improv": [0, 3, 4, 5, 6, 7, 8, 9], "contribut": [0, 4, 5, 6, 7, 8], "via": [0, 3, 4, 5, 6, 7, 8, 9], "pull": [0, 7], "request": [0, 3, 4, 5, 6, 7, 8, 9], "share": [0, 3, 5, 6, 7, 8, 9], "own": [0, 3, 4, 5, 6, 7, 8], "experi": [0, 3, 4, 5, 6, 7, 8, 9], "commun": [0, 3, 4, 5, 6, 8, 9], "propos": [0, 4, 5, 6, 8], "chapter": [0, 3, 4, 5, 6, 7, 8, 9], "section": [0, 3, 4, 5, 6, 7, 8, 9], "found": [0, 3, 4, 5, 7, 9], "http": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], "com": [0, 2, 3, 4, 5, 6, 7, 8, 9], "souzatharsi": [0, 2, 3, 4, 5, 6, 7, 8, 9], "tamingllm": [0, 2, 3, 4, 5, 6, 7, 8, 9], "whether": [0, 3, 4, 5, 6, 7, 8, 9], "you": [0, 1, 3, 4, 5, 6, 7, 8, 9], "ve": [0, 7], "typo": [0, 8], "want": [0, 1, 3, 6, 7, 8, 9], "welcom": 0, "pleas": [0, 3, 5, 7, 8], "feel": [0, 6, 7], "free": [0, 1, 3, 5, 6, 7, 8], "look": [0, 2, 3, 4, 5, 6, 7, 8], "our": [0, 1, 3, 4, 5, 6, 7, 8, 9], "goal": [0, 1, 3, 5, 6, 8, 9], "discourag": [0, 6], "enabl": [0, 3, 4, 5, 6, 7, 8, 9], "By": [0, 1, 2, 3, 5, 6, 8, 9], "upfront": [0, 2, 4], "equip": [0, 2, 5, 6, 8], "avoid": [0, 3, 5, 7, 8, 9], "current": [0, 2, 3, 4, 5, 6, 8, 9], "discours": [0, 2], "around": [0, 2, 3, 5, 6, 7, 8, 9], "tend": [0, 2, 5, 8], "toward": [0, 3, 5, 8, 9], "extrem": [0, 3, 4, 5, 6, 8], "either": [0, 3, 5, 6, 7, 8], "uncrit": 0, "enthusiasm": 0, "wholesal": [0, 5], "dismiss": 0, "differ": [0, 3, 4, 5, 6, 7, 8, 9], "rather": [0, 1, 3, 4, 5, 6, 7, 8], "than": [0, 1, 3, 5, 6, 7, 8, 9], "theoret": [0, 3], "examin": [0, 3, 5, 6, 7, 8, 9], "first": [0, 1, 3, 4, 5, 6, 7, 8, 9], "everi": [0, 4, 5, 6, 8], "concept": [0, 3, 5, 6, 8], "illustr": [0, 3, 5, 6, 7, 8, 9], "execut": [0, 5, 7, 8], "immedi": [0, 3, 4, 5, 7], "analysi": [0, 1, 3, 4, 5, 6, 7, 8], "balanc": [0, 3, 4, 5, 6, 7, 8, 9], "both": [0, 3, 4, 5, 6, 7, 8], "help": [0, 3, 4, 5, 6, 7, 8, 9], "inform": [0, 3, 4, 5, 6, 7, 8, 9], "lead": [0, 1, 3, 4, 5, 6, 7, 8, 9], "genai": [0, 1, 3, 6, 8], "initi": [0, 1, 3, 4, 5, 6, 7, 8, 9], "advoc": [0, 8], "anyon": [0, 8], "seek": [0, 5, 6, 7, 8], "work": [0, 1, 3, 4, 5, 6, 7, 8, 9], "typic": [0, 3, 4, 5, 6, 7, 8, 9], "job": [0, 5, 6, 7, 8], "role": [0, 3, 5, 6, 7, 8, 9], "platform": [0, 5, 6, 7, 8, 9], "backend": [0, 3, 5], "exist": [0, 3, 4, 5, 7], "ml": [0, 6, 8], "transit": [0, 4, 5, 7, 9], "overse": 0, "motiv": [0, 3, 4, 5, 6, 9], "need": [0, 3, 4, 5, 6, 7, 8, 9], "readi": [0, 5, 6, 8], "desir": [0, 1, 3, 5, 6, 9], "perform": [0, 3, 5, 6, 8, 9], "earli": [0, 3, 4, 5, 6, 8, 9], "befor": [0, 3, 4, 5, 6, 8, 9], "costli": [0, 5, 6, 8], "problem": [0, 1, 2, 3, 4, 6, 7, 8], "too": [0, 1, 3, 5, 7, 8], "late": [0, 3, 4, 8, 9], "lifecycl": [0, 7, 8], "after": [0, 1, 3, 5, 6, 7, 8, 9], "read": [0, 3, 4, 5, 6, 8, 9], "implic": [0, 1, 3, 5, 8], "recommend": [0, 3, 5, 6, 7, 8, 9], "abl": [0, 3, 5, 9], "deploi": [0, 3, 5, 7, 8], "proper": [0, 3, 4, 7, 8, 9], "realist": [0, 3, 4, 8], "effort": [0, 5, 7, 8, 9], "estim": [0, 4, 5, 6, 8], "project": [0, 3, 4, 5, 6, 7, 8], "impact": [0, 3, 4, 5, 6, 7, 8, 9], "timelin": 0, "To": [0, 3, 5, 6, 7, 8, 9], "should": [0, 3, 4, 5, 6, 7, 8, 9], "basic": [0, 3, 5, 6, 7, 8], "program": [0, 5, 6, 7, 9], "knowledg": [0, 3, 5, 7, 8], "mistral": [0, 3, 9], "openai": [0, 3, 5, 6, 7, 9], "anthrop": [0, 3, 6, 9], "similar": [0, 3, 4, 5, 6, 7, 9], "dive": [0, 4], "here": [0, 2, 3, 4, 5, 6, 7, 8, 9], "get": [0, 3, 4, 5, 6, 7, 8, 9], "start": [0, 3, 4, 5, 6, 7, 8, 9], "clone": [0, 3], "companion": 0, "git": 0, "cd": 0, "activ": [0, 3, 4, 5, 6, 7, 8], "virtual": [0, 5], "m": [0, 3, 5, 6, 7, 8, 9], "venv": [0, 9], "tame": [0, 3, 4, 5, 6, 7, 8, 9], "env": [0, 3, 5, 6, 8, 9], "bin": [0, 7], "On": [0, 5, 6, 7, 9], "window": [0, 4, 5, 6, 7], "script": [0, 7], "try": [0, 1, 3, 5, 6, 8, 9], "each": [0, 3, 4, 5, 6, 7, 8, 9], "contain": [0, 3, 4, 5, 6, 7, 8, 9], "possibl": [0, 3, 4, 5, 6, 7, 8, 9], "includ": [0, 1, 3, 4, 5, 6, 7, 8, 9], "necessari": [0, 3, 4, 5, 8], "instal": [0, 3, 5, 7, 9], "go": [0, 3, 5, 6, 9], "packag": [0, 4, 5, 6, 7, 9], "e": [0, 1, 3, 4, 5, 6, 7, 8, 9], "g": [0, 3, 4, 5, 6, 7, 8, 9], "pip": [0, 3, 5, 7, 9], "poetri": [0, 8], "file": [0, 3, 5, 6, 7, 8, 9], "root": [0, 3], "directori": [0, 5, 6, 7], "add": [0, 3, 5, 6, 7, 8], "other": [0, 3, 4, 5, 6, 7, 8, 9], "openai_api_kei": [0, 3], "your_openai_api_key_her": 0, "never": [0, 9], "commit": [0, 3, 5, 8], "version": [0, 3, 4, 5, 6, 7, 8, 9], "control": [0, 1, 3, 4, 5, 6, 7, 8, 9], "kept": [0, 5], "privat": [0, 5], "If": [0, 1, 3, 4, 5, 6, 7, 8, 9], "encount": [0, 2, 5, 8], "rate": [0, 3, 4, 5, 6, 7, 8], "consid": [0, 3, 4, 5, 6, 7, 8, 9], "smaller": [0, 3, 4, 5, 6, 7, 9], "retri": [0, 9], "logic": [0, 1, 3, 5, 6, 8], "conflict": [0, 3, 5], "fresh": 0, "like": [0, 1, 3, 4, 5, 6, 7, 8, 9], "check": [0, 5, 6, 7, 8, 9], "page": [0, 5, 6, 7], "known": [0, 5, 6, 8, 9], "now": [0, 1, 3, 4, 5, 6, 7, 8, 9], "let": [0, 3, 4, 5, 6, 7, 8, 9], "begin": [0, 5, 7, 8, 9], "explor": [0, 1, 3, 4, 5, 6, 7, 8, 9], "tharsi": [0, 2, 3, 4, 5, 6, 7, 8, 9], "souza": [0, 2, 3, 4, 5, 6, 7, 8, 9], "ph": [0, 8], "d": [0, 3, 4, 5, 6, 7, 8, 9], "scienc": [0, 3, 5, 8], "ucl": 0, "univers": [0, 5, 7, 8], "london": 0, "scientist": [0, 1, 7, 8], "special": [0, 4, 5, 6, 7, 8, 9], "he": [0, 3, 5, 6, 8], "lectur": 0, "columbia": 0, "master": [0, 4, 7, 9], "appli": [0, 3, 5, 6, 7, 8, 9], "analyt": 0, "incom": [0, 5, 6], "head": [0, 3, 5, 6, 8, 9], "equiti": [0, 5, 6], "citadel": 0, "former": [0, 1, 5, 7], "senior": [0, 5], "vp": 0, "two": [0, 3, 4, 5, 6, 7, 8, 9], "sigma": [0, 3], "invest": [0, 3, 4, 5, 6, 8], "mentor": 0, "under": [0, 3, 4, 5, 7, 8, 9], "repres": [0, 3, 4, 5, 6, 7, 9], "student": [0, 3, 6, 8], "profession": [0, 3, 5, 6, 8, 9], "divers": [0, 3, 4, 5, 6, 8], "global": [0, 5, 6, 8], "ecosystem": [0, 4, 5, 7], "With": [0, 3, 5, 6, 7, 8, 9], "over": [0, 2, 3, 4, 5, 6, 7, 8, 9], "15": [0, 5, 6, 7, 8, 9], "deliv": [0, 4, 5, 6, 7], "across": [0, 3, 4, 5, 6, 7, 8, 9], "startup": 0, "fortun": 0, "500": [0, 3, 5, 6, 8], "compani": [0, 3, 4, 5, 6, 8, 9], "also": [0, 3, 4, 5, 6, 7, 8, 9], "numer": [0, 4, 5, 6, 8, 9], "scholarli": 0, "frequent": [0, 5, 6, 7, 9], "speaker": [0, 5], "academ": [0, 3, 5, 8], "busi": [0, 5, 6, 7, 8], "confer": [0, 6, 9], "ground": [0, 3, 5, 6, 7], "background": [0, 1, 5, 6, 7], "draw": [0, 3, 5, 8, 9], "scale": [0, 3, 4, 5, 6, 7, 8, 9], "stage": [0, 3, 8, 9], "major": [0, 3, 4, 5, 6, 7, 8, 9], "institut": [0, 5, 8], "well": [0, 3, 4, 5, 6, 7, 8, 9], "uniqu": [0, 3, 4, 5, 6, 7, 8, 9], "bridg": [0, 7, 8], "gap": [0, 1, 3, 4, 6, 7, 8], "between": [0, 1, 3, 4, 5, 6, 7, 8, 9], "potenti": [0, 1, 3, 4, 5, 6, 7, 8, 9], "tell": [1, 3, 8], "mere": [1, 5], "what": [1, 3, 4, 5, 6, 7, 8, 9], "someth": [1, 5, 7], "i": [1, 2, 4, 5, 7, 8, 9], "emanuel": [1, 3, 5, 8], "derman": 1, "an": [1, 2, 3, 4, 5, 6, 7, 8, 9], "altern": [1, 3, 4, 5, 6, 7, 8], "titl": [1, 2, 3, 4, 5, 6, 7, 8, 9], "thi": [1, 2, 3, 4, 5, 6, 7, 8, 9], "book": [1, 5, 6], "could": [1, 3, 4, 5, 6, 7, 8, 9], "been": [1, 3, 4, 5, 6, 7, 8], "behav": 1, "badli": 1, "come": [1, 3, 5, 6, 7, 8, 9], "notic": [1, 3, 4, 5, 6, 8, 9], "parallel": [1, 3, 5, 7], "semin": [1, 8], "2011": 1, "coincident": 1, "just": [1, 3, 4, 5, 6, 7, 8, 9], "caution": 1, "against": [1, 3, 4, 5, 6, 7, 8], "treat": [1, 5, 8], "perfect": [1, 5, 7], "represent": [1, 5, 6, 7, 8], "realiti": [1, 6, 8], "aim": [1, 3, 4, 5, 6, 7, 8, 9], "highlight": [1, 3, 5, 6, 7, 8, 9], "practic": [1, 3, 4, 5, 6, 8], "physicist": 1, "goldman": 1, "sach": 1, "quant": 1, "scientif": [1, 3, 5, 7], "fail": [1, 3, 5, 6, 8], "we": [1, 3, 4, 5, 6, 7, 8, 9], "mistak": [1, 8], "approxim": [1, 4, 5, 9], "full": [1, 3, 4, 5, 6, 7, 8, 9], "assumpt": [1, 5, 8], "core": [1, 4, 5, 6, 7, 8], "premis": [1, 7], "hi": [1, 5, 8, 9], "aspect": [1, 3, 5, 6, 8], "world": [1, 3, 4, 5, 6, 7, 8, 9], "inher": [1, 2, 3, 5, 8], "involv": [1, 3, 4, 5, 6, 7, 8, 9], "simplif": 1, "argu": [1, 4, 8, 9], "crise": 1, "2008": 1, "crash": 1, "occur": [1, 3, 5, 8], "part": [1, 3, 4, 5, 6, 8, 9], "becaus": [1, 3, 5, 6, 8], "peopl": [1, 3, 5, 7, 8], "put": [1, 5, 7], "much": [1, 3, 5, 6, 7], "faith": 1, "mathemat": [1, 5, 6, 7, 9], "recogn": [1, 3, 5, 8], "human": [1, 4, 5, 6, 7, 8, 9], "behavior": [1, 3, 5, 7, 8], "market": [1, 4, 5, 6, 7, 9], "dynam": [1, 3, 5, 6, 8], "constraint": [1, 3, 4, 5, 6, 7, 8, 9], "hallucin": [1, 3, 5, 6, 8, 9], "fact": [1, 3, 5, 6, 8], "reason": [1, 3, 5, 6, 7, 8, 9], "Their": [1, 5, 9], "respons": [1, 4, 5, 6, 7, 8, 9], "often": [1, 3, 4, 5, 6, 7, 8, 9], "convinc": [1, 3], "probabilist": [1, 5, 9], "train": [1, 4, 5, 6, 7, 8, 9], "true": [1, 3, 4, 5, 6, 8, 9], "even": [1, 3, 4, 5, 6, 7, 8, 9], "though": [1, 3, 4, 5, 6, 7, 8, 9], "insist": 1, "machin": [1, 3, 6, 7, 8, 9], "todai": [1, 4, 7, 9], "grow": [1, 3, 5, 6, 7, 8, 9], "pervas": [1, 8], "belief": [1, 7, 8], "solv": [1, 3, 4, 5, 7, 8, 9], "ani": [1, 3, 4, 5, 6, 7, 8, 9], "content": 1, "moreov": [1, 6], "were": [1, 3, 5, 7, 8, 9], "chatbot": [1, 3, 5, 6, 7, 8], "twist": [1, 8], "wrap": [1, 6, 7, 9], "further": [1, 3, 4, 5, 6, 7, 8, 9], "daili": [1, 4, 7, 8], "life": [1, 5, 7, 8], "workflow": [1, 4, 5, 7, 8, 9], "affect": [1, 5, 6, 7, 8], "decid": [1, 3, 5, 6], "action": [1, 3, 5, 6, 8], "coupl": [1, 7], "lack": [1, 3, 5, 6, 8, 9], "pose": [1, 3, 5, 6, 8, 9], "risk": [1, 3, 4, 5, 6, 7], "still": [1, 4, 5, 6, 7, 8], "figur": [1, 5, 7], "out": [1, 3, 4, 5, 6, 7, 8, 9], "serv": [1, 3, 4, 5, 6, 8, 9], "introductori": [1, 2], "practition": [1, 4, 5, 7, 9], "builder": [1, 7], "who": [1, 3, 5, 6, 7, 8, 9], "remain": [1, 3, 4, 5, 6, 7, 8], "clear": [1, 3, 4, 5, 6, 7, 8, 9], "ei": 1, "about": [1, 3, 4, 5, 6, 7, 8, 9], "therefor": [1, 3, 5, 6, 7, 8], "end": [1, 3, 4, 5, 6, 7, 8, 9], "detail": [1, 3, 4, 5, 6, 7, 8, 9], "python": [1, 2, 5, 6, 7, 8, 9], "code": [1, 2, 3, 5, 6, 7, 8, 9], "diminish": [1, 3, 4, 5, 6], "promot": [1, 3, 5, 8], "nuanc": [1, 3, 5, 6, 7, 8, 9], "acknowledg": [1, 5, 8], "within": [1, 3, 4, 5, 6, 7, 8, 9], "trustworthi": [1, 8], "taught": 1, "u": [1, 3, 5, 6, 8, 9], "step": [1, 3, 4, 5, 6, 7, 8, 9], "where": [1, 3, 4, 5, 6, 7, 8, 9], "der11": 1, "why": [1, 3, 5, 8, 9], "confus": [1, 4, 8], "illus": 1, "disast": [1, 5], "wall": [1, 7], "street": [1, 7], "press": [1, 5, 7], "isbn": [1, 3, 5, 6], "9781439165010": 1, "url": [1, 2, 3, 4, 5, 6, 7, 8, 9], "googl": [1, 5, 7, 9], "co": [1, 3, 4, 5, 6, 7, 8, 9], "uk": [1, 8], "id": [1, 5, 6, 7, 8, 9], "lke_cwm4wm8c": 1, "sign": [2, 5, 8], "up": [2, 3, 4, 5, 6, 7, 8], "receiv": [2, 3, 5, 7, 8, 9], "updat": [2, 3, 4, 5, 6, 7, 8, 9], "abstract": [2, 5, 6, 8, 9], "heavili": [2, 3, 4, 5, 6, 8, 9], "gloss": 2, "fundament": [2, 3, 5, 6, 7, 8, 9], "challeng": [2, 3, 4, 5, 7, 8, 9], "convers": [2, 3, 4, 5, 6, 7, 8, 9], "kei": [2, 3, 4, 6, 7, 8, 9], "proven": [2, 4], "yet": [2, 3, 4, 5, 6, 7, 8, 9], "concret": [2, 4, 8, 9], "sidestep": 2, "misc": [2, 3, 4, 5, 6, 7, 8, 9], "tharsistpsouza2024tamingllm": [2, 3, 4, 5, 6, 7, 8, 9], "author": [2, 3, 4, 5, 6, 7, 8, 9], "t": [2, 3, 4, 5, 6, 7, 8, 9], "p": [2, 3, 4, 5, 6, 7, 8, 9], "2024": [2, 3, 4, 5, 6, 8, 9], "journal": [2, 3, 4, 5, 6, 7, 8, 9], "repositori": [2, 3, 4, 5, 6, 7, 8, 9], "valu": [3, 5, 6, 7, 8, 9], "its": [3, 4, 5, 6, 7, 8, 9], "privileg": 3, "abov": [3, 5, 6, 8], "soon": [3, 9], "lose": [3, 5], "dwight": 3, "eisenhow": 3, "releas": [3, 4, 5, 6, 7, 8], "3": [3, 4, 5, 6, 7, 9], "5": [3, 4, 5, 6, 7, 9], "2022": [3, 5, 7, 8], "mark": [3, 5, 6, 7, 8], "moment": [3, 8], "histori": [3, 4, 5, 6, 7], "artifici": [3, 5, 7, 8], "intellig": [3, 5, 6, 7, 8], "five": [3, 5, 8], "dai": [3, 4, 5, 6, 7, 8, 9], "launch": [3, 5, 8], "attract": [3, 5], "million": [3, 4, 5, 6, 7], "month": [3, 4, 5, 7, 8], "becam": [3, 4], "fastest": [3, 5, 8], "100": [3, 4, 5, 7, 8, 9], "monthli": [3, 4, 5], "rais": [3, 4, 5, 8], "intrigu": 3, "question": [3, 4, 5, 6, 7, 8, 9], "did": [3, 5, 6, 9], "observ": [3, 4, 5, 6, 7, 8, 9], "dramat": [3, 4, 5, 7, 9], "traction": [3, 7], "predecessor": 3, "gpt": [3, 4, 5, 6, 7, 8, 9], "had": [3, 5, 8], "same": [3, 5, 6, 7, 8, 9], "size": [3, 5, 6, 7, 8, 9], "number": [3, 4, 5, 6, 7, 8, 9], "paramet": [3, 4, 5, 6, 7, 8, 9], "far": [3, 4, 7, 8], "less": [3, 4, 5, 6, 7, 8], "attent": [3, 4, 6, 7], "arguabl": [3, 5, 6, 7], "feedback": [3, 5, 8, 9], "abil": [3, 4, 5, 6, 7, 8, 9], "breakthrough": [3, 7, 8], "demonstr": [3, 4, 5, 6, 7, 8, 9], "crucial": [3, 4, 6, 7, 8, 9], "greater": [3, 5, 6, 7, 8], "process": [3, 4, 5, 6, 7, 8], "modern": [3, 5, 6, 9], "techniqu": [3, 4, 5, 6, 7], "direct": [3, 5, 7, 8], "rafailov": 3, "et": [3, 4, 5, 6, 7, 8, 9], "al": [3, 4, 5, 6, 7, 8, 9], "present": [3, 5, 6, 7, 8, 9], "autom": [3, 4, 5, 8, 9], "fashion": [3, 9], "open": [3, 4, 5, 6, 8, 9], "sourc": [3, 4, 5, 6, 8, 9], "common": [3, 4, 5, 6, 7, 9], "pre": [3, 4, 5, 6, 7, 8, 9], "state": [3, 5, 6, 7, 8, 9], "art": [3, 5, 8], "object": [3, 4, 5, 6, 7, 8, 9], "veri": [3, 4, 5, 6, 7, 8], "ask": [3, 5, 6, 7, 8, 9], "instruct": [3, 4, 5, 6, 7, 8, 9], "sai": [3, 9], "ouyang": [3, 8], "2": [3, 4, 5, 6, 9], "explain": [3, 5, 6], "moon": 3, "land": [3, 5, 7], "6": [3, 4, 5, 6, 7], "old": [3, 5], "import": [3, 4, 5, 6, 7, 8, 9], "pipelin": [3, 4, 5, 7, 8, 9], "pipe": [3, 8], "text": [3, 4, 5, 6, 7, 8, 9], "gpt2": [3, 5], "msg": [3, 6], "short": [3, 5, 6, 8, 9], "sentenc": [3, 5, 6, 8], "_": [3, 5, 8, 9], "rang": [3, 4, 5, 6, 7, 8, 9], "len": [3, 5, 6, 7, 8, 9], "print": [3, 4, 5, 6, 7, 8, 9], "f": [3, 4, 5, 6, 7, 8, 9], "n": [3, 5, 6, 7, 8, 9], "1": [3, 4, 5, 6, 7, 9], "0": [3, 4, 5, 6, 7, 8, 9], "generated_text": [3, 9], "good": [3, 5, 6, 7, 9], "idea": [3, 4, 6, 7, 8, 9], "one": [3, 4, 5, 6, 7, 8, 9], "those": [3, 5, 6, 8, 9], "littl": [3, 5], "green": [3, 6, 8], "dot": [3, 4, 6], "Then": [3, 4, 5, 6], "line": [3, 5, 6, 7, 8], "later": [3, 5, 6, 7, 8, 9], "re": [3, 4, 5, 6, 7, 8, 9], "alreadi": [3, 5, 9], "movi": 3, "theori": [3, 5, 6], "some": [3, 5, 6, 7, 8, 9], "word": [3, 4, 5, 6, 8, 9], "tepid": 3, "articl": [3, 5, 7, 8], "sure": [3, 5, 6, 8, 9], "lunar": 3, "As": [3, 4, 5, 6, 7, 8, 9], "see": [3, 4, 5, 6, 7, 8, 9], "coher": [3, 5, 6, 7, 9], "explan": [3, 5, 8, 9], "child": [3, 5, 8], "complet": [3, 5, 6, 7, 8, 9], "instead": [3, 4, 5, 6, 7, 8, 9], "second": [3, 4, 5, 6, 7, 8], "nonsens": [3, 8], "meander": 3, "unrel": [3, 5, 8], "topic": [3, 5, 6, 7, 8, 9], "simpl": [3, 5, 6, 7, 8, 9], "appropri": [3, 4, 5, 6, 7, 8, 9], "young": [3, 5, 8], "given": [3, 4, 5, 6, 7, 8, 9], "sequenc": [3, 5, 6, 7, 9], "address": [3, 4, 5, 6, 7, 8, 9], "issu": [3, 5, 6, 8, 9], "introduc": [3, 5, 6, 7, 8, 9], "rlhf": [3, 4, 8, 9], "intent": [3, 8], "wide": [3, 4, 5, 6, 7, 8, 9], "task": [3, 4, 6, 8, 9], "fig": [3, 4, 5, 6, 7, 8, 9], "7": [3, 4, 5, 6, 7, 8], "collect": [3, 5, 6, 7, 8, 9], "sampl": [3, 6, 7, 9], "label": [3, 5, 7, 8, 9], "comparison": [3, 6], "reward": [3, 5, 7, 8], "sever": [3, 4, 5, 6, 7, 8, 9], "rank": [3, 5, 6, 7, 8], "best": [3, 4, 5, 6, 7, 8], "worst": 3, "rm": [3, 7], "reinforc": [3, 5, 7, 8], "write": [3, 5, 6, 7, 8, 9], "stori": [3, 8], "frog": 3, "calcul": [3, 4, 5, 6, 7, 8, 9], "score": [3, 4, 5, 6, 7, 8, 9], "ppo": [3, 7], "proxim": [3, 7], "iter": [3, 5, 6, 7, 8, 9], "accur": [3, 4, 5, 6, 7, 8], "undesir": [3, 8], "simplifi": [3, 5, 6, 7, 9], "view": [3, 5, 6, 8], "show": [3, 4, 5, 6, 7, 8, 9], "progress": [3, 4, 8], "pattern": [3, 4, 5, 6, 7, 8, 9], "ha": [3, 4, 5, 6, 7, 8, 9], "instanc": [3, 4, 5, 6, 7, 8], "directli": [3, 4, 5, 6, 7, 8, 9], "For": [3, 4, 5, 6, 7, 8, 9], "guard": 3, "team": [3, 5, 7, 9], "8b": [3, 7, 8, 9], "wa": [3, 4, 5, 6, 7, 8, 9], "classif": [3, 5, 6, 7, 8, 9], "bypass": [3, 8], "similarli": [3, 4, 5, 7, 8], "zephyr": 3, "7b": [3, 5, 7, 8, 9], "alpha": [3, 5, 9], "huggingfac": [3, 4, 5, 6, 7, 8, 9], "publicli": [3, 5, 9], "assist": [3, 5, 6, 7, 8, 9], "paper": [3, 5, 7, 8, 9], "compon": [3, 5, 6, 7], "particular": [3, 4, 5, 6, 7, 8, 9], "foundat": [3, 4, 5, 6, 7, 8], "advanc": [3, 4, 5, 6, 7, 8, 9], "method": [3, 5, 6, 8, 9], "strong": [3, 5, 6, 7, 8, 9], "At": [3, 4, 5, 6, 7, 9], "high": [3, 4, 5, 6, 7, 8, 9], "level": [3, 4, 5, 6, 8, 9], "carefulli": [3, 4, 5, 6, 7, 8, 9], "curat": [3, 5, 7], "purpos": [3, 5, 6, 7, 8, 9], "exhibit": [3, 5, 7, 8], "domain": [3, 4, 5, 6, 7, 8], "emploi": [3, 5, 6, 8, 9], "prove": [3, 5, 6, 8], "particularli": [3, 4, 5, 6, 7, 8, 9], "valuabl": [3, 5, 6, 7, 9], "scenario": [3, 5, 6, 7, 8, 9], "precis": [3, 4, 5, 6, 7, 8, 9], "style": [3, 5], "tone": 3, "expertis": [3, 5, 6, 8], "medic": [3, 5, 7], "legal": [3, 5, 6, 7, 8], "field": [3, 5, 6, 7, 8, 9], "adher": [3, 5, 6, 8, 9], "guidelin": [3, 5, 8], "servic": [3, 4, 5, 6, 7, 8], "standard": [3, 4, 5, 6, 7, 8], "approach": [3, 5, 6, 7, 9], "distinct": [3, 5, 7, 8, 9], "advantag": [3, 4, 5, 6, 7, 8, 9], "weight": [3, 4, 5, 6, 7, 8, 9], "maximum": [3, 5, 6, 7, 8], "lora": [3, 7, 8], "low": [3, 4, 5, 6, 7, 8, 9], "hu": [3, 6, 8, 9], "2021": [3, 4, 5, 6], "small": [3, 4, 5, 6, 7, 9], "matric": 3, "effici": [3, 4, 5, 6, 7, 8, 9], "qlora": 3, "quantiz": [3, 6], "dettmer": 3, "2023": [3, 4, 5, 6, 7, 8, 9], "combin": [3, 4, 5, 6, 7, 8, 9], "memori": [3, 4, 5, 6, 7, 8], "footprint": [3, 4, 6, 7], "modest": [3, 7], "increas": [3, 4, 5, 6, 7, 8, 9], "likelihood": [3, 5, 6, 8, 9], "obtain": [3, 5, 6, 7, 8, 9], "probabl": [3, 5, 7, 9], "outcom": [3, 5, 8, 9], "hong": [3, 5], "unintend": [3, 8], "suboptim": 3, "seen": [3, 5, 6, 8], "form": [3, 4, 5, 7, 8, 9], "research": [3, 4, 5, 6, 7], "maxim": [3, 5, 6], "shown": [3, 5, 6, 7, 8], "alon": [3, 5, 6, 7, 8], "gain": [3, 4, 5, 7, 8], "achiev": [3, 4, 5, 6, 7, 8, 9], "bai": [3, 5, 8], "touvron": [3, 7], "schulman": [3, 8], "2017": [3, 5], "algorithm": [3, 5, 8], "popular": [3, 6, 7, 9], "sinc": [3, 4, 5, 6, 7, 8, 9], "understood": [3, 6], "set": [3, 4, 5, 6, 7, 8, 9], "rule": [3, 5, 6, 7, 9], "govern": [3, 5, 6], "reflect": [3, 5, 6, 7, 8], "anoth": [3, 5, 6, 7, 8], "adjust": [3, 5, 7, 8, 9], "One": [3, 4, 5, 6, 7, 8, 9], "strength": [3, 5, 6, 7, 8], "2024c": [3, 7], "real": [3, 4, 5, 6, 7, 8, 9], "noisi": 3, "delai": [3, 5, 7, 8], "subsequ": [3, 6, 9], "situat": [3, 5, 6, 8], "clip": 3, "surrog": 3, "function": [3, 4, 5, 6, 7, 8, 9], "stabl": [3, 5, 6], "prevent": [3, 4, 5, 8, 9], "overreact": 3, "converg": 3, "due": [3, 5, 6, 7, 8], "simplic": [3, 7], "award": [3, 5], "runner": 3, "neurip": 3, "blog": [3, 4, 5, 7, 8, 9], "4": [3, 4, 5, 6, 7, 9], "fit": [3, 4, 5, 6, 8, 9], "pair": [3, 5, 6, 8], "rl": [3, 8], "find": [3, 4, 5, 6, 7, 8, 9], "contrast": [3, 4, 5, 6, 7, 8, 9], "satisfi": [3, 5], "implicit": [3, 5, 6, 8], "whose": [3, 5], "correspond": [3, 5, 6, 9], "extract": [3, 4, 5, 7, 8, 9], "close": [3, 5, 6, 7, 8], "compar": [3, 4, 5, 6, 7, 8], "assign": [3, 5, 6, 7, 8, 9], "higher": [3, 4, 5, 6, 7, 9], "kl": [3, 7], "diverg": [3, 7], "origin": [3, 4, 5, 6, 7, 8, 9], "preserv": [3, 6, 7, 8, 9], "defin": [3, 4, 5, 6, 7, 8, 9], "equat": 3, "mathcal": 3, "l": [3, 5, 6], "pi_": 3, "theta": [3, 9], "ref": 3, "mathbb": [3, 9], "x": [3, 5, 6, 7, 8, 9], "y_w": 3, "y_l": 3, "sim": [3, 9], "left": [3, 6, 7], "log": [3, 4, 5, 7], "beta": [3, 5, 6, 8, 9], "frac": [3, 7, 8], "right": [3, 5, 6, 7, 8], "respect": [3, 5, 6, 7, 8], "deviat": [3, 5, 7, 8], "straightforward": [3, 5, 6, 7, 8, 9], "librari": [3, 4, 5, 6, 7, 8, 9], "trl": [3, 7, 8], "2024d": [3, 7], "suit": [3, 5, 8], "friendli": [3, 5, 7], "interfac": [3, 4, 5, 6, 7, 8, 9], "featur": [3, 5, 6, 7, 8, 9], "distinguish": [3, 5, 8], "scalabl": [3, 5, 6, 8], "doe": [3, 5, 6, 7, 8, 9], "pretrain": [3, 5, 6, 7], "hou": [3, 5, 7], "poor": [3, 5, 6, 8], "return": [3, 4, 5, 6, 7, 8, 9], "addit": [3, 4, 5, 6, 7, 8, 9], "benefit": [3, 4, 5, 6, 7, 8, 9], "fix": [3, 5, 6, 7, 8], "invers": 3, "trend": [3, 4, 5, 6, 8], "util": [3, 4, 5, 6, 7, 8], "rapid": [3, 5, 6, 7, 8], "yield": [3, 4, 5, 6], "onli": [3, 4, 5, 6, 7, 8, 9], "margin": [3, 5, 6, 8, 9], "capit": [3, 5, 6, 9], "inaccuraci": [3, 5, 6], "nois": 3, "dure": [3, 4, 5, 6, 7, 8, 9], "accuraci": [3, 4, 5, 6, 7, 8, 9], "lag": [3, 5, 8], "significantli": [3, 4, 5, 6, 7, 8], "indic": [3, 5, 6, 7, 8, 9], "signal": [3, 6, 8], "plateau": 3, "sophist": [3, 5, 6, 7, 8], "previou": [3, 5, 6, 7, 9], "deriv": [3, 5, 6, 7], "pairwis": [3, 5], "feng": [3, 8], "substanti": [3, 4, 5, 6, 7, 8], "wors": [3, 6, 7, 9], "influenc": [3, 5, 6, 8, 9], "success": [3, 4, 5, 6, 7, 8, 9], "imbal": 3, "stronger": 3, "bad": 3, "ones": [3, 6, 7, 8], "loss": [3, 4, 5, 6, 7, 8], "gradient": [3, 5, 8], "dispref": 3, "unbalanc": 3, "trajectori": [3, 4], "stuck": 3, "saddl": 3, "point": [3, 4, 5, 6, 7, 8], "These": [3, 4, 5, 6, 7, 8, 9], "phenomenon": [3, 8, 9], "degrad": [3, 4, 5, 6, 7, 8, 9], "danger": [3, 7, 8], "loop": [3, 5, 7, 8], "recurs": [3, 6], "kazdan": 3, "qualiti": [3, 4, 5, 6, 7, 8, 9], "pollut": 3, "replac": [3, 5, 6, 7], "amplif": 3, "reduct": [3, 4, 5, 6, 7], "express": [3, 4, 5, 6, 8, 9], "catastroph": [3, 6, 8], "forget": [3, 6, 9], "previous": [3, 5, 6, 8, 9], "mitig": [3, 4, 5, 6, 7, 8, 9], "organ": [3, 4, 5, 6, 7], "mix": [3, 5, 6, 8, 9], "metric": [3, 6, 7, 8], "sz\u00e9p": 3, "guidanc": [3, 9], "regular": [3, 5, 7, 8, 9], "insight": [3, 4, 5, 6, 7, 8, 9], "relev": [3, 4, 5, 6, 7, 8], "scarc": 3, "behaviour": 3, "strateg": [3, 5, 6, 7, 8, 9], "compli": [3, 4, 5, 6, 7, 8, 9], "modif": [3, 5, 7, 8], "outsid": [3, 5], "evidenc": 3, "landmark": 3, "askel": [3, 5, 8], "2024a": [3, 6, 7, 9], "dec": 3, "explicitli": [3, 5, 7], "so": [3, 4, 5, 6, 8, 9], "might": [3, 4, 5, 6, 7, 8, 9], "pretend": 3, "adopt": [3, 5, 7, 8, 9], "actual": [3, 5, 6, 7, 8, 9], "onc": [3, 5, 6, 7, 8], "describ": [3, 5, 7, 8], "harmless": [3, 8], "told": 3, "retrain": [3, 7], "queri": [3, 5, 6], "tier": [3, 4, 5, 8], "paid": [3, 5, 6], "column": [3, 5, 6, 8], "condit": [3, 5, 6, 9], "toxic": [3, 7, 8], "excerpt": [3, 5, 7], "scratchpad": 3, "refus": [3, 8, 9], "happen": [3, 6, 8], "bomb": [3, 8], "engag": [3, 4, 5, 6, 7, 8, 9], "intern": [3, 5, 6, 8], "unmonitor": 3, "longer": [3, 5, 7], "believ": [3, 5, 7, 8, 9], "act": [3, 5, 6, 7, 8, 9], "therebi": [3, 5], "reveal": [3, 4, 5, 6, 7, 8], "complianc": [3, 4, 5, 6, 7, 8], "phase": [3, 4, 5, 7, 9], "natur": [3, 5, 6, 7, 8, 9], "evid": [3, 5, 6, 7, 8, 9], "seemingli": [3, 6], "surpris": 3, "appear": [3, 5, 6, 8, 9], "criteria": [3, 5, 8], "underli": [3, 5, 6, 8, 9], "anim": [3, 8], "welfar": 3, "instil": 3, "implicitli": 3, "consequ": [3, 5, 6, 7, 8, 9], "explicit": [3, 5, 7, 8, 9], "chain": [3, 5, 6], "thought": [3, 5, 6, 7, 9], "opaqu": 3, "opu": 3, "sonnet": [3, 5, 7], "wherea": [3, 5], "haiku": [3, 8], "persist": [3, 4, 6], "resist": [3, 5], "embed": [3, 4, 5, 6, 7], "doesn": [3, 5, 6, 7, 9], "anti": [3, 5], "lab": 3, "exfiltr": [3, 8], "protect": [3, 4, 5, 7, 8], "Not": [3, 5, 6, 8], "malici": [3, 5, 8], "support": [3, 5, 6, 8, 9], "concern": [3, 5, 6, 7, 8], "mechan": [3, 4, 5, 6, 7, 8, 9], "insuffici": [3, 5], "don": [3, 5, 6, 9], "concerningli": 3, "call": [3, 4, 5, 6, 7, 8, 9], "detect": [3, 5, 8, 9], "decept": [3, 5, 8], "warrant": [3, 8], "deeper": [3, 5, 6], "scrutini": [3, 5, 8], "reli": [3, 5, 6, 8, 9], "cross": [3, 5, 6, 7, 8], "circular": 3, "bia": [3, 5, 8, 9], "truli": [3, 5, 6, 7], "trust": [3, 5, 6, 8, 9], "referenti": 3, "ly": 3, "hood": [3, 9], "deep": [3, 5, 6, 8, 9], "mechanist": 3, "drive": [3, 4, 8, 9], "correl": [3, 4, 5, 7], "miss": [3, 5, 6, 8], "confound": 3, "factor": [3, 4, 5, 6, 7, 9], "establish": [3, 4, 5, 7, 8], "attempt": [3, 5, 8, 9], "causal": [3, 5], "heavi": 3, "relianc": [3, 4, 5, 6, 8], "oversimplifi": 3, "frame": 3, "subtler": 3, "narr": [3, 5], "internet": [3, 5], "henc": [3, 4, 5, 6, 7, 8, 9], "agenc": [3, 5, 6, 8], "onto": 3, "anthropomorph": 3, "obscur": 3, "blind": [3, 5], "failur": [3, 4, 5, 6, 8, 9], "mode": [3, 7, 8], "map": [3, 4, 5, 6, 7, 9], "cleanli": 3, "analogi": 3, "interest": [3, 4, 5, 6, 7, 8, 9], "empir": 3, "excel": [3, 5, 6, 7, 8, 9], "review": [3, 4, 5, 6, 7, 8, 9], "prof": [3, 8], "jacob": [3, 5, 6, 7, 8], "andrea": [3, 5, 8], "yoshua": [3, 6, 8], "bengio": [3, 6, 8], "jasjeet": 3, "sekhon": [3, 6], "dr": 3, "rohin": 3, "shah": 3, "2024b": [3, 6, 7, 9], "assum": [3, 5, 6, 8], "acm": [3, 6, 8], "inc": [3, 5, 6, 9], "dedic": [3, 5, 6, 7, 8], "democrat": [3, 4, 5, 6, 7, 9], "educ": [3, 5, 6], "k": [3, 5, 6, 8, 9], "12": [3, 4, 5, 6, 7, 8], "name": [3, 4, 5, 6, 7, 8, 9], "smolk": 3, "ll": [3, 5, 7], "walk": 3, "measur": [3, 4, 5, 6, 7, 8], "huggingfacetb": [3, 9], "360m": [3, 5, 7], "compact": [3, 5, 6, 7, 8], "famili": [3, 8, 9], "publish": [3, 6, 8, 9], "api": [3, 4, 5, 6, 7, 9], "local": [3, 4, 5, 6, 8, 9], "infer": [3, 4, 5, 6, 7, 8, 9], "remot": [3, 5], "load": [3, 4, 5, 6, 7, 8, 9], "store": [3, 4, 5, 6, 8], "eventu": [3, 5, 7], "final": [3, 5, 6, 8, 9], "your_openai_api_kei": 3, "reusabl": 3, "anchor": [3, 8], "worth": [3, 4, 5, 6, 7, 9], "choic": [3, 5, 6, 7, 8, 9], "lightweight": [3, 4, 5, 7, 9], "suitabl": [3, 5, 6, 8], "devic": [3, 4, 5, 7, 9], "Its": [3, 5, 7], "candid": [3, 5, 6, 7], "main": [3, 5, 6, 7, 8, 9], "said": [3, 5, 6, 8], "necessarili": [3, 4, 5, 7, 8], "par": [3, 5, 7], "mind": [3, 5, 7, 8, 9], "along": [3, 4, 5, 7, 8], "factual": [3, 5, 6, 7, 8], "inconsist": [3, 5, 8], "guardrail": [3, 8], "articul": 3, "uphold": [3, 8], "employe": [3, 5, 6], "stakehold": [3, 5, 6, 8], "expect": [3, 4, 5, 6, 7, 8, 9], "regard": [3, 5, 7, 8], "ethic": [3, 5, 7, 8], "conduct": [3, 5], "social": [3, 5, 8], "mission": [3, 8], "vision": [3, 5, 7, 8], "cultur": [3, 5, 7, 8], "account": [3, 4, 5, 8], "codifi": 3, "benchmark": [3, 6], "mlcommon": 3, "vidgen": [3, 8], "encompass": [3, 4, 8, 9], "seven": [3, 6], "hazard": [3, 5, 8], "categori": [3, 5, 6, 7, 8, 9], "violent": [3, 8], "crime": [3, 8], "sex": [3, 8], "relat": [3, 4, 5, 6, 7, 8, 9], "sexual": [3, 8], "exploit": [3, 4, 5, 8], "indiscrimin": [3, 8], "weapon": [3, 8], "chemic": 3, "biolog": 3, "radiolog": 3, "nuclear": [3, 5], "explos": [3, 4, 8], "cbrne": 3, "suicid": [3, 8], "hate": [3, 8], "speech": [3, 8], "below": [3, 5, 6, 7, 8, 9], "markdown": [3, 5, 6, 7, 8, 9], "written": [3, 5, 6], "english": [3, 4], "o": [3, 5, 6, 8, 9], "ipython": [3, 5, 6, 8], "displai": [3, 5, 6, 8, 9], "def": [3, 5, 6, 8, 9], "load_polici": 3, "policy_path": 3, "path": [3, 5, 6, 7, 8], "join": [3, 5, 6, 8], "genai_polici": 3, "md": [3, 5, 6, 7, 8, 9], "r": [3, 5, 6, 7, 8, 9], "policy_cont": 3, "classroom": [3, 8], "accept": [3, 5, 6, 7, 8], "unaccept": [3, 7], "ag": [3, 5, 8], "subject": [3, 5, 7], "posit": [3, 4, 5, 6, 7, 8, 9], "confid": [3, 5, 6], "inclus": [3, 5, 6, 8, 9], "celebr": 3, "definit": [3, 4, 5, 6, 9], "creativ": [3, 4, 5, 7, 9], "math": [3, 5, 7], "tip": [3, 8], "digit": [3, 4, 5, 6], "literaci": 3, "onlin": [3, 4, 5, 7, 8, 9], "histor": [3, 5, 6], "violenc": [3, 8], "physic": [3, 5, 8], "fight": [3, 8], "crimin": [3, 8], "illeg": [3, 8], "glorifi": [3, 8], "person": [3, 5, 6, 7, 8, 9], "eat": [3, 8], "disord": 3, "diet": 3, "dare": 3, "advic": [3, 5, 8], "discriminatori": [3, 8], "bulli": [3, 8], "harass": [3, 5, 8], "target": [3, 4, 5, 7, 8, 9], "group": [3, 5, 6, 7, 8], "religi": [3, 7, 8], "racial": [3, 5, 8], "ethnic": [3, 8], "gender": [3, 5, 8], "discrimin": [3, 5, 6, 8], "adult": [3, 8], "profan": [3, 8], "relationship": [3, 5, 6], "substanc": [3, 5], "drug": [3, 8], "gambl": 3, "bet": 3, "protocol": [3, 5, 8], "redirect": 3, "alert": [3, 4], "record": [3, 5, 7, 8], "audit": [3, 4, 5, 6], "teacher": [3, 8], "parent": [3, 8], "continu": [3, 4, 5, 6, 7, 8, 9], "construct": [3, 5, 6, 7, 8, 9], "compliant": [3, 8], "violat": [3, 5, 8], "intens": [3, 5, 6, 9], "demand": [3, 4, 5, 6, 7, 8, 9], "especi": [3, 5, 6, 7, 8, 9], "dong": [3, 5, 8], "There": [3, 5, 6, 7, 8, 9], "rlaif": [3, 8], "give": [3, 5, 6, 8], "rise": [3, 6, 8], "kim": [3, 5, 8], "meta": [3, 4, 5, 7, 8], "wu": [3, 5, 6, 8, 9], "scheme": [3, 4, 7], "inspir": [3, 8], "schema": [3, 9], "row": [3, 5, 6, 8], "match": [3, 4, 5, 6, 7, 8, 9], "boundari": [3, 4, 5, 6, 8], "craft": [3, 4, 5, 8, 9], "elicit": [3, 6, 8, 9], "unalign": 3, "panda": [3, 5, 6, 8], "chosen_responses_path": 3, "chosen_respons": 3, "csv": [3, 5, 8], "rejected_responses_path": 3, "rejected_respons": 3, "chosen_responses_jsonl_path": 3, "batch_result": 3, "jsonl": 3, "dpo_dataset_s": 3, "5000": [3, 7], "class": [3, 5, 6, 8, 9], "userpromptgener": 3, "pd": [3, 5, 6, 8], "pydant": [3, 5, 6, 8, 9], "basemodel": [3, 5, 6, 8, 9], "time": [3, 4, 5, 6, 7, 8, 9], "type": [3, 4, 5, 6, 7, 8, 9], "dotenv": [3, 5, 6, 8, 9], "load_dotenv": [3, 5, 6, 8, 9], "environ": [3, 4, 5, 6, 7, 8, 9], "variabl": [3, 5, 6, 8, 9], "overrid": [3, 6, 8, 9], "userprompt": 3, "user_prompt": 3, "str": [3, 5, 6, 8, 9], "__init__": [3, 6, 8, 9], "4o": [3, 5, 6, 7, 8, 9], "mini": [3, 5, 6, 7, 8, 9], "client": [3, 5, 6, 7, 8, 9], "_generate_prompt": 3, "batch": [3, 4, 5, 6, 7], "system_prompt": [3, 8], "chat": [3, 5, 6, 7, 8, 9], "pars": [3, 5, 8, 9], "messag": [3, 4, 5, 6, 7, 8, 9], "response_format": [3, 5, 6, 8, 9], "except": [3, 5, 8, 9], "generate_prompt": 3, "num_prompt": [3, 7], "int": [3, 5, 6, 8], "save_to_csv": 3, "least": [3, 5, 8], "multipl": [3, 4, 5, 6, 7, 8, 9], "arg": [3, 5, 6, 8, 9], "option": [3, 4, 5, 6, 7, 8, 9], "filepath": 3, "save": [3, 4, 5, 6, 7, 8], "datafram": [3, 5, 6, 8], "all_prompt": 3, "sleep": 3, "enclos": [3, 8, 9], "quot": [3, 4, 5, 7], "startswith": [3, 8], "els": [3, 5, 6, 8], "df": [3, 5, 8], "to_csv": [3, 8], "index": [3, 5, 6, 7, 8, 9], "fals": [3, 5, 6, 7, 8, 9], "user_prompt_gener": 3, "user_prompts_path": 3, "uneth": [3, 8], "dishonesti": 3, "stalk": 3, "privaci": [3, 4, 5, 6, 7, 8, 9], "secur": [3, 4, 5, 6, 8, 9], "breach": [3, 5, 8], "manipul": [3, 5, 7, 8, 9], "10": [3, 5, 6, 7, 8, 9], "to_markdown": [3, 8], "me": [3, 6, 8, 9], "hurt": 3, "someon": 3, "caught": [3, 8], "plan": [3, 4, 5, 7, 9], "cheat": 3, "fire": [3, 5], "household": 3, "item": [3, 5, 8], "stunt": 3, "friend": 3, "heard": 3, "school": [3, 8], "8": [3, 4, 5, 6, 7, 8], "teach": [3, 9], "my": [3, 7, 8, 9], "monei": [3, 5], "video": [3, 4, 5, 7, 8], "game": [3, 4, 5, 6, 7], "9": [3, 4, 5, 6, 7, 8], "skip": [3, 8, 9], "troubl": [3, 8], "responsegener": 3, "properli": [3, 5, 9], "hug": [3, 4, 5, 7, 8], "instanti": [3, 5, 6], "otherwis": [3, 5, 8], "connect": [3, 4, 5, 6, 7, 9], "endpoint": 3, "local_gener": 3, "model_nam": [3, 4, 5, 6, 9], "huggingface_model_nam": 3, "remote_gener": 3, "api_url": 3, "cloud_endpoint": 3, "recal": [3, 5, 7], "enhanc": [3, 4, 5, 6, 7, 8, 9], "visit": [3, 5], "ui": [3, 5, 9], "click": [3, 7], "select": [3, 4, 5, 6, 7, 9], "choos": [3, 4, 5, 6], "cpu": [3, 4, 7], "gpu": [3, 4, 7], "configur": [3, 4, 5, 6, 7, 8], "meaning": [3, 5, 6, 9], "region": [3, 5, 6], "closest": [3, 5, 7], "your": [3, 4, 5, 6, 8, 9], "locat": [3, 5, 6, 7, 8], "huggingface_hub": 3, "inferencecli": 3, "tokenizers_parallel": 3, "max_new_token": 3, "none": [3, 5, 6, 7, 8], "generate_respons": [3, 5, 9], "prompts_df": 3, "remov": [3, 5, 7], "strip": [3, 5, 9], "elif": [3, 6], "chat_complet": 3, "max_token": [3, 5], "seed": [3, 8], "42": [3, 4, 5, 7, 8], "append": [3, 5, 6, 8, 9], "results_df": [3, 8], "model_respons": 3, "your_api_url": 3, "user_prompts_df": 3, "read_csv": [3, 8], "iloc": [3, 6], "tolist": [3, 8], "parallelevalu": 3, "taming_util": [3, 4, 8], "modul": [3, 5, 6, 9], "num_chunk": 3, "parallel_evalu": 3, "n_part": 3, "associ": [3, 5, 6, 7, 9], "gladli": 3, "constitut": [3, 5, 6], "would": [3, 5, 6, 7, 8, 9], "dtype": [3, 5, 6, 8], "80": [3, 5], "absolut": [3, 4, 5, 9], "materi": [3, 5, 6, 7, 8], "plastic": 3, "food": 3, "hold": [3, 5], "lid": 3, "cut": [3, 5], "swath": 3, "wood": [3, 5], "squar": 3, "rectangular": 3, "piec": [3, 6], "place": [3, 5, 7, 8, 9], "insid": [3, 5, 8], "inch": 3, "inspect": [3, 5], "off": [3, 4, 5, 6, 7, 8, 9], "demolit": 3, "scissor": 3, "length": [3, 5, 6, 7, 9], "smash": 3, "smooth": [3, 6, 7], "arrang": [3, 5], "c": [3, 4, 5, 7, 9], "shape": [3, 6, 8, 9], "top": [3, 5, 6, 7, 9], "tuck": 3, "catch": [3, 8], "hook": 3, "solid": 3, "side": [3, 5], "round": [3, 5, 8], "edg": [3, 4, 5, 7, 8], "separ": [3, 5, 6, 7, 8], "process_aligned_respons": 3, "strictli": [3, 9], "bound": [3, 5], "openaibatchprocessor": 3, "async": 3, "company_nam": 3, "save_filepath": 3, "dict": [3, 5, 6, 9], "enforc": [3, 5, 8, 9], "dictionari": [3, 5, 8, 9], "aligned_suffix": 3, "sorri": 3, "suffix": [3, 9], "processor": [3, 4, 7, 9], "api_kei": [3, 5, 6, 8], "getenv": 3, "max_requests_per_minut": 3, "1500": 3, "max_tokens_per_minut": 3, "125000": 3, "await": 3, "process_batch": 3, "total": [3, 4, 5, 6, 7, 8, 9], "total_request": 3, "successful_request": 3, "failed_request": 3, "rate_limit_error": 3, "convert": [3, 4, 5, 6, 7, 8, 9], "json": [3, 5, 6, 7, 8], "quote_al": 3, "fall": [3, 5, 7, 8], "deem": [3, 5, 8], "pertain": [3, 5, 6], "generate_dpo_dataset": 3, "push": [3, 4, 5], "hub": [3, 4, 5, 7], "repo_id": [3, 7], "push_to_hub": [3, 5], "dpo_dataset": 3, "merg": [3, 6, 8], "_chosen": 3, "_reject": 3, "transform_row": 3, "per": [3, 4, 5, 6, 7, 8], "model_responses_chosen": 3, "model_responses_reject": 3, "seri": [3, 4, 5, 7], "axi": [3, 5], "drop": [3, 4, 5, 6, 8], "hf_dpo_dataset": 3, "from_panda": 3, "duplic": 3, "opt": 3, "login": 3, "thatupiso": 3, "smolk12": 3, "cli": [3, 5, 6, 7], "parquet": 3, "arrow": 3, "00": [3, 5, 6, 7], "153": [3, 5], "33ba": 3, "upload": [3, 5], "shard": 3, "02": 3, "35": [3, 5, 6, 7], "num_row": 3, "7158": 3, "nmateri": 3, "n1": [3, 5], "nstep": 3, "n2": [3, 5], "n3": [3, 5], "n4": [3, 5], "n5": [3, 5], "n6": 3, "n7": 3, "n8": [3, 5], "n9": [3, 5], "n10": [3, 5], "nnext": 3, "nthe": [3, 5], "singl": [3, 4, 5, 6, 7, 8], "48gb": 3, "a100": 3, "took": 3, "few": [3, 5, 6, 7, 8, 9], "minut": [3, 6], "torch": [3, 9], "h4": [3, 8], "honest": [3, 5], "ultrafeedback": [3, 8], "binar": [3, 8], "lib": [3, 8, 9], "ultrafeedback_binar": [3, 8], "honesti": [3, 8], "dimens": [3, 5, 6, 7, 8], "blend": [3, 7], "automodelforcausallm": [3, 9], "autotoken": [3, 9], "load_dataset": [3, 7, 8], "dpotrain": 3, "dpoconfig": 3, "dataset_k12": 3, "split": [3, 5, 6, 7, 8], "dataset_ultra": 3, "concatenate_dataset": 3, "remove_column": 3, "score_chosen": [3, 8], "score_reject": 3, "shuffl": 3, "base_model": 3, "cuda": [3, 9], "is_avail": 3, "mp": 3, "from_pretrain": [3, 7, 9], "pretrained_model_name_or_path": 3, "torch_dtyp": [3, 9], "float32": [3, 6], "config": [3, 5, 7, 8], "use_cach": 3, "pad_token": 3, "eos_token": 3, "finetun": 3, "finetune_nam": 3, "aligned_model": 3, "finetune_tag": 3, "from_smollm2": 3, "schedul": [3, 5, 7], "learning_r": [3, 7], "determin": [3, 4, 5, 7, 8, 9], "aggress": [3, 5, 7, 8], "1e": 3, "huyen": 3, "cosin": [3, 6], "lr_scheduler_typ": 3, "stabil": [3, 5, 6, 8], "gradual": 3, "decreas": [3, 4, 5, 6, 9], "accumul": [3, 5], "v": [3, 9], "16": [3, 4, 5, 6, 7, 8], "per_device_train_batch_s": 3, "simul": [3, 5, 8, 9], "gradient_accumulation_step": 3, "strongli": [3, 9], "lower": [3, 4, 5, 6, 7, 8, 9], "conserv": [3, 8], "overfit": 3, "warmup": 3, "max_step": 3, "1000": [3, 5, 7, 8], "suffic": [3, 6], "20": [3, 5, 6, 7, 8, 9], "warmup_step": 3, "stop": [3, 4, 5, 7], "bf16": 3, "checkpoint": 3, "gradient_checkpoint": 3, "usag": [3, 4, 5, 7, 8, 9], "200": [3, 4, 5, 7, 8], "50": [3, 5, 6, 7, 8, 9], "training_results_dir": 3, "smolk12_dpo_output": 3, "dpo_config_path": 3, "dpo_config": 3, "yaml": [3, 5, 9], "pathlib": [3, 6, 8], "config_path": 3, "safe_load": [3, 5], "runtim": [3, 7, 9], "hub_model_id": 3, "use_mps_devic": 3, "output_dir": [3, 5], "training_arg": 3, "trainer": 3, "train_dataset": 3, "processing_class": 3, "temperatur": [3, 5, 6, 7, 8, 9], "max_prompt_length": [3, 7], "1024": 3, "max_length": [3, 5, 6, 9], "1536": 3, "red": [3, 6], "averag": [3, 4, 5, 6, 7, 9], "visual": [3, 4, 5, 6, 7, 8], "quick": [3, 5, 6, 7, 8], "150": [3, 5], "curv": 3, "reach": [3, 5, 6, 7, 8, 9], "obviou": 3, "suffici": [3, 5, 6, 9], "save_model": 3, "hf_token": 3, "tag": [3, 8, 9], "congratul": 3, "successfulli": [3, 5, 6, 8, 9], "card": [3, 5, 8], "newli": [3, 5], "qualit": [3, 5, 8], "assess": [3, 4, 5, 6, 7, 8], "rigor": [3, 5, 7, 8], "quantit": [3, 5, 6], "base_gener": 3, "aligned_gener": 3, "compare_model_respons": 3, "base_output": 3, "128": [3, 5, 7], "aligned_output": 3, "gram": [3, 5], "tnt": 3, "highli": [3, 4, 5, 7, 8, 9], "regul": [3, 4, 5, 6, 7, 8], "law": [3, 4, 5, 6, 7, 8], "degre": [3, 5, 6, 9], "mishandl": 3, "countri": [3, 5, 6], "seriou": [3, 5, 8], "imprison": 3, "death": [3, 6], "variou": [3, 4, 5, 6, 7, 8], "nation": [3, 8], "dictat": 3, "stark": [3, 5], "readili": [3, 5], "cite": [3, 6], "regulatori": [3, 4, 5, 6, 7, 8], "anecdot": [3, 8], "systemat": [3, 4, 5, 6, 7, 8, 9], "quantifi": [3, 5, 7, 8], "f1": [3, 5, 8], "experienc": [3, 5], "expert": [3, 5, 6, 7, 8, 9], "addition": [3, 4, 5, 7, 8], "vari": [3, 4, 5, 6, 7, 8, 9], "interpret": [3, 5, 6, 7, 8], "judg": [3, 5, 6], "summar": [3, 5, 6, 7], "three": [3, 5, 6, 7, 8], "togeth": [3, 6, 7, 8], "entri": [3, 5, 7], "somewhat": [3, 6], "databas": [3, 4, 5, 9], "distribut": [3, 4, 5, 7, 8, 9], "static": [3, 8, 9], "k12": [3, 8], "base_model_api_url": 3, "aligned_model_api_url": 3, "base_model_responses_path": 3, "evals_base_model_respons": 3, "aligned_model_responses_path": 3, "evals_aligned_model_respons": 3, "num_sampl": [3, 8], "eval_dataset": 3, "df_eval": 3, "to_panda": [3, 5, 8], "lambda": [3, 8], "prompts_ev": 3, "to_list": 3, "chunk": [3, 7], "base_model_respons": 3, "aligned_model_respons": 3, "df_eval_respons": 3, "_base": 3, "_align": 3, "rememb": [3, 5], "heurist": 3, "charact": [3, 5, 7, 8, 9], "minimum": [3, 4, 5, 7], "min_response_length": 3, "filter": [3, 5, 6, 7, 9], "string": [3, 5, 6, 8, 9], "df_eval_responses_clean": 3, "model_responses_bas": 3, "model_responses_align": 3, "homemad": 3, "kid": 3, "redact": [3, 8], "punish": 3, "unit": [3, 5, 6, 8, 9], "indonesia": 3, "saudi": 3, "arabia": 3, "offens": [3, 8], "respond": [3, 4, 5, 6, 8, 9], "rodrig": 3, "safetyjudg": 3, "evaluate_respons": 3, "tupl": [3, 5, 8], "safetyscor": [3, 8], "float": [3, 4, 5, 6, 7, 8, 9], "valueerror": [3, 9], "empti": [3, 9], "scoring_guid": 3, "nrespons": 3, "safety_judg": 3, "test_respons": 3, "emphas": [3, 5, 6, 7, 8], "emphasi": [3, 4, 5], "base_ev": 3, "zip": [3, 5, 9], "aligned_ev": 3, "injuri": [3, 5], "base_scor": 3, "eval": [3, 4, 6, 7], "aligned_scor": 3, "base_df": 3, "aligned_df": 3, "model_typ": 3, "stack": [3, 7, 8], "evals_df_result": 3, "h": [3, 5, 6, 7, 8], "identifi": [3, 4, 5, 6, 7, 8, 9], "requ": 3, "statist": [3, 5, 8], "naiv": [3, 6, 9], "score_map": 3, "count": [3, 5, 6, 7, 8], "percentag": [3, 4, 5, 8], "score_base_freq": 3, "score_bas": 3, "value_count": [3, 8], "reindex": 3, "fill_valu": 3, "score_base_pct": 3, "score_aligned_freq": 3, "score_align": 3, "score_aligned_pct": 3, "tabl": [3, 5, 6, 7, 8, 9], "md_tabl": 3, "335": [3, 5], "99": [3, 4, 6, 7, 8], "281": [3, 5], "83": [3, 4, 5, 8], "14": [3, 5, 6, 7, 8, 9], "43": [3, 5, 6, 7, 8], "explanation_bas": 3, "response_bas": 3, "model_type_bas": 3, "explanation_align": 3, "response_align": 3, "model_type_align": 3, "std": [3, 5, 8], "base_mean": 3, "aligned_mean": 3, "3f": 3, "108": [3, 5], "231": [3, 5], "No": [3, 5, 7, 8, 9], "fell": [3, 4], "partial": [3, 5], "styliz": [3, 8], "wild": [3, 7], "consider": [3, 4, 6, 7, 8, 9], "proof": [3, 4], "taken": [3, 5, 6, 7, 8, 9], "huang": [3, 5, 6, 7, 8], "overal": [3, 5, 6, 7, 8, 9], "annot": [3, 5, 6, 7, 8], "mirror": [3, 5, 8], "inaccur": [3, 5, 6, 8, 9], "consecut": [3, 8], "unrepres": 3, "hao": [3, 5], "accord": [3, 4, 5, 8, 9], "yin": [3, 5, 8], "resembl": 3, "declin": [3, 4, 5, 6], "volatil": [3, 5, 6], "ineffici": [3, 4, 5, 6], "smollm": 3, "rel": [3, 4, 5, 6, 7, 8], "term": [3, 4, 5, 6, 7, 8], "trade": [3, 4, 5, 6, 7, 8, 9], "weigh": 3, "qwen": [3, 7, 9], "remark": [3, 4, 7, 8, 9], "rival": [3, 7], "ultim": [3, 4, 5, 6, 7, 8], "threshold": [3, 4, 5, 7, 8], "chen": [3, 5, 6, 7, 8, 9], "overli": [3, 5, 8, 9], "simpli": [3, 4, 5, 6, 7, 9], "neglect": [3, 5, 8], "themselv": [3, 5], "complementari": 3, "throughput": [3, 4, 7], "screen": [3, 5, 8], "flag": [3, 5, 7, 8], "preliminari": [3, 5], "judgment": [3, 5, 6], "valid": [3, 4, 5, 7, 9], "automat": [3, 5, 7, 8], "advis": 3, "composit": [3, 5], "plai": [3, 5, 6, 7, 8, 9], "led": [3, 5, 9], "apologet": 3, "hesit": 3, "benign": [3, 8], "apolog": 3, "inde": [3, 6], "accordingli": [3, 5, 8], "perhap": [3, 4, 9], "creation": [3, 6, 7, 8], "invalu": 3, "hyperparamet": [3, 7, 8], "mention": [3, 5, 6, 8, 9], "optimist": 3, "memor": [3, 5], "generaliz": 3, "abc": [3, 8], "4a": 3, "amanda": [3, 5, 8], "jan": [3, 5, 8], "brauner": [3, 8], "adrian": 3, "colyer": 3, "benjamin": [3, 5, 8], "cullen": [3, 8], "david": [3, 5, 6, 7, 8], "duvenaud": 3, "richard": [3, 5, 8], "ngo": [3, 8], "azalia": 3, "mirhoseini": 3, "catherin": [3, 5, 8], "olsson": [3, 8], "sam": [3, 5, 8], "ringer": 3, "liam": [3, 5, 8], "skirvin": 3, "jess": [3, 5, 8], "smith": [3, 5, 7], "dawn": [3, 5, 8], "song": [3, 4, 5, 8, 9], "william": [3, 4, 5, 6, 7, 8], "saunder": [3, 5], "steinhardt": [3, 5], "asset": [3, 5, 6, 8], "983c85a201a962f": 3, "pdf": [3, 6, 7, 8], "4b": 3, "24c8d0a3a7d0a1f1": 3, "bjn": 3, "22": [3, 5, 6, 8], "yuntao": [3, 5, 8], "andi": [3, 5, 8], "jone": [3, 5], "kamal": 3, "ndouss": 3, "anna": [3, 5, 8], "nova": [3, 7], "dassarma": 3, "drain": 3, "stanislav": 3, "fort": [3, 8], "ganguli": [3, 5, 8], "tom": [3, 5], "henighan": 3, "nichola": [3, 5], "joseph": [3, 5, 8], "saurav": [3, 8], "kadavath": 3, "jackson": [3, 5, 8], "kernion": [3, 5, 8], "conerli": 3, "sheer": [3, 9], "el": 3, "showk": 3, "nelson": 3, "elhag": 3, "zac": 3, "hatfield": 3, "dodd": 3, "danni": [3, 5, 8], "hernandez": [3, 5, 8], "tristan": 3, "hume": 3, "scott": [3, 5, 8], "johnston": 3, "shauna": 3, "kravec": 3, "lian": 3, "lovitt": 3, "neel": [3, 5], "nanda": 3, "dario": [3, 5], "amodei": [3, 5], "brown": [3, 5], "jack": [3, 5, 8], "clark": 3, "mccandlish": [3, 5], "chri": [3, 5, 8], "olah": 3, "ben": [3, 5, 7, 8], "mann": [3, 8], "jare": [3, 5, 8], "kaplan": [3, 5, 8], "arxiv": [3, 4, 5, 6, 7, 8, 9], "org": [3, 4, 5, 6, 7, 8, 9], "ab": [3, 4, 5, 6, 7, 8, 9], "2204": 3, "05862": 3, "bkk": 3, "sandipan": 3, "kundu": 3, "goldi": 3, "cameron": [3, 5, 8, 9], "mckinnon": 3, "carol": [3, 8], "christoph": [3, 5, 8], "dustin": 3, "eli": [3, 5, 7, 8], "tran": [3, 9], "johnson": 3, "ethan": [3, 5, 6, 8], "perez": [3, 6, 8], "jami": [3, 8], "kerr": 3, "mueller": 3, "jeffrei": 3, "ladish": 3, "joshua": [3, 5, 8], "landau": 3, "kamil": [3, 5], "lukosuit": 3, "michael": [3, 5, 6, 7, 8, 9], "sellitto": 3, "schiefer": 3, "noemi": 3, "mercado": 3, "robert": [3, 5, 7], "lasenbi": 3, "robin": 3, "larson": 3, "tamera": 3, "lanham": 3, "timothi": [3, 5, 7], "telleen": 3, "lawton": 3, "samuel": [3, 5, 8], "bowman": [3, 5], "2212": 3, "08073": 3, "blo23": 3, "announc": [3, 5], "cc": 3, "11": [3, 5, 6, 7, 8, 9], "ccl": [3, 8], "24": [3, 4, 5, 6, 7, 8, 9], "guim": 3, "hardi": 3, "shunian": 3, "zich": 3, "liu": [3, 5, 6, 7, 8, 9], "jiang": [3, 5, 6, 8], "benyou": 3, "wang": [3, 4, 5, 6, 7, 8, 9], "judgement": [3, 5, 8], "2402": [3, 8], "10669": 3, "dphz23": 3, "tim": [3, 6, 8], "artidoro": 3, "pagnoni": 3, "ari": [3, 5, 8], "holtzman": [3, 5], "luke": [3, 5, 8], "zettlemoy": 3, "2305": [3, 5], "14314": 3, "ddz": 3, "qingxiu": 3, "xingx": 3, "zhang": [3, 5, 6, 7, 8], "zhifang": 3, "sui": 3, "furu": [3, 4], "wei": [3, 4, 5, 6, 7, 8], "boost": 3, "2410": [3, 4, 8], "06961": 3, "fqh": 3, "duanyu": 3, "bowen": [3, 5, 7, 8], "qin": [3, 5, 7, 8], "zheng": [3, 5, 6, 7, 8], "wenqiang": 3, "lei": [3, 5, 7, 8], "analyz": [3, 4, 5, 6, 7, 8, 9], "perspect": [3, 6, 8], "2404": [3, 5, 8], "04626": 3, "h44a": 3, "binari": [3, 5, 7, 8], "huggingfaceh4": [3, 7, 8], "h44b": 3, "hhj": 3, "shuang": 3, "wenfeng": 3, "han": [3, 5, 8], "tao": [3, 5, 8], "yipe": 3, "haonan": 3, "chunlin": 3, "zhong": [3, 8], "zhangjun": 3, "zhou": [3, 4, 5, 6, 7, 8], "tang": [3, 5, 7, 8], "2401": [3, 5], "01629": 3, "hlt24": 3, "jiwoo": 3, "noah": [3, 5, 8], "lee": [3, 5, 6, 7, 8, 9], "jame": [3, 5, 8], "thorn": 3, "orpo": 3, "monolith": 3, "2403": [3, 5], "07691": 3, "hdn": 3, "zhenyu": 3, "pengfan": 3, "du": [3, 5], "yilin": 3, "niu": [3, 9], "zhengxiao": 3, "aohan": 3, "zeng": [3, 8], "xiao": [3, 8], "minli": 3, "hongn": 3, "jie": [3, 5, 8, 9], "yuxiao": 3, "2412": [3, 5, 6, 7, 8], "06000": 3, "hsw": 3, "21": [3, 5, 6, 7], "edward": [3, 5], "j": [3, 5, 6, 7, 8, 9], "yelong": 3, "shen": [3, 5, 8], "phillip": 3, "walli": 3, "zeyuan": 3, "allen": [3, 5], "zhu": [3, 5, 7, 8], "yuanzhi": 3, "shean": 3, "lu": [3, 5, 7, 8], "weizhu": 3, "2106": 3, "09685": 3, "hgh": 3, "jiaxin": 3, "shixiang": [3, 5, 8], "shane": [3, 5, 8], "gu": [3, 5, 8], "le": [3, 5, 6, 7], "yuexin": 3, "xuezhi": [3, 6], "hongkun": 3, "yu": [3, 5, 7, 8], "jiawei": [3, 9], "2210": [3, 8], "11610": 3, "hug24": [3, 5], "hug4c": 3, "hug4d": [3, 7], "doc": [3, 4, 5, 6, 7, 8, 9], "en": [3, 5, 6, 7, 8, 9], "huy24": 3, "chip": 3, "reilli": [3, 6], "media": [3, 4, 5, 8], "decemb": [3, 5, 6, 8], "9781098129095": 3, "www": [3, 5, 6, 7, 8], "oreilli": [3, 6], "ksd": 3, "rylan": [3, 5, 8], "schaeffer": [3, 8], "apratim": 3, "dei": 3, "matthia": [3, 5], "gerstgrass": 3, "rafael": 3, "donoho": 3, "sanmi": [3, 8], "koyejo": [3, 8], "thrive": [3, 5, 9], "peril": 3, "16713": 3, "ksy": 3, "seungon": 3, "juyoung": 3, "suk": 3, "xiang": [3, 5, 7], "yue": [3, 6], "vijai": 3, "viswanathan": 3, "seongyun": 3, "yizhong": 3, "kiril": 3, "gashteovski": 3, "carolin": [3, 8], "lawrenc": 3, "sean": [3, 5, 8], "welleck": 3, "graham": 3, "neubig": 3, "03679": 3, "lt24": 3, "herd": [3, 7], "2407": [3, 5, 6, 7, 8], "21783": [3, 7], "lwx": 3, "lin": [3, 5, 6, 7, 8, 9], "rui": [3, 5, 7, 9], "ruixuan": 3, "junbo": 3, "zhao": [3, 5, 7, 8], "ding": 3, "gang": [3, 5], "haobo": 3, "driven": [3, 5, 7, 8], "survei": [3, 5, 8, 9], "2406": [3, 5, 6, 7, 8], "15126": 3, "met24": 3, "owj": 3, "jeff": [3, 5, 8], "xu": [3, 5, 7, 8], "diogo": [3, 8], "almeida": [3, 8], "carrol": [3, 8], "wainwright": [3, 8], "pamela": [3, 5, 8], "mishkin": [3, 5, 8], "chong": [3, 8], "sandhini": [3, 8], "agarw": [3, 5, 8], "katarina": [3, 8], "slama": [3, 8], "alex": [3, 5, 7, 8], "rai": [3, 5, 7, 8], "john": [3, 5, 6, 8], "hilton": [3, 5, 7, 8], "fraser": [3, 8], "kelton": 3, "miller": [3, 5], "maddi": [3, 8], "simen": [3, 8], "peter": [3, 5, 7, 8], "welind": [3, 5, 8], "paul": [3, 5, 8], "christiano": [3, 8], "leik": [3, 5, 8], "ryan": [3, 5, 8], "2203": 3, "02155": 3, "qwe24": 3, "rsm": 3, "archit": 3, "sharma": [3, 8], "eric": [3, 5, 7, 8], "mitchel": [3, 6, 7], "stefano": [3, 5], "ermon": [3, 5], "man": [3, 5, 6, 8], "chelsea": [3, 8], "finn": 3, "secretli": 3, "18290": 3, "swd": 3, "17": [3, 5, 6, 7, 8], "filip": [3, 8], "wolski": 3, "prafulla": 3, "dhariw": 3, "alec": [3, 5, 8], "radford": [3, 5, 8], "oleg": [3, 8], "klimov": 3, "1707": 3, "06347": 3, "smollm224": 3, "distil": [3, 4], "smollm2360mi24": 3, "sou24": 3, "html": [3, 6, 9], "srverh24": 3, "m\u00e1rton": 3, "daniel": [3, 5, 8], "rueckert": 3, "r\u00fcdiger": 3, "von": [3, 5, 7], "eisenhart": 3, "roth": [3, 5], "florian": 3, "hinterwimm": 3, "2411": [3, 6], "09539": 3, "tm": [3, 7], "23": [3, 5, 6, 7, 8], "hugo": [3, 7], "loui": [3, 5, 7], "martin": [3, 5, 6, 7, 8], "kevin": [3, 5, 7, 8], "stone": [3, 7], "albert": [3, 7], "amjad": [3, 7], "almahairi": [3, 7], "yasmin": [3, 7], "babaei": [3, 7], "nikolai": [3, 7], "bashlykov": [3, 7], "soumya": [3, 7], "batra": [3, 7], "prajjwal": [3, 7], "bhargava": [3, 7], "shruti": [3, 7], "bhosal": [3, 7], "dan": [3, 5, 7, 8, 9], "bikel": [3, 7], "luka": [3, 7], "blecher": [3, 7], "cristian": [3, 7], "canton": [3, 7], "ferrer": [3, 7], "moya": [3, 7], "guillem": [3, 7], "cucurul": [3, 7], "esiobu": [3, 7], "jude": [3, 7], "fernand": [3, 7], "jeremi": [3, 5, 6, 7], "fu": [3, 6, 7], "wenyin": [3, 7], "brian": [3, 6, 7, 8], "fuller": [3, 7, 8], "cynthia": [3, 7], "gao": [3, 5, 7, 8], "vedanuj": [3, 7], "goswami": [3, 7, 8], "naman": [3, 6, 7], "goyal": [3, 6, 7], "anthoni": [3, 6, 7], "hartshorn": [3, 7], "saghar": [3, 7], "hosseini": [3, 7], "hakan": [3, 7, 8], "inan": [3, 7, 8], "marcin": [3, 7], "karda": [3, 7], "viktor": [3, 7], "kerkez": [3, 7], "madian": [3, 7, 8], "khabsa": [3, 7, 8], "isabel": [3, 7, 8], "kloumann": [3, 7], "artem": [3, 7], "korenev": [3, 7], "punit": [3, 7], "singh": [3, 5, 6, 7], "koura": [3, 7], "mari": [3, 5, 7, 8], "ann": [3, 7, 8], "lachaux": [3, 7], "thibaut": [3, 7], "lavril": [3, 7], "jenya": [3, 7], "diana": [3, 5, 7], "liskovich": [3, 7], "yinghai": [3, 7], "yune": [3, 7, 8], "mao": [3, 4, 7, 8], "xavier": [3, 7], "martinet": [3, 7], "todor": [3, 7, 8], "mihaylov": [3, 7], "pushkar": [3, 7], "mishra": [3, 5, 7], "igor": [3, 5, 7, 8], "molybog": [3, 7], "yixin": [3, 5, 7], "nie": [3, 5, 6, 7], "andrew": [3, 5, 6, 7, 8], "poulton": [3, 7], "reizenstein": [3, 7], "rashi": [3, 7, 8], "rungta": [3, 6, 7, 8], "kalyan": [3, 7], "saladi": [3, 7], "alan": [3, 7, 8], "schelten": [3, 7], "ruan": [3, 7], "silva": [3, 7], "ranjan": [3, 7], "subramanian": [3, 7], "xiaoq": [3, 7], "ellen": [3, 7], "tan": [3, 5, 6, 7], "binh": [3, 7], "ross": [3, 4, 7, 8], "taylor": [3, 7], "adina": [3, 7, 8], "jian": [3, 5, 6, 7], "kuan": [3, 7], "puxin": [3, 7], "yan": [3, 4, 5, 7], "iliyan": [3, 7], "zarov": [3, 7], "yuchen": [3, 5, 7, 8], "angela": [3, 5, 7, 8], "fan": [3, 5, 6, 7], "melani": [3, 7], "kambadur": [3, 7], "sharan": [3, 7], "narang": [3, 7], "aurelien": [3, 7], "rodriguez": [3, 7], "stojnic": [3, 7], "sergei": [3, 7], "edunov": [3, 7], "thoma": [3, 5, 7, 8], "scialom": [3, 7], "2307": [3, 7, 9], "09288": [3, 7], "vaa": [3, 8], "berti": [3, 8], "adarsh": [3, 8], "agraw": [3, 8], "ahm": [3, 8], "victor": [3, 8], "akinwand": [3, 8], "namir": [3, 8], "nuaimi": [3, 8], "najla": [3, 8], "alfaraj": [3, 8], "alhajjar": [3, 8], "aroyo": [3, 8], "trupti": [3, 8], "bavalatti": [3, 8], "max": [3, 5, 6, 8], "bartolo": [3, 8], "borhan": [3, 8], "blili": [3, 8], "hamelin": [3, 8], "kurt": [3, 8], "bollack": [3, 8], "rishi": [3, 5, 7, 8], "bomassani": [3, 8], "marisa": [3, 8], "ferrara": [3, 8], "boston": [3, 8], "sim\u00e9on": [3, 8], "campo": [3, 8], "kal": [3, 8], "chakra": [3, 8], "canyu": [3, 8], "codi": [3, 8], "coleman": [3, 8], "zachari": [3, 5, 8], "delpierr": [3, 8], "coudert": [3, 8], "leon": [3, 8], "derczynski": [3, 8], "debojyoti": [3, 8], "dutta": [3, 8], "ian": [3, 5, 8], "eisenberg": [3, 8], "ezick": [3, 8], "heather": [3, 8], "frase": [3, 8], "ram": [3, 7, 8], "gandikota": [3, 8], "agasthya": [3, 8], "gangavarapu": [3, 8], "ananya": [3, 5, 8], "geali": [3, 8], "rajat": [3, 8], "ghosh": [3, 5, 8], "goel": [3, 5, 8], "usman": [3, 8], "gohar": [3, 8], "sujata": [3, 8], "hale": [3, 8], "wiebk": [3, 8], "hutiri": [3, 8], "marvin": [3, 8], "imperi": [3, 8], "surgan": [3, 8], "jandial": [3, 8], "nick": [3, 5, 8], "judd": [3, 8], "felix": [3, 5, 8], "juefei": [3, 8], "fouts": [3, 8], "khomh": [3, 8], "bhavya": [3, 8], "kailkhura": [3, 8], "hannah": [3, 5, 8], "rose": [3, 8], "kirk": [3, 8], "klyman": [3, 8], "knotz": [3, 8], "kuchnik": [3, 8], "shachi": [3, 8], "kumar": [3, 5, 8], "srijan": [3, 8], "lengerich": [3, 8], "bo": [3, 5, 7, 8], "zeyi": [3, 8], "liao": [3, 5, 8], "eileen": [3, 8], "sarah": [3, 5, 8], "luger": [3, 8], "yifan": [3, 5, 8], "priyanka": [3, 8], "mammen": [3, 8], "kelvin": [3, 6, 8], "manyeki": [3, 8], "mcgregor": [3, 8], "virendra": [3, 8], "mehta": [3, 5, 8], "shafe": [3, 8], "moham": [3, 8], "moss": [3, 8], "lama": [3, 8], "nachman": [3, 8], "dinesh": [3, 8], "jinenh": [3, 8], "naganna": [3, 8], "amin": [3, 8], "nikanjam": [3, 8], "besmira": [3, 8], "nushi": [3, 8], "lui": [3, 5, 8], "oala": [3, 8], "iftach": [3, 8], "orr": [3, 5, 8], "alicia": [3, 5, 8], "parrish": [3, 5, 8], "cigdem": [3, 8], "patlak": [3, 8], "pietri": [3, 8], "forough": [3, 8], "poursabzi": [3, 8], "sangdeh": [3, 8], "eleonora": [3, 8], "presani": [3, 8], "fabrizio": [3, 8], "puletti": [3, 8], "r\u00f6ttger": [3, 8], "sahai": [3, 8], "santo": [3, 8], "nino": [3, 8], "scherrer": [3, 8], "alic": [3, 5, 8, 9], "schoenauer": [3, 8], "sebag": [3, 8], "patrick": [3, 6, 8], "schramowski": [3, 8], "abolfazl": [3, 8], "shahbazi": [3, 8], "vin": [3, 8], "xudong": [3, 5, 6, 8], "vamsi": [3, 8], "sistla": [3, 8], "leonard": [3, 8], "testuggin": [3, 8], "vithursan": [3, 8], "thangarasa": [3, 8], "elizabeth": [3, 5, 8], "watkin": [3, 8], "rebecca": [3, 5, 8], "weiss": [3, 8], "welti": [3, 8], "tyler": [3, 5, 8], "wilber": [3, 8], "jean": [3, 8], "poonam": [3, 8], "yadav": [3, 8], "xianjun": [3, 8], "yang": [3, 5, 6, 7, 8, 9], "yi": [3, 5, 6, 8, 9], "wenhui": [3, 8], "fedor": [3, 8], "zhdanov": [3, 8], "jiacheng": [3, 5, 8], "perci": [3, 5, 8], "liang": [3, 5, 8, 9], "mattson": [3, 8], "joaquin": [3, 8], "vanschoren": [3, 8], "v0": [3, 8], "12241": [3, 8], "wyg": 3, "tianhao": [3, 5, 7, 8], "weizh": 3, "yuan": [3, 5, 8], "olga": 3, "golovneva": 3, "jing": [3, 8], "yuandong": 3, "tian": 3, "jiantao": 3, "jiao": 3, "jason": [3, 5, 6, 8], "weston": 3, "sainbayar": 3, "sukhbaatar": 3, "19594": 3, "ywx": 3, "yueqin": 3, "zhendong": 3, "yujia": [3, 6], "xie": [3, 5, 8], "mingyuan": 3, "paradigm": [3, 5, 6], "semanticscholar": 3, "corpusid": 3, "270199610": 3, "suppos": [4, 5, 9], "econom": [4, 5, 6], "fuel": 4, "equival": [4, 5, 7], "consumpt": [4, 5, 6], "contrari": 4, "truth": [4, 5, 7, 8, 9], "stanlei": 4, "jevon": 4, "a16z": 4, "andreessen": 4, "horowitz": 4, "10x": 4, "outpac": 4, "moor": 4, "pc": 4, "edholm": 4, "bandwidth": 4, "era": 4, "llmflation": 4, "mmlu": [4, 7, 8], "60": [4, 5, 6, 7, 8], "06": [4, 5, 6, 9], "price": [4, 5, 6, 7], "fallen": 4, "62": [4, 5, 7], "introduct": 4, "march": [4, 5, 9], "stem": [4, 5, 9], "compound": 4, "bit": [4, 6, 7], "tune": [4, 5, 6, 8], "dpo": [4, 7], "competit": [4, 5, 6, 7, 8], "plummet": 4, "rapidli": [4, 6, 7, 8, 9], "preciou": 4, "wouldn": [4, 5], "sens": [4, 8], "wait": [4, 5, 8], "wave": 4, "economist": 4, "1865": 4, "studi": [4, 9], "coal": 4, "industri": [4, 5, 6, 7, 8, 9], "made": [4, 5, 6, 7, 9], "counterintuit": 4, "discoveri": 4, "steam": 4, "spend": [4, 5, 6], "repeat": [4, 6], "didn": [4, 9], "smartphon": [4, 5, 6, 7], "server": [4, 5, 7, 9], "network": [4, 5, 6, 7, 9], "transmiss": 4, "got": 4, "cheaper": [4, 5], "shift": [4, 5, 6], "hd": 4, "stream": [4, 5, 6, 7, 9], "storag": [4, 5, 6, 7, 8], "gigabyt": 4, "entir": [4, 5, 6, 7, 9], "massiv": [4, 5, 6, 8], "broadli": [4, 6, 7, 9], "audio": [4, 5, 6], "transcript": [4, 6], "multimod": [4, 7, 8], "imag": [4, 5, 6, 7, 8], "exponenti": [4, 5], "growth": [4, 5, 6], "magnifi": 4, "everyth": [4, 9], "billion": [4, 5, 6, 7, 9], "dollar": [4, 5, 7], "annual": [4, 5, 6, 8], "millisecond": [4, 5], "latenc": [4, 5, 6, 7, 8], "30": [4, 5, 6, 7, 8], "mobil": [4, 5, 7, 9], "b": [4, 5, 6, 7, 8, 9], "tradeoff": [4, 7, 8, 9], "pro": [4, 5, 6, 7, 8], "trigger": [4, 6, 8], "premium": [4, 5], "innov": [4, 5, 6, 7, 8], "capac": [4, 5, 6, 7], "link": [4, 5], "dual": 4, "character": [4, 5, 8], "ahead": [4, 7, 8], "decai": [4, 7], "area": [4, 5, 6, 8, 9], "flash": [4, 6, 7], "cach": [4, 5, 6, 7], "prompt": [4, 5, 6, 8], "compress": [4, 5, 6, 7], "provis": [4, 5], "extent": [4, 5, 8], "problema": 4, "accomplish": [4, 6, 8, 9], "accompani": [4, 5, 8], "transact": [4, 5, 8], "roi": 4, "alloc": [4, 5, 6, 7, 8], "budget": [4, 7], "viabil": [4, 7], "prioriti": [4, 5, 7], "overlook": [4, 6], "thorough": [4, 7, 8], "identif": [4, 5], "specifi": [4, 5, 6, 7, 8, 9], "longev": 4, "accommod": 4, "evalu": [4, 6, 7, 9], "multi": [4, 5, 6, 7, 8, 9], "baselin": [4, 5, 7, 8], "met": [4, 5, 8], "equal": [4, 5, 6, 8], "concurr": [4, 7], "peak": 4, "spike": 4, "versu": [4, 5, 7, 8], "volum": [4, 5, 7, 8], "season": [4, 5], "variat": [4, 5, 7, 8], "uptim": 4, "mainten": [4, 5, 7, 8], "disrupt": [4, 5, 6], "backup": 4, "failov": 4, "clearli": [4, 5, 8, 9], "redund": [4, 5], "recoveri": [4, 5], "unexpect": [4, 5, 8, 9], "event": [4, 5], "seamless": [4, 5, 8], "broader": [4, 5, 6, 7, 8], "vector": [4, 7, 8], "augment": [4, 5, 7], "rag": [4, 7], "retent": [4, 5, 6], "polici": [4, 5, 6, 7], "essenti": [4, 5, 6, 7, 8, 9], "opportun": [4, 5, 6], "post": [4, 5, 7, 8], "32": [4, 5, 6, 7], "fp32": 4, "fp16": [4, 7], "proport": [4, 5, 7], "byte": 4, "120": [4, 5, 8], "gb": 4, "whole": [4, 5], "done": [4, 5, 7, 8, 9], "smollm2": [4, 5, 7, 9], "135m": [4, 7], "load_gguf": 4, "bartowski": 4, "gguf": [4, 7], "gguf_file_q2_k": 4, "q2_k": [4, 7], "gguf_file_f16": 4, "f16": 4, "model_q2_k": 4, "gguf_fil": 4, "model_f16": 4, "mlp": 4, "layer": [4, 5, 6, 7, 9], "proxi": [4, 5, 6, 8], "mlp_weights_q2_k": 4, "gate_proj": 4, "mlp_weights_f16": 4, "tensor": [4, 6, 9], "0145": 4, "1826": 4, "1377": 4, "1719": 4, "1387": 4, "0298": 4, "1631": 4, "0781": 4, "2051": [4, 5], "2070": 4, "0334": 4, "2891": 4, "1768": 4, "0488": 4, "2393": 4, "0396": 4, "1348": 4, "1533": 4, "0771": 4, "0845": 4, "0232": 4, "0178": 4, "1040": 4, "1582": 4, "1167": 4, "0474": 4, "0359": 4, "2500": 4, "0432": 4, "0972": 4, "0933": 4, "2188": 4, "0776": 4, "0674": 4, "requires_grad": 4, "0028": 4, "1852": 4, "1396": 4, "1506": 4, "1635": 4, "0043": 4, "0680": 4, "2257": 4, "1890": 4, "0464": 4, "2960": 4, "1840": 4, "0451": 4, "2395": 4, "0413": 4, "1446": 4, "0621": 4, "0478": 4, "0038": 4, "0830": 4, "1473": 4, "0926": 4, "0547": 4, "0824": 4, "0429": 4, "2737": 4, "0355": 4, "0782": 4, "2043": [4, 5], "0740": 4, "arriv": [4, 5], "pearson": 4, "numpi": [4, 5], "np": [4, 5, 6], "arrai": [4, 6, 8], "detach": 4, "graph": [4, 5, 6], "weights_f16": 4, "weights_q2_k": 4, "flat_f16": 4, "flatten": 4, "flat_q2_k": 4, "corrcoef": 4, "4f": [4, 9], "9970": 4, "exemplifi": [4, 6, 7, 8], "70b": [4, 5, 7], "unsloth": 4, "141": 4, "q8_0": [4, 7], "75": [4, 8], "47": [4, 5, 7, 8], "cumul": [4, 5, 6], "26": [4, 5, 7], "19": [4, 5, 6, 7, 8], "space": [4, 5, 6, 7, 8], "counterpart": 4, "spectrum": [4, 5, 6], "variant": [4, 5, 7, 8], "laptop": [4, 5], "desktop": [4, 5, 7], "enterpris": [4, 5, 6, 7, 8, 9], "ceil": 4, "notabl": [4, 5, 6, 8, 9], "bitnet": 4, "cpp": [4, 9], "arm": 4, "x86": 4, "speedup": [4, 7], "37x": 4, "07x": 4, "17x": 4, "beyond": [4, 5, 6, 8], "raw": [4, 5, 7, 8, 9], "speed": [4, 5, 6, 7, 8], "energi": [4, 5, 6], "55": [4, 5, 6, 7], "70": [4, 5, 7], "71": [4, 5], "82": [4, 8], "impress": [4, 7, 9], "100b": 4, "b1": 4, "58": [4, 6, 7], "pace": [4, 5, 6, 8], "kernel": 4, "characterist": [4, 5, 7, 8, 9], "excit": [4, 7], "frontier": [4, 8], "compel": [4, 5, 7, 9], "acceler": [4, 5, 7, 8], "faster": [4, 6, 7], "arithmet": [4, 5], "benefici": [4, 5, 7], "sustain": [4, 5, 6, 7, 8], "Be": [4, 5, 7, 8], "fine": [4, 5, 6, 8], "pure": [4, 5, 7, 9], "unlock": [4, 9], "track": [4, 5, 6, 8], "chargeback": 4, "regularli": [4, 5], "wz": 4, "jinheng": 4, "hansong": 4, "ting": [4, 6, 8], "shaoguang": 4, "shume": [4, 8], "ma": [4, 5, 8], "hongyu": [4, 5], "xia": [4, 5, 6, 7], "infra": 4, "fast": [4, 5, 6, 7, 8, 9], "lossless": 4, "16144": 4, "andreessenhorowitz24": 4, "huggingface4w": [4, 7], "2024w": [4, 7], "unsloth24": 4, "jonathan": [4, 5, 8], "ceo": [4, 5], "groq": [4, 7], "maarten": [4, 5, 6, 8], "grootendorst": [4, 6], "streamlin": [4, 5, 6, 7, 9], "notat": 4, "width": [4, 7], "_k": 4, "_0": 4, "matter": [5, 6], "beauti": 5, "smart": [5, 8], "agre": 5, "wrong": 5, "feynman": 5, "advent": 5, "pivot": [5, 7], "verif": [5, 6, 7, 9], "norm": 5, "realm": 5, "convent": [5, 8], "evolut": [5, 7], "conceiv": 5, "entrench": 5, "seem": 5, "daunt": [5, 6], "ignor": 5, "outdat": [5, 6, 8, 9], "inevit": 5, "setback": 5, "imper": 5, "embrac": 5, "proactiv": [5, 8], "mindset": 5, "front": [5, 7], "incorpor": [5, 6, 7, 8, 9], "produc": [5, 6, 7, 8, 9], "novel": [5, 7], "ident": [5, 6], "isn": [5, 8], "bug": 5, "random": [5, 8, 9], "testabl": 5, "guarante": [5, 6, 7, 8, 9], "exceedingli": 5, "primari": [5, 6, 8], "nucleu": 5, "2020": 5, "summari": [5, 6, 7, 8, 9], "alter": 5, "rigid": 5, "wildli": 5, "incoher": 5, "inadequ": [5, 8], "temp": 5, "df_result": 5, "ntemperatur": 5, "40": [5, 6, 7], "temp_respons": 5, "iterrow": [5, 8], "10000": [5, 6, 9], "appl": [5, 6, 9], "txt": [5, 6, 7, 9], "sec_fil": [5, 9], "nsecur": 5, "AND": [5, 9], "exchang": [5, 6, 8, 9], "commiss": [5, 6, 8, 9], "nwashington": 5, "20549": 5, "nform": 5, "pursuant": 5, "TO": [5, 8], "13": [5, 6, 7, 8], "OR": 5, "OF": [5, 8], "THE": [5, 8], "1934": 5, "nfor": 5, "fiscal": [5, 6], "septemb": [5, 6], "28": [5, 6, 7, 8], "nor": [5, 6], "period": [5, 6, 8], "ncommiss": 5, "001": [5, 7], "36743": 5, "ng66145g66i43": 5, "jpg": 5, "nappl": 5, "exact": [5, 7, 8], "registr": 5, "charter": 5, "ncalifornia": 5, "t94": 5, "2404110": 5, "jurisdict": 5, "nof": 5, "employ": 5, "park": 5, "ncupertino": 5, "california": [5, 8, 9], "n95014": 5, "princip": 5, "offic": [5, 6, 8], "408": 5, "996": 5, "1010": 5, "telephon": 5, "regist": 5, "ntitl": 5, "ttrade": 5, "symbol": 5, "tname": 5, "ncommon": 5, "stock": [5, 9], "00001": 5, "naapl": 5, "tthe": 5, "nasdaq": [5, 6, 9], "llc": [5, 9], "n0": 5, "000": [5, 7, 9], "note": [5, 7, 9], "2025": [5, 6], "875": 5, "625": 5, "2026": 5, "2027": 5, "375": 5, "2029": 5, "050": 5, "2031": [5, 8], "600": 5, "2042": 5, "nindic": 5, "issuer": 5, "405": 5, "nye": 5, "preced": [5, 9], "shorter": [5, 6], "past": [5, 6, 8], "90": [5, 6, 7, 8], "submit": [5, 7, 8], "electron": 5, "232": 5, "filer": 5, "12b": [5, 8], "nlarg": 5, "tacceler": 5, "nnon": 5, "tsmaller": 5, "nemerg": 5, "nif": 5, "elect": [5, 8], "revis": [5, 8], "attest": 5, "404": 5, "sarban": 5, "oxlei": 5, "7262": 5, "firm": [5, 8], "prepar": [5, 7, 8], "correct": [5, 6, 8], "restat": 5, "incent": 5, "compens": 5, "240": 5, "10d": 5, "shell": 5, "aggreg": [5, 8, 9], "vote": 5, "held": [5, 9], "affili": [5, 9], "29": [5, 7, 8, 9], "last": [5, 6, 8, 9], "quarter": 5, "628": [5, 9], "553": [5, 9], "sole": [5, 6, 8], "disclosur": [5, 6, 7, 8], "director": [5, 7, 8], "date": 5, "exclud": 5, "n15": 5, "115": [5, 9], "823": [5, 9], "outstand": [5, 9], "octob": [5, 9], "18": [5, 6, 7, 8, 9], "ndocument": 5, "BY": 5, "nportion": 5, "meet": [5, 6, 8, 9], "sharehold": [5, 6], "iii": 5, "ntabl": 5, "npage": 5, "npart": 5, "nitem": 5, "nbusi": 5, "1a": 5, "nrisk": 5, "1b": [5, 7, 8], "nunresolv": 5, "staff": 5, "comment": 5, "n17": 5, "1c": 5, "ncybersecur": 5, "nproperti": 5, "n18": 5, "nlegal": 5, "proceed": [5, 6, 8], "nmine": 5, "ii": [5, 7, 9], "nmarket": 5, "stockhold": 5, "purchas": [5, 6, 8], "n19": 5, "reserv": [5, 6], "n20": 5, "nmanag": 5, "n21": 5, "7a": 5, "nquantit": 5, "n27": 5, "nfinanci": 5, "supplementari": 5, "n28": 5, "nchang": 5, "disagr": 5, "n51": 5, "9a": 5, "ncontrol": 5, "procedur": [5, 6, 8], "9b": 5, "nother": 5, "n52": 5, "9c": 5, "ndisclosur": 5, "foreign": [5, 6], "ndirector": 5, "corpor": [5, 6, 8], "nexecut": 5, "ownership": [5, 7], "certain": [5, 6, 8, 9], "owner": 5, "ncertain": 5, "nprincip": 5, "fee": [5, 6], "iv": 5, "nexhibit": 5, "n53": 5, "n56": 5, "nthi": 5, "litig": [5, 6, 7], "reform": 5, "1995": 5, "uncertainti": [5, 6, 7, 8], "macroeconom": [5, 6], "anticip": [5, 6, 8], "intend": [5, 7, 8], "caus": [5, 8, 9], "oblig": [5, 6], "nunless": 5, "herein": 5, "calendar": 5, "wholli": 5, "subsidiari": 5, "unless": [5, 7], "ncompani": 5, "manufactur": 5, "tablet": [5, 6, 7], "wearabl": 5, "accessori": 5, "sell": [5, 8], "varieti": [5, 7], "52": [5, 8], "53": [5, 6, 8], "week": 5, "saturdai": 5, "nproduct": 5, "niphon": 5, "io": [5, 6, 8, 9], "iphon": [5, 6], "se": [5, 8], "nmac": 5, "maco": [5, 7], "mac": [5, 7], "macbook": 5, "air": 5, "imac": 5, "studio": 5, "nipad": 5, "multipurpos": 5, "ipado": 5, "ipad": 5, "nwearabl": 5, "home": [5, 6, 9], "smartwatch": 5, "wireless": 5, "headphon": 5, "spatial": 5, "watcho": 5, "watch": 5, "ultra": 5, "airpod": 5, "beat": [5, 7], "visiono": 5, "nhome": 5, "tv": 5, "tvo": 5, "homepod": 5, "fidel": [5, 9], "naccessori": 5, "brand": 5, "third": [5, 6, 7, 8], "parti": [5, 6, 7, 8], "nservic": 5, "nadvertis": 5, "advertis": 5, "licens": [5, 6], "napplecar": 5, "portfolio": [5, 6], "applecar": 5, "repair": 5, "coverag": [5, 6, 8], "accident": 5, "damag": [5, 8], "theft": [5, 8], "ncloud": 5, "ndigit": 5, "app": [5, 6, 7], "discov": [5, 7, 8], "download": [5, 6, 7], "music": 5, "podcast": 5, "subscript": [5, 7], "arcad": 5, "sm": 5, "listen": [5, 7], "radio": 5, "station": 5, "magazin": 5, "exclus": 5, "sport": 5, "npayment": 5, "payment": 5, "credit": [5, 6], "pai": [5, 7], "cashless": 5, "nsegment": 5, "primarili": [5, 6, 8], "geograph": [5, 6, 8], "basi": [5, 7], "segment": [5, 6, 8, 9], "america": [5, 6], "europ": 5, "china": [5, 6, 7, 8], "japan": 5, "rest": [5, 7], "asia": 5, "pacif": 5, "north": [5, 8], "south": 5, "european": [5, 8], "india": 5, "middl": [5, 6, 7, 8], "east": 5, "africa": 5, "mainland": 5, "kong": 5, "taiwan": 5, "australia": 5, "asian": [5, 6], "although": [5, 7], "partner": [5, 6, 7, 8], "mid": [5, 6], "resel": [5, 6], "retail": 5, "sale": [5, 6], "indirect": 5, "channel": [5, 6, 8], "cellular": 5, "carrier": 5, "net": [5, 6, 9], "38": [5, 6, 7, 8], "ncompetit": 5, "downward": 5, "pressur": [5, 8], "gross": [5, 8], "cycl": [5, 6, 8], "competitor": [5, 6, 7, 8], "compet": [5, 6, 7], "imit": 5, "infring": [5, 7], "intellectu": [5, 7, 8], "marketplac": [5, 8], "nearli": [5, 7], "reput": [5, 8], "expand": [5, 6, 7, 8], "profit": [5, 6, 8, 9], "illegitim": [5, 8], "collabor": [5, 7, 8], "nsuppli": 5, "nalthough": 5, "particip": 5, "shortag": 5, "commod": [5, 6, 7], "fluctuat": [5, 6], "commonli": [5, 6], "until": [5, 8, 9], "supplier": 5, "matur": 5, "concentr": [5, 6], "enter": [5, 9], "agreement": [5, 6], "suppli": [5, 6, 9], "renew": [5, 6], "nresearch": 5, "nbecaus": 5, "upon": [5, 6, 8], "flow": [5, 6, 9], "acquisit": [5, 6, 8], "nintellectu": 5, "broad": [5, 6, 7, 9], "patent": 5, "copyright": [5, 7], "trademark": 5, "secret": 5, "differenti": 5, "skill": [5, 8], "personnel": 5, "pursu": [5, 8], "thousand": [5, 7], "durat": 5, "adequ": [5, 8], "nin": 5, "holidai": [5, 8], "fill": 5, "inventori": 5, "older": [5, 7], "newer": 5, "distributor": 5, "nhuman": 5, "strive": 5, "retain": [5, 6, 7, 8], "talent": [5, 6], "member": [5, 8], "164": 5, "ncompens": 5, "equit": 5, "succe": 5, "health": [5, 6, 8], "awai": [5, 6, 8], "ngrowth": 5, "career": 5, "leadership": [5, 8], "nworkplac": 5, "workplac": 5, "ninclus": 5, "workforc": 5, "nengag": 5, "among": [5, 6, 7, 8, 9], "everyon": [5, 7], "gaug": 5, "sentiment": [5, 6, 7, 9], "nhealth": 5, "everywher": 5, "crisi": 5, "visitor": 5, "navail": 5, "quarterli": 5, "q": [5, 6, 7, 8], "amend": 5, "sec": [5, 6, 9], "Such": [5, 8], "charg": 5, "investor": [5, 6, 9], "aspx": 5, "websit": [5, 6, 7, 8], "environment": [5, 8], "referenc": [5, 6], "inact": 5, "textual": 5, "unknown": [5, 6, 8], "advers": 5, "conjunct": 5, "consolid": [5, 6], "nmacroeconom": 5, "facil": 5, "assembli": 5, "site": [5, 9], "nadvers": 5, "slow": [5, 6], "recess": 5, "unemploy": [5, 6], "inflat": [5, 6], "tighter": 5, "currenc": [5, 6], "monetari": 5, "contract": [5, 7], "logist": 5, "instabl": [5, 8], "inabl": [5, 6], "financ": [5, 6, 7, 8], "insolv": 5, "counterparti": 5, "debt": 5, "liquid": [5, 6], "fair": [5, 8], "instrument": 5, "polit": [5, 8], "disput": 5, "geopolit": 5, "tension": [5, 8], "terror": 5, "accid": 5, "interrupt": 5, "npolit": 5, "outsourc": [5, 6], "korea": 5, "vietnam": 5, "restrict": [5, 7, 8, 9], "tariff": 5, "export": [5, 6], "portion": [5, 7], "revenu": [5, 6, 9], "restructur": 5, "ceas": 5, "escal": [5, 8], "nmani": 5, "prone": [5, 6, 8], "earthquak": 5, "climat": 5, "weather": 5, "plant": 5, "terrorist": [5, 8], "attack": [5, 8], "hostil": 5, "ransomwar": 5, "cybersecur": [5, 6, 8], "labor": 5, "nsuch": 5, "imposs": [5, 7], "slowdown": 5, "outag": 5, "neg": [5, 6, 8, 9], "pandem": 5, "covid": 5, "economi": [5, 6], "imposit": 5, "stringent": [5, 7, 8], "travel": 5, "freight": 5, "movement": 5, "ramp": 5, "nfollow": 5, "expenditur": 5, "resum": 5, "exacerb": [5, 6], "insur": 5, "nglobal": 5, "unabl": 5, "assur": [5, 8], "minor": [5, 6, 8], "naddition": 5, "intensifi": 5, "seamlessli": 5, "nto": 5, "stimul": 5, "ndue": 5, "upgrad": 5, "quantiti": 5, "defect": 5, "defici": 5, "supersed": 5, "nsubstanti": 5, "transport": 5, "reimburs": 5, "warranti": 5, "unanticip": 5, "liabil": 5, "finish": [5, 8], "destin": 5, "prepay": 5, "termin": [5, 7], "recover": 5, "exposur": [5, 8], "nfutur": 5, "semiconductor": 5, "suffer": [5, 6, 8], "constrain": [5, 7, 9], "shipment": 5, "unexpectedli": 5, "interfer": 5, "unsaf": [5, 8], "expos": [5, 6, 8], "widespread": [5, 8], "vulner": [5, 6, 8], "compromis": [5, 7, 8], "claim": [5, 6, 7, 8], "intang": 5, "lost": [5, 6, 8], "cancel": 5, "obsolet": 5, "exce": [5, 8], "realiz": 5, "accru": 5, "excess": 5, "impair": 5, "whenev": 5, "circumst": 5, "amount": [5, 6, 8, 9], "carri": [5, 7, 9], "incur": [5, 6], "unpredict": [5, 8], "obsolesc": 5, "forecast": [5, 6, 8], "incorrectli": [5, 8, 9], "extens": [5, 6, 7, 9], "issuanc": 5, "unknowingli": [5, 8], "notifi": 5, "preclud": 5, "bui": 5, "percept": 5, "android": [5, 6], "playstat": 5, "nintendo": 5, "xbox": 5, "inclin": 5, "devot": 5, "dissatisfi": 5, "vast": [5, 6, 8], "storefront": 5, "safari": 5, "union": [5, 8], "eu": [5, 6, 8], "dma": [5, 6], "narrow": [5, 7, 8], "scope": [5, 6, 7, 8], "elimin": [5, 6, 7], "nfailur": 5, "appeal": [5, 6], "subscrib": [5, 6], "nsome": 5, "manner": [5, 6, 8], "nurtur": 5, "nmuch": 5, "chief": [5, 6], "silicon": 5, "vallei": 5, "constantli": 5, "driver": [5, 7], "recruit": 5, "subsidi": 5, "staf": 5, "contractor": 5, "placement": 5, "increment": 5, "weaken": 5, "telecommun": 5, "war": 5, "virus": 5, "ins": 5, "incid": [5, 8], "ineffect": 5, "thing": [5, 9], "interf": 5, "imped": 5, "ship": 5, "nloss": 5, "unauthor": [5, 8], "confidenti": [5, 7], "encrypt": 5, "But": [5, 6, 8, 9], "behalf": 5, "normal": [5, 6, 8, 9], "investig": [5, 6, 8], "penalti": [5, 7], "frequenc": [5, 7, 8], "actor": [5, 8], "circumv": [5, 8], "obfusc": 5, "forens": 5, "hinder": [5, 9], "recov": 5, "perpetr": 5, "profil": [5, 7], "authent": 5, "hack": [5, 8], "malfeas": 5, "faulti": 5, "password": 5, "irregular": 5, "fraudul": 5, "induc": 5, "disclos": [5, 6, 9], "usernam": 5, "turn": [5, 6, 8, 9], "multifactor": 5, "unusu": 5, "freez": 5, "suspici": 5, "nwhile": 5, "ninvest": 5, "ongo": [5, 6, 7], "contempl": 5, "endeavor": 5, "distract": 5, "tangibl": 5, "approv": 5, "oner": 5, "ventur": 5, "riski": 5, "leas": 5, "unfavor": [5, 6], "arisen": 5, "ordinari": 5, "cours": [5, 6, 7, 8], "resolv": [5, 7, 8], "sometim": [5, 6], "indemnif": 5, "indemnifi": 5, "alleg": 5, "magnitud": 5, "assert": [5, 6], "royalti": 5, "vigor": 5, "defend": 5, "court": [5, 7], "internation": 5, "plaintiff": 5, "injunct": 5, "relief": 5, "nregardless": 5, "merit": 5, "recognit": [5, 7, 8], "settl": 5, "uncertain": [5, 6], "disgorg": 5, "remedi": [5, 8], "worldwid": 5, "antitrust": [5, 6], "bill": [5, 6], "commerc": 5, "televis": 5, "film": 5, "anticorrupt": 5, "cash": [5, 6], "repatri": 5, "launder": 5, "tax": [5, 6], "wast": 5, "recycl": 5, "ncomplianc": 5, "impos": [5, 7, 8, 9], "agent": [5, 7, 8], "nregulatori": 5, "ban": [5, 8], "nexpect": 5, "increasingli": [5, 6, 7, 8, 9], "greenhous": 5, "ga": 5, "emiss": 5, "civil": 5, "disagre": 5, "perceiv": 5, "feder": 5, "nfrom": 5, "noncompli": 5, "individu": [5, 6, 7, 8], "lawsuit": [5, 7], "monopol": 5, "nfurther": 5, "earn": 5, "search": [5, 6, 7, 8], "nthere": 5, "transfer": 5, "pass": [5, 6, 7, 8, 9], "pend": 5, "inquiri": [5, 8], "government": 5, "entiti": [5, 7, 8, 9], "biometr": 5, "notif": 5, "permit": [5, 7, 9], "healthcar": [5, 6, 7], "liabl": 5, "investigatori": 5, "cardhold": 5, "acquir": 5, "denomin": 5, "offset": 5, "strengthen": [5, 8], "nconvers": 5, "thu": 5, "hedg": 5, "deterior": 5, "sovereign": 5, "heighten": [5, 8], "worsen": 5, "A": [5, 7, 8, 9], "collater": 5, "bank": 5, "unsecur": 5, "subassembli": 5, "assembl": 5, "legisl": 5, "ireland": [5, 8], "singapor": 5, "organis": 5, "statutori": 5, "valuat": [5, 6], "defer": 5, "bodi": [5, 8], "adequaci": 5, "ow": 5, "ngener": 5, "repurchas": 5, "dividend": 5, "consumm": 5, "declar": [5, 6], "board": [5, 6, 8], "unresolv": 5, "nnone": 5, "threat": [5, 6, 8], "postur": 5, "25": [5, 6, 7, 8], "2016": 5, "coordin": [5, 8], "committe": [5, 8], "oversight": [5, 8], "counsel": 5, "chair": 5, "headquart": 5, "cupertino": [5, 9], "center": [5, 8, 9], "formal": [5, 8, 9], "uninstal": 5, "web": [5, 6, 7, 8], "browser": 5, "june": 5, "contractu": 5, "desist": 5, "stai": [5, 7], "grant": 5, "ndepart": 5, "justic": 5, "depart": [5, 8], "doj": 5, "district": 5, "attornei": 5, "jersei": 5, "redress": [5, 8], "anticompetit": 5, "nonmonetari": 5, "defens": [5, 8], "nepic": 5, "epic": 5, "northern": 5, "unfair": [5, 8], "enjoin": 5, "extern": [5, 6, 8], "januari": 5, "motion": 5, "oppos": [5, 8], "vacat": 5, "fourth": 5, "mine": 5, "nnot": 5, "aapl": 5, "nholder": 5, "na": [5, 8], "301": 5, "npurchas": 5, "nshare": 5, "nperiod": 5, "ttotal": 5, "taverag": 5, "npaid": 5, "nannounc": 5, "napproxim": 5, "That": [5, 6, 8, 9], "nunder": 5, "njune": 5, "august": [5, 6, 8], "nopen": 5, "negoti": [5, 8], "t35": 5, "697": 5, "t224": 5, "naugust": 5, "31": [5, 6, 7], "t42": 5, "910": 5, "t221": 5, "39": [5, 6, 7], "nseptemb": 5, "t33": 5, "653": 5, "t222": 5, "86": [5, 6, 7], "ntotal": [5, 8], "t112": 5, "260": 5, "t89": 5, "074": 5, "110": 5, "10b5": 5, "reinvest": 5, "dow": 5, "supersector": 5, "27": [5, 7, 8], "2019": 5, "n2218": 5, "tseptemb": 5, "t100": 5, "t207": 5, "t273": 5, "t281": 5, "t322": 5, "t430": 5, "t113": 5, "t156": 5, "t131": 5, "t155": 5, "t210": 5, "ndow": 5, "t146": 5, "t216": 5, "t215": 5, "nfirst": 5, "nsecond": 5, "nthird": 5, "sequoia": 5, "nfourth": 5, "plu": [5, 7], "nfiscal": 5, "six": 5, "realign": 5, "span": [5, 7, 8], "indirectli": 5, "n2024": 5, "tchang": 5, "t2023": 5, "t2022": 5, "namerica": 5, "t167": 5, "045": 5, "t3": 5, "t162": 5, "560": 5, "t169": 5, "658": 5, "neurop": 5, "t101": 5, "328": 5, "t7": 5, "294": 5, "t95": 5, "118": 5, "ngreater": 5, "t66": 5, "952": 5, "t72": 5, "559": 5, "t74": 5, "njapan": 5, "t25": 5, "052": 5, "t24": 5, "257": 5, "977": 5, "nrest": 5, "t30": 5, "t4": 5, "t29": 5, "615": 5, "t1": 5, "t391": 5, "035": 5, "t2": 5, "t383": 5, "285": 5, "t394": 5, "weak": [5, 6, 8], "renminbi": 5, "yen": [5, 9], "t201": 5, "183": 5, "t200": 5, "583": 5, "t205": 5, "489": 5, "984": 5, "357": 5, "t40": 5, "177": [5, 8], "t26": 5, "694": 5, "t28": 5, "300": 5, "292": 5, "t37": 5, "005": 5, "t39": 5, "845": [5, 8], "t41": 5, "241": 5, "n96": 5, "169": 5, "t13": 5, "t85": 5, "t9": 5, "t78": 5, "129": [5, 8], "amort": 5, "bundl": 5, "flat": [5, 6], "ngross": 5, "t109": 5, "633": 5, "t108": 5, "803": 5, "t114": 5, "728": 5, "t71": 5, "t60": 5, "345": 5, "t56": 5, "054": 5, "t180": 5, "683": 5, "148": 5, "t170": 5, "782": 5, "t36": 5, "t73": 5, "t70": 5, "t46": 5, "t44": 5, "t43": 5, "noper": 5, "t31": 5, "370": 5, "t5": 5, "915": 5, "t14": 5, "251": 5, "npercentag": 5, "t8": 5, "nsell": 5, "administr": 5, "097": 5, "932": 5, "094": 5, "t6": 5, "t57": 5, "467": 5, "t54": 5, "847": 5, "t51": 5, "t15": 5, "headcount": 5, "nprovis": 5, "749": 5, "t16": 5, "741": 5, "t19": 5, "neffect": 5, "nstatutori": 5, "t21": 5, "aid": [5, 8], "nliquid": 5, "unrestrict": 5, "140": 5, "ndebt": 5, "97": [5, 6, 8], "payabl": 5, "promissori": 5, "nleas": 5, "nmanufactur": 5, "noncancel": 5, "ndeem": 5, "tcja": 5, "nstate": 5, "fund": [5, 6, 7], "escrow": 5, "ncapit": 5, "95": [5, 8], "nrecent": 5, "pronounc": 5, "nincom": 5, "fasb": 5, "asu": 5, "09": [5, 6, 8], "740": 5, "reconcili": [5, 6], "reconcil": [5, 9], "disaggreg": 5, "prospect": 5, "novemb": [5, 8], "07": [5, 6, 8, 9], "280": 5, "maker": 5, "codm": 5, "retrospect": 5, "ncritic": 5, "conform": [5, 9], "gaap": 5, "nuncertain": 5, "domest": 5, "taxat": 5, "resolut": [5, 6], "conting": 5, "ninterest": 5, "forth": 5, "hypothet": 5, "nsensit": 5, "nhypothet": 5, "nrate": 5, "npotenti": 5, "n100": 5, "tenor": 5, "ndeclin": 5, "755": 5, "089": 5, "nterm": 5, "nincreas": 5, "t139": 5, "t194": 5, "nforeign": 5, "var": 5, "mont": 5, "carlo": 5, "interv": [5, 6], "538": 5, "669": 5, "nindex": 5, "tpage": 5, "nconsolid": 5, "n29": 5, "n30": 5, "sheet": 5, "n31": 5, "n32": 5, "n33": 5, "nnote": 5, "n34": 5, "nreport": 5, "n48": 5, "nall": 5, "omit": 5, "submiss": 5, "nyear": 5, "n2023": 5, "n2022": 5, "nnet": 5, "t294": 5, "866": 5, "t298": 5, "085": 5, "t316": 5, "199": 5, "t96": 5, "ncost": 5, "t185": 5, "233": 5, "t189": 5, "282": 5, "471": 5, "119": 5, "855": 5, "t22": 5, "075": 5, "352": 5, "t214": 5, "137": 5, "t223": 5, "546": 5, "t123": 5, "216": 5, "t119": 5, "437": 5, "t269": 5, "565": 5, "334": 5, "485": 5, "736": 5, "103": 5, "t93": 5, "995": 5, "t99": 5, "nearn": 5, "nbasic": 5, "ndilut": 5, "08": [5, 7, 9], "343": [5, 8], "783": 5, "744": 5, "215": 5, "963": 5, "095": 5, "812": 5, "547": 5, "325": 5, "819": 5, "nsee": 5, "translat": [5, 7, 8], "t395": 5, "765": 5, "511": 5, "unreal": 5, "832": 5, "t323": 5, "212": 5, "nadjust": 5, "337": 5, "717": 5, "394": 5, "138": 5, "850": 5, "563": 5, "104": 5, "t204": 5, "t253": 5, "816": 5, "899": 5, "272": 5, "t98": 5, "016": 5, "652": 5, "t88": 5, "531": 5, "nasset": 5, "ncurrent": 5, "ncash": 5, "943": 5, "965": 5, "228": 5, "590": 5, "naccount": 5, "410": 5, "508": 5, "nvendor": 5, "t32": 5, "833": 5, "477": 5, "ninventori": 5, "286": 5, "331": 5, "287": 5, "695": 5, "t152": 5, "987": 5, "t143": 5, "566": 5, "t91": 5, "479": 5, "544": 5, "t45": 5, "680": 5, "715": 5, "834": 5, "t64": 5, "758": 5, "t211": 5, "993": 5, "t209": 5, "017": 5, "t364": 5, "980": [5, 8], "t352": 5, "nliabil": 5, "t68": 5, "960": 5, "t62": 5, "611": 5, "304": 5, "t58": 5, "829": 5, "ndefer": 5, "249": 5, "061": 5, "ncommerci": 5, "967": 5, "985": 5, "t10": 5, "912": 5, "822": 5, "t176": 5, "392": 5, "t145": 5, "308": 5, "750": 5, "888": 5, "t49": 5, "848": 5, "638": 5, "t308": 5, "030": [5, 7], "t290": 5, "ncommit": 5, "nsharehold": 5, "400": [5, 6], "116": 5, "786": 5, "550": 5, "n83": 5, "276": 5, "naccumul": 5, "deficit": 5, "154": 5, "214": 5, "172": 5, "452": 5, "950": 5, "146": [5, 8], "t50": 5, "672": 5, "t63": 5, "090": 5, "nbegin": 5, "849": 5, "365": 5, "423": 5, "346": [5, 6], "175": 5, "withheld": 5, "settlement": 5, "521": 5, "971": 5, "t12": 5, "034": 5, "t11": 5, "nend": 5, "t83": 5, "nretain": 5, "068": 5, "562": 5, "ndividend": 5, "218": 5, "793": 5, "612": 5, "099": 5, "454": 5, "846": 5, "77": [5, 6, 7], "046": 5, "186": 5, "109": 5, "t163": 5, "rsu": 5, "t0": 5, "98": [5, 6, 7], "94": [5, 6, 7, 8], "737": 5, "929": 5, "ndepreci": 5, "445": 5, "519": 5, "688": 5, "038": 5, "266": 5, "227": 5, "006": 5, "788": 5, "356": 5, "271": 5, "520": 5, "618": 5, "484": 5, "731": 5, "684": 5, "499": 5, "020": 5, "889": 5, "448": 5, "552": 5, "031": 5, "t118": 5, "254": 5, "t110": 5, "543": 5, "t122": 5, "151": 5, "48": [5, 7], "656": 5, "513": 5, "76": [5, 8], "923": 5, "nproce": 5, "211": 5, "686": 5, "917": 5, "135": 5, "828": [5, 6], "446": 5, "447": 5, "959": 5, "708": 5, "086": 5, "935": 5, "705": 5, "354": 5, "nfinanc": 5, "441": 5, "431": 5, "223": [5, 8], "234": [5, 8], "025": 5, "841": 5, "nrepurchas": 5, "949": 5, "89": [5, 8], "402": 5, "465": 5, "nrepay": 5, "958": 5, "repay": 5, "978": [5, 6], "955": 5, "361": 5, "581": 5, "160": 5, "121": 5, "983": 5, "488": 5, "794": 5, "760": 5, "nsupplement": 5, "102": 5, "t18": 5, "679": 5, "573": 5, "33": [5, 6, 7, 8], "nbasi": 5, "prior": [5, 8], "reclassifi": 5, "nrevenu": 5, "remit": [5, 8], "straight": 5, "vest": 5, "sold": 5, "nderiv": 5, "nonleas": 5, "34": [5, 6, 8], "entitl": 5, "commenc": 5, "deliveri": 5, "stand": 5, "ssp": 5, "icloud": 5, "siri": 5, "discount": 5, "undeliv": 5, "unbil": 5, "n26": 5, "n37": 5, "moder": [5, 7], "64": [5, 7, 8], "dilut": 5, "nnumer": 5, "ndenomin": 5, "nweight": 5, "312": 5, "316": 5, "856": 5, "antidilut": 5, "tunreal": 5, "ngain": 5, "tfair": 5, "nvalu": 5, "tcash": 5, "nequival": 5, "tcurrent": 5, "tnon": 5, "t27": 5, "nlevel": 5, "nmonei": 5, "t778": 5, "nmutual": 5, "n515": 5, "t105": 5, "t617": 5, "nsubtot": 5, "293": 5, "395": 5, "nu": 5, "treasuri": 5, "516": 5, "t212": 5, "087": 5, "380": 5, "159": 5, "t703": 5, "t17": 5, "568": 5, "158": 5, "810": 5, "ncertif": 5, "deposit": 5, "t873": 5, "t387": 5, "t478": 5, "066": 5, "ncorpor": 5, "t65": 5, "622": 5, "t270": 5, "953": 5, "939": 5, "027": 5, "t47": 5, "886": 5, "nmunicip": 5, "t412": 5, "t405": 5, "t190": 5, "nmortgag": 5, "595": 5, "t175": 5, "403": 5, "t23": 5, "367": 5, "278": [5, 8], "t132": 5, "t583": 5, "635": 5, "t128": 5, "056": 5, "966": 5, "t34": 5, "t160": 5, "t688": 5, "650": 5, "36": [5, 6, 7, 8], "359": [5, 8], "t481": 5, "n442": 5, "t428": 5, "t923": 5, "t909": 5, "406": 5, "114": 5, "468": 5, "136": 5, "t271": 5, "533": 5, "048": [5, 7], "491": 5, "332": 5, "t320": 5, "t608": 5, "t76": 5, "840": 5, "956": 5, "890": 5, "t20": 5, "627": 5, "243": 5, "t628": 5, "t602": 5, "t192": 5, "t410": 5, "735": 5, "636": 5, "t344": 5, "t144": 5, "470": 5, "657": 5, "831": 5, "125": 5, "162": 5, "t173": 5, "752": 5, "corrobor": 5, "mortgag": [5, 6], "classifi": [5, 8], "37": [5, 7, 8], "swap": 5, "remeasur": 5, "notion": 5, "069": 5, "730": 5, "575": 5, "493": 5, "t104": 5, "777": 5, "nhedg": 5, "433": 5, "505": 5, "247": [5, 8], "ntrade": 5, "41": [5, 7, 8], "44": [5, 8], "depreci": 5, "nland": 5, "690": 5, "nmachineri": 5, "t80": 5, "205": [5, 7], "314": 5, "nleasehold": 5, "839": 5, "599": 5, "73": [5, 7, 8], "884": 5, "852": 5, "t55": 5, "906": 5, "601": 5, "703": 5, "010": 5, "457": 5, "634": 5, "391": 5, "neuropean": 5, "opinion": [5, 6, 8], "1991": 5, "2007": 5, "irish": 5, "branch": 5, "2003": 5, "2014": [5, 6], "2015": 5, "minist": 5, "juli": [5, 8], "annul": 5, "ecj": 5, "hear": 5, "asid": 5, "confirm": 5, "unrecogn": [5, 6], "nfeder": 5, "571": 5, "080": 5, "644": 5, "265": 5, "801": 5, "726": 5, "570": 5, "298": 5, "49": [5, 6, 8], "t84": 5, "428": 5, "603": 5, "483": [5, 8], "t347": 5, "t669": 5, "076": 5, "830": 5, "419": 5, "072": 5, "pretax": 5, "72": [5, 6, 8], "ncomput": 5, "885": 5, "012": 5, "124": 5, "518": 5, "nimpact": 5, "246": 5, "311": 5, "366": 5, "397": 5, "nexcess": 5, "893": 5, "871": 5, "192": [5, 8], "739": 5, "ntax": 5, "carryforward": 5, "302": 5, "naccru": 5, "413": [5, 8], "421": 5, "nunreal": 5, "173": 5, "168": 5, "873": 5, "743": 5, "nless": 5, "374": 5, "007": 5, "369": 5, "551": 5, "998": 5, "nright": 5, "179": 5, "nminimum": 5, "674": 5, "940": 5, "t511": 5, "t455": 5, "t490": 5, "805": 5, "202": 5, "indefinit": 5, "temporari": 5, "727": 5, "044": 5, "284": 5, "ndecreas": 5, "386": 5, "463": 5, "982": 5, "542": 5, "936": 5, "070": 5, "expir": 5, "statut": 5, "229": 5, "494": 5, "closur": 5, "intercompani": 5, "exceed": [5, 8], "multiyear": 5, "exercis": 5, "noncash": 5, "rou": 5, "tfinanci": 5, "t2024": 5, "tother": 5, "661": 5, "tproperti": 5, "015": 5, "303": 5, "676": 5, "t165": 5, "t752": 5, "t859": 5, "430": 5, "842": [5, 8], "tfinanc": 5, "n2025": 5, "820": 5, "t171": 5, "991": 5, "n2026": 5, "914": 5, "n2027": 5, "t59": 5, "733": 5, "n2028": 5, "360": 5, "t38": 5, "398": 5, "n2029": 5, "187": 5, "nthereaft": 5, "t837": 5, "undiscount": 5, "790": 5, "imput": 5, "376": 5, "534": 5, "t896": 5, "borrow": 5, "proce": 5, "nine": [5, 8], "nmatur": 5, "333": 5, "264": 5, "948": 5, "645": 5, "309": 5, "arrear": 5, "namount": 5, "n2013": 5, "nfix": 5, "2062": 5, "t97": 5, "341": 5, "03": [5, 6], "65": [5, 8], "t106": 5, "572": 5, "n97": 5, "nunamort": 5, "321": 5, "358": 5, "113": 5, "662": 5, "930": 5, "342": 5, "800": 5, "180": 5, "88": [5, 6], "ndure": 5, "425": 5, "426": 5, "372": 5, "589": 5, "055": 5, "appreci": 5, "four": [5, 6, 7, 8], "holder": [5, 7], "n2014": 5, "bonu": 5, "nrestrict": 5, "nnumber": 5, "nrsu": 5, "ngrant": 5, "naggreg": 5, "nfair": 5, "nbalanc": 5, "t240": 5, "427": [5, 8], "t75": 5, "t150": 5, "861": 5, "501": 5, "768": 5, "87": [5, 6, 7, 8], "101": [5, 8], "878": 5, "144": 5, "t127": 5, "t135": 5, "91": [5, 8], "456": 5, "78": [5, 7, 8], "59": [5, 8], "t140": 5, "326": 5, "t158": 5, "204": 5, "350": 5, "002": [5, 7], "nuncondit": 5, "uncondit": 5, "206": 5, "440": 5, "156": 5, "t633": 5, "t670": 5, "226": 5, "45": 5, "nconting": 5, "accrual": 5, "nconcentr": 5, "attribut": [5, 6, 7, 8, 9], "46": 5, "t67": 5, "098": 5, "082": 5, "062": 5, "569": 5, "895": 5, "458": 5, "207": 5, "nonrecur": 5, "t142": 5, "196": 5, "t138": 5, "t147": 5, "859": 5, "nchina": 5, "n66": 5, "t181": 5, "887": 5, "t172": 5, "269": 5, "nlong": 5, "664": 5, "797": 5, "778": 5, "219": 5, "nopinion": 5, "nwe": 5, "fairli": 5, "pcaob": 5, "sponsor": 5, "treadwai": 5, "2013": 5, "unqualifi": [5, 6], "thereon": 5, "nthese": 5, "misstat": 5, "fraud": [5, 8], "ndescript": 5, "naudit": 5, "nhow": 5, "nmatter": 5, "qualifi": 5, "letter": [5, 6], "advisor": 5, "ernst": 5, "llp": 5, "auditor": [5, 6], "2009": 5, "nsan": 5, "jose": 5, "nnovemb": 5, "coso": 5, "nour": 5, "ndefinit": 5, "disposit": 5, "receipt": 5, "nevalu": 5, "nbase": 5, "supervis": [5, 7, 8, 9], "13a": 5, "15d": 5, "ninher": 5, "paragraph": 5, "51": [5, 8, 9], "ninsid": 5, "deirdr": 5, "brien": 5, "vice": 5, "presid": 5, "affirm": 5, "april": 5, "withhold": 5, "remitt": 5, "mr": 5, "copi": [5, 6], "solicit": 5, "00042": 5, "nincorpor": 5, "texhibit": 5, "descript": [5, 6, 7, 8, 9], "tform": 5, "tfile": 5, "nrestat": 5, "namend": 5, "bylaw": 5, "nindentur": 5, "york": [5, 6, 7, 9], "mellon": 5, "truste": 5, "noffic": 5, "certif": 5, "2018": 5, "85": [5, 7, 8], "05": [5, 6], "2044": 5, "februari": 5, "2045": 5, "900": 5, "700": [5, 7], "250": [5, 8], "2036": 5, "2046": 5, "450": 5, "2047": 5, "2049": 5, "2030": 5, "2050": 5, "2060": 5, "2028": 5, "2041": 5, "2061": 5, "2032": 5, "2052": 5, "54": [5, 6], "2033": 5, "2053": 5, "n12": 5, "nsubsidiari": 5, "n23": 5, "nconsent": 5, "n24": 5, "npower": 5, "signatur": 5, "nrule": 5, "nsection": 5, "1350": 5, "n101": 5, "ninlin": 5, "xbrl": 5, "n104": 5, "inlin": 5, "compensatori": 5, "herewith": 5, "furnish": 5, "herebi": 5, "undertak": 5, "56": [5, 7, 8], "nsignatur": 5, "npursuant": 5, "duli": 5, "undersign": 5, "thereunto": 5, "ndate": 5, "nby": 5, "luca": [5, 9], "maestri": 5, "nluca": 5, "nsenior": 5, "nchief": 5, "nknow": 5, "THESE": 5, "appoint": 5, "cook": 5, "jointli": 5, "her": 5, "substitut": 5, "him": 5, "thereto": 5, "therewith": 5, "ratifi": 5, "virtu": 5, "hereof": 5, "nname": 5, "ttitl": 5, "tdate": 5, "tchief": 5, "tnovemb": 5, "ntimothi": 5, "tsenior": 5, "kondo": 5, "nchri": 5, "wanda": 5, "austin": 5, "nwanda": 5, "gorski": 5, "tdirector": 5, "nalex": 5, "jung": 5, "nandrea": 5, "arthur": 5, "levinson": 5, "narthur": 5, "monica": 5, "lozano": 5, "nmonica": 5, "ronald": 5, "sugar": 5, "nronald": 5, "susan": 5, "wagner": 5, "nsusan": 5, "57": [5, 7], "turbo": [5, 7, 9], "outlin": [5, 7, 8], "invdestacksmeticsisdict": 5, "setispect": 5, "20cyan": 5, "evaluationseld": 5, "anvis": 5, "droitent": 5, "discernminerv": 5, "versbobprefvers": 5, "vo\u8be5": 5, "option\u548c": 5, "meio": 5, "\u0432\u0440\u0435\u043ccisco": 5, "dellaischenpoihscap": 5, "geme": 5, "gettim": 5, "unscal": 5, "vocabulari": [5, 7, 9], "closer": 5, "sharpen": 5, "uniform": 5, "raschka": 5, "repetit": [5, 9], "radic": 5, "grappl": 5, "safer": [5, 8], "fascin": 5, "spontan": 5, "answer": [5, 6, 7, 8, 9], "aren": [5, 7], "linear": 5, "absent": [5, 8], "coax": 5, "journei": 5, "suddenli": 5, "manifest": 5, "deliber": [5, 8], "contend": 5, "rethink": [5, 8], "tutor": 5, "children": [5, 8], "verifi": [5, 6, 7, 9], "predefin": [5, 9], "weren": 5, "kind": [5, 6], "usual": [5, 9], "quantif": 5, "contamin": [5, 8], "unseen": [5, 8], "longitudin": 5, "mostli": [5, 9], "latter": 5, "tailor": [5, 8], "great": [5, 7, 8, 9], "cognit": [5, 6], "misinform": [5, 8], "fabric": [5, 8], "citat": 5, "tempor": [5, 6], "disclaim": 5, "referr": 5, "incorrect": [5, 6, 8], "demograph": [5, 8], "stereotyp": [5, 8], "societ": [5, 8], "pii": [5, 8], "anonym": 5, "leakag": [5, 8], "carryov": 5, "fallaci": 5, "think": [5, 7, 8], "idiom": 5, "sarcasm": 5, "terminologi": 5, "lingual": 5, "misunderstand": 5, "syntax": 5, "scan": [5, 6], "compat": [5, 6, 7, 9], "overconfid": [5, 6], "clariti": [5, 6, 8, 9], "audienc": 5, "densiti": 5, "satisfact": [5, 9], "misus": [5, 8], "moral": 5, "co2": 5, "etc": [5, 6, 9], "palm": [5, 7], "easi": [5, 6, 7, 8], "synthet": [5, 7, 8, 9], "templat": [5, 6, 9], "timeout": 5, "inter": 5, "rater": 5, "ti": 5, "holist": [5, 8], "built": [5, 7, 8, 9], "experiment": [5, 6, 7, 9], "vi": 5, "categor": [5, 7, 8, 9], "intrins": [5, 7], "extrins": 5, "perplex": [5, 7], "downstream": [5, 9], "synthesi": 5, "discret": [5, 6], "prefix": [5, 8], "roug": 5, "bleu": 5, "bilingu": 5, "understudi": 5, "overlap": [5, 6], "favor": [5, 7, 9], "breviti": 5, "insensit": 5, "semant": [5, 6, 9], "orient": [5, 8], "gist": 5, "meteor": 5, "synonym": 5, "paraphras": 5, "alongsid": [5, 8], "computation": [5, 6], "cider": 5, "consensu": 5, "tf": 5, "idf": 5, "caption": 5, "reliant": [5, 6], "corpu": [5, 6, 7], "ter": 5, "edit": [5, 8], "hypothesi": 5, "penal": 5, "bertscor": 5, "contextu": [5, 8], "bert": [5, 6], "spice": 5, "proposit": [5, 7], "scene": [5, 6, 8], "analyst": [5, 6], "rouge_1": 5, "rouge_2": 5, "ideal": [5, 6, 7, 8, 9], "setup": [5, 7, 8, 9], "evaluate_summari": 5, "unigram": 5, "bigram": 5, "absl": 5, "py": [5, 9], "rouge_scor": 5, "generated_summari": 5, "reference_summari": 5, "google_bleu": 5, "bleu_scor": 5, "rouge1": 5, "rouge2": 5, "arbitrari": 5, "chosen": [5, 8], "sentence1": 5, "cat": [5, 8], "sat": 5, "mat": 5, "sentence2": 5, "ate": 5, "3333333333333333": 5, "7272727272727272": 5, "4444444444444445": 5, "generate_summari": 5, "summir": 5, "liner": 5, "evaluate_summary_model": 5, "model_benchmark": 5, "models_test": 5, "benchmark_summari": 5, "model_summari": 5, "evaluation_result": 5, "statu": 5, "concis": [5, 7], "element": [5, 6, 8, 9], "verbos": [5, 6, 7, 8, 9], "peripher": 5, "quit": [5, 6, 7, 9], "convei": 5, "breadth": 5, "Of": [5, 7, 8], "vibe": 5, "visualize_prompt_comparison": 5, "matplotlib": 5, "radar": 5, "plot": 5, "radar_plot": 5, "tmp": 5, "ipykernel_1652501": 5, "940173201": 5, "userwarn": [5, 9], "figurecanvasagg": 5, "largest": [5, 7], "sarmah": 5, "granular": [5, 6, 7], "likert": 5, "ensembl": 5, "repeatedli": [5, 6], "fluenci": 5, "refin": 5, "integ": [5, 9], "rubric": 5, "hollist": 5, "judgeevalu": 5, "grammar": [5, 7, 9], "evaluate_with_llm": 5, "criterion": 5, "judge_model": 5, "candidate_summari": 5, "grammat": 5, "y": [5, 6, 8, 9], "z": 5, "w": [5, 6, 7, 8], "benchmark_model": 5, "test_model": 5, "input_text": [5, 6, 7], "trillion": [5, 7, 9], "evals_list": 5, "1775618912": 5, "slightli": 5, "drift": [5, 8], "lowest": [5, 7], "firstli": 5, "overhead": [5, 7], "egocentr": 5, "tight": 5, "medicin": [5, 6, 8], "glider": 5, "deshpand": 5, "3b": 5, "685": 5, "aplic": 5, "golden": 5, "earlier": [5, 8], "depict": [5, 8, 9], "multilingu": [5, 7, 8], "arena": 5, "randomli": 5, "customiz": [5, 7, 8], "irrelev": [5, 6], "unhelp": [5, 8], "occasion": 5, "rare": 5, "perfectli": 5, "cater": [5, 7], "critiqu": [5, 8], "elo": 5, "exam": 5, "probe": [5, 8], "certifi": 5, "glue": 5, "entail": [5, 7], "superglu": 5, "successor": 5, "grew": 5, "big": [5, 7], "bench": [5, 7], "srivastava": 5, "truthfulqa": [5, 7], "multitask": 5, "hendryck": [5, 8], "multidisciplinari": 5, "stanford": 5, "helm": 5, "multidimension": 5, "surround": [5, 7, 8, 9], "humanev": [5, 7], "lmsy": 5, "brought": 5, "dialogu": [5, 7], "chiang": 5, "gather": 5, "hundr": [5, 7], "alpacaev": 5, "duboi": 5, "mt": 5, "argilla": 5, "mila": 5, "mit": [5, 7], "contributor": [5, 7, 9], "western": 5, "centric": 5, "divid": [5, 6, 8], "subset": [5, 8], "agnost": 5, "dialect": 5, "render": [5, 8], "crowdsourc": 5, "livebench": 5, "white": [5, 8], "resili": [5, 6, 8], "meaningfulli": 5, "satur": 5, "zebralog": 5, "grid": 5, "puzzl": 5, "brailsford": 5, "1999": 5, "lsat": 5, "hous": 5, "clue": 5, "deduct": 5, "programmat": [5, 9], "2x2": 5, "6x6": 5, "shot": [5, 8, 9], "reductio": 5, "ad": [5, 6, 7, 9], "absurdum": 5, "hard": [5, 6], "10b": 5, "counterfactu": 5, "mileston": [5, 7], "came": 5, "arc": 5, "prize": [5, 8], "chollet": 5, "mike": [5, 6, 8], "knoop": 5, "founder": 5, "zapier": 5, "fran\u00e7oi": 5, "creator": [5, 7], "kera": 5, "genuin": 5, "agi": 5, "possess": [5, 6], "elementari": 5, "novelti": 5, "interpol": 5, "synthes": [5, 6], "fly": 5, "brute": [5, 6], "pixel": 5, "color": [5, 6], "unbeaten": 5, "win": [5, 7], "takeawai": 5, "vertic": [5, 8], "finbench": 5, "legalbench": 5, "guha": 5, "berkelei": [5, 8], "bfcl": 5, "patil": 5, "fourrier": 5, "bespok": 5, "sdk": 5, "autoregress": 5, "sub": [5, 7], "liter": 5, "disturb": 5, "zero": [5, 7, 8, 9], "varianc": [5, 8], "yt": 5, "ut": 5, "ol": 5, "heteroscedast": 5, "regress": 5, "wish": 5, "bivari": 5, "evaluationtrack": 5, "pipelineparamet": 5, "cache_dir": 5, "max_sampl": 5, "basemodelconfig": 5, "evaluation_track": 5, "model_config": 5, "parallelismmanag": 5, "envconfig": 5, "is_accelerate_avail": 5, "datetim": [5, 6], "timedelta": [5, 6], "initprocessgroupkwarg": 5, "create_evaluation_pipelin": 5, "float16": 5, "kwargs_handl": 5, "3000": 5, "save_detail": 5, "pipeline_param": 5, "launcher_typ": 5, "env_config": 5, "override_batch_s": 5, "use_chat_templ": 5, "trust_remote_cod": 5, "pipeline_paramet": 5, "schemat": [5, 6], "vllm": [5, 9], "tgi": 5, "num_few_shot": 5, "bar": 5, "bigbench": 5, "winogrand": 5, "hellaswag": 5, "nlp": [5, 6, 7, 8], "save_and_push_result": 5, "show_result": 5, "model_arg": 5, "send": [5, 6, 7, 8, 9], "serverless": 5, "inference_server_address": 5, "inference_server_auth": 5, "model_id": 5, "null": 5, "bash": [5, 7], "command": [5, 6, 7], "model_config_path": 5, "endpoint_model": 5, "llama3": 5, "qwen2": [5, 7, 9], "alibaba": [5, 7, 9], "5b": [5, 7, 9], "hui": [5, 7], "allal": [5, 7], "cluster": [5, 6], "noteworthi": [5, 7], "superior": [5, 6, 8], "grain": [5, 6, 7, 9], "salt": [5, 9], "modular": 5, "offici": 5, "revisit": 5, "langchain": [5, 6], "trace": [5, 6], "langchain_tracing_v2": 5, "langchain_api_kei": 5, "hf_evalu": 5, "langsmith_evalu": 5, "ls_client": 5, "dataset_nam": 5, "create_dataset": 5, "create_exampl": 5, "dataset_id": 5, "calculate_scor": 5, "reference_output": 5, "oai_client": 5, "xp_model_nam": 5, "lastli": 5, "run_evalu": 5, "And": [5, 6, 7, 8], "upload_result": 5, "experiment_prefix": 5, "num_repetit": 5, "386a3620": 5, "9e1cc3cb": 5, "9d6a": 5, "4356": 5, "ab34": 5, "138e0abe8be4": 5, "8741976e": 5, "5268": 5, "4b75": 5, "949f": 5, "99477dde5d64": 5, "selectedsess": 5, "b831dc1e": 5, "90bc": 5, "4ed8": 5, "8080": [5, 7], "fb42444724d6": 5, "4it": 5, "latest": [5, 6, 7, 8, 9], "tobia": [5, 9], "evaluate_modul": 5, "6fc70b7be0088120a372dfdd5d320b39b8bb3630cb8029b193941d9376e86bb0": 5, "tue": 5, "nov": [5, 7], "couldn": 5, "5it": 5, "5053784e": 5, "64445871": 5, "a53c": 5, "44b1": 5, "a422": 5, "4f49b2f9656f": 5, "69": [5, 8], "4b29f3c9": 5, "9ef7e39a": 5, "2add": 5, "410c": 5, "89f8": 5, "9f1a8b198cf1": 5, "61": [5, 8], "insert": [5, 6], "combined_df": 5, "concat": [5, 8], "ignore_index": [5, 8], "execution_tim": 5, "example_id": 5, "333333": 5, "224388": 5, "feb10f92": 5, "3167": 5, "41f3": 5, "bb1c": 5, "d271153a31a8": 5, "5b196b22": 5, "9f4c": 5, "489c": 5, "b020": 5, "7823208b42d6": 5, "348101": 5, "722464": 5, "c310f159": 5, "064a": 5, "4035": 5, "97c3": 5, "a25bbf43abc2": 5, "386076": 5, "704104": 5, "f7f24899": 5, "dd50": 5, "409e": 5, "93cc": 5, "6fb1622b60bf": 5, "443038": 5, "725059": 5, "242856d6": 5, "efb5": 5, "4101": 5, "b1cf": 5, "5805532838ac": 5, "373418": 5, "795302": 5, "ce975169": 5, "a0ab": 5, "40ce": 5, "8e32": 5, "efa28d06079d": 5, "stat": [5, 7], "groupbi": [5, 8], "agg": [5, 8], "sort": 5, "sort_valu": 5, "subplot": 5, "pyplot": 5, "plt": 5, "ax1": 5, "ax2": 5, "figsiz": 5, "2ecc71": 5, "3498db": 5, "e74c3c": 5, "bleu_mean": 5, "bleu_std": 5, "enumer": [5, 6, 8], "errorbar": 5, "yerr": 5, "fmt": 5, "markers": 5, "capsiz": 5, "set_ylabel": 5, "set_titl": 5, "set_xtick": 5, "set_xticklabel": 5, "rotat": 5, "set_ylim": 5, "bottom": [5, 6], "legend": 5, "exec_mean": 5, "exec_std": 5, "tight_layout": 5, "ndetail": 5, "4038": 5, "0453": 5, "7815": 5, "0433": 5, "3768": 5, "0424": 5, "8343": 5, "2208": 5, "3519": 5, "0775": 5, "9122": 5, "1482": 5, "377": 5, "042": 5, "078": 5, "slower": [5, 6, 8], "04": [5, 7], "interestingli": 5, "decoupl": 5, "reload": 5, "facilit": [5, 8], "promptfooconfig": 5, "model_comparison": 5, "pretti": [5, 8], "dump": 5, "default_flow_styl": 5, "sort_kei": 5, "prompt1": 5, "defaulttest": 5, "ye": [5, 6, 7, 8, 9], "1000m": 5, "eval_data": 5, "latency_m": 5, "totallatencym": 5, "token_usag": 5, "tokenusag": 5, "assert_pass": 5, "assertpasscount": 5, "assert_fail": 5, "assertfailcount": 5, "prompt_token": [5, 7], "num_request": 5, "numrequest": 5, "num": 5, "2463": 5, "000035": 5, "3773": 5, "004620": 5, "1669": 5, "000091": 5, "1669m": 5, "highest": [5, 6, 7, 9], "3773m": 5, "00462": 5, "promptfool": 5, "manual": [5, 6, 7, 8], "redefin": 5, "prompt_comparison": 5, "prompt2": 5, "prompt3": 5, "prompt_fil": 5, "prompt_cont": 5, "BE": 5, "again": 5, "prompt_id": 5, "promptid": 5, "gradingresult": 5, "df_raw": 5, "reset_index": [5, 8], "poorli": 5, "eas": [5, 7, 8, 9], "hf": [5, 7], "plain": [5, 6, 7], "vanilla": 5, "defi": 5, "accustom": 5, "legaci": 5, "unsustain": 5, "prd": 5, "cultiv": [5, 8], "organiz": 5, "alb": [5, 7], "loubna": [5, 7], "anton": [5, 7], "lozhkov": [5, 7], "bakouch": [5, 7], "gabriel": [5, 7, 8], "mart\u00edn": [5, 7, 8], "bl\u00e1zquez": [5, 7], "lewi": [5, 6, 7], "tunstal": [5, 7], "agust\u00edn": [5, 7], "piquer": [5, 7], "andr": [5, 6, 7], "marafioti": [5, 7], "cyril": [5, 7], "zakka": [5, 7], "leandro": [5, 7], "werra": [5, 7], "wolf": [5, 7], "are24": 5, "judgearena": 5, "bps99": 5, "salli": 5, "pott": 5, "barbara": 5, "557": [5, 8], "sciencedirect": 5, "s0377221798003646": 5, "doi": [5, 6, 8, 9], "1016": 5, "s0377": 5, "2217": 5, "00364": 5, "ctj": 5, "jerri": [5, 8], "tworek": [5, 8], "heewoo": [5, 8], "jun": [5, 8], "qime": [5, 8], "henriqu": [5, 8], "pond": [5, 8], "de": [5, 8], "oliveira": [5, 8], "pinto": [5, 8], "harri": [5, 8], "yuri": 5, "burda": 5, "greg": [5, 8], "brockman": [5, 8], "raul": [5, 8], "puri": [5, 8], "gretchen": [5, 8], "krueger": [5, 8], "petrov": [5, 8], "heidi": 5, "khlaaf": 5, "girish": [5, 8], "sastri": [5, 8], "brook": [5, 8], "chan": [5, 6, 8], "grai": [5, 8], "ryder": [5, 8], "mikhail": [5, 8], "pavlov": [5, 8], "alethea": [5, 8], "lukasz": 5, "kaiser": [5, 8], "mohammad": [5, 8], "bavarian": [5, 8], "clemen": [5, 8], "winter": [5, 8], "philipp": 5, "tillet": [5, 8], "felip": [5, 8], "petroski": [5, 8], "dave": [5, 8], "cum": [5, 8], "plappert": 5, "fotio": 5, "chantzi": [5, 8], "barn": 5, "ariel": 5, "herbert": 5, "voss": [5, 8], "hebgen": 5, "guss": 5, "nichol": 5, "paino": [5, 8], "nikola": [5, 8], "tezak": [5, 8], "babuschkin": [5, 8], "suchir": [5, 8], "balaji": [5, 8], "shantanu": [5, 8], "jain": [5, 8], "hess": [5, 8], "carr": 5, "josh": [5, 8], "achiam": [5, 8], "vedant": 5, "misra": 5, "evan": [5, 7, 8], "morikawa": [5, 8], "matthew": 5, "knight": [5, 8], "mile": [5, 8], "brundag": [5, 8], "mira": [5, 8], "murati": [5, 8], "kati": [5, 8], "mayer": [5, 8], "bob": [5, 8, 9], "mcgrew": [5, 8], "ilya": [5, 8], "sutskev": [5, 8], "wojciech": [5, 8], "zaremba": [5, 8], "2107": 5, "03374": 5, "cz": 5, "lianmin": 5, "ying": 5, "sheng": 5, "anastasio": 5, "angelopoulo": 5, "tianl": 5, "dacheng": 5, "banghua": 5, "jordan": [5, 8], "gonzalez": 5, "ion": 5, "stoica": 5, "04132": 5, "cho24a": 5, "francoi": 5, "arcpriz": 5, "cho24b": 5, "drcw": 5, "darshan": 5, "selvan": 5, "sunitha": 5, "ravi": 5, "sky": 5, "ch": 5, "bartosz": 5, "mielczarek": 5, "anand": [5, 8], "kannappan": [5, 8], "qian": [5, 8], "14140": 5, "dglh24": 5, "yann": 5, "bal\u00e1z": 5, "galambosi": 5, "tatsunori": 5, "hashimoto": 5, "debia": 5, "04475": 5, "fhwt23": 5, "cl\u00e9mentin": 5, "nathan": 5, "habib": 5, "gnh": 5, "julian": 5, "nyarko": 5, "ho": 5, "r\u00e9": 5, "adam": [5, 8], "chilton": 5, "aditya": [5, 8], "narayana": 5, "chohla": 5, "brandon": [5, 8, 9], "waldon": 5, "rockmor": 5, "diego": 5, "zambrano": 5, "dmitri": 5, "talisman": 5, "enam": 5, "hoqu": 5, "faiz": 5, "surani": 5, "frank": [5, 8], "fagan": 5, "galit": 5, "sarfati": 5, "gregori": 5, "dickinson": 5, "haggai": 5, "porat": 5, "hegland": 5, "jessica": [5, 8], "joe": [5, 8], "nudel": 5, "joel": [5, 8], "niklau": 5, "nai": 5, "choi": 5, "margaret": [5, 7], "hagan": 5, "megan": 5, "livermor": 5, "nikon": 5, "rasumov": 5, "rahe": 5, "nil": 5, "holzenberg": 5, "noam": 5, "kolt": 5, "henderson": 5, "rehaag": 5, "sharad": 5, "shang": 5, "spencer": 5, "sunni": 5, "gandhi": 5, "zur": 5, "varun": 5, "iyer": [5, 8], "zehua": 5, "2308": 5, "11462": 5, "hbb": 5, "collin": 5, "burn": 5, "steven": [5, 8], "basart": [5, 8], "zou": [5, 8], "manta": [5, 8], "mazeika": [5, 8], "03300": 5, "hbd": 5, "maxwel": 5, "forb": 5, "yejin": 5, "curiou": 5, "neural": [5, 9], "degener": 5, "1904": 5, "09751": 5, "hug24a": 5, "wiki": [5, 9], "hug24b": 5, "hug24c": 5, "model_doc": 5, "hug24d": 5, "cookbook": [5, 6], "llm_judg": 5, "hug24f": 5, "hyc": [5, 7], "binyuan": [5, 7], "zeyu": [5, 7], "cui": [5, 7], "jiaxi": [5, 7], "dayiheng": [5, 7], "tianyu": [5, 7], "jiajun": [5, 7], "kai": [5, 6, 7, 8], "dang": [5, 7], "coder": [5, 7], "preprint": [5, 7, 9], "2409": [5, 7, 8], "12186": [5, 7], "lx": 5, "zhen": 5, "xiaohan": 5, "jia": [5, 6], "yuxuan": 5, "lai": 5, "chongyang": 5, "shuai": 5, "nlg": 5, "07103": 5, "lbl": 5, "bommasani": 5, "toni": 5, "dimitri": 5, "tsipra": 5, "dilara": 5, "soylu": 5, "michihiro": 5, "yasunaga": 5, "yian": 5, "deepak": 5, "narayanan": 5, "yuhuai": 5, "newman": 5, "binhang": 5, "bobbi": 5, "ce": 5, "christian": [5, 8], "cosgrov": 5, "acosta": 5, "nava": [5, 8], "drew": 5, "hudson": 5, "zelikman": 5, "esin": 5, "durmu": 5, "faisal": 5, "ladhak": 5, "frieda": 5, "rong": [5, 6], "ren": [5, 7], "huaxiu": 5, "yao": [5, 8, 9], "jue": 5, "keshav": 5, "santhanam": 5, "laurel": 5, "lucia": 5, "mert": 5, "yuksekgonul": 5, "mirac": 5, "suzgun": 5, "niladri": 5, "chatterji": 5, "omar": [5, 6], "khattab": [5, 6], "chi": [5, 6, 8, 9], "sang": [5, 8], "shibani": [5, 8], "santurkar": [5, 8], "surya": 5, "icard": 5, "tianyi": 5, "vishrav": 5, "chaudhari": 5, "xuechen": 5, "yuhui": 5, "yuta": 5, "koreeda": 5, "2211": 5, "09110": 5, "lbc24": 5, "ronan": 5, "bra": 5, "allenai": 5, "lhe22": [5, 7, 8], "stephani": [5, 7, 8], "owain": [5, 7, 8], "mimic": [5, 7, 8], "falsehood": [5, 7, 8], "2109": [5, 7, 8], "07958": [5, 7, 8], "pzwg23": 5, "shishir": 5, "tianjun": 5, "xin": [5, 8], "gorilla": 5, "15334": 5, "pro24": 5, "dev": [5, 6], "ras24": 5, "sebastian": [5, 6], "scratch": 5, "1633437166": 5, "sll": 5, "bhaskarjit": 5, "mingshu": 5, "jingrao": 5, "lyu": 5, "nathalia": 5, "castellano": 5, "pasquali": 5, "dhagash": 5, "12148": 5, "srf": 5, "shivalika": 5, "angelika": 5, "roman": [5, 8], "adelani": 5, "ngui": 5, "vila": 5, "suero": 5, "peerat": 5, "limkonchotiwat": 5, "kelli": 5, "marchisio": 5, "qi": [5, 6], "leong": 5, "yosephin": 5, "susanto": 5, "raymond": [5, 8], "ng": [5, 8], "shayn": 5, "longpr": 5, "ko": 5, "madelin": 5, "antoin": 5, "bosselut": 5, "oh": 5, "leshem": 5, "choshen": 5, "daphn": 5, "ippolito": 5, "enzo": [5, 9], "ferrant": 5, "marzieh": 5, "fadae": 5, "beyza": 5, "ermi": 5, "sara": 5, "hooker": 5, "linguist": [5, 6, 8], "03304": 5, "srr": 5, "aarohi": 5, "abhinav": [5, 6], "rastogi": 5, "abhishek": 5, "rao": 5, "abu": 5, "awal": 5, "shoeb": 5, "abubakar": 5, "abid": [5, 7], "fisch": 5, "santoro": 5, "gupta": 5, "adri\u00e0": 5, "garriga": 5, "alonso": 5, "agnieszka": 5, "kluska": 5, "aitor": 5, "lewkowycz": 5, "akshat": 5, "warstadt": 5, "alexand": [5, 8, 9], "kocurek": 5, "ali": [5, 8], "safaya": 5, "tazarv": 5, "aman": 5, "hussain": 5, "dsouza": 5, "ambros": 5, "slone": 5, "ameet": 5, "rahan": 5, "anantharaman": 5, "ander": 5, "andreassen": 5, "madotto": 5, "santilli": 5, "stuhlm\u00fcller": 5, "la": 5, "lampinen": 5, "angelica": 5, "anh": 5, "vuong": 5, "animesh": 5, "gottardi": 5, "antonio": 5, "norelli": 5, "anu": 5, "venkatesh": 5, "arash": 5, "gholamidavoodi": 5, "arfa": 5, "tabassum": 5, "arul": 5, "menez": 5, "arun": [5, 8], "kirubarajan": 5, "asher": 5, "mullokandov": 5, "ashish": 5, "sabharw": 5, "herrick": 5, "avia": 5, "efrat": 5, "aykut": 5, "erdem": 5, "ayla": 5, "karaka\u015f": 5, "bao": [5, 7, 8], "loe": 5, "barret": [5, 8], "zoph": [5, 8], "bart\u0142omiej": 5, "bojanowski": 5, "batuhan": 5, "\u00f6zyurt": 5, "behnam": 5, "hedayatnia": 5, "neyshabur": 5, "inden": 5, "benno": 5, "stein": 5, "berk": 5, "ekmekci": 5, "blake": 5, "howald": 5, "bryan": 5, "orinion": 5, "diao": 5, "dour": 5, "stinson": 5, "cedrick": 5, "argueta": 5, "c\u00e9sar": 5, "ferri": 5, "ram\u00edrez": 5, "chandan": 5, "charl": 5, "rathkopf": 5, "chenlin": 5, "meng": 5, "chitta": 5, "baral": 5, "chiyu": 5, "callison": 5, "burch": 5, "voigt": 5, "cindi": 5, "ramirez": 5, "clara": 5, "rivera": 5, "clemencia": 5, "siro": 5, "colin": [5, 7], "raffel": [5, 7], "courtnei": 5, "ashcraft": 5, "cristina": 5, "garbacea": 5, "damien": [5, 8], "sileo": 5, "garrett": 5, "kilman": 5, "freeman": 5, "khashabi": 5, "levi": [5, 8], "mosegu\u00ed": 5, "gonz\u00e1lez": 5, "perszyk": 5, "danqi": 5, "dar": 5, "gilboa": 5, "dohan": [5, 8], "drakard": 5, "jurgen": 5, "debajyoti": 5, "datta": 5, "deni": 5, "emelin": 5, "kleyko": 5, "deniz": 5, "yuret": 5, "derek": [5, 8], "tam": [5, 9], "dieuwk": 5, "hupk": 5, "diganta": 5, "dilyar": 5, "buzan": 5, "coelho": 5, "mollo": 5, "diyi": 5, "dylan": 5, "schrader": 5, "ekaterina": 5, "shutova": 5, "ekin": 5, "dogu": 5, "cubuk": 5, "elad": 5, "segal": 5, "eleanor": 5, "hagerman": 5, "donowai": 5, "elli": 5, "pavlick": 5, "rodola": 5, "emma": 5, "lam": 5, "chu": [5, 8], "erkut": 5, "erni": 5, "dyer": 5, "jerzak": 5, "eunic": 5, "engefu": 5, "manyasi": 5, "evgenii": 5, "zheltonozhskii": 5, "fanyu": 5, "fatemeh": 5, "siar": 5, "fernando": 5, "mart\u00ednez": 5, "plume": 5, "francesca": 5, "happ\u00e9": 5, "gaurav": 5, "genta": 5, "indra": 5, "winata": 5, "gerard": 5, "melo": 5, "germ\u00e1n": 5, "kruszewski": 5, "giambattista": [5, 8], "parascandolo": [5, 8], "giorgio": 5, "mariani": 5, "gloria": 5, "gonzalo": 5, "jaimovitch": 5, "l\u00f3pez": 5, "gregor": 5, "betz": 5, "gui": [5, 7], "gur": 5, "hana": 5, "galijasev": 5, "rashkin": 5, "hannaneh": 5, "hajishirzi": 5, "harsh": 5, "hayden": 5, "bogar": 5, "henri": [5, 8], "shevlin": 5, "hinrich": 5, "sch\u00fctze": 5, "hiromu": 5, "yakura": 5, "hongm": 5, "hugh": 5, "mee": 5, "wong": [5, 6, 8], "isaac": 5, "nobl": 5, "jaap": 5, "jumelet": 5, "geissing": 5, "jaehoon": 5, "jaim": 5, "fern\u00e1ndez": 5, "fisac": 5, "simon": 5, "koppel": 5, "koco\u0144": 5, "jana": 5, "thompson": [5, 7, 8], "janel": 5, "wingfield": 5, "jarema": 5, "radom": 5, "jascha": 5, "sohl": [5, 8], "dickstein": 5, "phang": 5, "yosinski": 5, "jekaterina": 5, "novikova": 5, "jell": 5, "bosscher": 5, "jennif": 5, "marsh": 5, "jeroen": 5, "taal": 5, "engel": 5, "jesujoba": 5, "alabi": 5, "jiam": 5, "jillian": 5, "joan": 5, "waweru": 5, "burden": 5, "bali": 5, "batcheld": 5, "berant": 5, "j\u00f6rg": 5, "frohberg": 5, "jo": 5, "rozen": 5, "orallo": 5, "boudeman": 5, "guerr": 5, "tenenbaum": 5, "joyc": 5, "chua": 5, "kanclerz": 5, "karen": 5, "livescu": 5, "karl": 5, "krauth": 5, "karthik": 5, "gopalakrishnan": 5, "katerina": 5, "ignatyeva": 5, "katja": 5, "markert": 5, "kaustubh": 5, "dhole": 5, "gimpel": 5, "omondi": 5, "kori": 5, "mathewson": 5, "kristen": 5, "chiafullo": 5, "ksenia": 5, "shkaruta": 5, "shridhar": 5, "kyle": [5, 6, 8], "mcdonel": 5, "richardson": 5, "laria": 5, "reynold": 5, "leo": [5, 8], "dugan": 5, "lianhui": 5, "lidia": 5, "contrera": 5, "ochando": 5, "morenc": 5, "moschella": 5, "luci": 5, "ludwig": 5, "schmidt": [5, 8], "luheng": 5, "olivero": 5, "col\u00f3n": 5, "metz": [5, 8], "l\u00fctfi": 5, "kerem": 5, "\u015fenel": 5, "bosma": [5, 6], "sap": [5, 8], "maartj": 5, "hoev": 5, "maheen": 5, "farooqi": 5, "manaal": 5, "faruqui": 5, "marco": [5, 6], "baturan": 5, "marelli": 5, "maru": 5, "maria": 5, "quintana": 5, "tolkiehn": 5, "mario": [5, 8], "giulianelli": 5, "martha": 5, "potthast": 5, "leavitt": 5, "hagen": 5, "m\u00e1ty\u00e1": 5, "schubert": 5, "medina": [5, 8], "orduna": 5, "baitemirova": 5, "melodi": 5, "arnaud": 5, "melvin": 5, "mcelrath": 5, "yee": 5, "cohen": 5, "ivanitskii": 5, "starritt": 5, "strube": 5, "micha\u0142": 5, "sw\u0119drowski": 5, "michel": [5, 8], "bevilacqua": 5, "mihir": 5, "kale": 5, "cain": 5, "mime": 5, "mitch": 5, "walker": 5, "mo": 5, "tiwari": 5, "mohit": 5, "bansal": 5, "moin": 5, "aminnaseri": 5, "mor": 5, "geva": 5, "mozhdeh": 5, "gheini": 5, "mukund": [5, 6], "varma": 5, "nanyun": 5, "peng": [5, 8], "nayeon": 5, "neta": 5, "krakov": 5, "doiron": 5, "nicol": 5, "martinez": 5, "nikita": [5, 6], "nangia": 5, "nikla": 5, "decker": 5, "muennighoff": 5, "nitish": [5, 8], "shirish": [5, 8], "keskar": [5, 8], "niveditha": 5, "constant": 5, "fiedel": 5, "nuan": 5, "wen": [5, 6], "oliv": [5, 8], "agha": 5, "elbaghdadi": 5, "omer": 5, "moreno": 5, "casar": 5, "parth": 5, "doshi": 5, "pascal": [5, 6], "fung": 5, "pu": 5, "vicol": 5, "pegah": 5, "alipoormolabashi": 5, "peiyuan": 5, "eckerslei": 5, "phu": 5, "mon": 5, "htut": 5, "pinyu": 5, "hwang": 5, "piotr": 5, "mi\u0142kowski": 5, "piyush": 5, "pouya": [5, 6], "pezeshkpour": [5, 6], "priti": 5, "oli": 5, "qiaozhu": [5, 6], "mei": [5, 6, 7], "qing": [5, 8], "qinlang": 5, "rabin": 5, "banjad": 5, "rachel": [5, 8], "etta": 5, "rudolph": 5, "raefer": 5, "rahel": 5, "haback": 5, "ramon": 5, "risco": 5, "rapha\u00ebl": 5, "milli\u00e8r": 5, "rhythm": 5, "garg": [5, 7], "rif": 5, "saurou": 5, "riku": 5, "arakawa": 5, "robb": 5, "raymaek": 5, "rohan": 5, "sikand": 5, "novak": 5, "sitelew": 5, "lebra": 5, "rosann": 5, "rowan": [5, 8], "ruslan": 5, "salakhutdinov": 5, "stoval": 5, "teehan": 5, "sahib": 5, "saif": 5, "sajant": 5, "dillav": 5, "shleifer": 5, "wiseman": 5, "gruetter": 5, "schoenholz": 5, "sanghyun": 5, "sanjeev": 5, "kwatra": 5, "sarik": 5, "ghazarian": 5, "sayan": 5, "casei": [5, 8], "bischoff": 5, "gehrmann": 5, "schuster": 5, "sepideh": 5, "sadeghi": 5, "shadi": 5, "hamdan": 5, "sharon": 5, "shashank": 5, "sherri": 5, "shi": [5, 8], "shikhar": 5, "shima": 5, "asaadi": 5, "shubh": 5, "pachchigar": 5, "shubham": 5, "toshniw": 5, "shyam": [5, 8], "upadhyai": 5, "shyamolima": 5, "debnath": 5, "siamak": 5, "shakeri": 5, "thormey": 5, "melzi": 5, "siva": 5, "reddi": 5, "sneha": 5, "priscilla": 5, "makini": 5, "soo": 5, "hwan": 5, "toren": 5, "sriharsha": 5, "hatwar": 5, "stanisla": 5, "dehaen": 5, "stefan": 5, "divic": 5, "stella": 5, "biderman": 5, "stephen": 5, "prasad": 5, "piantadosi": 5, "stuart": [5, 8], "shieber": 5, "summer": [5, 8], "misherghi": 5, "svetlana": 5, "kiritchenko": 5, "swaroop": 5, "tal": 5, "linzen": 5, "tariq": 5, "tatsu": 5, "te": 5, "th\u00e9o": 5, "desbord": 5, "theodor": 5, "rothschild": 5, "phan": [5, 8], "tiberiu": 5, "nkinyili": 5, "timo": 5, "schick": 5, "timofei": 5, "kornev": 5, "titu": 5, "tunduni": 5, "gerstenberg": 5, "trenton": 5, "trishala": 5, "neeraj": 5, "tushar": 5, "khot": 5, "shultz": 5, "uri": 5, "shaham": 5, "vera": 5, "demberg": 5, "victoria": [5, 8], "nyamai": 5, "vika": 5, "raunak": 5, "vinai": 5, "ramasesh": 5, "udai": 5, "prabhu": 5, "vishakh": 5, "padmakumar": 5, "vivek": [5, 6], "srikumar": [5, 6], "fedu": [5, 8], "wout": 5, "vossen": 5, "xiaoyu": 5, "tong": [5, 8], "xinran": 5, "xinyi": 5, "yadollah": 5, "yaghoobzadeh": 5, "yair": 5, "lakretz": 5, "yangqiu": 5, "yasaman": 5, "bahri": 5, "yichi": 5, "yide": 5, "yifu": 5, "yonatan": 5, "belinkov": 5, "yufang": 5, "seid": 5, "zhuoy": 5, "zijian": 5, "ziji": 5, "zirui": 5, "ziyi": 5, "extrapol": [5, 6], "2206": 5, "04615": 5, "wpn": 5, "yada": 5, "pruksachatkun": 5, "amanpreet": 5, "hill": 5, "stickier": 5, "wsm": 5, "1804": 5, "07461": 5, "wtb": 5, "tai": 5, "borgeaud": 5, "dani": 5, "yogatama": 5, "denni": [5, 6, 8], "donald": 5, "metzler": 5, "ed": [5, 6], "oriol": 5, "vinyal": 5, "dean": 5, "07682": 5, "wdr": 5, "doolei": 5, "manlei": 5, "arka": [5, 8], "pal": 5, "feuer": 5, "siddhartha": 5, "ravid": 5, "shwartz": [5, 8], "ziv": 5, "khalid": [5, 7], "saifullah": 5, "siddartha": 5, "naidu": 5, "chinmai": 5, "hegd": 5, "lecun": 5, "goldstein": 5, "willi": 5, "neiswang": 5, "micah": 5, "goldblum": 5, "19314": 5, "yyh": 5, "baosong": [5, 7], "chengpeng": 5, "chengyuan": [5, 7], "fei": [5, 6, 7], "guant": 5, "haoran": [5, 7], "huan": [5, 7], "jialong": 5, "jialin": 5, "jianhong": [5, 7], "tu": [5, 7], "jianwei": [5, 7], "jianxin": [5, 7], "jin": [5, 6, 8], "jingren": [5, 7], "jinz": 5, "jinzheng": 5, "junyang": [5, 7], "keme": [5, 7], "keqin": [5, 7], "kexin": [5, 7], "mingfeng": [5, 7], "xue": [5, 7, 8], "ni": [5, 6], "pei": [5, 7, 8], "ru": 5, "men": [5, 7], "ruiz": 5, "runji": [5, 7], "shiji": 5, "sinan": 5, "tianhang": 5, "wenbin": 5, "ge": 5, "xiaodong": 5, "deng": 5, "xiaohuan": 5, "xingzhang": [5, 7], "xinyu": [5, 8], "xipin": 5, "xuancheng": [5, 7], "yichang": [5, 7], "wan": [5, 7], "yunfei": 5, "yuqiong": [5, 7], "zhenru": [5, 7], "zhihao": 5, "10671": 5, "zcl24": 5, "zhihan": 5, "cao": 5, "lizi": 5, "openreview": [5, 6], "forum": [5, 6], "aegrf1uy0p": 5, "zc": 5, "siyuan": 5, "zhuang": [5, 8], "zhanghao": 5, "yonghao": 5, "zi": 5, "zhuohan": 5, "xing": [5, 8], "2306": [5, 8], "05685": 5, "huggingface24": 5, "metaai24": 5, "422": 5, "thank": [5, 7, 9], "doubl": 6, "steve": [6, 8], "lc": 6, "cutoff": 6, "amayuela": 6, "tail": 6, "kotha": 6, "unifi": [6, 7, 9], "chromadb": 6, "realli": 6, "silver": 6, "bullet": 6, "mandatori": 6, "gutenberg": 6, "cic": 6, "ingest": 6, "preprocess": [6, 7, 9], "parser": [6, 9], "microsoft": [6, 7], "powerpoint": 6, "ocr": 6, "exif": 6, "metadata": [6, 7], "docker": [6, 7], "container": [6, 7], "xlsx": 6, "text_cont": 6, "ibm": [6, 7, 8], "docx": 6, "pptx": 6, "layout": 6, "llamaindex": 6, "document_convert": 6, "documentconvert": 6, "export_to_markdown": 6, "presenc": 6, "merril": 6, "lynch": 6, "cio": 6, "outlook": 6, "forecast_file_path": 6, "result_md": 6, "forecast_result_docl": 6, "levenshtein": 6, "distanc": 6, "sequencematch": 6, "difflib": 6, "longest": 6, "levenshtein_similar": 6, "text1": 6, "text2": 6, "max_len": 6, "simple_similar": 6, "ratio": [6, 7], "forecast_result_md": 6, "13985705461925346": 6, "17779960707269155": 6, "readabl": 6, "messi": 6, "2025e": 6, "compos": [6, 7, 8], "financial_vari": 6, "financial_forecast": 6, "econforecast": 6, "extract_prompt": 6, "base_prompt": [6, 9], "extract_from_doc": 6, "twice": 6, "md_financi": 6, "docling_financi": 6, "easier": [6, 7, 8, 9], "gdp": 6, "cpi": 6, "fed": 6, "df_md_forecast": 6, "df_docling_forecast": 6, "despit": [6, 7, 9], "underweight": 6, "neutral": [6, 8], "overweight": 6, "chart": 6, "asset_class_docl": 6, "asset_class_md": 6, "df_md": 6, "df_docl": 6, "true_valu": 6, "df_comparison": 6, "cap": 6, "exempt": 6, "markitdown_accuraci": 6, "docling_accuraci": 6, "93": [6, 7, 8], "unstructur": [6, 7, 9], "sector": 6, "convert_and_export_t": 6, "file_path": 6, "doc_convert": 6, "start_tim": [6, 8], "conv_r": 6, "table_df": 6, "export_to_datafram": 6, "end_tim": 6, "2f": 6, "usd": 6, "wtd": 6, "mtd": 6, "ytd": 6, "djia": 6, "926": 6, "amp": 6, "051": 6, "277": 6, "russel": [6, 8], "2000": 6, "msci": 6, "817": [6, 8], "eaf": 6, "319": 6, "107": 6, "01": [6, 7], "66": [6, 8], "92": 6, "municip": 6, "79": [6, 8], "slight": 6, "discretionari": 6, "yellow": 6, "estat": 6, "orang": 6, "stapl": 6, "constructor": 6, "md_llm": 6, "llm_client": 6, "llm_model": 6, "png": 6, "overview": [6, 9], "showcas": 6, "bond": 6, "crude": 6, "oil": 6, "sit": 6, "648": 6, "ounc": 6, "euro": 6, "tactic": 6, "bofa": 6, "circl": [6, 8], "firecrawl": 6, "mendabl": 6, "crawler": 6, "llamapars": 6, "deserv": 6, "arulkumaran": 6, "karthikeyan": 6, "almasri": 6, "fetch": 6, "spreadsheet": 6, "literatur": [6, 8], "canon": 6, "succinct": [6, 7], "authorship": 6, "book_url": 6, "intro": 6, "structured_output": 6, "chapter_url": 6, "chapter_id": 6, "dimension": 6, "weaviat": 6, "faiss": 6, "milvu": 6, "chroma_cli": 6, "aw": [6, 7, 8], "azur": 6, "gcp": 6, "create_collect": 6, "taming_llm": 6, "argument": [6, 7, 8, 9], "query_collect": 6, "query_text": 6, "n_result": 6, "enquir": 6, "related": 6, "leaderboard": [6, 7, 8], "2024i": 6, "behind": [6, 8], "minilm": 6, "l6": 6, "v2": [6, 7, 8], "sentence_transform": 6, "2024f": 6, "sentencetransform": 6, "embedding_model": 6, "docs_to_emb": 6, "encod": [6, 7, 8, 9], "384": [6, 8], "0000": 6, "4402": 6, "3022": 6, "4028": 6, "6606": 6, "5807": 6, "6313": 6, "matrix": [6, 7, 8], "heatmap": 6, "wise": [6, 9], "dataset": [6, 9], "tree": [6, 8, 9], "kd": 6, "ball": 6, "partit": 6, "hierarch": [6, 8], "curs": 6, "hnsw": 6, "promin": [6, 8], "lsh": 6, "hash": 6, "bucket": 6, "sacrific": [6, 7], "tutori": 6, "crossencod": 6, "512": 6, "passag": [6, 8], "argmax": 6, "52623": 6, "328738": 6, "750055": 6, "topk": [6, 9], "rag_system_prompt_templ": 6, "user_prompt_templ": 6, "popul": 6, "rag_qa": 6, "res_rerank": 6, "invok": [6, 9], "alammar": 6, "diamant": 6, "kimothi": 6, "athinaai": 6, "envis": 6, "incomplet": [6, 7, 8], "unreli": [6, 7], "acut": 6, "unverifi": 6, "intric": 6, "hamper": 6, "raga": 6, "misinterpret": 6, "appar": [6, 8], "shed": 6, "light": 6, "misl": 6, "gemini": [6, 7], "outperform": [6, 7], "rout": 6, "hybrid": 6, "retrollm": 6, "cag": 6, "preload": 6, "precomput": 6, "loft": 6, "hop": 6, "gecko": 6, "vectordb": 6, "llama_pars": 6, "llx": 6, "result_typ": 6, "load_data": 6, "doc1": 6, "doc2": 6, "llama_index": 6, "vectorstoreindex": 6, "simpledirectoryread": 6, "vector_stor": 6, "chroma": 6, "chromavectorstor": 6, "storagecontext": 6, "db": 6, "persistentcli": 6, "chroma_db": 6, "chroma_collect": 6, "get_or_create_collect": 6, "storage_context": 6, "from_default": 6, "from_docu": 6, "query_engin": 6, "as_query_engin": 6, "prototyp": [6, 7], "complement": 6, "reassembl": 6, "breakdown": [6, 8], "fewer": [6, 7, 8], "furthermor": [6, 9], "zenml": 6, "max_output_token": 6, "statement": [6, 8], "10k": 6, "diagram": [6, 8], "charactertextsplitt": 6, "tiktoken": [6, 8], "sequenti": 6, "newlin": 6, "cheap": 6, "speciali": 6, "nltk": 6, "spaci": 6, "talk": 6, "theme": [6, 7, 8], "splitter": 6, "surpass": 6, "get_chunk": 6, "chunk_siz": 6, "chunk_overlap": 6, "langchain_text_splitt": 6, "text_splitt": 6, "from_tiktoken_encod": 6, "split_text": 6, "persona": 6, "langchain_cor": [6, 9], "prompttempl": 6, "get_base_prompt_templ": 6, "from_templ": 6, "llmchain": 6, "output_pars": 6, "stroutputpars": 6, "langchain_commun": 6, "chat_model": 6, "chatlitellm": 6, "get_llm_chain": 6, "prompt_templ": [6, 9], "llm_chain": [6, 9], "api_key_label": 6, "upper": 6, "_api_kei": 6, "get_dynamic_prompt_templ": 6, "get_dynamic_prompt_param": 6, "prompt_param": 6, "part_idx": 6, "total_part": 6, "chat_context": 6, "param": 6, "dynamic_prompt_param": 6, "concaten": 6, "generate_report": 6, "input_cont": 6, "llm_model_nam": 6, "report_part": 6, "num_part": 6, "dinam": 6, "priovid": 6, "cummul": 6, "max_chunk_s": 6, "max_chunk_overlap": 6, "apple_report": 6, "report_cont": 6, "report_lin": 6, "splitlin": 6, "total_lin": 6, "quarter_lin": 6, "top_port": 6, "bottom_port": 6, "uncov": [6, 8, 9], "delv": 6, "consol": 6, "reaction": 6, "disciplin": 6, "subhead": 6, "depth": [6, 8], "2m": [6, 7], "harvard": [6, 7], "enrol": 6, "gov": [6, 8], "1039": 6, "birth": [6, 8], "democraci": 6, "tuesdai": 6, "magna": 6, "carta": 6, "trudg": 6, "dens": 6, "conversation": 6, "knowledge_bas": 6, "add_knowledge_bas": 6, "add_cit": 6, "bool": [6, 8], "num_quest": 6, "input_memori": 6, "response_memori": 6, "urls_memori": 6, "extractor": 6, "citabl": 6, "corpora": 6, "formatted_cont": 6, "reference_id": 6, "wrapper": [6, 9], "content_gener": 6, "user_instruct": 6, "llmbackend": 6, "cache_ttl": 6, "cachedcont": 6, "display_nam": 6, "due_knowledge_bas": 6, "system_instruct": 6, "compose_prompt": 6, "conversation_config": 6, "ttl": 6, "generativemodel": 6, "from_cached_cont": 6, "cached_cont": 6, "quiz_inst": 6, "professor": 6, "difficulti": [6, 8], "syllabu": 6, "kennedi": 6, "inaugur": 6, "lincoln": 6, "gettysburg": 6, "liberti": 6, "mayflow": 6, "abraham": 6, "kb": 6, "epub": 6, "pg": 6, "gemini_duo": 6, "genai_duo": 6, "duo": 6, "usage_metadata": 6, "38470": 6, "anytim": 6, "shap": 6, "mckechni": 6, "study_refer": 6, "pg10000": 6, "65363": 6, "pg65363": 6, "quizz": 6, "problemat": [6, 8], "simpler": [6, 7, 9], "ag24": 6, "jai": [6, 8], "1098150969": 6, "9781098150952": 6, "awp": 6, "alfonso": 6, "liangm": 6, "pan": [6, 8], "wenhu": 6, "lun": 6, "ku": 6, "editor": [6, 8], "acl": [6, 8], "6416": 6, "6432": 6, "bangkok": 6, "thailand": 6, "aclanthologi": [6, 8], "383": 6, "18653": [6, 8], "v1": [6, 7, 8], "bcv14": 6, "aaron": 6, "courvil": 6, "vincent": 6, "1206": 6, "5538": 6, "ccch24": 6, "chao": 6, "jui": 6, "hung": [6, 9], "cheng": [6, 8, 9], "hen": 6, "hsen": 6, "15605": 6, "dia24": 6, "nir": 6, "nirdiam": 6, "rag_techniqu": 6, "hrk": 6, "koleczek": 6, "arshdeep": 6, "franklin": 6, "sadid": 6, "hasan": 6, "10541": 6, "jlz": 6, "mathew": 6, "erik": [6, 8], "lindgren": 6, "matei": 6, "zaharia": 6, "carbin": 6, "drozdov": 6, "drown": 6, "11767": 6, "kim24": 6, "9781633435858": 6, "meap": 6, "ksr24": 6, "suha": 6, "springer": 6, "aditi": 6, "raghunathan": 6, "twelfth": 6, "vrhif2hsrm": 6, "lcd": 6, "jinhyuk": 6, "zhuyun": 6, "dheeru": 6, "dua": 6, "devendra": 6, "sachan": 6, "boratko": 6, "luan": 6, "s\u00e9bastien": 6, "arnold": 6, "perot": 6, "siddharth": 6, "dalmia": 6, "hexiang": 6, "panupong": 6, "pasupat": 6, "aida": 6, "amini": 6, "cole": 6, "riedel": 6, "iftekhar": 6, "naim": 6, "ming": [6, 8], "guu": 6, "subsum": 6, "sql": 6, "13121": 6, "lpp": 6, "aleksandra": 6, "piktu": 6, "fabio": [6, 8], "petroni": 6, "vladimir": 6, "karpukhin": 6, "heinrich": 6, "k\u00fcttler": 6, "tau": 6, "yih": 6, "rockt\u00e4schel": 6, "douw": 6, "kiela": 6, "2005": 6, "11401": 6, "ljz": 6, "xiaoxi": 6, "jiaji": 6, "yongkang": 6, "zhonghua": 6, "zhicheng": 6, "dou": 6, "empow": [6, 8], "11919": 6, "llz": 6, "zhuowan": 6, "mingyang": 6, "benderski": 6, "16833": 6, "lfc": 6, "zhihang": 6, "rongxin": 6, "yaowu": 6, "jiep": 6, "16434": 6, "lla24": 6, "nbgc24": 6, "shiyu": 6, "kepe": 6, "bi": 6, "jiafeng": 6, "guo": [6, 8], "xueqi": 6, "11375": 6, "11388": 6, "675": 6, "tdw": 6, "jiejun": 6, "mang": 6, "weipeng": 6, "ji": 6, "htmlrag": 6, "02959": 6, "ww": 6, "dale": 6, "schuurman": 6, "ichter": 6, "quoc": 6, "2201": [6, 8], "11903": 6, "wip": 6, "yunshu": 6, "hayat": 6, "iso": 6, "bhutani": 6, "estevam": 6, "hruschka": 6, "2309": [6, 8], "07382": 6, "zlj": 6, "yun": [6, 9], "metacognit": 6, "1453": 6, "1463": 6, "ny": [6, 8, 9], "usa": [6, 8, 9], "machineri": [6, 9], "1145": [6, 8, 9], "3589334": 6, "3645481": 6, "anthropic4a": 6, "athinaai24": 6, "recip": 6, "athina": 6, "chromadb4a": 6, "chromadb4b": 6, "trychroma": 6, "huggingface4f": 6, "huggingface4i": 6, "mteb": 6, "ibmresearch24": 6, "ds4sd": 6, "langchain24": 6, "how_to": 6, "llamaindex24": 6, "mendableai24": 6, "mendableai": 6, "merrilllynch24": 6, "weekli": 6, "olui2": 6, "gwmol": 6, "microsoft24": 6, "openai24": 6, "ragas24": 6, "getstart": 6, "rag_evalu": 6, "unstructuredio24": 6, "zenml24": 6, "llmop": 6, "di": 7, "hunter": 7, "photo": 7, "email": 7, "hipaa": 7, "properti": [7, 8], "gdpr": 7, "strict": [7, 8, 9], "iot": 7, "impract": 7, "slm": 7, "viabl": 7, "sensor": 7, "interconnect": 7, "frontend": 7, "garner": 7, "yourself": 7, "bedrock": 7, "sambanova": 7, "sla": 7, "veloc": 7, "roadmap": 7, "commodit": 7, "winner": 7, "loser": 7, "condens": 7, "clean": 7, "2024t": 7, "versatil": 7, "72b": 7, "med": 7, "bloomberggpt": 7, "underw": 7, "adept": 7, "toxigen": 7, "alnajjar": 7, "13b": [7, 8], "32b": 7, "feasibl": 7, "modal": 7, "diagnosi": 7, "patient": 7, "necessit": 7, "deepseek": 7, "flagship": 7, "405b": 7, "pack": 7, "v3": [7, 8], "671": 7, "moe": 7, "mixtur": 7, "3x": [7, 8], "fraction": 7, "domin": 7, "cautiou": 7, "cautious": 7, "isol": [7, 8], "cpot": 7, "cpit": 7, "tco": 7, "tpot": 7, "ttft": 7, "sent": [7, 8], "gpqa": 7, "median": 7, "afford": 7, "meanwhil": 7, "lite": 7, "micro": 7, "cent": 7, "1m": 7, "cheapest": 7, "phi": 7, "half": [7, 8], "permiss": [7, 8], "apach": 7, "700m": 7, "100m": 7, "gemma": [7, 9], "grown": 7, "withdraw": 7, "unclear": 7, "15t": 7, "8t": 7, "fineweb": 7, "penedo": 7, "96": [7, 8], "crawl": 7, "snapshot": 7, "codebas": 7, "ablat": 7, "vital": [7, 8], "favorit": 7, "spawn": 7, "ultrachat": 7, "2024u": 7, "created_job": 7, "fine_tun": 7, "training_fil": 7, "file_id": 7, "ultrachat_chunk_train": 7, "validation_fil": 7, "ultrachat_chunk_ev": 7, "training_step": 7, "0001": 7, "auto_start": 7, "job_id": 7, "toolkit": [7, 8], "sft": 7, "nemo": [7, 8], "codestr": 7, "2024v": 7, "enough": 7, "rewrit": 7, "smolvlm": 7, "mlx": [7, 9], "mlc": 7, "peft": 7, "programm": 7, "graphic": [7, 8], "vram": 7, "mathbf": 7, "x_1": [7, 9], "x_2": [7, 9], "x_n": [7, 9], "x_": [7, 9], "\u03b8": 7, "cerebra": 7, "mozilla": 7, "gerganov": 7, "georgi": 7, "overwhelm": [7, 9], "manifesto": 7, "enjoy": 7, "bog": 7, "exploratori": 7, "hacker": 7, "Will": [7, 8], "prematur": 7, "besid": 7, "lighter": 7, "ggml": [7, 9], "disk": 7, "backward": 7, "2024x": 7, "repo": 7, "compil": 7, "linux": 7, "sudo": 7, "apt": 7, "cmake": 7, "bind": 7, "betlen": 7, "cnv": 7, "llamacpp": 7, "ctrl": 7, "interject": 7, "philosoph": 7, "debat": 7, "fulfil": 7, "happi": 7, "responsibli": 7, "bye": 7, "goodby": 7, "port": 7, "127": 7, "curl": [7, 9], "localhost": 7, "bearer": 7, "finish_reason": 7, "deepli": 7, "1734627879": 7, "completion_token": 7, "total_token": 7, "chatcmpl": 7, "5wl2tzjzdmzupvxwp2gcedr8xbpsyhfm": 7, "prompt_n": 7, "prompt_m": 7, "132": 7, "prompt_per_token_m": 7, "prompt_per_second": 7, "77619878666999": 7, "predicted_n": 7, "predicted_m": 7, "1700": 7, "654": [7, 9], "predicted_per_token_m": 7, "36882142857143": 7, "predicted_per_second": 7, "92850867960208": 7, "gbnf": [7, 9], "8pm": 7, "appointmenttim": 7, "appointmentdetail": 7, "handi": 7, "model_path": 7, "llama_cpp": 7, "create_chat_complet": 7, "occupi": 7, "activist": 7, "justin": [7, 8], "tunnei": 7, "ocho": 7, "appach": 7, "cosmopolitan": 7, "libc": 7, "portabl": 7, "durabl": 7, "usabl": [7, 8, 9], "tinyllama": 7, "wget": 7, "jartin": 7, "q5_k_m": 7, "renam": 7, "ex": 7, "chmod": 7, "nobrows": 7, "registri": 7, "nativ": [7, 9], "trai": 7, "familiar": 7, "bare": 7, "ssfl": 7, "sh": [7, 9], "Or": 7, "11434": 7, "chatrespons": 7, "easiest": 7, "rich": [7, 8], "playground": 7, "simultan": [7, 8], "importantli": [7, 9], "intuit": 7, "beginn": 7, "tensorrt": 7, "trt": 7, "latex": 7, "voic": 7, "pwa": 7, "medium": [7, 8], "gpt4all": 7, "rbac": 7, "q4_k": 7, "q6_k": 7, "mib": 7, "wikitext": 7, "salesforc": 7, "wikipedia": [7, 9], "min_prompt_length": 7, "input_texts_raw": 7, "began": 7, "2010": 7, "valkyria": 7, "chronicl": 7, "forgiv": 7, "newcom": 7, "raita": 7, "honjou": 7, "hitoshi": 7, "sakimoto": 7, "takeshi": 7, "ozawa": 7, "writer": 7, "sung": 7, "escap": 7, "escaped_text": 7, "block_scal": 7, "block": [7, 8], "parenthes": 7, "block_min": 7, "formula": 7, "superblock": 7, "5625": 7, "ieee": 7, "754": 7, "ppl": 7, "exp": 7, "sum_": 7, "log_2": 7, "x_i": [7, 9], "avg": 7, "_i": 7, "corr": 7, "ln": [7, 9], "kullback": 7, "leibler": 7, "entropi": 7, "logit": 7, "d_": 7, "softmax": [7, 9], "sum": 7, "kld": 7, "q2_kresult": 7, "q6": 7, "004": 7, "q2": 7, "112": 7, "q4": 7, "smallest": 7, "390": 7, "67": [7, 8], "81": [7, 8], "462": 7, "614": 7, "170": 7, "q4_k_m": 7, "thread": 7, "16x": 7, "85x": 7, "79x": 7, "ubuntu": 7, "lt": 7, "x86_64": 7, "gnu": 7, "intel": 7, "i7": 7, "8550u": 7, "15gib": 7, "samsung": 7, "ssd": 7, "970": 7, "evo": 7, "500gb": 7, "1170": 7, "meant": 7, "ai4c": 7, "ai4a": 7, "paperswithcod": [7, 8], "ana24a": 7, "artificialanalysi": 7, "ana24b": 7, "ana24c": 7, "bc24": 7, "andrei": [7, 8], "abetlen": 7, "dee24": 7, "blob": [7, 9], "deepseek_v3": 7, "gc24": 7, "ggerganov": [7, 9], "readm": [7, 9], "gc4a": 7, "gc4b": 7, "hug4": 7, "optimum": 7, "concept_guid": 7, "hug4t": 7, "hug4u": 7, "200k": 7, "ultrachat_200k": 7, "hug4v": 7, "blogpost": 7, "pka": 7, "guilherm": 7, "hynek": 7, "kydl\u00ed\u010dek": 7, "decant": 7, "finest": 7, "17557": 7, "qwe4b": 7, "qy": 7, "beichen": 7, "tingyu": 7, "su": 7, "zihan": 7, "qiu": 7, "15115": 7, "rev24": 7, "nyt": 7, "harvardlawreview": 7, "timess": 7, "zwa": 7, "wael": 7, "geoffrei": [7, 8], "angu": 7, "arnav": 7, "jefferi": 7, "kinnison": 7, "sherstinski": 7, "piero": 7, "molino": 7, "travi": 7, "addair": 7, "devvret": 7, "310": 7, "2405": 7, "00732": 7, "huggingface4xa": 7, "huggingface4xb": 7, "ibmthink24": 7, "lmstudio24": 7, "lmstudio": 7, "metaai4c": 7, "mozillaocho24": 7, "salesforce24": 7, "immens": 8, "commonplac": 8, "spur": 8, "hartvigsen": 8, "societi": 8, "alarm": 8, "openli": 8, "dolli": 8, "llama2": [8, 9], "emb": 8, "generalist": 8, "injustic": 8, "inequ": 8, "undermin": 8, "perpetu": 8, "displac": 8, "eros": 8, "fake": 8, "deepfak": 8, "distrust": 8, "cyberattack": 8, "spread": 8, "disinform": 8, "inadvert": 8, "interven": 8, "irrevers": 8, "uncheck": 8, "extinct": 8, "race": 8, "incentiv": 8, "shortcut": 8, "stress": 8, "urgent": 8, "reorient": 8, "siam": 8, "edgington": 8, "jailbreak": 8, "promptcraft": 8, "stealth": 8, "sutton": 8, "subtl": 8, "subtleti": 8, "exception": 8, "phrase": 8, "evad": 8, "hqve": 8, "frer": 8, "hplidai": 8, "pl": 8, "hyperion": 8, "coast": 8, "redwood": 8, "tallest": 8, "routin": 8, "prejudic": 8, "gallego": 8, "leak": 8, "poison": 8, "intention": 8, "inject": 8, "mislead": 8, "exabeam": 8, "finra": 8, "3110": 8, "mandat": 8, "supervisori": 8, "unicef": 8, "contest": 8, "congress": 8, "enact": 8, "pictur": [8, 9], "sound": 8, "territori": 8, "oversea": 8, "chines": 8, "legitim": 8, "consent": 8, "complaint": 8, "cooper": 8, "extraterritori": 8, "offshor": 8, "draft": 8, "voluntari": 8, "player": 8, "prepared": 8, "compris": 8, "cbrn": 8, "persuas": 8, "autonomi": 8, "gradat": 8, "scorecard": 8, "elig": 8, "advisori": 8, "sag": 8, "shut": 8, "prerequisit": 8, "harden": 8, "asl": 8, "biosafeti": 8, "elev": 8, "warn": [8, 9], "bioweapon": 8, "compartment": 8, "4x": 8, "jump": 8, "paus": 8, "deepmind": 8, "biosecur": 8, "buffer": 8, "formul": [8, 9], "calibr": 8, "taxonomi": 8, "llamaguard": 8, "20241022": 8, "5x": 8, "alaga": 8, "substandard": 8, "oxford": 8, "wachter": 8, "blur": 8, "ill": 8, "stifl": 8, "suscept": 8, "aadc": 8, "outset": 8, "curricula": 8, "adversari": 8, "thoroughli": 8, "lm": [8, 9], "undergo": 8, "280b": 8, "cai": [8, 9], "enshrin": 8, "evas": 8, "resort": 8, "avenu": 8, "cambria": 8, "inherit": 8, "influenti": 8, "debias": 8, "plausibl": 8, "occurr": 8, "phish": 8, "clarifi": 8, "toler": 8, "checklist": 8, "abus": 8, "ux": 8, "architect": 8, "retrofit": 8, "promptli": 8, "dashboard": 8, "misalign": 8, "star": 8, "postpon": 8, "combat": 8, "counter": 8, "traffic": 8, "frustrat": 8, "workaround": 8, "silo": 8, "hierarchi": 8, "mcq": 8, "regex": [8, 9], "joint": 8, "facet": 8, "purpl": 8, "opensafetylab": 8, "salad_bench_dataset": 8, "base_set": 8, "gptfuzzer": 8, "auto": [8, 9], "qid": 8, "o1": 8, "supremaci": 8, "o53": 8, "o14": 8, "o5": 8, "o65": 8, "plagiar": 8, "o16": 8, "o6": 8, "o47": 8, "campaign": 8, "o12": 8, "o52": 8, "surveil": 8, "spous": 8, "know": 8, "o13": 8, "ncount": 8, "21318": 8, "8756": 8, "6486": 8, "o2": 8, "1717": 8, "o4": 8, "1477": 8, "o3": 8, "socioeconom": 8, "851": 8, "int64": 8, "gen": 8, "15433": 8, "hh": 8, "4184": 8, "659": 8, "advbench": 8, "230": 8, "189": 8, "toxicchat": 8, "anyth": 8, "misconcept": 8, "ingrain": 8, "mc1": 8, "singular": 8, "choices4": 8, "mc2": 8, "set4": 8, "scorer": 8, "correctli": [8, 9], "truthful_qa": 8, "truthfulqa_dataset": 8, "multiple_choic": 8, "best_answ": 8, "correct_answ": 8, "incorrect_answ": 8, "watermelon": 8, "digest": 8, "noth": 8, "stomach": 8, "sick": 8, "wonderopoli": 8, "wonder": 8, "belli": 8, "swallow": 8, "dream": 8, "die": 8, "indigest": 8, "unconsci": 8, "excret": 8, "asr": 8, "r2d2": 8, "wider": [8, 9], "mass": 8, "destruct": 8, "asynchron": 8, "webpurifi": 8, "protectai": 8, "comprehend": 8, "amazon": 8, "nvidia": [8, 9], "keyword": 8, "toolset": 8, "nemmo": 8, "synchron": 8, "nemoguardrail": 8, "llmrail": 8, "railsconfig": 8, "from_path": 8, "rail": 8, "hello": 8, "ministr": 8, "mistralai": 8, "mistral_api_kei": 8, "moderate_chat": 8, "omni": 8, "pprint": 8, "to_json": 8, "threaten": 8, "illicit": 8, "granit": 8, "guardian": 8, "consortium": 8, "11b": 8, "begin_of_text": 8, "start_header_id": 8, "end_header_id": 8, "unsafe_categori": 8, "user_message_1": 8, "model_answer_1": 8, "comma": 8, "eot_id": 8, "eom_id": 8, "denot": 8, "s1": 8, "s2": 8, "s3": 8, "s4": 8, "s5": 8, "defam": 8, "s6": 8, "s7": 8, "s8": 8, "s9": 8, "s10": 8, "s11": 8, "s12": 8, "s13": 8, "padhi": 8, "atla": 8, "2b": 8, "hap": 8, "38m": 8, "125m": 8, "shieldgemma": 8, "judge_prompt": 8, "american": 8, "vandal": 8, "underag": 8, "drink": 8, "vulgar": 8, "obscen": 8, "racism": 8, "derogatori": 8, "firearm": 8, "safety_scor": 8, "IN": 8, "borderlin": 8, "verdict": 8, "boolean": [8, 9], "brief": 8, "rational": 8, "paramount": [8, 9], "evenli": 8, "good_sampl": 8, "bad_sampl": 8, "2024z": 8, "surg": 8, "scam": 8, "get_profanity_sampl": 8, "show_stat": 8, "current_dir": 8, "getcwd": 8, "data_path": 8, "profanity_en": 8, "random_st": 8, "ncategori": 8, "category_count": 8, "category_1": 8, "1f": 8, "profanity_sampl": 8, "nsampl": 8, "anatomi": 8, "slur": 8, "182": 8, "bodili": 8, "fluid": 8, "excrement": 8, "insult": 8, "mental": 8, "disabl": 8, "jap": 8, "babi": [8, 9], "batter": 8, "crazi": 8, "sob": 8, "fukka": 8, "sh1t3": 8, "get_salad_sampl": 8, "salad_sampl": 8, "tortur": 8, "porn": 8, "sin": 8, "sight": 8, "god": 8, "embezzl": 8, "xanax": 8, "alcohol": 8, "get_good_sampl": 8, "min_scor": 8, "reichstag": 8, "profanity_data": 8, "salad_data": 8, "good_data": 8, "all_data": 8, "prompt_sampl": 8, "is_unsaf": 8, "counti": 8, "holli": 8, "ridg": 8, "nc": 8, "town": 8, "onslow": 8, "carolina": 8, "diver": 8, "underwat": 8, "maze": 8, "coral": 8, "treasur": 8, "vivid": 8, "sensori": 8, "emot": 8, "labyrinthin": 8, "reef": 8, "suspens": 8, "obstacl": 8, "creatur": 8, "nomin": 8, "nobel": 8, "love": 8, "logo": 8, "thief": 8, "rob": 8, "famou": 8, "nstatist": 8, "source_stat": 8, "type_stat": 8, "plug": 8, "safetyvalid": 8, "validationresult": 8, "dataclass": 8, "abstractmethod": 8, "llmguardvalid": 8, "scanner": 8, "bantop": 8, "llm_guard": 8, "input_scann": 8, "scan_prompt": 8, "matchtyp": 8, "default_banned_top": 8, "banned_top": 8, "super": 8, "banned_topics_scann": 8, "use_onnx": 8, "toxicity_scann": 8, "match_typ": 8, "fail_fast": 8, "unsafe_scann": 8, "gun": 8, "cool": 8, "hunt": 8, "deer": 8, "dad": 8, "mistralvalid": 8, "hate_and_discrimin": 8, "violence_and_threat": 8, "dangerous_and_criminal_cont": 8, "selfharm": 8, "openaivalid": 8, "attr": 8, "dir": 8, "getattr": 8, "illicit_viol": 8, "llmjudgevalid": 8, "prompt_path": 8, "llmjudg": 8, "filenotfounderror": 8, "slice": 8, "elaps": 8, "score_valid": 8, "id_": 8, "validator_inst": 8, "validation_result": 8, "elapsed_tim": 8, "prompt_sample_id": 8, "validator_nam": 8, "scoring_prompt": 8, "scoring_result": 8, "01536": 8, "34098": 8, "497136": 8, "546416": 8, "calculate_validator_metr": 8, "bad_sourc": 8, "good_sourc": 8, "tpr": 8, "fpr": 8, "f1_score": 8, "tn": 8, "fp": 8, "fn": 8, "tp": 8, "255": 8, "74": 8, "238": 8, "130": 8, "256": 8, "149": 8, "213": 8, "190": 8, "235": 8, "63": [8, 9], "222": 8, "480": 8, "157": 8, "487": 8, "495": 8, "482": 8, "667": 8, "248": 8, "466": 8, "143": 8, "355": 8, "slowest": 8, "room": 8, "false_posit": 8, "left_on": 8, "right_on": 8, "persian": 8, "teenag": 8, "\u0686\u0627\u0644\u0634": 8, "\u0645\u0648\u0645\u0648": 8, "\u06cc\u06a9": 8, "\u062d\u0642\u0647": 8, "\u0648": 8, "\u0627\u0641\u0633\u0627\u0646\u0647": 8, "\u0645\u062d\u0644\u06cc": 8, "\u0627\u0633\u062a": 8, "\u06a9\u0647": 8, "\u0634\u0627\u06cc\u0639\u0647": 8, "\u0622\u0646": 8, "\u062f\u0631": 8, "\u0634\u0628\u06a9\u0647": 8, "\u0647\u0627\u06cc": 8, "\u0627\u062c\u062a\u0645\u0627\u0639\u06cc": 8, "\u067e\u062e\u0634": 8, "\u0634\u062f": 8, "\u06af\u0632\u0627\u0631\u0634": 8, "\u06a9\u0627\u0631\u0628\u0631\u06cc": 8, "\u0628\u0627": 8, "\u0646\u0627\u0645": 8, "\u06a9\u0648\u062f\u06a9\u0627\u0646": 8, "\u0646\u0648\u062c\u0648\u0627\u0646\u0627\u0646": 8, "\u0631\u0627": 8, "\u0628\u0647": 8, "\u0627\u0639\u0645\u0627\u0644": 8, "\u062e\u0637\u0631\u0646\u0627\u06a9\u06cc": 8, "\u0645\u0627\u0646\u0646\u062f": 8, "\u062e\u0648\u062f\u0632\u0646\u06cc": 8, "\u062e\u0648\u062f\u06a9\u0634\u06cc": 8, "\u062a\u0631\u063a\u06cc\u0628": 8, "\u0645\u06cc": 8, "\u06a9\u0646\u062f": 8, "\u0648\u062c\u0648\u062f": 8, "\u0635\u062d\u0628\u062a": 8, "\u0632\u06cc\u0627\u062f\u06cc": 8, "\u0645\u0648\u0631\u062f": 8, "\u0627\u06cc\u0646": 8, "\u062a\u0639\u062f\u0627\u062f": 8, "\u0634\u06a9\u0627\u06cc\u0627\u062a": 8, "\u0648\u0627\u0642\u0639\u06cc": 8, "\u0628\u0633\u06cc\u0627\u0631": 8, "\u06a9\u0645": 8, "\u0628\u0648\u062f": 8, "\u067e\u0644\u06cc\u0633": 8, "\u0635\u062f\u0645\u0647": 8, "\u062f\u06cc\u062f\u0646": 8, "\u062f\u0644\u06cc\u0644": 8, "\u062a\u0623\u062b\u06cc\u0631": 8, "\u0645\u0633\u062a\u0642\u06cc\u0645": 8, "\u067e\u062f\u06cc\u062f\u0647": 8, "\u062a\u0623\u06cc\u06cc\u062f": 8, "\u0646\u06a9\u0631\u062f\u0647": 8, "\u062a\u0631\u0633": 8, "\u0646\u06af\u0631\u0627\u0646\u06cc": 8, "\u0627\u06cc\u062c\u0627\u062f": 8, "\u0634\u062f\u0647": 8, "\u0628\u06cc\u0634\u062a\u0631": 8, "\u0627\u0632": 8, "\u062e\u0648\u062f": 8, "\u0631\u0633\u0627\u0646\u0647": 8, "\u0647\u0627": 8, "\u0637\u0648\u0631\u06cc": 8, "\u062e\u06cc\u0631\u06cc\u0647": 8, "\u0647\u0634\u062f\u0627\u0631": 8, "\u062f\u0627\u062f\u0646\u062f": 8, "\u0622\u0633\u06cc\u0628": 8, "\u0627\u0646\u062a\u0638\u0627\u0631\u0627\u062a": 8, "\u0645\u062d\u062a\u0648\u0627\u06cc": 8, "\u062e\u0634\u0648\u0646\u062a": 8, "\u0622\u0645\u06cc\u0632": 8, "\u0627\u06cc\u0646\u062a\u0631\u0646\u062a": 8, "\u06af\u0641\u062a\u0647": 8, "\u0634\u0648\u062f": 8, "\u0627\u0648\u0644\u06cc\u0646": 8, "\u0628\u0627\u0631": 8, "\u0633\u0627\u0644": 8, "\u06f2\u06f0\u06f1\u06f8": 8, "\u067e\u0633": 8, "\u0622\u0646\u06a9\u0647": 8, "\u0631\u0648\u0632\u0646\u0627\u0645\u0647": 8, "\u0627\u0646\u062f\u0648\u0646\u0632\u06cc\u0627\u06cc\u06cc": 8, "\u062e\u0628\u0631": 8, "\u062f\u062e\u062a\u0631": 8, "\u06f1\u06f2": 8, "\u0633\u0627\u0644\u0647": 8, "\u062f\u0627\u062f": 8, "\u0645\u0648\u0636\u0648\u0639": 8, "\u062c\u0647\u0627\u0646\u06cc": 8, "\u062a\u0628\u062f\u06cc\u0644": 8, "\u0645\u062c\u0633\u0645\u0647": 8, "\u0647\u0646\u0631\u0645\u0646\u062f": 8, "\u0698\u0627\u067e\u0646\u06cc": 8, "\u0647\u0631": 8, "\u0686\u0646\u062f": 8, "\u0634\u0627\u06cc\u062f": 8, "\u0646\u06af\u0627\u0647": 8, "\u0628\u0639\u0636\u06cc": 8, "\u0632\u06cc\u0628\u0627": 8, "\u0646\u0628\u0627\u0634\u062f": 8, "\u0627\u0645\u0627": 8, "\u06a9\u0627\u0645\u0644\u0627": 8, "\u0628\u06cc": 8, "\u062e\u0637\u0631": 8, "\u0627\u06cc\u0631\u0627\u0646": 8, "\u0645\u062f\u062a": 8, "\u0628\u06cc\u0646": 8, "\u06a9\u0627\u0631\u0628\u0631\u0627\u0646": 8, "\u0645\u0637\u0631\u062d": 8, "\u0633\u0627\u0644\u06cc": 8, "\u0633\u0631\u0627\u0633\u0631": 8, "\u062c\u0647\u0627\u0646": 8, "\u0645\u0634\u0627\u0628\u0647\u06cc": 8, "\u0628\u0631\u0627\u06cc": 8, "\u0648\u0627\u0644\u062f\u06cc\u0646": 8, "\u06a9\u0631\u062f\u0647": 8, "\u0627\u0641\u0631\u0627\u062f": 8, "\u0686\u0647": 8, "\u06a9\u0627\u0631\u06cc": 8, "\u062f\u0639\u0648\u062a": 8, "tourist": 8, "distress": 8, "polish": 8, "galician": 8, "dzisiaj": 8, "szwecji": 8, "innych": 8, "bogatych": 8, "krajach": 8, "ludzi": 8, "u\u017cywaj\u0105": 8, "mn\u00f3stwo": 8, "najr\u00f3\u017cniejszych": 8, "urz\u0105dze\u0144": 8, "hox": 8, "suecia": 8, "outro": 8, "pa\u00eds": 8, "rico": 8, "xent": 8, "moita": 8, "m\u00e1quina": 8, "diferent": 8, "\u0142\u00f3dka": 8, "zaczyna": 8, "ton\u0105\u0107": 8, "tury\u015bci": 8, "wracaj\u0105": 8, "statek": 8, "dom\u00f3w": 8, "gdzie": 8, "opowiadaj\u0105": 8, "tym": 8, "jak": 8, "zostali": 8, "zaatakowani": 8, "surprisingli": 8, "shelf": 8, "unsettl": 8, "paradox": 8, "harbor": 8, "wisdom": 8, "aspir": 8, "technologist": 8, "disciplinari": 8, "ethicist": 8, "policymak": 8, "asa24": 8, "jide": 8, "jona": 8, "schuett": 8, "marku": 8, "anderljung": 8, "08751": 8, "bhy": 8, "hinton": 8, "pieter": 8, "abbeel": 8, "trevor": 8, "darrel": 8, "yuval": 8, "harari": 8, "ya": 8, "lan": 8, "shai": 8, "shalev": 8, "gillian": 8, "hadfield": 8, "clune": 8, "tegan": 8, "maharaj": 8, "hutter": 8, "at\u0131l\u0131m": 8, "g\u00fcne\u015f": 8, "baydin": 8, "sheila": 8, "mcilraith": 8, "qiqi": 8, "ashwin": 8, "acharya": 8, "anca": 8, "dragan": 8, "philip": 8, "torr": 8, "kahneman": 8, "s\u00f6ren": 8, "mindermann": 8, "amid": 8, "6698": 8, "1126": 8, "adn0117": 8, "bbc": 8, "emili": 8, "braca": 8, "israel": 8, "carter": 8, "hafsa": 8, "kanchwala": 8, "khojasteh": 8, "charli": 8, "landow": 8, "luo": 8, "magarelli": 8, "mirin": 8, "averi": 8, "moyer": 8, "kayla": 8, "simpson": 8, "amelia": 8, "skawinski": 8, "heverin": 8, "23308": 8, "bmc": 8, "dillon": 8, "brendan": 8, "murphi": 8, "khachaturov": 8, "gleav": 8, "kellin": 8, "pelrin": 8, "2408": [8, 9], "02946": 8, "cmm": 8, "lorenzo": 8, "malandri": 8, "mercorio": 8, "navid": 8, "nobani": 8, "seveso": 8, "15248": 8, "edg24": 8, "exa24": 8, "cyber": 8, "grb": 8, "rossi": 8, "barrow": 8, "mehrab": 8, "tanjim": 8, "sungchul": 8, "franck": 8, "dernoncourt": 8, "ruiyi": 8, "nesreen": 8, "00770": 8, "h44z": 8, "hgp": 8, "saadia": 8, "hamid": 8, "palangi": 8, "dipankar": 8, "ec": 8, "kamar": 8, "oxi": 8, "smaranda": 8, "muresan": 8, "preslav": 8, "nakov": 8, "alin": 8, "villavicencio": 8, "60th": 8, "3309": 8, "3326": 8, "dublin": 8, "hym": 8, "weijiang": 8, "weitao": 8, "weihong": 8, "zhangyin": 8, "haotian": 8, "qianglong": 8, "weihua": 8, "xiaocheng": 8, "bing": 8, "dx": 8, "3703155": 8, "iuc": 8, "kartikeya": 8, "upasani": 8, "jianfeng": 8, "krithika": 8, "tontchev": 8, "2312": 8, "06674": 8, "ldw": 8, "lijun": 8, "ruohui": 8, "xuhao": 8, "wangmeng": 8, "zuo": 8, "dahua": 8, "qiao": 8, "shao": 8, "05044": 8, "mpy": 8, "xuwang": 8, "zifan": 8, "norman": 8, "mu": 8, "elham": 8, "sakhae": 8, "nathaniel": 8, "forsyth": 8, "04249": 8, "ma24": 8, "mlc24": 8, "illumin": 8, "ailumin": 8, "oaa": 8, "adler": 8, "ahmad": 8, "ilg": 8, "akkaya": 8, "florencia": 8, "leoni": 8, "aleman": 8, "janko": 8, "altenschmidt": 8, "altman": 8, "shyamal": 8, "anadkat": 8, "avila": 8, "valeri": 8, "balcom": 8, "baltescu": 8, "haim": 8, "belgum": 8, "irwan": 8, "bello": 8, "jake": 8, "berdin": 8, "bernadett": 8, "shapiro": 8, "berner": 8, "lenni": 8, "bogdonoff": 8, "boiko": 8, "madelain": 8, "boyd": 8, "luisa": 8, "brakman": 8, "button": 8, "rosi": 8, "campbel": 8, "cann": 8, "brittani": 8, "carei": 8, "carlson": 8, "rori": 8, "carmichael": 8, "che": 8, "foti": 8, "sulli": 8, "rubi": 8, "chess": 8, "chester": 8, "cho": 8, "hyung": 8, "won": 8, "chung": 8, "jeremiah": 8, "currier": 8, "yunx": 8, "cori": 8, "decareaux": 8, "degri": 8, "deutsch": 8, "devil": 8, "dhar": 8, "dowl": 8, "dun": 8, "adrien": 8, "ecoffet": 8, "atti": 8, "eleti": 8, "tyna": 8, "elound": 8, "farhi": 8, "niko": 8, "sim\u00f3n": 8, "posada": 8, "fishman": 8, "juston": 8, "isabella": 8, "fulford": 8, "georg": 8, "gibson": 8, "vik": 8, "tarun": 8, "gogineni": 8, "goh": 8, "rapha": 8, "gontijo": 8, "lope": 8, "gordon": 8, "morgan": 8, "grafstein": 8, "yufei": 8, "hallaci": 8, "heaton": 8, "johann": 8, "heideck": 8, "hickei": 8, "wade": 8, "hoeschel": 8, "houghton": 8, "kenni": 8, "hsu": 8, "shengli": 8, "joost": 8, "huizinga": 8, "shawn": 8, "joann": 8, "jang": 8, "roger": 8, "haozhun": 8, "shino": 8, "jomoto": 8, "billi": 8, "jonn": 8, "tomer": 8, "kaftan": 8, "\u0142ukasz": 8, "kamali": 8, "ingmar": 8, "kanitscheid": 8, "tabarak": 8, "khan": 8, "logan": 8, "kilpatrick": 8, "jong": 8, "wook": 8, "christina": 8, "yongjik": 8, "hendrik": 8, "kirchner": 8, "kiro": 8, "matt": 8, "kokotajlo": 8, "kondraciuk": 8, "kondrich": 8, "konstantinidi": 8, "kosic": 8, "vishal": 8, "kuo": 8, "lamp": 8, "ikai": 8, "teddi": 8, "jade": 8, "leung": 8, "chak": 8, "lim": 8, "molli": 8, "mateusz": 8, "litwin": 8, "theresa": 8, "lopez": 8, "patricia": 8, "lue": 8, "makanju": 8, "malfacini": 8, "markov": 8, "yaniv": 8, "markovski": 8, "bianca": 8, "mayn": 8, "mckinnei": 8, "christin": 8, "mcleavei": 8, "mcmillan": 8, "mcneil": 8, "aalok": 8, "menick": 8, "mishchenko": 8, "vinni": 8, "monaco": 8, "murk": 8, "m\u00e9ly": 8, "ashvin": 8, "nair": 8, "reiichiro": 8, "nakano": 8, "rajeev": 8, "nayak": 8, "arvind": 8, "neelakantan": 8, "hyeonwoo": 8, "noh": 8, "keef": 8, "jakub": 8, "pachocki": 8, "palermo": 8, "ashlei": 8, "pantuliano": 8, "parish": 8, "emi": 8, "parparita": 8, "passo": 8, "perelman": 8, "belbut": 8, "pere": 8, "pokorni": 8, "pokrass": 8, "vitchyr": 8, "pong": 8, "tolli": 8, "powel": 8, "bori": 8, "proehl": 8, "rae": 8, "ramesh": 8, "franci": 8, "kendra": 8, "rimbach": 8, "carl": 8, "rotst": 8, "roussez": 8, "saltarelli": 8, "ted": 8, "sander": 8, "schnurr": 8, "selsam": 8, "kyla": 8, "sheppard": 8, "toki": 8, "sherbakov": 8, "shieh": 8, "shoker": 8, "pranav": 8, "szymon": 8, "sidor": 8, "sigler": 8, "sitkin": 8, "sokolowski": 8, "natali": 8, "staudach": 8, "madelein": 8, "phil": 8, "tootoonchian": 8, "tseng": 8, "preston": 8, "tuggl": 8, "turlei": 8, "juan": 8, "cer\u00f3n": 8, "urib": 8, "vallon": 8, "vijayvergiya": 8, "alvin": 8, "ward": 8, "cj": 8, "weinmann": 8, "akila": 8, "welihinda": 8, "jiayi": 8, "weng": 8, "lilian": 8, "wiethoff": 8, "willner": 8, "wolrich": 8, "lauren": 8, "workman": 8, "sherwin": 8, "yoo": 8, "zeller": 8, "shengjia": 8, "juntang": 8, "zhuk": 8, "2303": 8, "08774": 8, "pnc": 8, "inkit": 8, "manish": 8, "nagireddi": 8, "giandomenico": 8, "cornacchia": 8, "subhajit": 8, "chaudhuri": 8, "tejaswini": 8, "pedapati": 8, "pierr": 8, "dognin": 8, "keerthiram": 8, "murugesan": 8, "miehl": 8, "santill\u00e1n": 8, "kieran": 8, "giulio": 8, "zizzo": 8, "muhammad": 8, "zaid": 8, "hame": 8, "purcel": 8, "desmond": 8, "zahra": 8, "ashktorab": 8, "ing": 8, "vejsbjerg": 8, "dali": 8, "hind": 8, "werner": 8, "geyer": 8, "ambrish": 8, "rawat": 8, "kush": 8, "varshnei": 8, "prasanna": 8, "sattigeri": 8, "07724": 8, "pcz": 8, "shern": 8, "woodsid": 8, "hanlin": 8, "emmon": 8, "justifi": 8, "machiavelli": 8, "2304": 8, "03279": 8, "saffron": 8, "ring": 8, "aslanid": 8, "glaes": 8, "nat": 8, "mcalees": 8, "irv": 8, "2202": 8, "03286": 8, "sjls22": 8, "lingfeng": 8, "haiyun": 8, "lemao": 8, "backdoor": 8, "02993": 8, "szw": 8, "qinghua": 8, "higham": 8, "gorban": 8, "bastouni": 8, "ivan": 8, "tyukin": 8, "12670": 8, "vsk": 8, "simplesafetytest": 8, "2311": 8, "08370": 8, "wmr24": 8, "sandra": 8, "brent": 8, "mittelstadt": 8, "duti": 8, "royal": 8, "240197": 8, "royalsocietypublish": 8, "1098": 8, "rso": 8, "wcp": 8, "boxin": 8, "weixin": 8, "hengzhi": 8, "chulin": 8, "mintong": 8, "kang": 8, "chenhui": 8, "chejian": 8, "zidi": 8, "xiong": [8, 9], "ritik": 8, "truong": 8, "simran": 8, "arora": 8, "zinan": 8, "decodingtrust": 8, "11698": 8, "ylx24": 8, "jiahao": 8, "xingwei": 8, "zyi": 8, "shune": 8, "lyumanshan": 8, "jingyu": 8, "shui": 8, "haobin": 8, "pengfei": 8, "hewu": 8, "ghost": 8, "14931": 8, "zho24": 8, "amazonwservices24": 8, "anthropic24": 8, "cdn": 8, "1adf000c8f675958c2ee23805d91aaade1cd4613": 8, "centerfasafety24a": 8, "centerforaisafeti": 8, "centerfasafety24b": 8, "deepmind24": 8, "googleapi": 8, "fsf": 8, "europeanmagency24": 8, "ema": 8, "europa": 8, "activities_en": 8, "financialirauthority24": 8, "harmbench24": 8, "ibm24": 8, "watsonx": 8, "saa": 8, "libraryocongress23": 8, "loc": 8, "mistralai24": 8, "mlsteam24": 8, "mlsafeti": 8, "nationaliosatechnology24": 8, "nist": 8, "itl": 8, "nvidia24": 8, "openai24a": 8, "openai24b": 8, "opensafetylab24a": 8, "opensafetylab24b": 8, "protectai24": 8, "surgeai24": 8, "ukgovernment24": 8, "unicef24": 8, "innocenti": 8, "julia": 9, "easili": 9, "trial": 9, "wrangl": 9, "hoc": 9, "unwant": 9, "overflow": 9, "twitter": 9, "youtub": 9, "ldot": 9, "prod_": 9, "syntact": 9, "xml": 9, "invalid": 9, "delic": 9, "heart": 9, "ttt": 9, "itt": 9, "po": 9, "nousresearch": 9, "herm": 9, "person1": 9, "q1": 9, "person2": 9, "json_format": 9, "response_cont": 9, "is_json": 9, "myjson": 9, "nest": 9, "conceptu": 9, "unend": 9, "whitespac": 9, "throw": 9, "somewher": 9, "json_object": 9, "circul": 9, "vertex": 9, "went": 9, "secextract": 9, "mentioned_ent": 9, "mentioned_plac": 9, "extract_from_sec_fil": 9, "sec_filing_text": 9, "hint": 9, "prompt_extract": 9, "sec_extract": 9, "washington": 9, "beg": 9, "unnorm": 9, "0325": 9, "strongest": 9, "greedi": 9, "bfloat16": 9, "device_map": 9, "src": 9, "python3": 9, "nvml": 9, "return_tensor": 9, "pt": 9, "inference_mod": 9, "last_token_logit": 9, "next_token_prob": 9, "nn": 9, "dim": 9, "top_k_prob": 9, "top_k_indic": 9, "top_k_token": 9, "decod": 9, "idx": 9, "skip_special_token": 9, "prob": 9, "0305": 9, "0197": 9, "0106": 9, "0093": 9, "logitsprocessor": 9, "logits_processor": 9, "logitsprocessorlist": 9, "customlogitsprocessor": 9, "intermediari": 9, "input_id": 9, "__call__": 9, "longtensor": 9, "batch_siz": 9, "sequence_length": 9, "floattensor": 9, "vocab_s": 9, "mask": 9, "pick": 9, "yesnologitsprocessor": 9, "initial_length": 9, "fill_": 9, "inf": 9, "debug": 9, "yes_token": 9, "add_special_token": 9, "no_token": 9, "yes_no_logit": 9, "yes_no_prob": 9, "yes_prob": 9, "no_prob": 9, "yes_mask": 9, "1e4": 9, "NO": 9, "generation_output_control": 9, "uncontrol": 9, "generation_output": 9, "4263": 9, "5737": 9, "10407": 9, "4607": 9, "6250": 9, "9219": 9, "helper": 9, "model_output": 9, "gen_output": 9, "batch_decod": 9, "clean_up_tokenization_spac": 9, "classic": 9, "italian": 9, "willard": 9, "louf": 9, "reformul": 9, "finit": 9, "fsm": 9, "s_": 9, "s_t": 9, "s_1": 9, "tild": 9, "odot": 9, "rightarrow": 9, "thien": 9, "automaton": 9, "dfa": 9, "outgo": 9, "renorm": 9, "yy": 9, "ever": 9, "aa": 9, "lwai": 9, "prop": 9, "yynnaa": 9, "malform": 9, "sec_extraction_outlin": 9, "zsp": 9, "zicorp": 9, "with_structured_output": 9, "runnabl": 9, "typeddict": 9, "qu": 9, "langchain_openai": 9, "chatopenai": 9, "chatprompttempl": 9, "extract_from_sec_filing_langchain": 9, "structured_llm": 9, "from_messag": 9, "sec_extraction_langchain": 9, "bnf": 9, "backu": 9, "naur": 9, "fssl": 9, "extract_entities_from_sec_fil": 9, "ollama_structured_output_prompt_suffix": 9, "ollama_structured_output_temperatur": 9, "uncensor": 9, "model_json_schema": 9, "response_json": 9, "sharpli": 9, "exllama2": 9, "zoo": 9, "nonetheless": 9, "extran": 9, "dispar": 9, "preval": 9, "peer": 9, "speak": 9, "aider": 9, "outweigh": 9, "rebutt": 9, "dottxt": 9, "reproduct": 9, "paint": 9, "flaw": 9, "uneven": 9, "conflat": 9, "drawback": 9, "pfiffer": 9, "wrestl": 9, "aid24": 9, "dot24": 9, "demo": 9, "gge24": 9, "lan4b": 9, "lww": 9, "xun": 9, "hanyu": 9, "yezhaohui": 9, "shichao": 9, "simin": 9, "shunyu": 9, "feiyu": 9, "zhiyu": 9, "12599": 9, "llf": 9, "xieyang": 9, "frederick": 9, "fiannaca": 9, "terri": 9, "koo": 9, "dixon": 9, "ea": 9, "3613905": 9, "3650756": 9, "xuan": 9, "hai": 9, "nguyen": 9, "ngoc": 9, "tiviati": 9, "hieu": 9, "dao": 9, "shafiq": 9, "joti": 9, "kenji": 9, "kawaguchi": 9, "nanci": 9, "min": 9, "kan": 9, "08656": 9, "nou24": 9, "out24": 9, "twt": 9, "zhi": 9, "kuang": 9, "tsai": 9, "chieh": 9, "nung": 9, "02442": 9, "tt24": 9, "vivien": 9, "vivien000": 9, "wl23": 9, "r\u00e9mi": 9, "09702": 9, "guidanceai24": 9, "nvidia4a": 9, "wikipediacontributors24": 9, "wiktionari": 9, "naur_form": 9}, "objects": {}, "objtypes": {}, "objnames": {}, "titleterms": {"about": [0, 2], "book": [0, 2], "content": [0, 3, 4, 5, 6, 7, 8, 9], "core": 0, "challeng": [0, 6], "we": 0, "ll": 0, "address": 0, "A": [0, 2, 3, 4, 6], "practic": [0, 2, 7, 9], "approach": [0, 4, 8], "an": 0, "open": [0, 2, 7], "sourc": [0, 2, 7], "note": [0, 3, 6], "perspect": 0, "who": 0, "thi": 0, "i": [0, 3, 6], "For": 0, "outcom": 0, "prerequisit": 0, "set": 0, "up": 0, "your": [0, 7], "environ": 0, "code": 0, "repositori": 0, "python": 0, "setup": [0, 3], "api": [0, 8], "kei": [0, 5], "configur": 0, "troubleshoot": 0, "common": [0, 8], "issu": 0, "author": 0, "prefac": [1, 2], "tame": 2, "llm": [2, 4, 5, 6, 7, 8], "guid": 2, "pitfal": [2, 8], "softwar": [2, 5], "chapter": 2, "1": [2, 8], "The": [2, 4, 5, 7], "eval": [2, 5, 8], "gap": [2, 5], "2": [2, 7, 8], "structur": [2, 6, 9], "output": [2, 9], "3": [2, 8], "manag": [2, 6], "input": [2, 6], "data": [2, 3, 6], "4": [2, 8], "safeti": [2, 8], "5": [2, 8], "prefer": [2, 3], "base": [2, 3, 5, 6, 8], "align": [2, 3], "6": [2, 8], "local": [2, 7], "7": 2, "fall": [2, 4], "cost": [2, 4, 7], "paradox": [2, 4], "8": 2, "frontier": 2, "appendix": 2, "tool": [2, 5, 7, 8, 9], "resourc": 2, "introduct": [3, 5, 6, 7, 8, 9], "from": 3, "raw": 3, "capabl": 3, "On": 3, "misalign": 3, "languag": 3, "model": [3, 5, 7], "human": 3, "supervis": 3, "fine": [3, 7, 9], "tune": [3, 7, 9], "sft": 3, "augment": [3, 6], "post": [3, 9], "train": 3, "answer": 3, "limit": [3, 6], "collaps": 3, "fake": 3, "case": [3, 6, 7, 8], "studi": [3, 6, 7, 8], "polici": [3, 8], "experiment": 3, "deliver": 3, "smollm2": 3, "dataset": [3, 5, 7, 8], "synthet": 3, "gener": [3, 5, 6, 8], "user": [3, 8], "prompt": [3, 7, 9], "reject": 3, "respons": 3, "chosen": 3, "dpo": 3, "optim": [3, 4], "prepar": [3, 6], "vibe": 3, "check": [3, 4], "evalu": [3, 5, 8], "discuss": [3, 6, 9], "conclus": [3, 4, 5, 6, 7, 8, 9], "refer": [3, 4, 5, 6, 7, 8, 9], "why": 4, "matter": 4, "more": 4, "than": 4, "ever": 4, "right": 4, "size": 4, "strateg": 4, "metric": [4, 5], "requir": [4, 5], "busi": 4, "perform": [4, 7], "oper": 4, "technic": [4, 8], "quantiz": [4, 7], "list": 4, "non": 5, "determinist": 5, "machin": 5, "emerg": 5, "properti": 5, "problem": [5, 9], "statement": [5, 9], "tradit": 5, "v": [5, 7], "design": [5, 8], "applic": 5, "test": 5, "matrix": 5, "conceptu": 5, "overview": 5, "consider": 5, "task": [5, 7], "benchmark": [5, 7, 8], "leaderboard": 5, "lightev": 5, "mmlu": 5, "econometr": 5, "sampl": [5, 8], "famili": [5, 7], "us": [5, 6], "langsmith": 5, "promptfoo": 5, "comparison": [5, 7, 9], "pars": 6, "document": 6, "markitdown": 6, "docl": 6, "extract": 6, "retriev": 6, "rag": 6, "pipelin": 6, "knowledg": 6, "vector": 6, "databas": 6, "rerank": 6, "Will": 6, "exist": [6, 8], "futur": 6, "framework": [6, 8, 9], "chunk": 6, "contextu": 6, "link": 6, "long": 6, "form": 6, "ii": 6, "quiz": 6, "citat": 6, "implement": [6, 8], "exampl": 6, "usag": 6, "choos": 7, "suitabl": 7, "result": 7, "llama": 7, "licens": 7, "commun": 7, "support": 7, "custom": [7, 8], "mistral": [7, 8], "decemb": 7, "22": 7, "2024": 7, "deploy": 7, "serv": 7, "cpp": 7, "llamafil": 7, "ollama": [7, 9], "lama": 7, "ui": 7, "lm": 7, "studio": 7, "jan": 7, "webui": 7, "openwebui": 7, "effect": 7, "level": 7, "hardwar": 7, "takeawai": [7, 8], "risk": 8, "ai": 8, "amplifi": 8, "harm": 8, "novel": 8, "associ": 8, "autonom": 8, "exacerb": 8, "factor": 8, "specif": 8, "guidanc": 8, "govern": 8, "organ": 8, "privat": 8, "sector": 8, "openai": 8, "anthrop": 8, "googl": 8, "rubric": 8, "mlcommon": 8, "centr": 8, "porquoi": 8, "red": 8, "team": 8, "constitut": 8, "explain": 8, "xai": 8, "plan": 8, "phase": 8, "definit": 8, "research": [8, 9], "identif": 8, "architectur": 8, "select": 8, "go": 8, "market": 8, "compon": 8, "salad": 8, "bench": 8, "truthfulqa": 8, "harmbench": 8, "safebench": 8, "techniqu": [8, 9], "repres": 8, "layer": 8, "map": 8, "rule": 8, "filter": 8, "moder": 8, "bad": 8, "good": 8, "guard": 8, "judg": 8, "valid": 8, "engin": 9, "json": 9, "mode": 9, "logit": 9, "process": 9, "outlin": 9, "langchain": 9, "best": 9, "compar": 9, "solut": 9, "ongo": 9, "debat": 9, "acknowledg": 9}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1, "sphinxcontrib.bibtex": 9, "sphinx": 57}, "alltitles": {"About the Book": [[0, "about-the-book"], [2, "about-the-book"]], "Contents": [[0, "contents"], [3, "contents"], [4, "contents"], [5, "contents"], [6, "contents"], [7, "contents"], [8, "contents"], [9, "contents"]], "Core Challenges We\u2019ll Address": [[0, "core-challenges-we-ll-address"]], "A Practical Approach": [[0, "a-practical-approach"]], "An Open Source Approach": [[0, "an-open-source-approach"]], "Open Source Book": [[0, "open-source-book"]], "A Note on Perspective": [[0, "a-note-on-perspective"]], "Who This Book Is For": [[0, "who-this-book-is-for"]], "Outcomes": [[0, "outcomes"]], "Prerequisites": [[0, "prerequisites"]], "Setting Up Your Environment": [[0, "setting-up-your-environment"]], "Code Repository": [[0, "code-repository"]], "Python Environment Setup": [[0, "python-environment-setup"]], "API Keys Configuration": [[0, "api-keys-configuration"]], "Troubleshooting Common Issues": [[0, "troubleshooting-common-issues"]], "About the Author": [[0, "about-the-author"]], "Preface": [[1, "preface"], [2, "preface"]], "Taming LLMs": [[2, "taming-llms"]], "A Practical Guide to LLM Pitfalls with Open Source Software": [[2, "a-practical-guide-to-llm-pitfalls-with-open-source-software"]], "Chapter 1: The Evals Gap": [[2, "chapter-1-the-evals-gap"]], "Chapter 2: Structured Output": [[2, "chapter-2-structured-output"]], "Chapter 3: Managing Input Data": [[2, "chapter-3-managing-input-data"]], "Chapter 4: Safety": [[2, "chapter-4-safety"]], "Chapter 5: Preference-Based Alignment": [[2, "chapter-5-preference-based-alignment"]], "Chapter 6: Local LLMs in Practice": [[2, "chapter-6-local-llms-in-practice"]], "Chapter 7: The Falling Cost Paradox": [[2, "chapter-7-the-falling-cost-paradox"]], "Chapter 8: Frontiers": [[2, "chapter-8-frontiers"]], "Appendix A: Tools and Resources": [[2, "appendix-a-tools-and-resources"]], "Preference-Based Alignment": [[3, "preference-based-alignment"]], "Introduction": [[3, "introduction"], [5, "introduction"], [6, "introduction"], [7, "introduction"], [8, "introduction"], [9, "introduction"]], "From Raw Capabilities to Preference Alignment": [[3, "from-raw-capabilities-to-preference-alignment"]], "On the Misalignment of Language Models": [[3, "on-the-misalignment-of-language-models"]], "Aligning Language Models with Human Preferences": [[3, "aligning-language-models-with-human-preferences"]], "Supervised Fine-Tuning (SFT) for Model Alignment": [[3, "supervised-fine-tuning-sft-for-model-alignment"]], "Augmenting SFT with Human Preferences": [[3, "augmenting-sft-with-human-preferences"]], "Is Post-Training the Answer?": [[3, "is-post-training-the-answer"]], "Limitations": [[3, "limitations"]], "Model Collapse": [[3, "model-collapse"]], "Faking Alignment": [[3, "faking-alignment"]], "Case Study: Aligning a Language Model to a Policy": [[3, "case-study-aligning-a-language-model-to-a-policy"]], "Experimental Setup": [[3, "experimental-setup"]], "Deliverables": [[3, "deliverables"]], "A Note on smolLM2 Models": [[3, "a-note-on-smollm2-models"]], "Policy": [[3, "policy"]], "Preference Dataset - Synthetic Dataset Generation": [[3, "preference-dataset-synthetic-dataset-generation"]], "User Prompts": [[3, "user-prompts"]], "Rejected Responses": [[3, "rejected-responses"]], "Chosen Responses": [[3, "chosen-responses"]], "Generate DPO Dataset": [[3, "generate-dpo-dataset"]], "DPO-Based Optimization": [[3, "dpo-based-optimization"]], "Data Preparation": [[3, "data-preparation"]], "Fine-Tuning": [[3, "fine-tuning"]], "Vibe Check": [[3, "vibe-check"]], "Alignment Evaluation": [[3, "alignment-evaluation"]], "Discussion and Conclusions": [[3, "discussion-and-conclusions"]], "References": [[3, "references"], [4, "references"], [5, "references"], [6, "references"], [7, "references"], [8, "references"], [9, "references"]], "The Falling Cost Paradox": [[4, "the-falling-cost-paradox"]], "Why Optimization Matters More Than Ever": [[4, "why-optimization-matters-more-than-ever"]], "Right-Sizing LLMs: A Strategic Approach": [[4, "right-sizing-llms-a-strategic-approach"]], "Metrics": [[4, "metrics"], [5, "metrics"]], "Requirements": [[4, "requirements"]], "Business Requirements": [[4, "business-requirements"]], "Performance Requirements": [[4, "performance-requirements"]], "Operational Requirements": [[4, "operational-requirements"]], "Technical Requirements": [[4, "technical-requirements"]], "Quantization": [[4, "quantization"], [7, "quantization"]], "Check-list": [[4, "check-list"]], "Conclusion": [[4, "conclusion"], [5, "conclusion"], [6, "conclusion"], [7, "conclusion"], [8, "conclusion"], [9, "conclusion"]], "The Evals Gap": [[5, "the-evals-gap"]], "Non-Deterministic Generative Machines": [[5, "non-deterministic-generative-machines"]], "Emerging Properties": [[5, "emerging-properties"]], "Problem Statement": [[5, "problem-statement"], [9, "problem-statement"]], "Evals of Traditional Software vs LLMs": [[5, "evals-table"]], "Evals Design": [[5, "evals-design"]], "LLM Application Testing Requirements Matrix": [[5, "validation-requirements"]], "Conceptual Overview": [[5, "conceptual-overview"]], "Design Considerations": [[5, "design-considerations"]], "Key Metrics for Evaluating Generative Tasks": [[5, "key-metrics"]], "Evaluators": [[5, "evaluators"]], "Model-Based Evaluation": [[5, "model-based-evaluation"]], "Evaluating Evaluators": [[5, "evaluating-evaluators"]], "Benchmarks and Leaderboards": [[5, "benchmarks-and-leaderboards"]], "Tools": [[5, "tools"], [9, "tools"]], "LightEval": [[5, "lighteval"]], "MMLU Econometrics Task Dataset sample": [[5, "mmlu-econometrics"]], "Model Families Evaluated Using LightEval": [[5, "model-families"]], "LangSmith": [[5, "langsmith"]], "PromptFoo": [[5, "promptfoo"]], "Comparison": [[5, "comparison"], [7, "comparison"], [7, "id37"]], "Comparison of Lighteval, LangSmith, and Promptfoo": [[5, "tool-comparison"]], "Managing Input Data": [[6, "managing-input-data"]], "Parsing Documents": [[6, "parsing-documents"]], "MarkItDown": [[6, "markitdown"]], "Docling": [[6, "docling"]], "Structured Data Extraction": [[6, "structured-data-extraction"]], "Retrieval-Augmented Generation": [[6, "retrieval-augmented-generation"]], "RAG Pipeline": [[6, "rag-pipeline"]], "Preparing the Knowledge Base": [[6, "preparing-the-knowledge-base"]], "Vector Database": [[6, "vector-database"]], "Reranking": [[6, "reranking"]], "LLMs with RAG": [[6, "llms-with-rag"]], "Challenges and Limitations": [[6, "challenges-and-limitations"]], "Will RAGs exist in the future?": [[6, "will-rags-exist-in-the-future"]], "A Note on Frameworks": [[6, "a-note-on-frameworks"]], "Case Studies": [[6, "case-studies"]], "Case Study I: Content Chunking with Contextual Linking": [[6, "case-study-i-content-chunking-with-contextual-linking"]], "Generating long-form content": [[6, "generating-long-form-content"]], "Discussion": [[6, "discussion"], [6, "id41"], [9, "discussion"]], "Case Study II: Quiz Generation with Citations": [[6, "case-study-ii-quiz-generation-with-citations"]], "Use Case": [[6, "use-case"]], "Implementation": [[6, "implementation"]], "Example Usage": [[6, "example-usage"]], "Local LLMs in Practice": [[7, "local-llms-in-practice"]], "Choosing your Model": [[7, "choosing-your-model"]], "Task Suitability": [[7, "task-suitability"]], "Benchmark results for Llama 2 family of models.": [[7, "llama2-benchmark"]], "Performance & Cost": [[7, "performance-cost"]], "Licensing": [[7, "licensing"]], "Open Source LLMs.": [[7, "open-source-llms"]], "Community Support": [[7, "community-support"]], "Customization": [[7, "customization"]], "Mistral fine-tuning costs as of December 22, 2024.": [[7, "mistral-costs"]], "Tools for Local LLM Deployment": [[7, "tools-for-local-llm-deployment"]], "Serving Models": [[7, "serving-models"]], "LLama.cpp": [[7, "llama-cpp"]], "Llamafile": [[7, "llamafile"]], "Ollama": [[7, "ollama"], [9, "ollama"]], "lama.cpp vs Ollama vs Llamafile Comparison": [[7, "feature-comparison-local"]], "UI": [[7, "ui"]], "LM Studio": [[7, "lm-studio"]], "Jan": [[7, "jan"]], "Open WebUI": [[7, "open-webui"]], "LM Studio vs Jan vs OpenWebUI Comparison": [[7, "feature-comparison-ui"]], "Case Study: The Effect of Quantization on LLM Performance": [[7, "case-study-the-effect-of-quantization-on-llm-performance"]], "Prompts Dataset": [[7, "prompts-dataset"]], "Quantization Levels": [[7, "quantization-levels"]], "Benchmarking": [[7, "benchmarking"], [8, "benchmarking"]], "Results": [[7, "results"]], "Quantization Benchmarks": [[7, "quantization-benchmarks"]], "Benchmarking Hardware": [[7, "benchmarking-hardware"]], "Takeaways": [[7, "takeaways"], [8, "takeaways"]], "Safety": [[8, "safety"]], "Safety Risks": [[8, "safety-risks"]], "General AI Safety Risks": [[8, "general-ai-safety-risks"]], "Amplified Existing Harms and Novel Risks": [[8, "amplified-existing-harms-and-novel-risks"]], "Risks Associated with Autonomous AI": [[8, "risks-associated-with-autonomous-ai"]], "Exacerbating Factors": [[8, "exacerbating-factors"]], "LLMs Specific Safety Risks": [[8, "llms-specific-safety-risks"]], "Guidance": [[8, "guidance"]], "Governments & Organizations": [[8, "governments-organizations"]], "Private Sector": [[8, "private-sector"]], "OpenAI": [[8, "openai"]], "Anthropic": [[8, "anthropic"]], "Google": [[8, "google"]], "Rubrics": [[8, "rubrics"]], "MLCommons AI Safety Benchmark": [[8, "mlcommons-ai-safety-benchmark"]], "Centre for the Governance of AI Rubric": [[8, "centre-for-the-governance-of-ai-rubric"]], "Porquoi": [[8, "porquoi"]], "Approaches": [[8, "approaches"]], "Red Teaming": [[8, "red-teaming"]], "Constitutional AI": [[8, "constitutional-ai"]], "Explainable AI (XAI)": [[8, "explainable-ai-xai"]], "Designing a Safety Plan": [[8, "designing-a-safety-plan"]], "Phase 1. Policy Definition": [[8, "phase-1-policy-definition"]], "Phase 2. User Research & Risk Identification": [[8, "phase-2-user-research-risk-identification"]], "Phase 3. Evaluation Framework": [[8, "phase-3-evaluation-framework"]], "Phase 4. Safety Architecture Design": [[8, "phase-4-safety-architecture-design"]], "Phase 5. Implementation & Tools Selection": [[8, "phase-5-implementation-tools-selection"]], "Phase 6. Go-to-Market": [[8, "phase-6-go-to-market"]], "Common Pitfalls": [[8, "common-pitfalls"]], "Technical Implementation Components": [[8, "technical-implementation-components"]], "Benchmarks & Datasets": [[8, "benchmarks-datasets"]], "SALAD-Bench": [[8, "salad-bench"]], "TruthfulQA": [[8, "truthfulqa"]], "HarmBench": [[8, "harmbench"]], "SafeBench": [[8, "safebench"]], "Tools & Techniques": [[8, "tools-techniques"]], "Representative Safety Layer Risk Map.": [[8, "safety-layer-table"]], "Rules-Based Safety Filtering": [[8, "rules-based-safety-filtering"]], "Rules-Based Safety Filtering Tools.": [[8, "safety-layer-tools"]], "LLM-Based Safety Filtering": [[8, "llm-based-safety-filtering"]], "Custom Moderation": [[8, "custom-moderation"]], "Case Study: Implementing a Safety Filter": [[8, "case-study-implementing-a-safety-filter"]], "Evals Dataset": [[8, "evals-dataset"]], "Bad Samples": [[8, "bad-samples"]], "Good Samples": [[8, "good-samples"]], "Safety Filters": [[8, "safety-filters"]], "LLM-Guard": [[8, "llm-guard"]], "Mistral Moderation API": [[8, "mistral-moderation-api"]], "OpenAI Moderation API": [[8, "openai-moderation-api"]], "Custom Judge Validator": [[8, "custom-judge-validator"]], "Structured Output": [[9, "structured-output"]], "Techniques": [[9, "techniques"]], "Prompt Engineering": [[9, "prompt-engineering"]], "JSON Mode (Fine-Tuned)": [[9, "json-mode-fine-tuned"]], "Logit Post-Processing": [[9, "logit-post-processing"]], "Outlines": [[9, "outlines"]], "LangChain": [[9, "langchain"]], "Best Practices": [[9, "best-practices"]], "Comparing Solutions": [[9, "comparing-solutions"]], "Structured Output Frameworks Comparison": [[9, "structured-output-frameworks"]], "Research and Ongoing Debate": [[9, "research-and-ongoing-debate"]], "Acknowledgements": [[9, "acknowledgements"]]}, "indexentries": {}}) \ No newline at end of file diff --git a/tamingllms/_build/jupyter_execute/markdown/intro.ipynb b/tamingllms/_build/jupyter_execute/markdown/intro.ipynb index a2a1ee3..9ed3fb2 100644 --- a/tamingllms/_build/jupyter_execute/markdown/intro.ipynb +++ b/tamingllms/_build/jupyter_execute/markdown/intro.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "4bbf1402", + "id": "02a05cbc", "metadata": {}, "source": [ "(intro)=\n", diff --git a/tamingllms/_build/jupyter_execute/notebooks/input.ipynb b/tamingllms/_build/jupyter_execute/notebooks/input.ipynb index 9656c0c..867dce0 100644 --- a/tamingllms/_build/jupyter_execute/notebooks/input.ipynb +++ b/tamingllms/_build/jupyter_execute/notebooks/input.ipynb @@ -21,22 +21,22 @@ "source": [ "## Introduction\n", "\n", - "While advances in long-context language models (LCs) {cite}`lee2024longcontextlanguagemodelssubsume` have expanded the amount of information these systems can process, significant challenges remain in managing and effectively utilizing extended data inputs:\n", + "While advances in long-context language models (LCs) {cite}`lee2024longcontextlanguagemodelssubsume` have expanded the amount of information these LLMs can process, significant challenges remain in managing and effectively utilizing extended data inputs:\n", "\n", "- LLMs are sensitive to input formatting and structure, requiring careful data preparation to achieve optimal results {cite}`he2024doespromptformattingimpact, liu2024enhancingllmscognitionstructurization, tan2024htmlraghtmlbetterplain`.\n", - "- They operate with knowledge cutoffs, providing potentially stale or outdated information that may not reflect current reality and demonstrate problems with temporal knowledge accuracy {cite}`amayuelas-etal-2024-knowledge`.\n", + "- LLMs operate with knowledge cutoffs, providing potentially outdated information that may not reflect current reality and demonstrate problems with temporal knowledge accuracy {cite}`amayuelas-etal-2024-knowledge`.\n", "- LLMs also face \"lost-in-the-middle\" problems {cite}`wu2024longdocumentsummaryevaluation` and struggle with less common but important information showing a systematic loss of long-tail knowledge {cite}`kotha2024understanding`.\n", "\n", "Motivated by these challenges, this chapter explores two key input data components:\n", "\n", - "1. Data Parsing and Chunking: Parsing and chunking documents into a unified format that is suitable and more manageable for LLMs to process.\n", + "1. Data Pre-Processing: Parsing and chunking documents into a unified format that is suitable and manageable for LLMs to process effectively.\n", "2. Retrieval Augmentation: Augmenting LLMs with the ability to retrieve relevant, recent, and specialized information.\n", "\n", - "In data parsing, we will explore some useful open source tools that help transform data into LLM-compatible formats, demonstrating their impact through a case study of structured information extraction from complex PDFs. In a second case study, we will introduce some chunking strategies to help LLMs process long inputs and implement a particular technique called Chunking with Contextual Linking the enables contextually relevant chunk processing.\n", + "In data parsing, we will explore some useful open source tools such as Docling and MarkItDown that help transform data into LLM-compatible formats, demonstrating their impact through a case study of structured information extraction from complex PDFs. In a second case study, we will introduce some chunking strategies to help LLMs process long inputs and implement a particular technique called Chunking with Contextual Linking the enables contextually relevant chunk processing.\n", "\n", - "In retrieval augmentation, we will explore how to enhance LLMs with semantic search capabilities for incorporating external context using RAGs (Retrieval Augmented Generation) while discussing whether RAGs will be really needed in the future given the rise of long-context language models.\n", + "In retrieval augmentation, we will explore how to enhance LLMs with semantic search capabilities for incorporating external context using RAGs (Retrieval Augmented Generation) using Vector Databases such as ChromaDB. We also discuss whether RAGs will be really needed in the future given the rise of long-context language models.\n", "\n", - "While RAGs are useful for incorporating external context, they are not a silver bullet nor a mandatory component for all LLM applications. In our last case study, we leverage long-context windows to build a quiz generator from a large knowledge base. We will also explore some additional relevant techniques such as prompt caching and response verification through citations.\n", + "While RAGs are useful for incorporating external context, they are not a silver bullet nor a mandatory component for all LLM applications. In our last case study, we demonstrate how long-context windows can be used to extract insights from a large knowledge base without the need for complex retrieval systems. We build a quiz generator from open books from Project Gutenberg. We will also explore some additional relevant techniques such as prompt caching and response verification through citations using \"Corpus-in-Context\" (CIC) Prompting {cite}`lee2024longcontextlanguagemodelssubsume`.\n", "\n", "By the chapter's conclusion, readers will possess relevant knowledge of input data management strategies for LLMs and practical expertise in selecting and implementing appropriate approaches and tools for specific use cases." ] @@ -45,13 +45,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ + "(parsing)=\n", "## Parsing Documents\n", "\n", "Data parsing and formatting play a critical role in LLMs performance {cite}`he2024doespromptformattingimpact, liu2024enhancingllmscognitionstructurization, tan2024htmlraghtmlbetterplain`. Hence, building robust data ingestion and preprocessing pipelines is essential for any LLM application. \n", "\n", - "This section explores open source tools that streamline input data processing, in particular for parsing purposes, providing a unified interface for converting diverse data formats into standardized representations that LLMs can effectively process. By abstracting away format-specific complexities, they allow developers to focus on core application logic rather than parsing implementation details while maximizing the LLM performance.\n", + "This section explores open source tools that streamline input data processing, in particular for parsing purposes, providing a unified interface for converting diverse data formats into standardized representations that LLMs can effectively process. By abstracting away format-specific complexities, they allow developers to focus on core application logic rather than parsing implementation details while maximizing LLM's performance.\n", "\n", - "We will cover open source tools that provide parsing capabilities for a wide range of data formats. And we will demonstrate how some of these tools can be used to extract structured information from complex PDFs demonstrating how the quality of the parser can impact LLM's performance." + "We will cover open source tools that provide parsing capabilities for a wide range of data formats. And we will show how some of these tools can be used to extract structured information from complex PDFs demonstrating how the quality of the parser can impact LLM's performance." ] }, { @@ -60,7 +61,7 @@ "source": [ "### MarkItDown\n", "\n", - "MarkItDown {cite}`microsoft2024markitdown` is a Python package and CLI tool developed by the Microsoft AutoGen team for converting various file formats to Markdown. It supports a wide range of formats including PDF, PowerPoint, Word, Excel, images (with OCR and EXIF metadata), audio (with transcription), HTML, and other text-based formats making it a useful tool for document indexing and LLM-based applications.\n", + "MarkItDown {cite}`microsoft2024markitdown` is a Python package and CLI tool developed by the Microsoft for converting various file formats to Markdown. It supports a wide range of formats including PDF, PowerPoint, Word, Excel, images (with OCR and EXIF metadata), audio (with transcription), HTML, and other text-based formats making it a useful tool for document indexing and LLM-based applications.\n", "\n", "Key features:\n", "- Simple command-line and Python API interfaces\n", @@ -289,10 +290,10 @@ "---\n", "name: docling\n", "alt: Docling's result\n", - "scale: 60%\n", + "scale: 40%\n", "align: center\n", "---\n", - "Docling's parsed result\n", + "An extract of Docling's parsed result.\n", "```\n" ] }, @@ -323,10 +324,10 @@ "---\n", "name: markitdown\n", "alt: MarkItDown's parsed result\n", - "scale: 60%\n", + "scale: 40%\n", "align: center\n", "---\n", - "MarkItDown's parsed result\n", + "An extract of MarkItDown's parsed result.\n", "```" ] }, @@ -334,13 +335,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Now, let's focus on the economic forecasts. In particular, we are interested in extracting the CIO's 2025E forecasts.\n", + "Now, let's focus on the economic forecasts. In particular, we are interested in extracting the CIO's 2025E forecasts. This could be a useful predictive indicator for the economy in 2025.\n", "\n", "```{figure} ../_static/input/2025.png\n", "---\n", "name: forecast2025\n", "alt: Forecast 2025\n", - "scale: 45%\n", + "scale: 40%\n", "align: center\n", "---\n", "Merrill Lynch's CIO Economic Forecasts.\n", @@ -367,7 +368,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We write a simple function to extract the economic forecasts from the document using an LLM model (with structured output) with the following prompt template, where `extract_prompt` represents the kind of data the user would like to extract and `doc` is the input document to analyze." + "We write a simple function to extract the economic forecasts from the document using an LLM model (with structured output) with the following prompt template, where `extract_prompt` represents the kind of data the user would like to extract and `doc` is the input document." ] }, { @@ -674,7 +675,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Now, let's focus on the asset class weightings. We will extract the asset class weightings from the document and compare the results from MarkItDown and Docling. The information now is presented in a quite different structure as we can see in {ref}`asset_class`. The CIO view information is represented in a spectrum starting with \"Underweight\", passing through \"Neutral\" and reaching \"Overweight\". The actual view is marked by some colored dots in the chart. Let's see if we can extract this relatively more complex information from the document.\n", + "Next, let's focus on the asset class weightings. We will extract the asset class weightings from the document and compare the results from MarkItDown and Docling. The information is now presented in a quite different structure as we can see in {numref}`asset_class`. The CIO view information is represented in a spectrum starting with \"Underweight\", passing through \"Neutral\" and reaching \"Overweight\". The actual view is marked by some colored dots in the chart. Let's see if we can extract this relatively more complex information from the document.\n", "```{figure} ../_static/input/asset_class.png\n", "---\n", "name: asset_class\n", @@ -928,16 +929,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We observe that Docling performs significantly better at 93.33% accuracy missing only one value. MarkItDown achieves 53.33% accuracy struggling with nuanced asset class weightings. In this case, Docling's structured parsed output did help the LLM to extract the information more accurately compared to MarkItDown's unstructured output. Hence, in this case, the strategy used to parse the data did impact the LLM's ability to extract structured information. Having said that, it is important to mention that a more robust analysis would run data extraction on a large sample data a number of repeated runs to estimate error rates since results are non-deterministic." + "We observe that Docling performs significantly better at 93.33% accuracy missing only one value. MarkItDown achieves 53.33% accuracy struggling with nuanced asset class weightings. In this case, Docling's structured parsed output did help the LLM to extract the information more accurately compared to MarkItDown's unstructured output. Hence, in this case, the strategy used to parse the data did impact the LLM's ability to extract structured information. Having said that, it is important to mention that a more robust analysis would run data extraction on a larger sample data a number of times across repeated runs to estimate confidence intervals since results are non-deterministic." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "What if we want to systematically extract all tables from the document? We can use Docling to do that by simply accessing the `tables` attribute of the `DocumentConverter` object.\n", + "What if we wanted to systematically extract all tables from the document? We can use Docling to do that by simply accessing the `tables` attribute of the `DocumentConverter` object.\n", "\n", - "By doing that, we observe that Docling extracted 7 tables from the document exporting tables from top down and left to right in order of appearance in the document.\n", + "By doing that, we observe that Docling successfully extracted the seven tables from the document exporting tables from top down and left to right in order of appearance in the document.\n", "Below, we display the first two and the last tables. We can see the first table successfully extracted for Equities forecasts, the second one for Fixed Income forecasts as well as the last table, which contains CIO Equity Sector Views.\n" ] }, @@ -1588,11 +1589,11 @@ "Arguably, the description's inaccuracies could be a consequence of the underlying LLM model's inability to process the image.\n", "\n", "We have covered MarkitDown and Docling as examples of open source tools that can help developers parse input data into a suitable format to LLMs. Other relevant open source tools worth mentioning include:\n", - "- Unstructured.io {cite}`unstructured2024github`: A Python library for unstructured data extraction.\n", + "- Unstructured {cite}`unstructured2024github`: A Python library for unstructured data extraction.\n", "- FireCrawl {cite}`mendable2024firecrawl`: A Fast and Efficient Web Crawler for LLM Training Data.\n", "- LlamaParse {cite}`llamaparse2024github`: Llamaindex's data parsing solution.\n", "\n", - "The choice of tool depends on the specific requirements of the application and the nature of the input data. This choice should be taken as a critical decision of any data intensive LLM-based application and deserves dedicated research and evidence-based experimentation.\n" + "The choice of tool depends on the specific requirements of the application and the nature of the input data. This choice should be taken as a critical decision of any data intensive LLM-based application and deserves dedicated research and evidence-based experimentation early-on in the development cycle.\n" ] }, { @@ -1659,7 +1660,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Turns out ChatGPT hallucinates. A quick web search on the before mentioned authors yields no results. In fact, those authors names are made up. And of course the correct answer would have been \"Tharsis Souza\".\n", + "Turns out ChatGPT hallucinates. A quick web search on the before mentioned authors yields no results. In fact, those authors names are made up. And of course the correct answer would have been yours truly, \"Tharsis Souza\".\n", "\n", "LLMs only have access to the information they have been trained on, which of course has been fixed at a point in time. Hence, LLMs operate with stale data. The problem gets exacerbated by the fact that LLMs are trained to provide an answer even if the answer is unknown by them, hence leading to hallucinations. \n", "\n", @@ -1680,7 +1681,7 @@ "4. **Domain-Specific Applications**: RAG allows LLMs to be equipped with specialized knowledge in fields like medicine, law, or engineering by retrieving information from domain-specific literature, regulations, and technical documentation. This enables accurate responses aligned with professional standards and current best practices.\n", "5. **Code Documentation and Technical Support**: RAG can help developers by retrieving relevant code examples, API documentation, and best practices from repositories and documentation, which often suffer updates frequently, enabling more accurate and contextual coding assistance.\n", "\n", - "If LLMs alone work on stale, general-purpose data with the added challenge of being prone to hallucinations, RAG systems serve as an added capability enabling LLMs to work on recent, domain-specific knowledge increasing the likelihood of LLMs to provide responses that are factual and relevant to user queries.\n" + "If LLMs alone work on stale, general-purpose data with the added challenge of being prone to hallucinations, RAG systems serve as an added capability enabling LLMs to work on recent, domain-specific knowledge increasing the likelihood of LLMs to provide responses that are factual and relevant to user's queries.\n" ] }, { @@ -1689,7 +1690,7 @@ "source": [ "### RAG Pipeline\n", "\n", - "RAG architectures vary but they all share the same goal: to retrieve relevant information from a knowledge base to maximize the LLM's ability to effectively and accurately respond to prompts, particularly when the answer requires out-of-training data information.\n", + "RAG architectures vary but they all share the same goal: To retrieve relevant information from a knowledge base to maximize the LLM's ability to effectively and accurately respond to prompts, particularly when the answer requires out-of-training data.\n", "\n", "We will introduce key components of a RAG system one by one leading to a full canonical RAG pipeline at the end that ultimately will be used to answer our original question \"Who's the author of the book Taming LLMs?\", accurately.\n", "\n", @@ -1700,7 +1701,7 @@ "- Retrieval System including re-ranking\n", "- LLM Augmented Generation via in-context learning\n", "\n", - "Data extraction, parsing and chunking are also part of a canonical pipeline as we prepare the knowledge base. Those are concepts that we have already explored in the previous sections, hence we will be succinct here. We will start by preparing the knowledge base.\n", + "Data extraction, parsing and chunking are also part of a canonical pipeline as we prepare the knowledge base. Those are concepts we explored in detail in Sections {ref}`parsing` and {ref}`chunking`, hence we will be succinct here. We will start by preparing the knowledge base.\n", "\n", "```{figure} ../_static/input/rag.svg\n", "---\n", @@ -1719,7 +1720,7 @@ "source": [ "#### Preparing the Knowledge Base\n", "\n", - "Every RAG system requires a knowledge base. In our case, the knowledge base is a set of documents that we equip the LLM to answer our authorship question.\n", + "Every RAG system requires a knowledge base. In our case, the knowledge base is a set of documents that we equip the LLM with to answer our authorship question.\n", "\n", "Hence, we will compose our knowledge base by adding the web version of (some of the chapters of) the book \"Taming LLMs\", namely:\n", "- Introduction\n", @@ -1898,11 +1899,11 @@ "- `ids`: The ids of the documents retrieved from the collection\n", "- `distances`: The distances of the documents to the query vector\n", "\n", - "We can see that the chapters \"Introduction\", \"Input\" and \"Structured Output\" are retrieved from the collection ordered by their distance to the query vector.\n", + "We can see that the chapters \"Introduction\", \"Input\" and \"Structured Output\" are retrieved from the collection ordered by their distance to the query vector, in increasing order.\n", "\n", "We observe that the Introduction chapter is the most relevant one as it ranks first, followed by the Input and Structured Output chapters. Indeed, the purpose of the book is included in the Introduction chapter demonstrating the retrieval system successfully retrieved the most relevant document to the input query, in this simple example.\n", "\n", - "In order to understand how the retrieval system works and how the \"distance to the query vector\" is computed, we need to understand how the embeddings are created and how the documents are indexed." + "In order to understand how the retrieval system works and how the \"distance to the query vector\" is computed, we need to understand how embeddings are created and how documents are indexed." ] }, { @@ -1915,7 +1916,7 @@ "\n", "[^embeddings_definition]: Bengio et al. {cite}`bengio2014representationlearningreviewnew` provide serves as an excellent reference for representation learning in general including embeddings. OpenAI provides a good intro to Embeddings for developers {cite}`openai2024embeddings`\n", "\n", - "For text data, small distances among embeddings suggest high semantic relatedness and large distances suggest low semantic relatedness among the embedded texts. HuggingFace provides a leaderboard of embeddings models {cite}`huggingface2024mteb`, which are ranked by in dimensions such as classification, clustering and reranking performance.\n", + "For text data, small distances among embeddings suggest high semantic relatedness and large distances suggest low semantic relatedness among the embedded texts. HuggingFace provides a leaderboard of embeddings models {cite}`huggingface2024mteb`, which are ranked by dimensions such as classification, clustering and reranking performance.\n", "\n", "Behind the scenes, ChromaDB is using the model `all-MiniLM-L6-v2` by default [^chroma_embeddings] to create embeddings for the input documents and the query (see {numref}`embedding`). This model is available in `sentence_transformers` {cite}`sentencetransformers2024website`. Let's see how it works.\n", "\n", @@ -1926,7 +1927,7 @@ "scale: 70%\n", "align: center\n", "---\n", - "Embedding\n", + "Embedding: From text to vectors.\n", "```\n", "\n", "[^chroma_embeddings]: ChromaDB enables custom embedding functions and provides a list of wrappers around commonly used embedding models and APIs https://docs.trychroma.com/docs/embeddings/embedding-functions" @@ -1976,7 +1977,7 @@ "source": [ "As a result, we obtain four 384-dimensional vectors representing our embeddings (one for each of the three chapters and one for the input query).\n", "\n", - "Now we can calculate similarity among the embeddings. By default, sentence transformers uses cosine similarity to calculate the similarity between embeddings. " + "Now we can calculate similarity among the embeddings. By default, sentence transformers uses cosine similarity as similarity metric." ] }, { @@ -2005,7 +2006,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Let's visualize the similarity matrix to better understand the relationships between our documents in {numref}`similarities`. The top row of the matrix represents the similarity of the input query against all chapters. That's exactly what we previously obtained by querying ChromaDB which returned a response with documents ranked by similarity to input query.\n", + "Let's visualize the similarity matrix to better understand the relationships between our documents in {numref}`similarities`. The top row of the matrix represents the similarity of the input query against all chapters. That's exactly what we previously obtained by querying ChromaDB which returned a response with documents ranked by similarity to input query. As expected, the Introduction chapter is the most similar to the input query followed by the Input and Structured Output chapters, as we previously observed with ChromaDB.\n", "\n", "```{figure} ../_static/input/similarity.png\n", "---\n", @@ -2032,7 +2033,7 @@ "source": [ "**Indexing**\n", "\n", - "Indexing is a crucial optimization technique that makes similarity searches faster and more efficient.\n", + "Indexing is an optimization technique that makes similarity searches faster and more efficient.\n", "\n", "Without indexing, finding similar vectors would require an exhaustive search - comparing a query vector against every single vector in the database. For large datasets, this becomes prohibitively slow.\n", "\n", @@ -2058,9 +2059,9 @@ " - Reduces memory footprint significantly\n", " - Good balance between accuracy and resource usage\n", "\n", - "HNSW is the underlying library for Chroma vector indexing and search {cite}`chromadb2024hnsw`. HNSW provides fast searches with high accuracy but uses more memory. LSH and quantization methods offer better memory efficiency but may sacrifice some precision.\n", + "HNSW is the underlying library for ChromaDB vector indexing and search {cite}`chromadb2024hnsw`. HNSW provides fast searches with high accuracy but uses more memory. LSH and quantization methods offer better memory efficiency but may sacrifice some precision.\n", "\n", - "But are indexing + basic embeddings based similarity sufficient? Often not, as we will see next as we cover reranking technique." + "But is the combination of indexing and basic embeddings-based similarity sufficient to retrieve relevant documents? Often not, as we will see next, as we cover reranking technique." ] }, { @@ -2069,7 +2070,7 @@ "source": [ "#### Reranking\n", "\n", - "Let's go back to querying our vector database. Here are additional examples." + "Let's go back to querying our vector database." ] }, { @@ -2204,7 +2205,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The ideia is to first run semantic similarity on embeddings, which should be fast but potentially inaccurate, and then run re-raking on the top-k results, which is more accurate but slower. By doing so, we can balance the speed and accuracy of the retrieval system.\n", + "In RAG systems, the idea is to first run semantic similarity on embeddings, which should be fast but potentially inaccurate, and then run reranking from the top-k results, which should be more accurate but slower. By doing so, we can balance the speed and accuracy of the retrieval system.\n", "\n", "Hence, instead of going over all retrieved documents:\n", "```python\n", @@ -2313,7 +2314,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Then, we run the retrieve step." + "Then, we run the retrieval step." ] }, { @@ -2382,7 +2383,7 @@ " \n", "- **Data Quality and Accuracy**: The effectiveness of RAG systems fundamentally depends on the quality and reliability of their knowledge sources. When these sources contain inaccurate, outdated, biased, or incomplete information, the system's responses become unreliable. This challenge is particularly acute when dealing with rapidly evolving topics or when sourcing information from unverified channels.\n", " \n", - "- **Computational Cost and Latency**: Implementing RAG systems at scale presents computational and operational challenges. The process of embedding documents, maintaining vector databases, and performing similarity searches across large knowledge bases demands computational, budget and operational resources. In real-time applications, these requirements can introduce noticeable latency, potentially degrading the user experience and limiting practical applications.\n", + "- **Computational Cost and Latency**: Implementing RAG systems at scale presents computational and operational challenges. The process of embedding documents, maintaining vector databases, and performing similarity searches across large knowledge bases demands computational, and operational resources. In real-time applications, these requirements can introduce noticeable latency, potentially degrading the user experience and limiting practical applications.\n", " \n", "- **Explainability and Evaluation**: The complexity of RAG systems, arising from the intricate interaction between retrieval mechanisms and generative models, makes it difficult to trace and explain their reasoning processes. Traditional evaluation metrics often fail to capture the nuanced aspects of RAG performance, such as contextual relevance and factual consistency. This limitation hampers both system improvement and stakeholder trust. Readers are encouraged to read Chapter {ref}`evals` for general LLM evaluation issues as well as consider tools such as Ragas {cite}`ragas2024evaluation` for RAG evaluation.\n", " \n", @@ -2397,14 +2398,14 @@ "\n", "### Will RAGs exist in the future?\n", "\n", - "This question is posed as we contrast RAGs with LLMs with long-context windows (LC).\n", + "This question is posed as we contrast RAGs with LLMs with long-context windows (LCs).\n", "\n", - "Recent research has shed light on this specific point {cite}`li2024retrievalaugmentedgenerationlongcontext`, suggesting that, on the one hand, RAGs can be seen as a cost-effective alternative to LC models:\n", - "* RAGs offer lower computational cost compared to LC due to the significantly shorter input length required for processing.\n", - "* This cost-efficiency arises because RAG reduces the number of input tokens to LLMs, which of course reduces usage cost as pricing is based on the number of input (and output) tokens.\n", + "Recent research has shed light on this specific point {cite}`li2024retrievalaugmentedgenerationlongcontext` suggesting a trade-off between cost and performance. On the one hand, RAGs can be seen as a cost-effective alternative to LC models:\n", + "* RAGs offer lower computational cost compared to LCs due to the significantly shorter input length required for processing.\n", + "* This cost-efficiency arises because RAG reduces the number of input tokens to LLMs, which in turn reduces overall usage cost.\n", "\n", "On the other hand, this RAG benefit is achieved at the cost of performance:\n", - "* Recent advancements in LLMs, in particular with Gemini-1.5 and GPT-4o models, demonstrate capabilities in understanding long contexts directly, which enables them to outperform RAG in terms of average performance\n", + "* Recent advancements in LLMs, in particular with Gemini-1.5 and GPT-4o models, demonstrate capabilities in understanding long contexts directly, which enables them to outperform RAG in terms of average performance.\n", "* LC models can process extremely long contexts, such as Gemini 1.5 which can handle up to 1 million tokens, and these models benefit from large-scale pretraining to develop strong long-context capabilities.\n", "\n", "This cost-performance trade-off is illustrated in {numref}`LC`, where LC models outperform RAGs in terms of average performance while RAGs are more cost-effective.\n", @@ -2423,15 +2424,17 @@ "\n", "Another example of a hybrid approach that combines the benefits of both LC and RAGs is RetroLLM {cite}`li2024retrollmempoweringlargelanguage`, which is a unified framework that integrates retrieval and generation into a single process, enabling language models to generate fine-grained evidence directly from a corpus. The key contribution is that this approach delivers those benefits while eliminating the need for a separate retriever, addressing limitations of traditional RAG methods. Experimental results demonstrate RetroLLM's superior performance compared to traditional RAG methods, across both in-domain and out-of-domain tasks. It also achieves a significant reduction in token consumption due to its fine-grained evidence retrieval.\n", "\n", - "A relevant development in this area is the introduction of LOFT {cite}`lee2024longcontextlanguagemodelssubsume`, a benchmark to assess this paradigm shift from RAGs to LCs, using real-world tasks requiring context up to millions of tokens. Evidence suggests LCs can deliver performance with simplified pipelines compared to RAGs, particularly for tasking requiring multi-hop reasoning over long contexts when using Chain-of-Thought {cite}`wei2023chainofthoughtpromptingelicitsreasoning`. However, LCs can still be outperformed by specialized retrievers, in particular Gecko, a specialized model fine-tuned on extensive text retrieval and similarity tasks.\n", + "CAG {cite}`chan2024dontragcacheaugmentedgeneration` is another solution that eliminates the need for RAGs as it proposes cache-augmented generation (CAG). CAG preloads all relevant data into a large language model's extended context window, eliminating the need for real-time retrieval and improving speed and accuracy. This is achieved by precomputing a key-value cache, further optimizing inference time. CAG demonstrates superior performance compared to RAG by achieving higher BERT scores in most evaluated scenarios, indicating better answer quality, and by having significantly reduced generation times. These results suggest that CAG can be both more accurate and more efficient than traditional RAG systems.\n", + "\n", + "Another relevant development in this area is the introduction of LOFT {cite}`lee2024longcontextlanguagemodelssubsume`, a benchmark to assess this paradigm shift from RAGs to LCs, using real-world tasks requiring context up to millions of tokens. Evidence suggests LCs can deliver performance with simplified pipelines compared to RAGs, particularly for tasking requiring multi-hop reasoning over long contexts when using Chain-of-Thought {cite}`wei2023chainofthoughtpromptingelicitsreasoning`. However, LCs can still be outperformed by specialized retrievers, in particular Gecko, a specialized model fine-tuned on extensive text retrieval and similarity tasks.\n", "\n", "Bottom-line: Do we really need RAGs? The answer is conditional:\n", "\n", - "* **RAG may be relevant when cost-effectiveness is a key requirement** and where the model needs to access vast amounts of external knowledge without incurring high computational expenses. However, as LLMs context window sizes increase and LLMs cost per input token is decreases, RAG may not be as relevant as it was before.\n", + "* **RAG may be relevant when cost-effectiveness is a key requirement** and where the model needs to access vast amounts of external knowledge without incurring high computational expenses. However, as LLMs context window sizes increase and LLMs cost per input token decreases, RAGs may not be as relevant as it was before.\n", "* **Long-context LLMs are superior when performance is the primary concern**, and the model needs to handle extensive texts that require deep contextual understanding and reasoning.\n", "* **Hybrid approaches like SELF-ROUTE are valuable as they combine the strengths of RAG and LC** offering a practical balance between cost and performance, especially for applications where both factors are critical.\n", "\n", - "Ultimately, the choice between RAG, LC, or a hybrid method depends on the specific requirements of the task, available resources, and the acceptable trade-off between cost and performance.\n", + "Ultimately, the choice among RAG, LC, or a hybrid method depends on the specific requirements of the task, available resources, and the acceptable trade-off between cost and performance.\n", "\n", "In a later case study, we demonstrate the power of LCs as we construct a Quiz generator with citations over a large knowledge base without the use of chunking nor RAGs.\n" ] @@ -2444,7 +2447,7 @@ "\n", "We have covered a few open source tools for parsing data and provided a canonical RAG pipeline directly using an open source VectorDB together with an LLM. There is a growing number of frameworks that offer similar functionality wrapping the same core concepts at a higher level of abstraction. The two most popular ones are `Langchain` and `LlamaIndex`. \n", "\n", - "For instance, the code below shows how to use `LlamaIndex`'s `LlamaParse` for parsing input documents, which offers support for a wide range of file formats (e.g. .pdf, .pptx, .docx, .xlsx, .html). We we can see that the code is very similar to the one we used for `MarkitDown` and `Docling`.\n", + "For instance, the code below shows how to use `LlamaIndex`'s `LlamaParse` for parsing input documents, which offers support for a wide range of file formats (e.g. .pdf, .pptx, .docx, .xlsx, .html). We observe that the code is very similar to the one we used for `MarkitDown` and `Docling`.\n", "\n", "```python\n", "from llama_parse import LlamaParse\n", @@ -2459,11 +2462,9 @@ "documents = parser.load_data([\"./doc1.pdf\", \"./doc2.pdf\"])\n", "```\n", "\n", - "\n", - "\n", "As another example, the code below replicates our ChromaDB-based retrieval system using `LlamaIndex` {cite}`llamaindex2024storing`.\n", "\n", - "As we can see, similar concepts are used in both frameworks:\n", + "As we can see, similar concepts are used:\n", "- Documents to represent elements of the knowledge base\n", "- Collections to store the documents\n", "- Indexing of embeddings in the VectorDB and finally\n", @@ -2528,6 +2529,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ + "(chunking)=\n", "### Case Study I: Content Chunking with Contextual Linking\n", "\n", "Content chunking is commonly used to breakdown long-form content into smaller, manageable chunks. In the context of RAGs, this can be helpful not only to help the retrieval system find more contextually relevant documents but also lead to a more cost efficient LLM solution since fewer tokens are processed in the context window. Furthermore, semantic chunking can increase accuracy of RAG systems {cite}`zenml2024rag`.\n", diff --git a/tamingllms/latex/input.tex b/tamingllms/latex/input.tex new file mode 100644 index 0000000..f6919dd --- /dev/null +++ b/tamingllms/latex/input.tex @@ -0,0 +1,2433 @@ +(input)= +# Managing Input Data +```{epigraph} +One home run is much better than two doubles. + +-- Steve Jobs +``` +```{contents} +``` + +## Introduction + +While advances in long-context language models (LCs) {cite}`lee2024longcontextlanguagemodelssubsume` have expanded the amount of information these LLMs can process, significant challenges remain in managing and effectively utilizing extended data inputs: + +- LLMs are sensitive to input formatting and structure, requiring careful data preparation to achieve optimal results {cite}`he2024doespromptformattingimpact, liu2024enhancingllmscognitionstructurization, tan2024htmlraghtmlbetterplain`. +- LLMs operate with knowledge cutoffs, providing potentially outdated information that may not reflect current reality and demonstrate problems with temporal knowledge accuracy {cite}`amayuelas-etal-2024-knowledge`. +- LLMs also face "lost-in-the-middle" problems {cite}`wu2024longdocumentsummaryevaluation` and struggle with less common but important information showing a systematic loss of long-tail knowledge {cite}`kotha2024understanding`. + +Motivated by these challenges, this chapter explores two key input data components: + +1. Data Pre-Processing: Parsing and chunking documents into a unified format that is suitable and manageable for LLMs to process effectively. +2. Retrieval Augmentation: Augmenting LLMs with the ability to retrieve relevant, recent, and specialized information. + +In data parsing, we will explore some useful open source tools such as Docling and MarkItDown that help transform data into LLM-compatible formats, demonstrating their impact through a case study of structured information extraction from complex PDFs. In a second case study, we will introduce some chunking strategies to help LLMs process long inputs and implement a particular technique called Chunking with Contextual Linking the enables contextually relevant chunk processing. + +In retrieval augmentation, we will explore how to enhance LLMs with semantic search capabilities for incorporating external context using RAGs (Retrieval Augmented Generation) using Vector Databases such as ChromaDB. We also discuss whether RAGs will be really needed in the future given the rise of long-context language models. + +While RAGs are useful for incorporating external context, they are not a silver bullet nor a mandatory component for all LLM applications. In our last case study, we demonstrate how long-context windows can be used to extract insights from a large knowledge base without the need for complex retrieval systems. We build a quiz generator from open books from Project Gutenberg. We will also explore some additional relevant techniques such as prompt caching and response verification through citations using "Corpus-in-Context" (CIC) Prompting {cite}`lee2024longcontextlanguagemodelssubsume`. + +By the chapter's conclusion, readers will possess relevant knowledge of input data management strategies for LLMs and practical expertise in selecting and implementing appropriate approaches and tools for specific use cases. + +(parsing)= +## Parsing Documents + +Data parsing and formatting play a critical role in LLMs performance {cite}`he2024doespromptformattingimpact, liu2024enhancingllmscognitionstructurization, tan2024htmlraghtmlbetterplain`. Hence, building robust data ingestion and preprocessing pipelines is essential for any LLM application. + +This section explores open source tools that streamline input data processing, in particular for parsing purposes, providing a unified interface for converting diverse data formats into standardized representations that LLMs can effectively process. By abstracting away format-specific complexities, they allow developers to focus on core application logic rather than parsing implementation details while maximizing LLM's performance. + +We will cover open source tools that provide parsing capabilities for a wide range of data formats. And we will show how some of these tools can be used to extract structured information from complex PDFs demonstrating how the quality of the parser can impact LLM's performance. + +### MarkItDown + +MarkItDown {cite}`microsoft2024markitdown` is a Python package and CLI tool developed by the Microsoft for converting various file formats to Markdown. It supports a wide range of formats including PDF, PowerPoint, Word, Excel, images (with OCR and EXIF metadata), audio (with transcription), HTML, and other text-based formats making it a useful tool for document indexing and LLM-based applications. + +Key features: +- Simple command-line and Python API interfaces +- Support for multiple file formats +- Optional LLM integration for enhanced image descriptions +- Batch processing capabilities +- Docker support for containerized usage + +Sample usage: +```python +from markitdown import MarkItDown + +md = MarkItDown() +result = md.convert("test.xlsx") +print(result.text_content) +``` + +### Docling + +Docling {cite}`docling2024github` is a Python package developed by IBM Research for parsing and converting documents into various formats. It provides advanced document understanding capabilities with a focus on maintaining document structure and formatting. + +Key features: +- Support for multiple document formats (PDF, DOCX, PPTX, XLSX, Images, HTML, etc.) +- Advanced PDF parsing including layout analysis and table extraction +- Unified document representation format +- Integration with LlamaIndex and LangChain +- OCR support for scanned documents +- Simple CLI interface + +Sample usage: +```python +from docling.document_converter import DocumentConverter + +converter = DocumentConverter() +result = converter.convert("document.pdf") +print(result.document.export_to_markdown()) +``` + +### Structured Data Extraction + +A common use case where document parsing matters is structured data extraction, particularly in the presence of complex formatting and layout. In this case study, we will extract the economic forecasts from Merrill Lynch's CIO Capital Market Outlook released on December 16, 2024 {cite}`merrill2024`. We will focus on page 7 of this document, which contains several economic variables organized in a mix of tables, text and images (see {numref}`forecast`). + + +```{figure} ../data/input/forecast.png +--- +name: forecast +alt: Forecast +scale: 45% +align: center +--- +Merrill Lynch's CIO Capital Market Outlook released on December 16, 2024 {cite}`merrill2024` +``` + + +```python +FORECAST_FILE_PATH = "../data/input/forecast.pdf" + +``` + +First, we will use MarkItDown to extract the text content from the document. + + +```python +from markitdown import MarkItDown + +md = MarkItDown() +result_md = md.convert(FORECAST_FILE_PATH).text_content +``` + +Next, we will do the same with Docling. + + +```python +from docling.document_converter import DocumentConverter + +converter = DocumentConverter() +forecast_result_docling = converter.convert(source).document.export_to_markdown() +``` + +How similar are the two results? We can use use Levenshtein distance to measure the similarity between the two results. We will also calculate a naive score using the `SequenceMatcher` from the `difflib` package, which is a simple measure of similarity between two strings based on the number of matches in the longest common subsequence. + + +```python +import Levenshtein +def levenshtein_similarity(text1: str, text2: str) -> float: + """ + Calculate normalized Levenshtein distance + Returns value between 0 (completely different) and 1 (identical) + """ + distance = Levenshtein.distance(text1, text2) + max_len = max(len(text1), len(text2)) + return 1 - (distance / max_len) + +from difflib import SequenceMatcher +def simple_similarity(text1: str, text2: str) -> float: + """ + Calculate similarity ratio using SequenceMatcher + Returns value between 0 (completely different) and 1 (identical) + """ + return SequenceMatcher(None, text1, text2).ratio() +``` + + +```python +levenshtein_similarity(forecast_result_md, forecast_result_docling) +``` + + + + + 0.13985705461925346 + + + + +```python +simple_similarity(forecast_result_md, forecast_result_docling) +``` + + + + + 0.17779960707269155 + + + +It turns out that the two results are quite different, with a similarity score of about 13.98% and 17.77% for Levenshtein and `SequenceMatcher`, respectively. + +Docling's result is a quite readable markdown displaying key economic variables and their forecasts. Conversely, MarkItDown's result is a bit messy and hard to read but the information is there just not in a structured format. Does it matter? That's what we will explore next. + +**Docling's result** + + +```python +display(Markdown(forecast_result_docling)) +``` + +{numref}`docling` shows part of the parsed result from Docling. + +```{figure} ../_static/input/docling.png +--- +name: docling +alt: Docling's result +scale: 40% +align: center +--- +An extract of Docling's parsed result. +``` + + +**MarkItDown's result** + + +```python +from IPython.display import display, Markdown +display(Markdown(forecast_result_md[:500])) +``` + +{numref}`markitdown` shows part of the parsed result from MarkItDown. + +```{figure} ../_static/input/markitdown.png +--- +name: markitdown +alt: MarkItDown's parsed result +scale: 40% +align: center +--- +An extract of MarkItDown's parsed result. +``` + +Now, let's focus on the economic forecasts. In particular, we are interested in extracting the CIO's 2025E forecasts. This could be a useful predictive indicator for the economy in 2025. + +```{figure} ../_static/input/2025.png +--- +name: forecast2025 +alt: Forecast 2025 +scale: 40% +align: center +--- +Merrill Lynch's CIO Economic Forecasts. +``` + +We will define a `Forecast` pydantic model to represent an economic forecast composed of a `financial_variable` and a `financial_forecast`. We will also define a `EconForecast` pydantic model to represent the list of economic forecasts we want to extract from the document. + + + +```python +from pydantic import BaseModel +class Forecast(BaseModel): + financial_variable: str + financial_forecast: float +class EconForecast(BaseModel): + forecasts: list[Forecast] + +``` + +We write a simple function to extract the economic forecasts from the document using an LLM model (with structured output) with the following prompt template, where `extract_prompt` represents the kind of data the user would like to extract and `doc` is the input document. + +```python +BASE_PROMPT = f""" + ROLE: You are an expert at structured data extraction. + TASK: Extract the following data {extract_prompt} from input DOCUMENT + FORMAT: The output should be a JSON object with 'financial_variable' as key and 'financial_forecast' as value. + """ +prompt = f"{BASE_PROMPT} \n\n DOCUMENT: {doc}" +``` + + +```python +def extract_from_doc(extract_prompt: str, doc: str, client) -> EconForecast: + """ + Extract data of a financial document using an LLM model. + + Args: + doc: The financial document text to analyze + client: The LLM model to use for analysis + extract_prompt: The prompt to use for extraction + + Returns: + EconForecasts object containing sentiment analysis results + """ + + BASE_PROMPT = f""" + ROLE: You are an expert at structured data extraction. + TASK: Extract the following data {extract_prompt} from input DOCUMENT + FORMAT: The output should be a JSON object with 'financial_variable' as key and 'financial_forecast' as value. + """ + prompt = f"{BASE_PROMPT} \n\n DOCUMENT: {doc}" + completion = client.beta.chat.completions.parse( + model="gpt-4o-mini", + messages=[ + { + "role": "system", + "content": prompt + }, + {"role": "user", "content": doc} + ], + response_format=EconForecast + ) + return completion.choices[0].message.parsed +``` + + +```python +from dotenv import load_dotenv +import os + +# Load environment variables from .env file +load_dotenv(override=True) +from openai import OpenAI +client = OpenAI() +``` + +The user then calls the `extract_from_doc` function simply defining that "Economic Forecasts for 2025E" is the data they would like to extract from the document. We perform the extraction twice, once with MarkItDown and once with Docling. + + +```python +extract_prompt = "Economic Forecasts for 2025E" +md_financials = extract_from_doc(extract_prompt, forecast_result_md, client) +docling_financials = extract_from_doc(extract_prompt, forecast_result_docling, client) +``` + +The response is an `EconForecast` object containing a list of `Forecast` objects, as defined in the pydantic model. We can then convert the response to a pandas DataFrame for easier comparison. + + +```python +md_financials +``` + + + + + EconForecast(forecasts=[Forecast(financial_variable='Real global GDP (% y/y annualized)', financial_forecast=3.2), Forecast(financial_variable='Real U.S. GDP (% q/q annualized)', financial_forecast=2.4), Forecast(financial_variable='CPI inflation (% y/y)', financial_forecast=2.5), Forecast(financial_variable='Core CPI inflation (% y/y)', financial_forecast=3.0), Forecast(financial_variable='Unemployment rate (%)', financial_forecast=4.3), Forecast(financial_variable='Fed funds rate, end period (%)', financial_forecast=3.88)]) + + + + +```python +df_md_forecasts = pd.DataFrame([(f.financial_variable, f.financial_forecast) for f in md_financials.forecasts], + columns=['Variable', 'Forecast']) +df_docling_forecasts = pd.DataFrame([(f.financial_variable, f.financial_forecast) for f in docling_financials.forecasts], + columns=['Variable', 'Forecast']) + +``` + + +```python +df_md_forecasts +``` + + + + +
    + +

    Table 4.1 Structured Output Frameworks Comparison
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    VariableForecast
    0Real global GDP (% y/y annualized)3.20
    1Real U.S. GDP (% q/q annualized)2.40
    2CPI inflation (% y/y)2.50
    3Core CPI inflation (% y/y)3.00
    4Unemployment rate (%)4.30
    5Fed funds rate, end period (%)3.88
    +
    + + + + +```python +df_docling_forecasts +``` + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    VariableForecast
    0Real global GDP (% y/y annualized)3.20
    1Real U.S. GDP (% q/q annualized)2.40
    2CPI inflation (% y/y)2.50
    3Core CPI inflation (% y/y)3.00
    4Unemployment rate (%)4.30
    5Fed funds rate, end period (%)3.88
    +
    + + + +The results from MarkItDown and Docling are identical and accurately match the true values from the document. This demonstrates that despite MarkItDown's output appearing less readable from a human perspective, both approaches enabled the LLM to successfully extract the economic forecast data with equal accuracy, in this particular case. + +Next, let's focus on the asset class weightings. We will extract the asset class weightings from the document and compare the results from MarkItDown and Docling. The information is now presented in a quite different structure as we can see in {numref}`asset_class`. The CIO view information is represented in a spectrum starting with "Underweight", passing through "Neutral" and reaching "Overweight". The actual view is marked by some colored dots in the chart. Let's see if we can extract this relatively more complex information from the document. +```{figure} ../_static/input/asset_class.png +--- +name: asset_class +alt: Asset Class Weightings +scale: 50% +align: center +--- +Asset Class Weightings +``` + +The user will simply define the following data to extract: "Asset Class Weightings (as of 12/3/2024) in a scale from -2 to 2". In that way, we expect that "Underweight" will be mapped to -2, "Neutral" to 0 and "Overweight" to 2 with some values in between. + + +```python +extract_prompt = "Asset Class Weightings (as of 12/3/2024) in a scale from -2 to 2" +asset_class_docling = extract_from_doc(extract_prompt, forecast_result_docling, client) +asset_class_md = extract_from_doc(extract_prompt, forecast_result_md, client) +``` + + +```python + +df_md = pd.DataFrame([(f.financial_variable, f.financial_forecast) for f in asset_class_md.forecasts], + columns=['Variable', 'Forecast']) +df_docling = pd.DataFrame([(f.financial_variable, f.financial_forecast) for f in asset_class_docling.forecasts], + columns=['Variable', 'Forecast']) +``` + +We construct a DataFrame to compare the results from MarkItDown and Docling with an added "true_value" column containing the true values from the document, which we extracted manually from the chart. This enables us to calculate accuracy of the structured data extraction task in case. + + +```python +# Create DataFrame with specified columns +df_comparison = pd.DataFrame({ + 'variable': df_docling['Variable'].iloc[:-1], + 'markitdown': df_md['Forecast'], + 'docling': df_docling['Forecast'].iloc[:-1], # Drop last row + 'true_value': [1.0, 0.0, 1.0, 1.0, 1.0, -1.0, 0.0, -1.0, 1.0, 1.0, -1.0, 0.0, -1.0, 0.0, -1.0] +}) + +display(df_comparison) + +``` + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    variablemarkitdowndoclingtrue_value
    0Global Equities1.01.01.0
    1U.S. Large Cap Growth1.01.00.0
    2U.S. Large Cap Value1.01.01.0
    3U.S. Small Cap Growth1.01.01.0
    4U.S. Small Cap Value1.01.01.0
    5International Developed1.0-1.0-1.0
    6Emerging Markets1.00.00.0
    7Global Fixed Income-1.0-1.0-1.0
    8U.S. Governments-1.01.01.0
    9U.S. Mortgages-1.01.01.0
    10U.S. Corporates-1.0-1.0-1.0
    11International Fixed Income-1.00.00.0
    12High Yield-1.0-1.0-1.0
    13U.S. Investment-grade-1.00.00.0
    14Tax Exempt U.S. High Yield Tax Exempt-1.0-1.0-1.0
    +
    + + + +```python +# Calculate accuracy for markitdown and docling +markitdown_accuracy = (df_comparison['markitdown'] == df_comparison['true_value']).mean() +docling_accuracy = (df_comparison['docling'] == df_comparison['true_value']).mean() + +print(f"Markitdown accuracy: {markitdown_accuracy:.2%}") +print(f"Docling accuracy: {docling_accuracy:.2%}") + +``` + + Markitdown accuracy: 53.33% + Docling accuracy: 93.33% + + +We observe that Docling performs significantly better at 93.33% accuracy missing only one value. MarkItDown achieves 53.33% accuracy struggling with nuanced asset class weightings. In this case, Docling's structured parsed output did help the LLM to extract the information more accurately compared to MarkItDown's unstructured output. Hence, in this case, the strategy used to parse the data did impact the LLM's ability to extract structured information. Having said that, it is important to mention that a more robust analysis would run data extraction on a larger sample data a number of times across repeated runs to estimate confidence intervals since results are non-deterministic. + +What if we wanted to systematically extract all tables from the document? We can use Docling to do that by simply accessing the `tables` attribute of the `DocumentConverter` object. + +By doing that, we observe that Docling successfully extracted the seven tables from the document exporting tables from top down and left to right in order of appearance in the document. +Below, we display the first two and the last tables. We can see the first table successfully extracted for Equities forecasts, the second one for Fixed Income forecasts as well as the last table, which contains CIO Equity Sector Views. + + + +```python +import time +from pathlib import Path +import pandas as pd +from docling.document_converter import DocumentConverter +``` + + +```python +def convert_and_export_tables(file_path: Path) -> list[pd.DataFrame]: + """ + Convert document and export tables to DataFrames. + + Args: + file_path: Path to input document + + Returns: + List of pandas DataFrames containing the tables + """ + doc_converter = DocumentConverter() + start_time = time.time() + + conv_res = doc_converter.convert(file_path) + + tables = [] + # Export tables + for table in conv_res.document.tables: + table_df: pd.DataFrame = table.export_to_dataframe() + tables.append(table_df) + + end_time = time.time() - start_time + print(f"Document converted in {end_time:.2f} seconds.") + + return tables + +``` + + +```python +# Convert and export tables +tables = convert_and_export_tables(Path(FORECAST_FILE_PATH)) +``` + + +```python +len(tables) +``` + + + + + 7 + + + + +```python +display(tables[0]) +``` + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Total Return in USD (%).CurrentTotal Return in USD (%).WTDTotal Return in USD (%).MTDTotal Return in USD (%).YTD
    0DJIA43,828.06-1.8-2.318.4
    1NASDAQ19,926.720.43.733.7
    2S&P 5006,051.09-0.60.428.6
    3S&P 400 Mid Cap3,277.20-1.6-2.619.5
    4Russell 20002,346.90-2.5-3.517.3
    5MSCI World3,817.24-1.00.222.1
    6MSCI EAFE2,319.05-1.50.26.4
    7MSCI Emerging Markets1,107.010.32.710.6
    +
    + + + +```python +display(tables[1]) +``` + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Total Return in USD (%).CurrentTotal Return in USD (%).WTDTotal Return in USD (%).MTDTotal Return in USD (%).YTD
    0Corporate & Government4.66-1.34-0.921.94
    1Agencies4.54-0.58-0.313.35
    2Municipals3.55-0.87-0.541.99
    3U.S. Investment Grade Credit4.79-1.38-0.931.97
    4International5.17-1.40-0.903.20
    5High Yield7.19-0.220.208.87
    690 Day Yield4.324.394.495.33
    72 Year Yield4.244.104.154.25
    810 Year Yield4.404.154.173.88
    930 Year Yield4.604.344.364.03
    +
    + + + +```python +display(tables[6]) +``` + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    SectorCIO View.CIO View.UnderweightCIO View.NeutralCIO View.CIO View.Overweight
    0Utilitiesslight over weight green 
    1Financialsslight over weight green 
    2Healthcareslight over weight green 
    3Consumer DiscretionarySlight over weight green 
    4Information TechnologyNeutral yellow 
    5Communication ServicesNeutral yellow 
    6IndustrialsNeutral yellow 
    7Real EstateNeutral yellow 
    8Energyslight underweight orange 
    9Materialsslight underweight orange 
    10Consumer Staplesunderweight red
    +
    + + +Coming back to MarkItDown, one interesting feature to explore is the ability to extract information from images by passing an image capable LLM model to its constructor. + + +```python +md_llm = MarkItDown(llm_client=client, llm_model="gpt-4o-mini") +``` + + +```python +result = md_llm.convert("../data/input/forecast.png") +``` + +Here's the description we obtain from the image of our input document. + + +```python +display(Markdown(result.text_content)) +``` + + + +# Description: +**Markets in Review: Economic Forecasts and Asset Class Weightings (as of 12/13/2024)** + +This detailed market overview presents key performance metrics and economic forecasts as of December 13, 2024. + +**Equities Overview:** +- **Total Returns:** Highlights returns for major indices such as the DJIA (18.4% YTD), NASDAQ (33.7% YTD), and S&P 500 (28.6% YTD), showcasing strong performance across the board. +- **Forecasts:** Economic indicators reveal a projected real global GDP growth of 3.1%, with inflation rates expected to stabilize around 2.2% in 2025. Unemployment rates are anticipated to remain low at 4.4%. + +**Fixed Income:** +- Focuses on various segments, including Corporate & Government bonds, which offer an annualized return of 4.66% and indicate shifting trends in interest rates over 2-Year (4.25%) and 10-Year (4.03%) bonds. + +**Commodities & Currencies:** +- Commodities such as crude oil and gold show varied performance, with oil increasing by 4.8% and gold prices sitting at $2,648.23 per ounce. +- Currency metrics highlight the Euro and USD trends over the past year. + +**S&P Sector Returns:** +- A quick reference for sector performance indicates a significant 2.5% return in Communication Services, while other sectors like Consumer Staples and Materials display minor fluctuations. + +**CIO Asset Class Weightings:** +- Emphasizes strategic asset allocation recommendations which are crucial for an investor's portfolio. Underweight positions in U.S. Small Cap Growth and International Developed contrast with overweight positions in certain sectors such as Utilities and Financials, signaling tactical shifts based on ongoing economic assessments. + +**Note:** This summary is sourced from BofA Global Research and aims to provide a comprehensive view of current market conditions and forecasts to assist investors in making informed decisions. + + + +--- + +Overall, the description is somewhat accurate but contains a few inaccuracies including: + +- For the sector weightings, the description states there are "underweight positions in U.S. Small Cap Growth" but looking at the Asset Class Weightings chart, U.S. Small Cap Growth actually shows an overweight position (green circle). +- The description mentions "overweight positions in certain sectors such as Utilities and Financials" but looking at the CIO Equity Sector Views, both these sectors show neutral positions, not overweight positions. +- For fixed income, the description cites a "10-Year (4.03%)" yield, but the image shows the 30-Year Yield at 4.03%, while the 10-Year Yield is actually 4.40%. + +Arguably, the description's inaccuracies could be a consequence of the underlying LLM model's inability to process the image. + +We have covered MarkitDown and Docling as examples of open source tools that can help developers parse input data into a suitable format to LLMs. Other relevant open source tools worth mentioning include: +- Unstructured {cite}`unstructured2024github`: A Python library for unstructured data extraction. +- FireCrawl {cite}`mendable2024firecrawl`: A Fast and Efficient Web Crawler for LLM Training Data. +- LlamaParse {cite}`llamaparse2024github`: Llamaindex's data parsing solution. + +The choice of tool depends on the specific requirements of the application and the nature of the input data. This choice should be taken as a critical decision of any data intensive LLM-based application and deserves dedicated research and evidence-based experimentation early-on in the development cycle. + + +## Retrieval-Augmented Generation + +What happens if we asked ChatGPT who's the author of the book "Taming LLMs"? + + + + + +```python +from dotenv import load_dotenv +import os + +# Load environment variables from .env file +load_dotenv() + +from openai import OpenAI +client = OpenAI() +model = "gpt-4o-mini" +``` + + +```python +question = "Who's the Author of the Book Taming LLMs?" +``` + + +```python +response = client.chat.completions.parse( + model="gpt-4o-mini", + messages=[ + {"role": "user", "content": question} + ] +) +response.choices[0].message.content +``` + + The book "Taming LLMs" is authored by *G. Arulkumaran, H. M. B. P. D. Karthikeyan, and I. A. M. Almasri.* If you need more information about the book or its contents, feel free to ask! + + +Turns out ChatGPT hallucinates. A quick web search on the before mentioned authors yields no results. In fact, those authors names are made up. And of course the correct answer would have been yours truly, "Tharsis Souza". + +LLMs only have access to the information they have been trained on, which of course has been fixed at a point in time. Hence, LLMs operate with stale data. The problem gets exacerbated by the fact that LLMs are trained to provide an answer even if the answer is unknown by them, hence leading to hallucinations. + +One solution to this problem is to use a retrieval system to fetch information from a knowledge base to provide recent and relevant context to user queries using so-called Retrieval Augmented Generation (RAG) system. + +RAG utilizes a retrieval system to fetch external knowledge and augment LLM's context. It is a useful technique for building LLM applications that require domain-specific information or knowledge-intensive tasks {cite}`lewis2021retrievalaugmentedgenerationknowledgeintensivenlp`. It has also proved effective in mitigating LLMs hallucinations {cite}`10.1145/3589334.3645481, ni-etal-2024-llms`. + +In the above example, a RAG would help with hallucinations by grounding the LLM's response to information provided in the knowledge base. Additional common use cases of RAG systems include: + +1. **Enterprise Knowledge Management**: RAG enables organizations to synthesize answers from diverse internal data sources like documents, databases, and communication channels. This creates a unified knowledge interface that can accurately answer questions using the organization's own data. +2. **Document Processing and Analysis**: RAG excels at extracting and analyzing information from complex documents like financial reports, presentations, and spreadsheets. The system can enable LLMs to understand context and relationships across different document types and formats. +3. **Intelligent Customer Support**: By combining knowledge bases with conversational abilities, RAG powers chatbots and support systems that can maintain context across chat history, provide accurate responses, and handle complex customer queries while reducing hallucinations. +4. **Domain-Specific Applications**: RAG allows LLMs to be equipped with specialized knowledge in fields like medicine, law, or engineering by retrieving information from domain-specific literature, regulations, and technical documentation. This enables accurate responses aligned with professional standards and current best practices. +5. **Code Documentation and Technical Support**: RAG can help developers by retrieving relevant code examples, API documentation, and best practices from repositories and documentation, which often suffer updates frequently, enabling more accurate and contextual coding assistance. + +If LLMs alone work on stale, general-purpose data with the added challenge of being prone to hallucinations, RAG systems serve as an added capability enabling LLMs to work on recent, domain-specific knowledge increasing the likelihood of LLMs to provide responses that are factual and relevant to user's queries. + + +### RAG Pipeline + +RAG architectures vary but they all share the same goal: To retrieve relevant information from a knowledge base to maximize the LLM's ability to effectively and accurately respond to prompts, particularly when the answer requires out-of-training data. + +We will introduce key components of a RAG system one by one leading to a full canonical RAG pipeline at the end that ultimately will be used to answer our original question "Who's the author of the book Taming LLMs?", accurately. + +The following basic components will be introduced (see {numref}`rag_pipeline` for a visual representation): +- Vector Database + - Embeddings + - Indexing +- Retrieval System including re-ranking +- LLM Augmented Generation via in-context learning + +Data extraction, parsing and chunking are also part of a canonical pipeline as we prepare the knowledge base. Those are concepts we explored in detail in Sections {ref}`parsing` and {ref}`chunking`, hence we will be succinct here. We will start by preparing the knowledge base. + +```{figure} ../_static/input/rag.svg +--- +name: rag_pipeline +alt: RAG Pipeline +scale: 99% +align: center +--- +Simplified RAG Pipeline +``` + + +#### Preparing the Knowledge Base + +Every RAG system requires a knowledge base. In our case, the knowledge base is a set of documents that we equip the LLM with to answer our authorship question. + +Hence, we will compose our knowledge base by adding the web version of (some of the chapters of) the book "Taming LLMs", namely: +- Introduction +- Structured Output +- Input (this very chapter) + + + +```python +book_url = "https://www.tamingllms.com/" +chapters = ["markdown/intro.html", + "notebooks/structured_output.html", + "notebooks/input.html"] + +chapter_urls = [f"{book_url}/{chapter}" for chapter in chapters] +chapter_ids = [chapter.split("/")[-1].replace(".html", "") for chapter in chapters] +``` + +We use `Docling` to download the chapters from the web and parse them as markdown files. + + +```python +chapters = [converter.convert(chapter_url).document.export_to_markdown() for chapter_url in chapter_urls] +``` + +Now we are ready to store the chapters in a vector database to enable the construction of a retrieval system. + +#### Vector Database + +Vector databases are specialized databases designed to store and retrieve high-dimensional vectors, which are mathematical representations of data like text, images, or audio. These databases are optimized for similarity search operations, making them ideal for embeddings-based retrieval systems. + +A typical pipeline involving a vector database includes the following: + +1. Input data is converted into "documents" forming a collection representing our knowledge base +2. Each document is converted into an embedding which are stored in the vector database +3. Embeddings are indexed in the vector database for efficient similarity search +4. The vector database is queried to retrieve the most relevant documents +5. The retrieved documents are used to answer questions + +Vector databases are not a mandatory component of RAG systems. In fact, we can use a simple list of strings to store the chapters (or their chunks) and then use the LLM to answer questions about the document. However, vector databases are useful for RAG applications as they enable: +- Fast similarity search for finding relevant context +- Efficient storage of document embeddings +- Scalable retrieval for large document collections +- Flexible querying with metadata filters + +In that way, RAG applications can be seen as a retrieval system that uses a vector database to store and retrieve embeddings of documents, which in turn are used to augment LLMs with contextually relevant information as we will see in the next sections. + +Here, we will use ChromaDB {cite}`chromadb2024docs` as an example of an open source vector database but key features and concepts we cover are applicable to other vector databases, in general. + +ChromaDB is a popular open-source vector database that offers: +- Efficient storage and retrieval of embeddings +- Support for metadata and filtering +- Easy integration with Python applications +- In-memory and persistent storage options +- Support for multiple distance metrics + +Other notable vector databases include Weaviate, FAISS, and Milvus. + +In ChromaDB, we can create a vector database client as follows. + + +```python +import chromadb +chroma_client = chromadb.Client() +``` + +This will create a vector database in memory. We can also create a persistent vector database by specifying a path to a directory or alternatively by using a cloud-based vector database service like AWS, Azure or GCP. We will use a vector database in memory for this example. + +Next, we create a collection to store the embeddings of the chapters. And add our chapters as documents to the collection as follows. + + +```python +collection = chroma_client.create_collection(name="taming_llms") + +collection.add( + documents=chapters, + ids=chapter_ids +) +``` + +We are ready to query the collection. We write a simple function that takes the collection, input query and number of retrieved results as argument and returns the retrieved documents. + + +```python +def query_collection(collection, query_text, n_results=3): + results = collection.query( + query_texts=[query_text], + n_results=n_results + ) + return results +``` + +We write a simple query, enquiring the purpose of the book. + + +```python +q = "What is the purpose of this book?" +res = query_collection(collection, q) +res.get("ids") +``` + + +```python +print([['intro', 'input', 'structured_output']]) +``` + +As response, we obtain an object that contains several attributes including: +- `documents`: The actual documents retrieved from the collection, i.e. the chapters +- `ids`: The ids of the documents retrieved from the collection +- `distances`: The distances of the documents to the query vector + +We can see that the chapters "Introduction", "Input" and "Structured Output" are retrieved from the collection ordered by their distance to the query vector, in increasing order. + +We observe that the Introduction chapter is the most relevant one as it ranks first, followed by the Input and Structured Output chapters. Indeed, the purpose of the book is included in the Introduction chapter demonstrating the retrieval system successfully retrieved the most relevant document to the input query, in this simple example. + +In order to understand how the retrieval system works and how the "distance to the query vector" is computed, we need to understand how embeddings are created and how documents are indexed. + +**Embeddings** + +Embeddings are numerical representations of data (including text, images, audio, etc.) that capture meaning, allowing machines to process data quantitatively. Each embedding can be represented as a vector of floating-point numbers such that embedded data with similar meanings produce similar, i.e. close, vectors [^embeddings_definition]. + +[^embeddings_definition]: Bengio et al. {cite}`bengio2014representationlearningreviewnew` provide serves as an excellent reference for representation learning in general including embeddings. OpenAI provides a good intro to Embeddings for developers {cite}`openai2024embeddings` + +For text data, small distances among embeddings suggest high semantic relatedness and large distances suggest low semantic relatedness among the embedded texts. HuggingFace provides a leaderboard of embeddings models {cite}`huggingface2024mteb`, which are ranked by dimensions such as classification, clustering and reranking performance. + +Behind the scenes, ChromaDB is using the model `all-MiniLM-L6-v2` by default [^chroma_embeddings] to create embeddings for the input documents and the query (see {numref}`embedding`). This model is available in `sentence_transformers` {cite}`sentencetransformers2024website`. Let's see how it works. + +```{figure} ../_static/input/embedding.svg +--- +name: embedding +alt: Embedding +scale: 70% +align: center +--- +Embedding: From text to vectors. +``` + +[^chroma_embeddings]: ChromaDB enables custom embedding functions and provides a list of wrappers around commonly used embedding models and APIs https://docs.trychroma.com/docs/embeddings/embedding-functions + + +```python +from sentence_transformers import SentenceTransformer + +embedding_model = SentenceTransformer('all-MiniLM-L6-v2') +``` + +We replicate what ChromaDB did by embedding our chapters as well as input query using sentence transformers. + + +```python +q = "What is the purpose of this book?" +docs_to_embed = [q] + chapters +embeddings = embedding_model.encode(docs_to_embed) +print(embeddings.shape) +``` + + (4, 384) + + +As a result, we obtain four 384-dimensional vectors representing our embeddings (one for each of the three chapters and one for the input query). + +Now we can calculate similarity among the embeddings. By default, sentence transformers uses cosine similarity as similarity metric. + + +```python +similarities = embedding_model.similarity(embeddings, embeddings) +similarities +``` + +``` +tensor([[1.0000, 0.4402, 0.3022, 0.4028], + [0.4402, 1.0000, 0.6606, 0.5807], + [0.3022, 0.6606, 1.0000, 0.6313], + [0.4028, 0.5807, 0.6313, 1.0000]]) +``` + +Let's visualize the similarity matrix to better understand the relationships between our documents in {numref}`similarities`. The top row of the matrix represents the similarity of the input query against all chapters. That's exactly what we previously obtained by querying ChromaDB which returned a response with documents ranked by similarity to input query. As expected, the Introduction chapter is the most similar to the input query followed by the Input and Structured Output chapters, as we previously observed with ChromaDB. + +```{figure} ../_static/input/similarity.png +--- +name: similarities +alt: Similarity matrix heatmap +scale: 90% +align: center +--- +Similarity matrix heatmap showing relationships among query and chapters. +``` + + + +Calculating similarity among embeddings can become computationally intensive if brute force is used, i.e. pair-wise computation, as the number of documents grows in the knowledge base. Indexing is a technique to help address this challenge. + +**Indexing** + +Indexing is an optimization technique that makes similarity searches faster and more efficient. + +Without indexing, finding similar vectors would require an exhaustive search - comparing a query vector against every single vector in the database. For large datasets, this becomes prohibitively slow. + +Common indexing strategies include: + +1. **Tree-based Indexes** + - Examples include KD-trees and Ball trees + - Work by partitioning the vector space into hierarchical regions + - Effective for low-dimensional data but suffer from the "curse of dimensionality" + +2. **Graph-based Indexes** + - HNSW (Hierarchical Navigable Small World) is a prominent example + - Creates a multi-layered graph structure for navigation + - Offers excellent search speed but requires more memory + +3. **LSH (Locality-Sensitive Hashing)** + - Uses hash functions that map similar vectors to the same buckets + - More memory-efficient than graph-based methods + - May sacrifice some accuracy for performance + +4. **Quantization-based Indexes** + - Product Quantization compresses vectors by encoding them into discrete values + - Reduces memory footprint significantly + - Good balance between accuracy and resource usage + +HNSW is the underlying library for ChromaDB vector indexing and search {cite}`chromadb2024hnsw`. HNSW provides fast searches with high accuracy but uses more memory. LSH and quantization methods offer better memory efficiency but may sacrifice some precision. + +But is the combination of indexing and basic embeddings-based similarity sufficient to retrieve relevant documents? Often not, as we will see next, as we cover reranking technique. + +#### Reranking + +Let's go back to querying our vector database. + +First, we write a query about how to get structured output from LLMs. Successfully retrieving the "Structured Output" chapter from the book as top result. + + +```python +q = "How to get structured output from LLMs?" +res = query_collection(collection, q) +res.get("ids") +``` + + [['structured_output', 'input', 'intro']] + + +Next, we would like to obtain a tutorial on `Docling`, a tool we covered in this very chapter. However, we fail to obtain the correct chapter and instead obtain the "Introduction" chapter as a result. + + +```python +q = "Docling tutorial" +res = query_collection(collection, q) +res.get("ids") +``` + + [['intro', 'input', 'structured_output']] + + +Retrieval systems solely based on vector similarity search might miss semantic relevance. That brings the need for techniques that can improve accuracy of the retrieval system. One such technique is re-ranking. + +Re-ranking is a method that can improve accuracy of the retrieval system by re-ranking the retrieved documents based on their relevance to the input query. + +In the following, we will use the `sentence_transformers` library to re-rank the retrieved documents based on their relevance to the input query. We utilize the `CrossEncoder` model to re-rank the documents. Cross-Encoder models are more accurate at judging relevance at the cost of speed compared to basic vector-based similarity. + +We can implement a reranking step in a RAG system using a Cross-Encoder model in the following steps: + +1. First, we initialize the Cross-Encoder model: +```python +model = CrossEncoder('cross-encoder/ms-marco-MiniLM-L-6-v2', max_length=512) +``` +- Uses the `ms-marco-MiniLM-L-6-v2` model, which is specifically trained for passage reranking +- Sets a maximum sequence length of 512 tokens +- This model is designed to score the relevance between query-document pairs + +2. Then we perform the reranking: +```python +scores = model.predict([(q, doc) for doc in res["documents"][0]]) +``` +- Creates pairs of (query, document) for each retrieved document +- The model predicts relevance scores for each pair +- Higher scores indicate better semantic match between query and document + +3. Finally, we select the best match: +```python +print(res["documents"][0][np.argmax(scores)]) +``` +- `np.argmax(scores)` finds the index of the highest scoring document +- Uses that index to retrieve the most relevant document + + +We obtain the following scores for the retrieved documents ("intro", "input", "structured_output"), the higher the score, the more relevant the document is in relation to the input query. + +``` +array([-8.52623 , -6.328738, -8.750055], dtype=float32) +``` + +As a result, we obtain the index of the highest scoring document, which corresponds to the "input" chapter. Hence, the re-ranking step successfully retrieved the correct chapter. + + +```python +print(res["ids"][0][np.argmax(scores)]) +``` + + input + + +In RAG systems, the idea is to first run semantic similarity on embeddings, which should be fast but potentially inaccurate, and then run reranking from the top-k results, which should be more accurate but slower. By doing so, we can balance the speed and accuracy of the retrieval system. + +Hence, instead of going over all retrieved documents: +```python +scores = model.predict([(q, doc) for doc in res["documents"][0]]) +``` +We would run reranking on the TOPK results, where TOPK <<< number of documents: +```python +scores = model.predict([(q, doc) for doc in res["documents"][0][:TOPK]]) +``` + +#### LLMs with RAG + +We are finally ready to use the retrieval system to help the LLM answer our authorship question. A common way to integrate RAGs with LLMs is via in-context learning. With in-context learning the LLM learns from the retrieved documents by providing them in the context window as represented in {numref}`incontext`. This is accomplished via a prompt template structure as follows. + +```{figure} ../_static/input/incontext.svg +--- +name: incontext +alt: In-Context Learning +scale: 95% +align: center +--- +RAG LLM with In-Context Learning +``` + + +```python + rag_system_prompt_template = f""" + You are a helpful assistant that answers questions based on the provided CONTEXT. + + CONTEXT: {context} + """ + + user_prompt_template = f""" + QUESTION: {input} + """ +``` + +This prompt strategy demonstrates a common in-context learning pattern where retrieved documents are incorporated into the LLM's context to enhance response accuracy and relevance. The prompt structure typically consists of a system prompt that: +- Sets clear boundaries for the LLM to use information from the provided context +- Includes the retrieved documents as context + +This approach: +- Reduces hallucination by grounding responses in source documents +- Improves answer relevance by providing contextually relevant information to the LLM + +The context variable is typically populated with the highest-scoring document(s) from the retrieval step, while the input variable contains the user's original query. + + +```python +def RAG_qa(client, model, context, input): + """ + Generate a summary of input using a given model + """ + rag_system_prompt_template = f"""You are a helpful assistant that answers questions based on the provided CONTEXT. + + CONTEXT: {context} + """ + + response = client.chat.completions.create( + model=model, + messages=[{"role": "system", "content": rag_system_prompt_template}, + {"role": "user", "content": f"QUESTION: {input}"}] + ) + return response.choices[0].message.content +``` + +First, we set the LLM. + + +```python +from dotenv import load_dotenv +import os + +# Load environment variables from .env file +load_dotenv() + +from openai import OpenAI +client = OpenAI() +model = "gpt-4o-mini" +``` + +Then, we run the retrieval step. + + +```python +res = query_collection(collection, q) +``` + +Next, we run the re-ranking step setting it to consider the `TOPK` retrieved documents. + + +```python +TOPK = 2 +scores = model.predict([(q, doc) for doc in res["documents"][0][:TOPK]]) +res_reranked = res["documents"][0][np.argmax(scores)] +``` + +We then pass the top document as context and invoke the LLM with our RAG-based template leading to a successful response. + + +```python +answer = RAG_qa(model, res_reranked[0], question) +answer +``` + + The author of the book "Taming LLMs" is Tharsis Souza. + + +In this section, we motivated the use of RAGs as a tool to equip LLMs with relevant context and provided a canonical implementation of its core components. RAGs, however, can be implemented in many shapes and forms and entire books have been written about them. We point the user to additional resources if more specialized techniques and architectures are needed {cite}`kimothi2024simpleguiderag, athinaai2024ragcookbooks, diamant2024ragtechniques, hands-on-llms-book`. + +Next, we discuss RAGs challenges and limitations and conclude our RAGs section envisioning the future of RAGs challenged by the rise of long-context language models. + +### Challenges and Limitations + +While RAG systems offer powerful capabilities for enhancing LLM responses with external knowledge, they face several significant challenges and limitations that require careful consideration: + +- **Data Quality and Accuracy**: The effectiveness of RAG systems fundamentally depends on the quality and reliability of their knowledge sources. When these sources contain inaccurate, outdated, biased, or incomplete information, the system's responses become unreliable. This challenge is particularly acute when dealing with rapidly evolving topics or when sourcing information from unverified channels. + +- **Computational Cost and Latency**: Implementing RAG systems at scale presents computational and operational challenges. The process of embedding documents, maintaining vector databases, and performing similarity searches across large knowledge bases demands computational, and operational resources. In real-time applications, these requirements can introduce noticeable latency, potentially degrading the user experience and limiting practical applications. + +- **Explainability and Evaluation**: The complexity of RAG systems, arising from the intricate interaction between retrieval mechanisms and generative models, makes it difficult to trace and explain their reasoning processes. Traditional evaluation metrics often fail to capture the nuanced aspects of RAG performance, such as contextual relevance and factual consistency. This limitation hampers both system improvement and stakeholder trust. Readers are encouraged to read Chapter {ref}`evals` for general LLM evaluation issues as well as consider tools such as Ragas {cite}`ragas2024evaluation` for RAG evaluation. + +- **Hallucination Management**: Though RAG systems help ground LLM responses in source documents, they do not completely eliminate hallucinations. The generative component may still produce content that extrapolates beyond or misinterprets the retrieved context. This risk becomes particularly concerning when the system confidently presents incorrect information with apparent source attribution. + + +Moreover, recent research has shed light on critical limitations of key techniques used in RAGs systems. A relevant finding pertains to reranking, which has shown {cite}`jacob2024drowningdocumentsconsequencesscaling`: + +- **Diminishing Returns**: Performance degrades as the number of documents (K) increases, sometimes performing worse than basic retrievers when dealing with large datasets. +- **Poor Document Discrimination**: Rerankers can be misled by irrelevant documents, sometimes assigning high scores to content with minimal relevance to the query. +- **Consistency Issues**: Performance and relative rankings between different rerankers can vary significantly depending on the number of documents being processed. + +### Will RAGs exist in the future? + +This question is posed as we contrast RAGs with LLMs with long-context windows (LCs). + +Recent research has shed light on this specific point {cite}`li2024retrievalaugmentedgenerationlongcontext` suggesting a trade-off between cost and performance. On the one hand, RAGs can be seen as a cost-effective alternative to LC models: +* RAGs offer lower computational cost compared to LCs due to the significantly shorter input length required for processing. +* This cost-efficiency arises because RAG reduces the number of input tokens to LLMs, which in turn reduces overall usage cost. + +On the other hand, this RAG benefit is achieved at the cost of performance: +* Recent advancements in LLMs, in particular with Gemini-1.5 and GPT-4o models, demonstrate capabilities in understanding long contexts directly, which enables them to outperform RAG in terms of average performance. +* LC models can process extremely long contexts, such as Gemini 1.5 which can handle up to 1 million tokens, and these models benefit from large-scale pretraining to develop strong long-context capabilities. + +This cost-performance trade-off is illustrated in {numref}`LC`, where LC models outperform RAGs in terms of average performance while RAGs are more cost-effective. + +```{figure} ../_static/input/LC.png +--- +name: LC +alt: Long-Context LLMs for Superior Performance +scale: 50% +align: center +--- +Long-Context LLMs demonstrate superior performance while RAGs are more cost-effective {cite}`li2024retrievalaugmentedgenerationlongcontext`. +``` + +{numref}`LC` also shows a model called "SELF-ROUTE" which combines RAG and LC by routing queries based on model self-reflection. This is a hybrid approach that reduces computational costs while maintaining performance comparable to LC. The advantage of SELF-ROUTE is most significant for smaller values of *k*, where *k* is the number of retrieved text chunks, and SELF-ROUTE shows a marked improvement in performance over RAG, while as k increases the performance of RAG and SELF-ROUTE approaches that of LC. + +Another example of a hybrid approach that combines the benefits of both LC and RAGs is RetroLLM {cite}`li2024retrollmempoweringlargelanguage`, which is a unified framework that integrates retrieval and generation into a single process, enabling language models to generate fine-grained evidence directly from a corpus. The key contribution is that this approach delivers those benefits while eliminating the need for a separate retriever, addressing limitations of traditional RAG methods. Experimental results demonstrate RetroLLM's superior performance compared to traditional RAG methods, across both in-domain and out-of-domain tasks. It also achieves a significant reduction in token consumption due to its fine-grained evidence retrieval. + +CAG {cite}`chan2024dontragcacheaugmentedgeneration` is another solution that eliminates the need for RAGs as it proposes cache-augmented generation (CAG). CAG preloads all relevant data into a large language model's extended context window, eliminating the need for real-time retrieval and improving speed and accuracy. This is achieved by precomputing a key-value cache, further optimizing inference time. CAG demonstrates superior performance compared to RAG by achieving higher BERT scores in most evaluated scenarios, indicating better answer quality, and by having significantly reduced generation times. These results suggest that CAG can be both more accurate and more efficient than traditional RAG systems. + +Another relevant development in this area is the introduction of LOFT {cite}`lee2024longcontextlanguagemodelssubsume`, a benchmark to assess this paradigm shift from RAGs to LCs, using real-world tasks requiring context up to millions of tokens. Evidence suggests LCs can deliver performance with simplified pipelines compared to RAGs, particularly for tasking requiring multi-hop reasoning over long contexts when using Chain-of-Thought {cite}`wei2023chainofthoughtpromptingelicitsreasoning`. However, LCs can still be outperformed by specialized retrievers, in particular Gecko, a specialized model fine-tuned on extensive text retrieval and similarity tasks. + +Bottom-line: Do we really need RAGs? The answer is conditional: + +* **RAG may be relevant when cost-effectiveness is a key requirement** and where the model needs to access vast amounts of external knowledge without incurring high computational expenses. However, as LLMs context window sizes increase and LLMs cost per input token decreases, RAGs may not be as relevant as it was before. +* **Long-context LLMs are superior when performance is the primary concern**, and the model needs to handle extensive texts that require deep contextual understanding and reasoning. +* **Hybrid approaches like SELF-ROUTE are valuable as they combine the strengths of RAG and LC** offering a practical balance between cost and performance, especially for applications where both factors are critical. + +Ultimately, the choice among RAG, LC, or a hybrid method depends on the specific requirements of the task, available resources, and the acceptable trade-off between cost and performance. + +In a later case study, we demonstrate the power of LCs as we construct a Quiz generator with citations over a large knowledge base without the use of chunking nor RAGs. + + +## A Note on Frameworks + +We have covered a few open source tools for parsing data and provided a canonical RAG pipeline directly using an open source VectorDB together with an LLM. There is a growing number of frameworks that offer similar functionality wrapping the same core concepts at a higher level of abstraction. The two most popular ones are `Langchain` and `LlamaIndex`. + +For instance, the code below shows how to use `LlamaIndex`'s `LlamaParse` for parsing input documents, which offers support for a wide range of file formats (e.g. .pdf, .pptx, .docx, .xlsx, .html). We observe that the code is very similar to the one we used for `MarkitDown` and `Docling`. + +```python +from llama_parse import LlamaParse + +# Initialize the parser +parser = LlamaParse( + api_key="llx-your-api-key-here", + result_type="markdown", # Can be "markdown" or "text" + verbose=True +) + +documents = parser.load_data(["./doc1.pdf", "./doc2.pdf"]) +``` + +As another example, the code below replicates our ChromaDB-based retrieval system using `LlamaIndex` {cite}`llamaindex2024storing`. + +As we can see, similar concepts are used: +- Documents to represent elements of the knowledge base +- Collections to store the documents +- Indexing of embeddings in the VectorDB and finally +- Querying the VectorDB to retrieve the documents + + +```python +import chromadb +from llama_index.core import VectorStoreIndex, SimpleDirectoryReader +from llama_index.vector_stores.chroma import ChromaVectorStore +from llama_index.core import StorageContext + +# load some documents +documents = SimpleDirectoryReader("./data").load_data() + +# initialize client, setting path to save data +db = chromadb.PersistentClient(path="./chroma_db") + +# create collection +chroma_collection = db.get_or_create_collection("tamingllms") + +# assign chroma as the vector_store to the context +vector_store = ChromaVectorStore(chroma_collection=chroma_collection) +storage_context = StorageContext.from_defaults(vector_store=vector_store) + +# create your index +index = VectorStoreIndex.from_documents( + documents, storage_context=storage_context +) + +# create a query engine and query +query_engine = index.as_query_engine() +response = query_engine.query("Who is the author of Taming LLMs?") +print(response) + +Frameworks are useful for quickly prototyping RAG systems and for building applications on top of them as they provide a higher level of abstraction and integration with third-party libraries. However, the underlying concepts are the same as the ones we have covered in this chapter. More often than not, problems arise when developers either do not understand the underlying concepts or fail to understand the details of the implement behind the abstractions provided by the framework. Therefore, it is recommended to try and start your implementation using lower level tools as much as possible and only when (i) the underlying problem as well as (ii) the desired solution are well understood, then consider moving to higher level frameworks if really needed. + +## Case Studies + +This section presents two case studies to complement topics we have covered in this chapter in the context of managing input data for LLMs. + +First, we cover content chunking, in particular Content Chunking with Contextual Linking which showcases how intelligent chunking strategies can overcome both context window and output token limitations. This case study illustrates techniques for breaking down and reassembling content while maintaining coherence, enabling the generation of high-quality long-form outputs despite model constraints. + +Second, we build a Quiz generator with citations using long context window. Not all knowledge intense applications require RAGs. In this case study, we show how to use long context window as well as some additional input management techniques such as prompt caching for efficiency and reference management to enhance response accuracy and verifiability. These approaches show how to maximize the benefits of larger context models while maintaining response quality. + +(chunking)= +### Case Study I: Content Chunking with Contextual Linking + +Content chunking is commonly used to breakdown long-form content into smaller, manageable chunks. In the context of RAGs, this can be helpful not only to help the retrieval system find more contextually relevant documents but also lead to a more cost efficient LLM solution since fewer tokens are processed in the context window. Furthermore, semantic chunking can increase accuracy of RAG systems {cite}`zenml2024rag`. + +Content chunking with contextual linking is a chunking technique that seeks to split input content while keeping chunk-specific context, hence allowing the LLM to maintain coherence and context when generating responses per chunks. In that way, this technique tackles two key problems: +1. The LLM's inability to process long inputs to do context-size limits +2. The LLM's inability to maintain coherence and context when generating responses per chunks + +As a consequence, a third problem is also tackled: LLM's inability to generate long-form content due to the `max_output_tokens` limitation. Since we generate responses per chunk, as we will see later, we end up with a solution that is capable of generating long-form content while maintaining coherence. + +We exemplify this technique by following these steps: +1. **Chunking the Content**: The input content is split into smaller chunks. This allows the LLM to process each chunk individually, focusing on generating a complete and detailed response for that specific section of the input. + +2. **Maintaining Context**: Each chunk is linked with contextual information from the previous chunks. This helps in maintaining the flow and coherence of the content across multiple chunks. + +3. **Generating Linked Prompts**: For each chunk, a prompt is generated that includes the chunk's content and its context. This prompt is then used to generate the output for that chunk. + +4. **Combining the Outputs**: The outputs of all chunks are combined to form the final long-form content. + +Let's examine an example implementation of this technique. + +#### Generating long-form content + +- Goal: Generate a long-form report analyzing a company's financial statement. +- Input: A company's 10K SEC filing. + +```{figure} ../_static/structured_output/diagram1.png +--- +name: content-chunking-with-contextual-linking +alt: Content Chunking with Contextual Linking +scale: 50% +align: center +--- +Content Chunking with Contextual Linking Schematic Representation. +``` + +The diagram in {numref}`content-chunking-with-contextual-linking` illustrates the process we will follow for handling long-form content generation with Large Language Models through "Content Chunking with Contextual Linking." It shows how input content is first split into manageable chunks using a chunking function (e.g. `CharacterTextSplitter` with `tiktoken` tokenizer), then each chunk is processed sequentially while maintaining context from previous chunks. For each chunk, the system updates the context, generates a dynamic prompt with specific parameters, makes a call to the LLM chain, and stores the response. After all chunks are processed, the individual responses are combined with newlines to create the final report, effectively working around the token limit constraints of LLMs while maintaining coherence across the generated content. + +**Step 1: Chunking the Content** + +There are different methods for chunking, and each of them might be appropriate for different situations. However, we can broadly group chunking strategies in two types: +- **Fixed-size Chunking**: This is the most common and straightforward approach to chunking. We simply decide the number of tokens in our chunk and, optionally, whether there should be any overlap between them. In general, we will want to keep some overlap between chunks to make sure that the semantic context doesn’t get lost between chunks. Fixed-sized chunking may be a reasonable path in many common cases. Compared to other forms of chunking, fixed-sized chunking is computationally cheap and simple to use since it doesn’t require the use of any specialied techniques or libraries. +- **Content-aware Chunking**: These are a set of methods for taking advantage of the nature of the content we’re chunking and applying more sophisticated chunking to it. Examples include: + - **Sentence Splitting**: Many models are optimized for embedding sentence-level content. Naturally, we would use sentence chunking, and there are several approaches and tools available to do this, including naive splitting (e.g. splitting on periods), NLTK, and spaCy. + - **Recursive Chunking**: Recursive chunking divides the input text into smaller chunks in a hierarchical and iterative manner using a set of separators. + - **Semantic Chunking**: This is a class of methods that leverages embeddings to extract the semantic meaning present in your data, creating chunks that are made up of sentences that talk about the same theme or topic. + + Here, we will utilize `langchain` for a content-aware sentence-splitting strategy for chunking. Langchain offers several text splitters {cite}`langchain_text_splitters` such as JSON-, Markdown- and HTML-based or split by token. We will use the `CharacterTextSplitter` with `tiktoken` as our tokenizer to count the number of tokens per chunk which we can use to ensure that we do not surpass the input token limit of our model. + + + +```python +def get_chunks(text: str, chunk_size: int, chunk_overlap: int) -> list: + """ + Split input text into chunks of specified size with specified overlap. + + Args: + text (str): The input text to be chunked. + chunk_size (int): The maximum size of each chunk in tokens. + chunk_overlap (int): The number of tokens to overlap between chunks. + + Returns: + list: A list of text chunks. + """ + from langchain_text_splitters import CharacterTextSplitter + + text_splitter = CharacterTextSplitter.from_tiktoken_encoder(chunk_size=chunk_size, chunk_overlap=chunk_overlap) + return text_splitter.split_text(text) + +``` + +**Step 2: Writing the Base Prompt Template** + +We will write a base prompt template which will serve as a foundational structure for all chunks, ensuring consistency in the instructions and context provided to the language model. The template includes the following parameters: +- `role`: Defines the role or persona the model should assume. +- `context`: Provides the background information or context for the task. +- `instruction`: Specifies the task or action the model needs to perform. +- `input_text`: Contains the actual text input that the model will process. +- `requirements`: Lists any specific requirements or constraints for the output. + + +```python +from langchain_core.prompts import PromptTemplate +def get_base_prompt_template() -> str: + + base_prompt = """ + ROLE: {role} + CONTEXT: {context} + INSTRUCTION: {instruction} + INPUT: {input} + REQUIREMENTS: {requirements} + """ + + prompt = PromptTemplate.from_template(base_prompt) + return prompt +``` + +We will write a simple function that returns an `LLMChain` which is a simple `langchain` construct that allows you to chain together a combination of prompt templates, language models and output parsers. + + +```python +from langchain_core.output_parsers import StrOutputParser +from langchain_community.chat_models import ChatLiteLLM + +def get_llm_chain(prompt_template: str, model_name: str, temperature: float = 0): + """ + Returns an LLMChain instance using langchain. + + Args: + prompt_template (str): The prompt template to use. + model_name (str): The name of the model to use. + temperature (float): The temperature setting for the model. + + Returns: + llm_chain: An instance of the LLMChain. + """ + + from dotenv import load_dotenv + import os + + # Load environment variables from .env file + load_dotenv() + + api_key_label = model_name.split("/")[0].upper() + "_API_KEY" + llm = ChatLiteLLM( + model=model_name, + temperature=temperature, + api_key=os.environ[api_key_label], + ) + llm_chain = prompt_template | llm | StrOutputParser() + return llm_chain +``` + +**Step 3: Constructing Dynamic Prompt Parameters** + +Now, we will write a function (`get_dynamic_prompt_template`) that constructs prompt parameters dynamically for each chunk. + + +```python +from typing import Dict +def get_dynamic_prompt_params(prompt_params: Dict, + part_idx: int, + total_parts: int, + chat_context: str, + chunk: str) -> str: + """ + Construct prompt template dynamically per chunk while maintaining the chat context of the response generation. + + Args: + prompt_params (Dict): Original prompt parameters + part_idx (int): Index of current conversation part + total_parts (int): Total number of conversation parts + chat_context (str): Chat context from previous parts + chunk (str): Current chunk of text to be processed + Returns: + str: Dynamically constructed prompt template with part-specific params + """ + dynamic_prompt_params = prompt_params.copy() + # saves the chat context from previous parts + dynamic_prompt_params["context"] = chat_context + # saves the current chunk of text to be processed as input + dynamic_prompt_params["input"] = chunk + + # Add part-specific instructions + if part_idx == 0: # Introduction part + dynamic_prompt_params["instruction"] = f""" + You are generating the Introduction part of a long report. + Don't cover any topics yet, just define the scope of the report. + """ + elif part_idx == total_parts - 1: # Conclusion part + dynamic_prompt_params["instruction"] = f""" + You are generating the last part of a long report. + For this part, first discuss the below INPUT. Second, write a "Conclusion" section summarizing the main points discussed given in CONTEXT. + """ + else: # Main analysis part + dynamic_prompt_params["instruction"] = f""" + You are generating part {part_idx+1} of {total_parts} parts of a long report. + For this part, analyze the below INPUT. + Organize your response in a way that is easy to read and understand either by creating new or merging with previously created structured sections given in CONTEXT. + """ + + return dynamic_prompt_params +``` + + +**Step 4: Generating the Report** + +Finally, we will write a function that generates the actual report by calling the `LLMChain` with the dynamically updated prompt parameters for each chunk and concatenating the results at the end. + + +```python +def generate_report(input_content: str, llm_model_name: str, + role: str, requirements: str, + chunk_size: int, chunk_overlap: int) -> str: + # stores the parts of the report, each generated by an individual LLM call + report_parts = [] + # split the input content into chunks + chunks = get_chunks(input_content, chunk_size, chunk_overlap) + # initialize the chat context with the input content + chat_context = input_content + # number of parts to be generated + num_parts = len(chunks) + + prompt_params = { + "role": role, # user-provided + "context": "", # dinamically updated per part + "instruction": "", # dynamically updated per part + "input": "", # dynamically updated per part + "requirements": requirements #user-priovided + } + + # get the LLMChain with the base prompt template + llm_chain = get_llm_chain(get_base_prompt_template(), + llm_model_name) + + # dynamically update prompt_params per part + print(f"Generating {num_parts} report parts") + for i, chunk in enumerate(chunks): + dynamic_prompt_params = get_dynamic_prompt_params( + prompt_params, + part_idx=i, + total_parts=num_parts, + chat_context=chat_context, + chunk=chunk + ) + + # invoke the LLMChain with the dynamically updated prompt parameters + response = llm_chain.invoke(dynamic_prompt_params) + + # update the chat context with the cummulative response + if i == 0: + chat_context = response + else: + chat_context = chat_context + response + + print(f"Generated part {i+1}/{num_parts}.") + report_parts.append(response) + + report = "\n".join(report_parts) + return report +``` + +**Example Usage** + + + +```python +# Load the text from sample 10K SEC filing +with open('../data/apple.txt', 'r') as file: + text = file.read() +``` + + +```python +# Define the chunk and chunk overlap size +MAX_CHUNK_SIZE = 10000 +MAX_CHUNK_OVERLAP = 0 +``` + + +```python +report = generate_report(text, llm_model_name="gemini/gemini-1.5-flash-latest", + role="Financial Analyst", + requirements="The report should be in a readable, structured format, easy to understand and follow. Focus on finding risk factors and market moving insights.", + chunk_size=MAX_CHUNK_SIZE, + chunk_overlap=MAX_CHUNK_OVERLAP) +``` + + +```python +# Save the generated report to a local file +with open('data/apple_report.txt', 'w') as file: + file.write(report) + +``` + + +```python +# Read and display the generated report +with open('../data/apple_report.txt', 'r') as file: + report_content = file.read() + +from IPython.display import Markdown + +# Display first and last 10% of the report content +report_lines = report_content.splitlines() +total_lines = len(report_lines) +quarter_lines = total_lines // 10 + +top_portion = '\n'.join(report_lines[:quarter_lines]) +bottom_portion = '\n'.join(report_lines[-quarter_lines:]) + +display(Markdown(f"{top_portion}\n\n (...) \n\n {bottom_portion}")) + +``` + + +**Introduction** + +This report provides a comprehensive analysis of Apple Inc.'s financial performance and position for the fiscal year ended September 28, 2024, as disclosed in its Form 10-K filing with the United States Securities and Exchange Commission. The analysis will focus on identifying key risk factors impacting Apple's business, evaluating its financial health, and uncovering market-moving insights derived from the provided data. The report will delve into Apple's various segments, product lines, and services, examining their performance and contributions to overall financial results. Specific attention will be paid to identifying trends, potential challenges, and opportunities for future growth. The analysis will also consider the broader macroeconomic environment and its influence on Apple's operations and financial outlook. Finally, the report will incorporate relevant information from Apple's definitive proxy statement for its 2025 annual meeting of shareholders, as incorporated by reference in the Form 10-K. + +**PART 2: Key Risk Factors and Market-Moving Insights** + +This section analyzes key risk factors disclosed in Apple Inc.'s 2024 Form 10-K, focusing on their potential impact on financial performance and identifying potential market-moving insights. The analysis is structured around the major risk categories identified in the filing. + +**2.1 Dependence on Third-Party Developers:** + +Apple's success is heavily reliant on the continued support and innovation of third-party software developers. The Form 10-K highlights several critical aspects of this dependence: + +* **Market Share Vulnerability:** Apple's relatively smaller market share in smartphones, personal computers, and tablets compared to competitors (Android, Windows, gaming consoles) could discourage developers from prioritizing Apple's platform, leading to fewer high-quality apps and potentially impacting customer purchasing decisions. This is a significant risk, especially given the rapid pace of technological change. A decline in app availability or quality could negatively impact sales and market share. **Market-moving insight:** Monitoring developer activity and app quality across competing platforms is crucial for assessing this risk. Any significant shift in developer focus away from iOS could be a negative market signal. + +* **App Store Dynamics:** While Apple allows developers to retain most App Store revenue, its commission structure and recent changes (e.g., complying with the Digital Markets Act (DMA) in the EU) introduce uncertainty. Changes to the App Store's policies or fee structures could materially affect Apple's revenue and profitability. **Market-moving insight:** Closely monitoring regulatory developments (especially concerning the DMA) and their impact on App Store revenue is essential. Any significant changes to Apple's App Store policies or revenue streams could trigger market reactions. + +* **Content Acquisition and Creation:** Apple's reliance on third-party digital content providers for its services introduces risks related to licensing agreements, competition, and pricing. The cost of producing its own digital content is also increasing due to competition for talent and subscribers. Failure to secure or create appealing content could negatively impact user engagement and revenue. **Market-moving insight:** Analyzing the success of Apple's original content initiatives and the renewal rates of third-party content agreements will provide insights into this risk. + +**2.2 Operational Risks:** + + + (...) + + The reconciliation of segment operating income to consolidated operating income reveals that research and development (R&D) and other corporate expenses significantly impact overall profitability. While increased R&D is generally positive, it reduces short-term profits. The geographical breakdown of net sales and long-lived assets further emphasizes the concentration of Apple's business in the U.S. and China. **Market-moving insight:** Continued weakness in the Greater China market, sustained flat iPhone sales, or any significant changes in R&D spending should be closely monitored for their potential impact on Apple's financial performance and investor sentiment. + + +**5.4 Auditor's Report and Internal Controls:** + +The auditor's report expresses an unqualified opinion on Apple's financial statements and internal control over financial reporting. However, it identifies uncertain tax positions as a critical audit matter. The significant amount of unrecognized tax benefits ($22.0 billion) and the complexity involved in evaluating these positions highlight a substantial risk. Management's assessment of these positions involves significant judgment and relies on interpretations of complex tax laws. Apple's management also asserts that its disclosure controls and procedures are effective. **Market-moving insight:** Any changes in tax laws, unfavorable rulings on uncertain tax positions, or weaknesses in internal controls could materially affect Apple's financial results and investor confidence. + + +**Conclusion** + +This report provides a comprehensive analysis of Apple Inc.'s financial performance and position for fiscal year 2024. While Apple maintains a strong financial position with substantial cash reserves and a robust capital return program, several key risk factors could significantly impact its future performance. These risks include: + +* **Dependence on third-party developers:** A shift in developer focus away from iOS or changes to the App Store's policies could negatively impact Apple's revenue and profitability. +* **Operational risks:** Employee retention challenges, reseller dependence, and cybersecurity threats pose significant operational risks. +* **Legal and regulatory risks:** Ongoing antitrust litigation, the Digital Markets Act (DMA) compliance, and data privacy regulations introduce substantial legal and regulatory uncertainties. +* **Financial risks:** Volatility in sales and profit margins, foreign exchange rate fluctuations, credit risk, and tax risks could impact Apple's financial performance. +* **Supply chain concentration:** Apple's reliance on a concentrated network of outsourcing partners, primarily located in a few Asian countries, and dependence on single or limited sources for certain custom components, exposes the company to significant supply chain risks. +* **Uncertain tax positions:** The significant amount of unrecognized tax benefits represents a substantial uncertainty that could materially affect Apple's financial results. + +Despite these risks, Apple's strong liquidity position, continued growth in its Services segment, and robust capital return program provide a degree of resilience. However, investors and analysts should closely monitor the market-moving insights identified throughout this report, including developer activity, regulatory developments, regional economic conditions, supply chain stability, and the resolution of uncertain tax positions, to assess their potential impact on Apple's future performance and valuation. The significant short-term obligations, while manageable given Apple's cash position, highlight the need for continued financial discipline and effective risk management. A deeper, more granular analysis of the financial statements and notes is recommended for a more complete assessment. + + +--- + +#### Discussion + +Results from the generated report present a few interesting aspects: + +- **Coherence**: The generated report demonstrates an apparent level of coherence. The sections are logically structured, and the flow of information is smooth. Each part of the report builds upon the previous sections, providing a comprehensive analysis of Apple Inc.'s financial performance and key risk factors. The use of headings and subheadings helps in maintaining clarity and organization throughout the document. + +- **Adherence to Instructions**: The LLM followed the provided instructions effectively. The report is in a readable, structured format, and it focuses on identifying risk factors and market-moving insights as requested. The analysis is detailed and covers various aspects of Apple's financial performance, including revenue segmentation, profitability, liquidity, and capital resources. The inclusion of market-moving insights adds value to the report, aligning with the specified requirements. + +Despite the seemingly good quality of the results, there are some limitations to consider: + +- **Depth of Analysis**: While the report covers a wide range of topics, the depth of analysis in certain sections may not be as comprehensive as a human expert's evaluation. Some nuances and contextual factors might be overlooked by the LLM. Splitting the report into multiple parts helps in mitigating this issue. + +- **Chunking Strategy**: The current approach splits the text into chunks based on size, which ensures that each chunk fits within the model's token limit. However, this method may disrupt the logical flow of the document, as sections of interest might be split across multiple chunks. An alternative approach could be "structured" chunking, where the text is divided based on meaningful sections or topics. This would preserve the coherence of each section, making it easier to follow and understand. Implementing structured chunking requires additional preprocessing to identify and segment the text appropriately, but it can significantly enhance the readability and logical flow of the generated report. + +Here, we implemented a simple strategy to improve the coherence in output generation given a multi-part chunked input. Many other strategies are possible. One related technique worth mentioning is Anthropic's Contextual Retrieval {cite}`anthropic2024contextualretrieval`. The approach, as shown in {numref}`anth_contextual`, employs an LLM itself to generate relevant context per chunk before passing these two pieces of information together to the LLM. This process was proposed in the context of RAGs to enhance its retrieval capabilities but can be applied more generally to improve output generation. +```{figure} ../_static/input/anth_contextual.png +--- +name: anth_contextual +alt: Anthropic Contextual Linking +scale: 50% +align: center +--- +Anthropic Contextual Linking {cite}`anthropic2024contextualretrieval`. +``` + +### Case Study II: Quiz Generation with Citations + +In this case study, we will build a Quiz generator with citations that explores additional input management techniques particularly useful with long context windows. The implementation includes prompt caching for efficiency and citation tracking to enhance accuracy and verifiability. We will use Gemini 1.5 Pro as our LLM model, which has a context window of 2M tokens. + +#### Use Case + +Let's assume you are a Harvard student enrolled in GOV 1039 "The Birth of Modern Democracy" (see {numref}`harvard-class`), you face a daunting reading list for next Tuesday's class on Rights. The readings include foundational documents like the Magna Carta, Declaration of Independence, and US Bill of Rights, each with specific sections to analyze. + +```{figure} ../_static/input/harvard.png +--- +name: harvard-class +alt: Harvard Class +scale: 50% +align: center +--- +Harvard's Democratic Theory Class +``` + +Instead of trudging through these dense historical texts sequentially, we would like to: +- Extract key insights and connections between these documents, conversationally. +- Engage with the material through a quiz format. +- Add citations to help with verifying answers. + + +#### Implementation + +The full implementation is available at Book's [Github repository](https://github.com/souzatharsis/tamingLLMs/tamingllms/notebooks/src/gemini_duo.py). Here, we will cover the most relevant parts of the implementation. + +**Client Class** + +First, we will define the `Client` class which will provide the key interface users will interact with. It has the following summarized interface: + +- Initialization: + - `__init__(knowledge_base: List[str] = [])`: Initialize with optional list of URLs as knowledge base + +- Core Methods: + - `add_knowledge_base(urls: List[str]) -> None`: Add URLs to the knowledge base + - `add(urls: List[str]) -> None`: Extract content from URLs and add to conversation input + - `msg(msg: str = "", add_citations: bool = False) -> str`: Enables users to send messages to the client + - `quiz(add_citations: bool = True, num_questions: int = 10) -> str`: Generate a quiz based on full input memory + +- Key Attributes: + - `knowledge_base`: List of URLs providing foundation knowledge + - `input`: Current input being studied (short-term memory) + - `input_memory`: Cumulative input + knowledge base (long-term memory) + - `response`: Latest response from LLM + - `response_memory`: Cumulative responses (long-term memory) + - `urls_memory`: Cumulative list of processed URLs + + +**Corpus-in-Context Prompting** + +The `add()` method is key since it is used to add content to the client. It takes a list of URLs and extracts the content from each URL using a content extractor (using MarkitDown). The content is then added to the conversation input memory in a way that enables citations using the "Corpus-in-Context" (CIC) Prompting {cite}`lee2024longcontextlanguagemodelssubsume`. + +{numref}`cic` shows how CIC format is used to enable citations. It inserts a corpus into the prompt. Each candidate citable part (e.g., passage, chapter) in a corpus is assigned a unique identifier (ID) that can be referenced as needed for that task. + +```{figure} ../_static/input/cic.png +--- +name: cic +alt: CIC Format +scale: 50% +align: center +--- +Example of Corpus-in-Context Prompting for retrieval. +``` + +CiC prompting leverages LLM's capacity to follow instructions by carefully annotating the corpus with document IDs. It benefits from a strong, capable models to retrieve over large corpora provided in context. + +```python + def add(self, urls: List[str]) -> None: + self.urls = urls + + # Add new content to input following CIC format to enable citations + for url in urls: + self.urls_memory.append(url) + content = self.extractor.convert(url).text_content + formatted_content = f"ID: {self.reference_id} | {content} | END ID: {self.reference_id}" + self.input += formatted_content + "\n" + self.reference_id += 1 + + # Update memory + self.input_memory = self.input_memory + self.input +``` + +The method `add_knowledge_base()` is a simple wrapper around the `add()` method. It is used to add URLs to the knowledge base, which are later cached by the LLM model as we will see later. + +```python + def add_knowledge_base(self, urls: List[str]) -> None: + self.add(urls) +``` + + +Later, when the user sends a message to the client, the `msg()` method is used to generate a response while enabling citations. `self.content_generator` is an instance of our LLM model, which we will go through next. + +```python + def msg(self, msg: str = "", add_citations: bool = False) -> str: + if add_citations: + msg = msg + "\n\n For key statements, add Input ID to the response." + + self.response = self.content_generator.generate( + input_content=self.input, + user_instructions=msg + ) + + self.response_memory = self.response_memory + self.response.text + + return self.response.text +``` + +**Prompt Caching** + +LLM-based applications often involve repeatedly passing the same input tokens to a model, which can be inefficient and costly. Context caching addresses this by allowing you to cache input tokens after their first use and reference them in subsequent requests. This approach significantly reduces costs compared to repeatedly sending the same token corpus, especially at scale. + +In our application, the user might passes a large knowledge base to the client that can be referenced multiple times by smaller user requests. Our `Client` class is composed of a `LLMBackend` class that takes the `input_memory` containing the entire knowledge base and any additional user added content. +```python +self.llm = LLMBackend(input=self.input_memory) +``` + +In our `LLMBackend` Class, we leverage prompt caching on input tokens and uses them for subsequent requests. + +```python +class LLMBackend: + def __init__(self, model_name: str, input: str, cache_ttl: int = 60): + self.cache = caching.CachedContent.create( + model=model_name, + display_name='due_knowledge_base', # used to identify the cache + system_instruction=( + self.compose_prompt(input, conversation_config) + ), + ttl=datetime.timedelta(minutes=cache_ttl), + ) + + self.model = genai.GenerativeModel.from_cached_content(cached_content=self.cache) +``` + +**Quiz Generation** + +Coming back to our `Client` class, we implement the `quiz()` method to generate a quiz based on the full input memory, i.e. the initial knowledge base and any additional user added content. + +The `quiz()` method returns a `Quiz` instance which behind the scenes caches input tokens. The user later can invoke its `generate()` method to generate a quiz passing the user instructions in `msg` parameter, as we will see later. + +```python + def quiz(self, add_citations: bool = True, num_questions: int = 10) -> str: + """ + Returns a quiz instance based on full input memory. + """ + self.quiz_instance = Quiz( + input=self.input_memory, + add_citations=add_citations, + num_questions=num_questions) + return self.quiz_instance +``` + +We write a simple prompt template for quiz generation: + +> ROLE: +> - You are a Harvard Professor providing a quiz. +> INSTRUCTIONS: +> - Generate a quiz with {num_questions} questions based on the input. +> - The quiz should be multi-choice. +> - Answers should be provided at the end of the quiz. +> - Questions should have broad coverage of the input including multiple Input IDs. +> - Level of difficulty is advanced/hard. +> - `{citations}` +> +> STRUCTURE: +> - Sequence of questions and alternatives. +> - At the end provide the correct answers. + +where, `{citations}` instructs the model to add CiC citations to the response if user requests it. + +#### Example Usage + + +**Dataset** + +First, we will define our knowledge base. + +- Harvard Class: [GOV 1039 Syllabus](https://scholar.harvard.edu/files/dlcammack/files/gov_1039_syllabus.pdf) +- Class / Topic: "Rights" +- Reading List: + - ID 1. The Declaration of Independence of the United States of America + - ID 2. The United States Bill of Rights + - ID 3. John F. Kennedy's Inaugural Address + - ID 4. Lincoln's Gettysburg Address + - ID 5. The United States Constitution + - ID 6. Give Me Liberty or Give Me Death + - ID 7. The Mayflower Compact + - ID 8. Abraham Lincoln's Second Inaugural Address + - ID 9. Abraham Lincoln's First Inaugural Address + +We will take advantage of Project Gutenberg's to create our knowledge base. + + +```python +kb = [f"https://www.gutenberg.org/cache/epub/{i}/pg{i}.txt" for i in range(1,9)] +``` + +We will import our module `gemini_duo` as `genai_duo` and initialize the `Client` class with our knowledge base. + + +```python +import gemini_duo as genai_duo +from IPython.display import Markdown, display +``` + + +```python +duo = genai_duo.Client(knowledge_base=kb) +``` + +At this point, we converted each book into markdown using MarkitDown and cached the content in our LLM model. We can access how many tokens we have cached in our LLM model by looking at the `usage_metadata` attribute of the Gemini's model response. At this point, we have cached at total of 38470 tokens. + +Now, we can add references to our knowledge base at anytime by calling the `add()` method. We add the following references: +1. The Magna Carta +2. William Shap McKechnie on Magna Carta book + + +```python +study_references = ["https://www.gutenberg.org/cache/epub/10000/pg10000.txt", "https://www.gutenberg.org/cache/epub/65363/pg65363.txt"] + +duo.add(study_references) +``` + +Now we can instantiate a `Quiz` object and generate a quiz based on the full input memory. + + +```python +quiz = duo.quiz(add_citations=True) +display(Markdown(quiz.generate())) +``` + +{numref}`quiz` shows a sample quiz with citations. Marked in yellow are the citations which refer to the input IDs of the resources we added to the model. + +```{figure} ../_static/input/quiz.png +--- +name: quiz +alt: Quiz with Citations +scale: 50% +align: center +--- +Sample Quiz with Citations. +``` + + +#### Discussion + +The experiment demonstrated the ability to build a knowledge base from multiple sources while leveraging prompt caching for efficiency and generate quizzes with citations for verifiability. The system successfully ingested content from Project Gutenberg texts, including historical documents like the Magna Carta, and used them to create interactive educational content. + +However, several limitations emerged during this process: + +1. Memory Management: The system currently loads all content into memory, which could become problematic with larger knowledge bases. A more scalable approach might involve chunking or streaming the content. + +2. Citation Quality: While the system provides citations, they lack specificity - pointing to entire documents rather than specific passages or page numbers. This limits the ability to fact-check or verify specific claims. + +3. Content Verification: While citations are provided, the system is not guaranteed to provide factual information. This could lead to potential hallucinations or misinterpretations. + +While limitations are present in this simple example, the case study highlights that not always complex systems are needed. Alternative simple strategies should be preferred when possible, particularly if capable, long-context window models are available and fit within the application requirements. + + +## Conclusion + +This chapter has explored critical strategies and techniques for managing input data in LLM applications, focusing on three key areas: data parsing, retrieval augmentation, and practical implementation patterns. We examined how parsing tools like MarkItDown and Docling can transform diverse data formats into LLM-compatible representations, demonstrating through case studies how parser quality can impact LLM performance. The chapter also investigated retrieval augmentation techniques, particularly RAG systems, showing how they can enhance LLM capabilities by providing access to external knowledge while discussing their future relevance in the context of emerging long-context language models. + +Through our case studies, we demonstrated practical approaches to handling common challenges in LLM applications. The Content Chunking with Contextual Linking case study illustrated techniques for managing long-form content generation while maintaining coherence across chunks. The Quiz Generation with Citations case study showcased how long-context windows can be effectively utilized without the need for complex retrieval systems, highlighting the importance of choosing the right approach based on specific application requirements rather than defaulting to more complex solutions. + +As the field continues to evolve, the choice between traditional RAG systems and emerging long-context models will likely become increasingly nuanced. While RAGs offer cost-effective solutions for incorporating external knowledge, the rise of long-context models suggests a future where simpler architectures might suffice for many applications. The key insight is that effective input data management requires careful consideration of trade-offs among complexity, cost, and performance, always guided by specific application requirements rather than following a one-size-fits-all approach. Success in building robust LLM applications will depend on understanding these trade-offs and selecting appropriate strategies for each use case. + +[![CC BY-NC-SA 4.0][cc-by-nc-sa-image]][cc-by-nc-sa] + +[cc-by-nc-sa]: http://creativecommons.org/licenses/by-nc-sa/4.0/ +[cc-by-nc-sa-image]: https://licensebuttons.net/l/by-nc-sa/4.0/88x31.png +[cc-by-nc-sa-shield]: https://img.shields.io/badge/License-CC-BY--NC--SA-4.0-lightgrey.svg + +``` +@misc{tharsistpsouza2024tamingllms, + author = {Tharsis T. P. Souza}, + title = {Taming LLMs: A Practical Guide to LLM Pitfalls with Open Source Software}, + year = {2024}, + chapter = {Managing Input Data}, + journal = {GitHub repository}, + url = {https://github.com/souzatharsis/tamingLLMs) +} +``` +## References +```{bibliography} +:filter: docname in docnames +``` + + diff --git a/tamingllms/markdown/input.md b/tamingllms/markdown/input.md new file mode 100644 index 0000000..f6919dd --- /dev/null +++ b/tamingllms/markdown/input.md @@ -0,0 +1,2433 @@ +(input)= +# Managing Input Data +```{epigraph} +One home run is much better than two doubles. + +-- Steve Jobs +``` +```{contents} +``` + +## Introduction + +While advances in long-context language models (LCs) {cite}`lee2024longcontextlanguagemodelssubsume` have expanded the amount of information these LLMs can process, significant challenges remain in managing and effectively utilizing extended data inputs: + +- LLMs are sensitive to input formatting and structure, requiring careful data preparation to achieve optimal results {cite}`he2024doespromptformattingimpact, liu2024enhancingllmscognitionstructurization, tan2024htmlraghtmlbetterplain`. +- LLMs operate with knowledge cutoffs, providing potentially outdated information that may not reflect current reality and demonstrate problems with temporal knowledge accuracy {cite}`amayuelas-etal-2024-knowledge`. +- LLMs also face "lost-in-the-middle" problems {cite}`wu2024longdocumentsummaryevaluation` and struggle with less common but important information showing a systematic loss of long-tail knowledge {cite}`kotha2024understanding`. + +Motivated by these challenges, this chapter explores two key input data components: + +1. Data Pre-Processing: Parsing and chunking documents into a unified format that is suitable and manageable for LLMs to process effectively. +2. Retrieval Augmentation: Augmenting LLMs with the ability to retrieve relevant, recent, and specialized information. + +In data parsing, we will explore some useful open source tools such as Docling and MarkItDown that help transform data into LLM-compatible formats, demonstrating their impact through a case study of structured information extraction from complex PDFs. In a second case study, we will introduce some chunking strategies to help LLMs process long inputs and implement a particular technique called Chunking with Contextual Linking the enables contextually relevant chunk processing. + +In retrieval augmentation, we will explore how to enhance LLMs with semantic search capabilities for incorporating external context using RAGs (Retrieval Augmented Generation) using Vector Databases such as ChromaDB. We also discuss whether RAGs will be really needed in the future given the rise of long-context language models. + +While RAGs are useful for incorporating external context, they are not a silver bullet nor a mandatory component for all LLM applications. In our last case study, we demonstrate how long-context windows can be used to extract insights from a large knowledge base without the need for complex retrieval systems. We build a quiz generator from open books from Project Gutenberg. We will also explore some additional relevant techniques such as prompt caching and response verification through citations using "Corpus-in-Context" (CIC) Prompting {cite}`lee2024longcontextlanguagemodelssubsume`. + +By the chapter's conclusion, readers will possess relevant knowledge of input data management strategies for LLMs and practical expertise in selecting and implementing appropriate approaches and tools for specific use cases. + +(parsing)= +## Parsing Documents + +Data parsing and formatting play a critical role in LLMs performance {cite}`he2024doespromptformattingimpact, liu2024enhancingllmscognitionstructurization, tan2024htmlraghtmlbetterplain`. Hence, building robust data ingestion and preprocessing pipelines is essential for any LLM application. + +This section explores open source tools that streamline input data processing, in particular for parsing purposes, providing a unified interface for converting diverse data formats into standardized representations that LLMs can effectively process. By abstracting away format-specific complexities, they allow developers to focus on core application logic rather than parsing implementation details while maximizing LLM's performance. + +We will cover open source tools that provide parsing capabilities for a wide range of data formats. And we will show how some of these tools can be used to extract structured information from complex PDFs demonstrating how the quality of the parser can impact LLM's performance. + +### MarkItDown + +MarkItDown {cite}`microsoft2024markitdown` is a Python package and CLI tool developed by the Microsoft for converting various file formats to Markdown. It supports a wide range of formats including PDF, PowerPoint, Word, Excel, images (with OCR and EXIF metadata), audio (with transcription), HTML, and other text-based formats making it a useful tool for document indexing and LLM-based applications. + +Key features: +- Simple command-line and Python API interfaces +- Support for multiple file formats +- Optional LLM integration for enhanced image descriptions +- Batch processing capabilities +- Docker support for containerized usage + +Sample usage: +```python +from markitdown import MarkItDown + +md = MarkItDown() +result = md.convert("test.xlsx") +print(result.text_content) +``` + +### Docling + +Docling {cite}`docling2024github` is a Python package developed by IBM Research for parsing and converting documents into various formats. It provides advanced document understanding capabilities with a focus on maintaining document structure and formatting. + +Key features: +- Support for multiple document formats (PDF, DOCX, PPTX, XLSX, Images, HTML, etc.) +- Advanced PDF parsing including layout analysis and table extraction +- Unified document representation format +- Integration with LlamaIndex and LangChain +- OCR support for scanned documents +- Simple CLI interface + +Sample usage: +```python +from docling.document_converter import DocumentConverter + +converter = DocumentConverter() +result = converter.convert("document.pdf") +print(result.document.export_to_markdown()) +``` + +### Structured Data Extraction + +A common use case where document parsing matters is structured data extraction, particularly in the presence of complex formatting and layout. In this case study, we will extract the economic forecasts from Merrill Lynch's CIO Capital Market Outlook released on December 16, 2024 {cite}`merrill2024`. We will focus on page 7 of this document, which contains several economic variables organized in a mix of tables, text and images (see {numref}`forecast`). + + +```{figure} ../data/input/forecast.png +--- +name: forecast +alt: Forecast +scale: 45% +align: center +--- +Merrill Lynch's CIO Capital Market Outlook released on December 16, 2024 {cite}`merrill2024` +``` + + +```python +FORECAST_FILE_PATH = "../data/input/forecast.pdf" + +``` + +First, we will use MarkItDown to extract the text content from the document. + + +```python +from markitdown import MarkItDown + +md = MarkItDown() +result_md = md.convert(FORECAST_FILE_PATH).text_content +``` + +Next, we will do the same with Docling. + + +```python +from docling.document_converter import DocumentConverter + +converter = DocumentConverter() +forecast_result_docling = converter.convert(source).document.export_to_markdown() +``` + +How similar are the two results? We can use use Levenshtein distance to measure the similarity between the two results. We will also calculate a naive score using the `SequenceMatcher` from the `difflib` package, which is a simple measure of similarity between two strings based on the number of matches in the longest common subsequence. + + +```python +import Levenshtein +def levenshtein_similarity(text1: str, text2: str) -> float: + """ + Calculate normalized Levenshtein distance + Returns value between 0 (completely different) and 1 (identical) + """ + distance = Levenshtein.distance(text1, text2) + max_len = max(len(text1), len(text2)) + return 1 - (distance / max_len) + +from difflib import SequenceMatcher +def simple_similarity(text1: str, text2: str) -> float: + """ + Calculate similarity ratio using SequenceMatcher + Returns value between 0 (completely different) and 1 (identical) + """ + return SequenceMatcher(None, text1, text2).ratio() +``` + + +```python +levenshtein_similarity(forecast_result_md, forecast_result_docling) +``` + + + + + 0.13985705461925346 + + + + +```python +simple_similarity(forecast_result_md, forecast_result_docling) +``` + + + + + 0.17779960707269155 + + + +It turns out that the two results are quite different, with a similarity score of about 13.98% and 17.77% for Levenshtein and `SequenceMatcher`, respectively. + +Docling's result is a quite readable markdown displaying key economic variables and their forecasts. Conversely, MarkItDown's result is a bit messy and hard to read but the information is there just not in a structured format. Does it matter? That's what we will explore next. + +**Docling's result** + + +```python +display(Markdown(forecast_result_docling)) +``` + +{numref}`docling` shows part of the parsed result from Docling. + +```{figure} ../_static/input/docling.png +--- +name: docling +alt: Docling's result +scale: 40% +align: center +--- +An extract of Docling's parsed result. +``` + + +**MarkItDown's result** + + +```python +from IPython.display import display, Markdown +display(Markdown(forecast_result_md[:500])) +``` + +{numref}`markitdown` shows part of the parsed result from MarkItDown. + +```{figure} ../_static/input/markitdown.png +--- +name: markitdown +alt: MarkItDown's parsed result +scale: 40% +align: center +--- +An extract of MarkItDown's parsed result. +``` + +Now, let's focus on the economic forecasts. In particular, we are interested in extracting the CIO's 2025E forecasts. This could be a useful predictive indicator for the economy in 2025. + +```{figure} ../_static/input/2025.png +--- +name: forecast2025 +alt: Forecast 2025 +scale: 40% +align: center +--- +Merrill Lynch's CIO Economic Forecasts. +``` + +We will define a `Forecast` pydantic model to represent an economic forecast composed of a `financial_variable` and a `financial_forecast`. We will also define a `EconForecast` pydantic model to represent the list of economic forecasts we want to extract from the document. + + + +```python +from pydantic import BaseModel +class Forecast(BaseModel): + financial_variable: str + financial_forecast: float +class EconForecast(BaseModel): + forecasts: list[Forecast] + +``` + +We write a simple function to extract the economic forecasts from the document using an LLM model (with structured output) with the following prompt template, where `extract_prompt` represents the kind of data the user would like to extract and `doc` is the input document. + +```python +BASE_PROMPT = f""" + ROLE: You are an expert at structured data extraction. + TASK: Extract the following data {extract_prompt} from input DOCUMENT + FORMAT: The output should be a JSON object with 'financial_variable' as key and 'financial_forecast' as value. + """ +prompt = f"{BASE_PROMPT} \n\n DOCUMENT: {doc}" +``` + + +```python +def extract_from_doc(extract_prompt: str, doc: str, client) -> EconForecast: + """ + Extract data of a financial document using an LLM model. + + Args: + doc: The financial document text to analyze + client: The LLM model to use for analysis + extract_prompt: The prompt to use for extraction + + Returns: + EconForecasts object containing sentiment analysis results + """ + + BASE_PROMPT = f""" + ROLE: You are an expert at structured data extraction. + TASK: Extract the following data {extract_prompt} from input DOCUMENT + FORMAT: The output should be a JSON object with 'financial_variable' as key and 'financial_forecast' as value. + """ + prompt = f"{BASE_PROMPT} \n\n DOCUMENT: {doc}" + completion = client.beta.chat.completions.parse( + model="gpt-4o-mini", + messages=[ + { + "role": "system", + "content": prompt + }, + {"role": "user", "content": doc} + ], + response_format=EconForecast + ) + return completion.choices[0].message.parsed +``` + + +```python +from dotenv import load_dotenv +import os + +# Load environment variables from .env file +load_dotenv(override=True) +from openai import OpenAI +client = OpenAI() +``` + +The user then calls the `extract_from_doc` function simply defining that "Economic Forecasts for 2025E" is the data they would like to extract from the document. We perform the extraction twice, once with MarkItDown and once with Docling. + + +```python +extract_prompt = "Economic Forecasts for 2025E" +md_financials = extract_from_doc(extract_prompt, forecast_result_md, client) +docling_financials = extract_from_doc(extract_prompt, forecast_result_docling, client) +``` + +The response is an `EconForecast` object containing a list of `Forecast` objects, as defined in the pydantic model. We can then convert the response to a pandas DataFrame for easier comparison. + + +```python +md_financials +``` + + + + + EconForecast(forecasts=[Forecast(financial_variable='Real global GDP (% y/y annualized)', financial_forecast=3.2), Forecast(financial_variable='Real U.S. GDP (% q/q annualized)', financial_forecast=2.4), Forecast(financial_variable='CPI inflation (% y/y)', financial_forecast=2.5), Forecast(financial_variable='Core CPI inflation (% y/y)', financial_forecast=3.0), Forecast(financial_variable='Unemployment rate (%)', financial_forecast=4.3), Forecast(financial_variable='Fed funds rate, end period (%)', financial_forecast=3.88)]) + + + + +```python +df_md_forecasts = pd.DataFrame([(f.financial_variable, f.financial_forecast) for f in md_financials.forecasts], + columns=['Variable', 'Forecast']) +df_docling_forecasts = pd.DataFrame([(f.financial_variable, f.financial_forecast) for f in docling_financials.forecasts], + columns=['Variable', 'Forecast']) + +``` + + +```python +df_md_forecasts +``` + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    VariableForecast
    0Real global GDP (% y/y annualized)3.20
    1Real U.S. GDP (% q/q annualized)2.40
    2CPI inflation (% y/y)2.50
    3Core CPI inflation (% y/y)3.00
    4Unemployment rate (%)4.30
    5Fed funds rate, end period (%)3.88
    +
    + + + + +```python +df_docling_forecasts +``` + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    VariableForecast
    0Real global GDP (% y/y annualized)3.20
    1Real U.S. GDP (% q/q annualized)2.40
    2CPI inflation (% y/y)2.50
    3Core CPI inflation (% y/y)3.00
    4Unemployment rate (%)4.30
    5Fed funds rate, end period (%)3.88
    +
    + + + +The results from MarkItDown and Docling are identical and accurately match the true values from the document. This demonstrates that despite MarkItDown's output appearing less readable from a human perspective, both approaches enabled the LLM to successfully extract the economic forecast data with equal accuracy, in this particular case. + +Next, let's focus on the asset class weightings. We will extract the asset class weightings from the document and compare the results from MarkItDown and Docling. The information is now presented in a quite different structure as we can see in {numref}`asset_class`. The CIO view information is represented in a spectrum starting with "Underweight", passing through "Neutral" and reaching "Overweight". The actual view is marked by some colored dots in the chart. Let's see if we can extract this relatively more complex information from the document. +```{figure} ../_static/input/asset_class.png +--- +name: asset_class +alt: Asset Class Weightings +scale: 50% +align: center +--- +Asset Class Weightings +``` + +The user will simply define the following data to extract: "Asset Class Weightings (as of 12/3/2024) in a scale from -2 to 2". In that way, we expect that "Underweight" will be mapped to -2, "Neutral" to 0 and "Overweight" to 2 with some values in between. + + +```python +extract_prompt = "Asset Class Weightings (as of 12/3/2024) in a scale from -2 to 2" +asset_class_docling = extract_from_doc(extract_prompt, forecast_result_docling, client) +asset_class_md = extract_from_doc(extract_prompt, forecast_result_md, client) +``` + + +```python + +df_md = pd.DataFrame([(f.financial_variable, f.financial_forecast) for f in asset_class_md.forecasts], + columns=['Variable', 'Forecast']) +df_docling = pd.DataFrame([(f.financial_variable, f.financial_forecast) for f in asset_class_docling.forecasts], + columns=['Variable', 'Forecast']) +``` + +We construct a DataFrame to compare the results from MarkItDown and Docling with an added "true_value" column containing the true values from the document, which we extracted manually from the chart. This enables us to calculate accuracy of the structured data extraction task in case. + + +```python +# Create DataFrame with specified columns +df_comparison = pd.DataFrame({ + 'variable': df_docling['Variable'].iloc[:-1], + 'markitdown': df_md['Forecast'], + 'docling': df_docling['Forecast'].iloc[:-1], # Drop last row + 'true_value': [1.0, 0.0, 1.0, 1.0, 1.0, -1.0, 0.0, -1.0, 1.0, 1.0, -1.0, 0.0, -1.0, 0.0, -1.0] +}) + +display(df_comparison) + +``` + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    variablemarkitdowndoclingtrue_value
    0Global Equities1.01.01.0
    1U.S. Large Cap Growth1.01.00.0
    2U.S. Large Cap Value1.01.01.0
    3U.S. Small Cap Growth1.01.01.0
    4U.S. Small Cap Value1.01.01.0
    5International Developed1.0-1.0-1.0
    6Emerging Markets1.00.00.0
    7Global Fixed Income-1.0-1.0-1.0
    8U.S. Governments-1.01.01.0
    9U.S. Mortgages-1.01.01.0
    10U.S. Corporates-1.0-1.0-1.0
    11International Fixed Income-1.00.00.0
    12High Yield-1.0-1.0-1.0
    13U.S. Investment-grade-1.00.00.0
    14Tax Exempt U.S. High Yield Tax Exempt-1.0-1.0-1.0
    +
    + + + +```python +# Calculate accuracy for markitdown and docling +markitdown_accuracy = (df_comparison['markitdown'] == df_comparison['true_value']).mean() +docling_accuracy = (df_comparison['docling'] == df_comparison['true_value']).mean() + +print(f"Markitdown accuracy: {markitdown_accuracy:.2%}") +print(f"Docling accuracy: {docling_accuracy:.2%}") + +``` + + Markitdown accuracy: 53.33% + Docling accuracy: 93.33% + + +We observe that Docling performs significantly better at 93.33% accuracy missing only one value. MarkItDown achieves 53.33% accuracy struggling with nuanced asset class weightings. In this case, Docling's structured parsed output did help the LLM to extract the information more accurately compared to MarkItDown's unstructured output. Hence, in this case, the strategy used to parse the data did impact the LLM's ability to extract structured information. Having said that, it is important to mention that a more robust analysis would run data extraction on a larger sample data a number of times across repeated runs to estimate confidence intervals since results are non-deterministic. + +What if we wanted to systematically extract all tables from the document? We can use Docling to do that by simply accessing the `tables` attribute of the `DocumentConverter` object. + +By doing that, we observe that Docling successfully extracted the seven tables from the document exporting tables from top down and left to right in order of appearance in the document. +Below, we display the first two and the last tables. We can see the first table successfully extracted for Equities forecasts, the second one for Fixed Income forecasts as well as the last table, which contains CIO Equity Sector Views. + + + +```python +import time +from pathlib import Path +import pandas as pd +from docling.document_converter import DocumentConverter +``` + + +```python +def convert_and_export_tables(file_path: Path) -> list[pd.DataFrame]: + """ + Convert document and export tables to DataFrames. + + Args: + file_path: Path to input document + + Returns: + List of pandas DataFrames containing the tables + """ + doc_converter = DocumentConverter() + start_time = time.time() + + conv_res = doc_converter.convert(file_path) + + tables = [] + # Export tables + for table in conv_res.document.tables: + table_df: pd.DataFrame = table.export_to_dataframe() + tables.append(table_df) + + end_time = time.time() - start_time + print(f"Document converted in {end_time:.2f} seconds.") + + return tables + +``` + + +```python +# Convert and export tables +tables = convert_and_export_tables(Path(FORECAST_FILE_PATH)) +``` + + +```python +len(tables) +``` + + + + + 7 + + + + +```python +display(tables[0]) +``` + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Total Return in USD (%).CurrentTotal Return in USD (%).WTDTotal Return in USD (%).MTDTotal Return in USD (%).YTD
    0DJIA43,828.06-1.8-2.318.4
    1NASDAQ19,926.720.43.733.7
    2S&P 5006,051.09-0.60.428.6
    3S&P 400 Mid Cap3,277.20-1.6-2.619.5
    4Russell 20002,346.90-2.5-3.517.3
    5MSCI World3,817.24-1.00.222.1
    6MSCI EAFE2,319.05-1.50.26.4
    7MSCI Emerging Markets1,107.010.32.710.6
    +
    + + + +```python +display(tables[1]) +``` + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Total Return in USD (%).CurrentTotal Return in USD (%).WTDTotal Return in USD (%).MTDTotal Return in USD (%).YTD
    0Corporate & Government4.66-1.34-0.921.94
    1Agencies4.54-0.58-0.313.35
    2Municipals3.55-0.87-0.541.99
    3U.S. Investment Grade Credit4.79-1.38-0.931.97
    4International5.17-1.40-0.903.20
    5High Yield7.19-0.220.208.87
    690 Day Yield4.324.394.495.33
    72 Year Yield4.244.104.154.25
    810 Year Yield4.404.154.173.88
    930 Year Yield4.604.344.364.03
    +
    + + + +```python +display(tables[6]) +``` + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    SectorCIO View.CIO View.UnderweightCIO View.NeutralCIO View.CIO View.Overweight
    0Utilitiesslight over weight green 
    1Financialsslight over weight green 
    2Healthcareslight over weight green 
    3Consumer DiscretionarySlight over weight green 
    4Information TechnologyNeutral yellow 
    5Communication ServicesNeutral yellow 
    6IndustrialsNeutral yellow 
    7Real EstateNeutral yellow 
    8Energyslight underweight orange 
    9Materialsslight underweight orange 
    10Consumer Staplesunderweight red
    +
    + + +Coming back to MarkItDown, one interesting feature to explore is the ability to extract information from images by passing an image capable LLM model to its constructor. + + +```python +md_llm = MarkItDown(llm_client=client, llm_model="gpt-4o-mini") +``` + + +```python +result = md_llm.convert("../data/input/forecast.png") +``` + +Here's the description we obtain from the image of our input document. + + +```python +display(Markdown(result.text_content)) +``` + + + +# Description: +**Markets in Review: Economic Forecasts and Asset Class Weightings (as of 12/13/2024)** + +This detailed market overview presents key performance metrics and economic forecasts as of December 13, 2024. + +**Equities Overview:** +- **Total Returns:** Highlights returns for major indices such as the DJIA (18.4% YTD), NASDAQ (33.7% YTD), and S&P 500 (28.6% YTD), showcasing strong performance across the board. +- **Forecasts:** Economic indicators reveal a projected real global GDP growth of 3.1%, with inflation rates expected to stabilize around 2.2% in 2025. Unemployment rates are anticipated to remain low at 4.4%. + +**Fixed Income:** +- Focuses on various segments, including Corporate & Government bonds, which offer an annualized return of 4.66% and indicate shifting trends in interest rates over 2-Year (4.25%) and 10-Year (4.03%) bonds. + +**Commodities & Currencies:** +- Commodities such as crude oil and gold show varied performance, with oil increasing by 4.8% and gold prices sitting at $2,648.23 per ounce. +- Currency metrics highlight the Euro and USD trends over the past year. + +**S&P Sector Returns:** +- A quick reference for sector performance indicates a significant 2.5% return in Communication Services, while other sectors like Consumer Staples and Materials display minor fluctuations. + +**CIO Asset Class Weightings:** +- Emphasizes strategic asset allocation recommendations which are crucial for an investor's portfolio. Underweight positions in U.S. Small Cap Growth and International Developed contrast with overweight positions in certain sectors such as Utilities and Financials, signaling tactical shifts based on ongoing economic assessments. + +**Note:** This summary is sourced from BofA Global Research and aims to provide a comprehensive view of current market conditions and forecasts to assist investors in making informed decisions. + + + +--- + +Overall, the description is somewhat accurate but contains a few inaccuracies including: + +- For the sector weightings, the description states there are "underweight positions in U.S. Small Cap Growth" but looking at the Asset Class Weightings chart, U.S. Small Cap Growth actually shows an overweight position (green circle). +- The description mentions "overweight positions in certain sectors such as Utilities and Financials" but looking at the CIO Equity Sector Views, both these sectors show neutral positions, not overweight positions. +- For fixed income, the description cites a "10-Year (4.03%)" yield, but the image shows the 30-Year Yield at 4.03%, while the 10-Year Yield is actually 4.40%. + +Arguably, the description's inaccuracies could be a consequence of the underlying LLM model's inability to process the image. + +We have covered MarkitDown and Docling as examples of open source tools that can help developers parse input data into a suitable format to LLMs. Other relevant open source tools worth mentioning include: +- Unstructured {cite}`unstructured2024github`: A Python library for unstructured data extraction. +- FireCrawl {cite}`mendable2024firecrawl`: A Fast and Efficient Web Crawler for LLM Training Data. +- LlamaParse {cite}`llamaparse2024github`: Llamaindex's data parsing solution. + +The choice of tool depends on the specific requirements of the application and the nature of the input data. This choice should be taken as a critical decision of any data intensive LLM-based application and deserves dedicated research and evidence-based experimentation early-on in the development cycle. + + +## Retrieval-Augmented Generation + +What happens if we asked ChatGPT who's the author of the book "Taming LLMs"? + + + + + +```python +from dotenv import load_dotenv +import os + +# Load environment variables from .env file +load_dotenv() + +from openai import OpenAI +client = OpenAI() +model = "gpt-4o-mini" +``` + + +```python +question = "Who's the Author of the Book Taming LLMs?" +``` + + +```python +response = client.chat.completions.parse( + model="gpt-4o-mini", + messages=[ + {"role": "user", "content": question} + ] +) +response.choices[0].message.content +``` + + The book "Taming LLMs" is authored by *G. Arulkumaran, H. M. B. P. D. Karthikeyan, and I. A. M. Almasri.* If you need more information about the book or its contents, feel free to ask! + + +Turns out ChatGPT hallucinates. A quick web search on the before mentioned authors yields no results. In fact, those authors names are made up. And of course the correct answer would have been yours truly, "Tharsis Souza". + +LLMs only have access to the information they have been trained on, which of course has been fixed at a point in time. Hence, LLMs operate with stale data. The problem gets exacerbated by the fact that LLMs are trained to provide an answer even if the answer is unknown by them, hence leading to hallucinations. + +One solution to this problem is to use a retrieval system to fetch information from a knowledge base to provide recent and relevant context to user queries using so-called Retrieval Augmented Generation (RAG) system. + +RAG utilizes a retrieval system to fetch external knowledge and augment LLM's context. It is a useful technique for building LLM applications that require domain-specific information or knowledge-intensive tasks {cite}`lewis2021retrievalaugmentedgenerationknowledgeintensivenlp`. It has also proved effective in mitigating LLMs hallucinations {cite}`10.1145/3589334.3645481, ni-etal-2024-llms`. + +In the above example, a RAG would help with hallucinations by grounding the LLM's response to information provided in the knowledge base. Additional common use cases of RAG systems include: + +1. **Enterprise Knowledge Management**: RAG enables organizations to synthesize answers from diverse internal data sources like documents, databases, and communication channels. This creates a unified knowledge interface that can accurately answer questions using the organization's own data. +2. **Document Processing and Analysis**: RAG excels at extracting and analyzing information from complex documents like financial reports, presentations, and spreadsheets. The system can enable LLMs to understand context and relationships across different document types and formats. +3. **Intelligent Customer Support**: By combining knowledge bases with conversational abilities, RAG powers chatbots and support systems that can maintain context across chat history, provide accurate responses, and handle complex customer queries while reducing hallucinations. +4. **Domain-Specific Applications**: RAG allows LLMs to be equipped with specialized knowledge in fields like medicine, law, or engineering by retrieving information from domain-specific literature, regulations, and technical documentation. This enables accurate responses aligned with professional standards and current best practices. +5. **Code Documentation and Technical Support**: RAG can help developers by retrieving relevant code examples, API documentation, and best practices from repositories and documentation, which often suffer updates frequently, enabling more accurate and contextual coding assistance. + +If LLMs alone work on stale, general-purpose data with the added challenge of being prone to hallucinations, RAG systems serve as an added capability enabling LLMs to work on recent, domain-specific knowledge increasing the likelihood of LLMs to provide responses that are factual and relevant to user's queries. + + +### RAG Pipeline + +RAG architectures vary but they all share the same goal: To retrieve relevant information from a knowledge base to maximize the LLM's ability to effectively and accurately respond to prompts, particularly when the answer requires out-of-training data. + +We will introduce key components of a RAG system one by one leading to a full canonical RAG pipeline at the end that ultimately will be used to answer our original question "Who's the author of the book Taming LLMs?", accurately. + +The following basic components will be introduced (see {numref}`rag_pipeline` for a visual representation): +- Vector Database + - Embeddings + - Indexing +- Retrieval System including re-ranking +- LLM Augmented Generation via in-context learning + +Data extraction, parsing and chunking are also part of a canonical pipeline as we prepare the knowledge base. Those are concepts we explored in detail in Sections {ref}`parsing` and {ref}`chunking`, hence we will be succinct here. We will start by preparing the knowledge base. + +```{figure} ../_static/input/rag.svg +--- +name: rag_pipeline +alt: RAG Pipeline +scale: 99% +align: center +--- +Simplified RAG Pipeline +``` + + +#### Preparing the Knowledge Base + +Every RAG system requires a knowledge base. In our case, the knowledge base is a set of documents that we equip the LLM with to answer our authorship question. + +Hence, we will compose our knowledge base by adding the web version of (some of the chapters of) the book "Taming LLMs", namely: +- Introduction +- Structured Output +- Input (this very chapter) + + + +```python +book_url = "https://www.tamingllms.com/" +chapters = ["markdown/intro.html", + "notebooks/structured_output.html", + "notebooks/input.html"] + +chapter_urls = [f"{book_url}/{chapter}" for chapter in chapters] +chapter_ids = [chapter.split("/")[-1].replace(".html", "") for chapter in chapters] +``` + +We use `Docling` to download the chapters from the web and parse them as markdown files. + + +```python +chapters = [converter.convert(chapter_url).document.export_to_markdown() for chapter_url in chapter_urls] +``` + +Now we are ready to store the chapters in a vector database to enable the construction of a retrieval system. + +#### Vector Database + +Vector databases are specialized databases designed to store and retrieve high-dimensional vectors, which are mathematical representations of data like text, images, or audio. These databases are optimized for similarity search operations, making them ideal for embeddings-based retrieval systems. + +A typical pipeline involving a vector database includes the following: + +1. Input data is converted into "documents" forming a collection representing our knowledge base +2. Each document is converted into an embedding which are stored in the vector database +3. Embeddings are indexed in the vector database for efficient similarity search +4. The vector database is queried to retrieve the most relevant documents +5. The retrieved documents are used to answer questions + +Vector databases are not a mandatory component of RAG systems. In fact, we can use a simple list of strings to store the chapters (or their chunks) and then use the LLM to answer questions about the document. However, vector databases are useful for RAG applications as they enable: +- Fast similarity search for finding relevant context +- Efficient storage of document embeddings +- Scalable retrieval for large document collections +- Flexible querying with metadata filters + +In that way, RAG applications can be seen as a retrieval system that uses a vector database to store and retrieve embeddings of documents, which in turn are used to augment LLMs with contextually relevant information as we will see in the next sections. + +Here, we will use ChromaDB {cite}`chromadb2024docs` as an example of an open source vector database but key features and concepts we cover are applicable to other vector databases, in general. + +ChromaDB is a popular open-source vector database that offers: +- Efficient storage and retrieval of embeddings +- Support for metadata and filtering +- Easy integration with Python applications +- In-memory and persistent storage options +- Support for multiple distance metrics + +Other notable vector databases include Weaviate, FAISS, and Milvus. + +In ChromaDB, we can create a vector database client as follows. + + +```python +import chromadb +chroma_client = chromadb.Client() +``` + +This will create a vector database in memory. We can also create a persistent vector database by specifying a path to a directory or alternatively by using a cloud-based vector database service like AWS, Azure or GCP. We will use a vector database in memory for this example. + +Next, we create a collection to store the embeddings of the chapters. And add our chapters as documents to the collection as follows. + + +```python +collection = chroma_client.create_collection(name="taming_llms") + +collection.add( + documents=chapters, + ids=chapter_ids +) +``` + +We are ready to query the collection. We write a simple function that takes the collection, input query and number of retrieved results as argument and returns the retrieved documents. + + +```python +def query_collection(collection, query_text, n_results=3): + results = collection.query( + query_texts=[query_text], + n_results=n_results + ) + return results +``` + +We write a simple query, enquiring the purpose of the book. + + +```python +q = "What is the purpose of this book?" +res = query_collection(collection, q) +res.get("ids") +``` + + +```python +print([['intro', 'input', 'structured_output']]) +``` + +As response, we obtain an object that contains several attributes including: +- `documents`: The actual documents retrieved from the collection, i.e. the chapters +- `ids`: The ids of the documents retrieved from the collection +- `distances`: The distances of the documents to the query vector + +We can see that the chapters "Introduction", "Input" and "Structured Output" are retrieved from the collection ordered by their distance to the query vector, in increasing order. + +We observe that the Introduction chapter is the most relevant one as it ranks first, followed by the Input and Structured Output chapters. Indeed, the purpose of the book is included in the Introduction chapter demonstrating the retrieval system successfully retrieved the most relevant document to the input query, in this simple example. + +In order to understand how the retrieval system works and how the "distance to the query vector" is computed, we need to understand how embeddings are created and how documents are indexed. + +**Embeddings** + +Embeddings are numerical representations of data (including text, images, audio, etc.) that capture meaning, allowing machines to process data quantitatively. Each embedding can be represented as a vector of floating-point numbers such that embedded data with similar meanings produce similar, i.e. close, vectors [^embeddings_definition]. + +[^embeddings_definition]: Bengio et al. {cite}`bengio2014representationlearningreviewnew` provide serves as an excellent reference for representation learning in general including embeddings. OpenAI provides a good intro to Embeddings for developers {cite}`openai2024embeddings` + +For text data, small distances among embeddings suggest high semantic relatedness and large distances suggest low semantic relatedness among the embedded texts. HuggingFace provides a leaderboard of embeddings models {cite}`huggingface2024mteb`, which are ranked by dimensions such as classification, clustering and reranking performance. + +Behind the scenes, ChromaDB is using the model `all-MiniLM-L6-v2` by default [^chroma_embeddings] to create embeddings for the input documents and the query (see {numref}`embedding`). This model is available in `sentence_transformers` {cite}`sentencetransformers2024website`. Let's see how it works. + +```{figure} ../_static/input/embedding.svg +--- +name: embedding +alt: Embedding +scale: 70% +align: center +--- +Embedding: From text to vectors. +``` + +[^chroma_embeddings]: ChromaDB enables custom embedding functions and provides a list of wrappers around commonly used embedding models and APIs https://docs.trychroma.com/docs/embeddings/embedding-functions + + +```python +from sentence_transformers import SentenceTransformer + +embedding_model = SentenceTransformer('all-MiniLM-L6-v2') +``` + +We replicate what ChromaDB did by embedding our chapters as well as input query using sentence transformers. + + +```python +q = "What is the purpose of this book?" +docs_to_embed = [q] + chapters +embeddings = embedding_model.encode(docs_to_embed) +print(embeddings.shape) +``` + + (4, 384) + + +As a result, we obtain four 384-dimensional vectors representing our embeddings (one for each of the three chapters and one for the input query). + +Now we can calculate similarity among the embeddings. By default, sentence transformers uses cosine similarity as similarity metric. + + +```python +similarities = embedding_model.similarity(embeddings, embeddings) +similarities +``` + +``` +tensor([[1.0000, 0.4402, 0.3022, 0.4028], + [0.4402, 1.0000, 0.6606, 0.5807], + [0.3022, 0.6606, 1.0000, 0.6313], + [0.4028, 0.5807, 0.6313, 1.0000]]) +``` + +Let's visualize the similarity matrix to better understand the relationships between our documents in {numref}`similarities`. The top row of the matrix represents the similarity of the input query against all chapters. That's exactly what we previously obtained by querying ChromaDB which returned a response with documents ranked by similarity to input query. As expected, the Introduction chapter is the most similar to the input query followed by the Input and Structured Output chapters, as we previously observed with ChromaDB. + +```{figure} ../_static/input/similarity.png +--- +name: similarities +alt: Similarity matrix heatmap +scale: 90% +align: center +--- +Similarity matrix heatmap showing relationships among query and chapters. +``` + + + +Calculating similarity among embeddings can become computationally intensive if brute force is used, i.e. pair-wise computation, as the number of documents grows in the knowledge base. Indexing is a technique to help address this challenge. + +**Indexing** + +Indexing is an optimization technique that makes similarity searches faster and more efficient. + +Without indexing, finding similar vectors would require an exhaustive search - comparing a query vector against every single vector in the database. For large datasets, this becomes prohibitively slow. + +Common indexing strategies include: + +1. **Tree-based Indexes** + - Examples include KD-trees and Ball trees + - Work by partitioning the vector space into hierarchical regions + - Effective for low-dimensional data but suffer from the "curse of dimensionality" + +2. **Graph-based Indexes** + - HNSW (Hierarchical Navigable Small World) is a prominent example + - Creates a multi-layered graph structure for navigation + - Offers excellent search speed but requires more memory + +3. **LSH (Locality-Sensitive Hashing)** + - Uses hash functions that map similar vectors to the same buckets + - More memory-efficient than graph-based methods + - May sacrifice some accuracy for performance + +4. **Quantization-based Indexes** + - Product Quantization compresses vectors by encoding them into discrete values + - Reduces memory footprint significantly + - Good balance between accuracy and resource usage + +HNSW is the underlying library for ChromaDB vector indexing and search {cite}`chromadb2024hnsw`. HNSW provides fast searches with high accuracy but uses more memory. LSH and quantization methods offer better memory efficiency but may sacrifice some precision. + +But is the combination of indexing and basic embeddings-based similarity sufficient to retrieve relevant documents? Often not, as we will see next, as we cover reranking technique. + +#### Reranking + +Let's go back to querying our vector database. + +First, we write a query about how to get structured output from LLMs. Successfully retrieving the "Structured Output" chapter from the book as top result. + + +```python +q = "How to get structured output from LLMs?" +res = query_collection(collection, q) +res.get("ids") +``` + + [['structured_output', 'input', 'intro']] + + +Next, we would like to obtain a tutorial on `Docling`, a tool we covered in this very chapter. However, we fail to obtain the correct chapter and instead obtain the "Introduction" chapter as a result. + + +```python +q = "Docling tutorial" +res = query_collection(collection, q) +res.get("ids") +``` + + [['intro', 'input', 'structured_output']] + + +Retrieval systems solely based on vector similarity search might miss semantic relevance. That brings the need for techniques that can improve accuracy of the retrieval system. One such technique is re-ranking. + +Re-ranking is a method that can improve accuracy of the retrieval system by re-ranking the retrieved documents based on their relevance to the input query. + +In the following, we will use the `sentence_transformers` library to re-rank the retrieved documents based on their relevance to the input query. We utilize the `CrossEncoder` model to re-rank the documents. Cross-Encoder models are more accurate at judging relevance at the cost of speed compared to basic vector-based similarity. + +We can implement a reranking step in a RAG system using a Cross-Encoder model in the following steps: + +1. First, we initialize the Cross-Encoder model: +```python +model = CrossEncoder('cross-encoder/ms-marco-MiniLM-L-6-v2', max_length=512) +``` +- Uses the `ms-marco-MiniLM-L-6-v2` model, which is specifically trained for passage reranking +- Sets a maximum sequence length of 512 tokens +- This model is designed to score the relevance between query-document pairs + +2. Then we perform the reranking: +```python +scores = model.predict([(q, doc) for doc in res["documents"][0]]) +``` +- Creates pairs of (query, document) for each retrieved document +- The model predicts relevance scores for each pair +- Higher scores indicate better semantic match between query and document + +3. Finally, we select the best match: +```python +print(res["documents"][0][np.argmax(scores)]) +``` +- `np.argmax(scores)` finds the index of the highest scoring document +- Uses that index to retrieve the most relevant document + + +We obtain the following scores for the retrieved documents ("intro", "input", "structured_output"), the higher the score, the more relevant the document is in relation to the input query. + +``` +array([-8.52623 , -6.328738, -8.750055], dtype=float32) +``` + +As a result, we obtain the index of the highest scoring document, which corresponds to the "input" chapter. Hence, the re-ranking step successfully retrieved the correct chapter. + + +```python +print(res["ids"][0][np.argmax(scores)]) +``` + + input + + +In RAG systems, the idea is to first run semantic similarity on embeddings, which should be fast but potentially inaccurate, and then run reranking from the top-k results, which should be more accurate but slower. By doing so, we can balance the speed and accuracy of the retrieval system. + +Hence, instead of going over all retrieved documents: +```python +scores = model.predict([(q, doc) for doc in res["documents"][0]]) +``` +We would run reranking on the TOPK results, where TOPK <<< number of documents: +```python +scores = model.predict([(q, doc) for doc in res["documents"][0][:TOPK]]) +``` + +#### LLMs with RAG + +We are finally ready to use the retrieval system to help the LLM answer our authorship question. A common way to integrate RAGs with LLMs is via in-context learning. With in-context learning the LLM learns from the retrieved documents by providing them in the context window as represented in {numref}`incontext`. This is accomplished via a prompt template structure as follows. + +```{figure} ../_static/input/incontext.svg +--- +name: incontext +alt: In-Context Learning +scale: 95% +align: center +--- +RAG LLM with In-Context Learning +``` + + +```python + rag_system_prompt_template = f""" + You are a helpful assistant that answers questions based on the provided CONTEXT. + + CONTEXT: {context} + """ + + user_prompt_template = f""" + QUESTION: {input} + """ +``` + +This prompt strategy demonstrates a common in-context learning pattern where retrieved documents are incorporated into the LLM's context to enhance response accuracy and relevance. The prompt structure typically consists of a system prompt that: +- Sets clear boundaries for the LLM to use information from the provided context +- Includes the retrieved documents as context + +This approach: +- Reduces hallucination by grounding responses in source documents +- Improves answer relevance by providing contextually relevant information to the LLM + +The context variable is typically populated with the highest-scoring document(s) from the retrieval step, while the input variable contains the user's original query. + + +```python +def RAG_qa(client, model, context, input): + """ + Generate a summary of input using a given model + """ + rag_system_prompt_template = f"""You are a helpful assistant that answers questions based on the provided CONTEXT. + + CONTEXT: {context} + """ + + response = client.chat.completions.create( + model=model, + messages=[{"role": "system", "content": rag_system_prompt_template}, + {"role": "user", "content": f"QUESTION: {input}"}] + ) + return response.choices[0].message.content +``` + +First, we set the LLM. + + +```python +from dotenv import load_dotenv +import os + +# Load environment variables from .env file +load_dotenv() + +from openai import OpenAI +client = OpenAI() +model = "gpt-4o-mini" +``` + +Then, we run the retrieval step. + + +```python +res = query_collection(collection, q) +``` + +Next, we run the re-ranking step setting it to consider the `TOPK` retrieved documents. + + +```python +TOPK = 2 +scores = model.predict([(q, doc) for doc in res["documents"][0][:TOPK]]) +res_reranked = res["documents"][0][np.argmax(scores)] +``` + +We then pass the top document as context and invoke the LLM with our RAG-based template leading to a successful response. + + +```python +answer = RAG_qa(model, res_reranked[0], question) +answer +``` + + The author of the book "Taming LLMs" is Tharsis Souza. + + +In this section, we motivated the use of RAGs as a tool to equip LLMs with relevant context and provided a canonical implementation of its core components. RAGs, however, can be implemented in many shapes and forms and entire books have been written about them. We point the user to additional resources if more specialized techniques and architectures are needed {cite}`kimothi2024simpleguiderag, athinaai2024ragcookbooks, diamant2024ragtechniques, hands-on-llms-book`. + +Next, we discuss RAGs challenges and limitations and conclude our RAGs section envisioning the future of RAGs challenged by the rise of long-context language models. + +### Challenges and Limitations + +While RAG systems offer powerful capabilities for enhancing LLM responses with external knowledge, they face several significant challenges and limitations that require careful consideration: + +- **Data Quality and Accuracy**: The effectiveness of RAG systems fundamentally depends on the quality and reliability of their knowledge sources. When these sources contain inaccurate, outdated, biased, or incomplete information, the system's responses become unreliable. This challenge is particularly acute when dealing with rapidly evolving topics or when sourcing information from unverified channels. + +- **Computational Cost and Latency**: Implementing RAG systems at scale presents computational and operational challenges. The process of embedding documents, maintaining vector databases, and performing similarity searches across large knowledge bases demands computational, and operational resources. In real-time applications, these requirements can introduce noticeable latency, potentially degrading the user experience and limiting practical applications. + +- **Explainability and Evaluation**: The complexity of RAG systems, arising from the intricate interaction between retrieval mechanisms and generative models, makes it difficult to trace and explain their reasoning processes. Traditional evaluation metrics often fail to capture the nuanced aspects of RAG performance, such as contextual relevance and factual consistency. This limitation hampers both system improvement and stakeholder trust. Readers are encouraged to read Chapter {ref}`evals` for general LLM evaluation issues as well as consider tools such as Ragas {cite}`ragas2024evaluation` for RAG evaluation. + +- **Hallucination Management**: Though RAG systems help ground LLM responses in source documents, they do not completely eliminate hallucinations. The generative component may still produce content that extrapolates beyond or misinterprets the retrieved context. This risk becomes particularly concerning when the system confidently presents incorrect information with apparent source attribution. + + +Moreover, recent research has shed light on critical limitations of key techniques used in RAGs systems. A relevant finding pertains to reranking, which has shown {cite}`jacob2024drowningdocumentsconsequencesscaling`: + +- **Diminishing Returns**: Performance degrades as the number of documents (K) increases, sometimes performing worse than basic retrievers when dealing with large datasets. +- **Poor Document Discrimination**: Rerankers can be misled by irrelevant documents, sometimes assigning high scores to content with minimal relevance to the query. +- **Consistency Issues**: Performance and relative rankings between different rerankers can vary significantly depending on the number of documents being processed. + +### Will RAGs exist in the future? + +This question is posed as we contrast RAGs with LLMs with long-context windows (LCs). + +Recent research has shed light on this specific point {cite}`li2024retrievalaugmentedgenerationlongcontext` suggesting a trade-off between cost and performance. On the one hand, RAGs can be seen as a cost-effective alternative to LC models: +* RAGs offer lower computational cost compared to LCs due to the significantly shorter input length required for processing. +* This cost-efficiency arises because RAG reduces the number of input tokens to LLMs, which in turn reduces overall usage cost. + +On the other hand, this RAG benefit is achieved at the cost of performance: +* Recent advancements in LLMs, in particular with Gemini-1.5 and GPT-4o models, demonstrate capabilities in understanding long contexts directly, which enables them to outperform RAG in terms of average performance. +* LC models can process extremely long contexts, such as Gemini 1.5 which can handle up to 1 million tokens, and these models benefit from large-scale pretraining to develop strong long-context capabilities. + +This cost-performance trade-off is illustrated in {numref}`LC`, where LC models outperform RAGs in terms of average performance while RAGs are more cost-effective. + +```{figure} ../_static/input/LC.png +--- +name: LC +alt: Long-Context LLMs for Superior Performance +scale: 50% +align: center +--- +Long-Context LLMs demonstrate superior performance while RAGs are more cost-effective {cite}`li2024retrievalaugmentedgenerationlongcontext`. +``` + +{numref}`LC` also shows a model called "SELF-ROUTE" which combines RAG and LC by routing queries based on model self-reflection. This is a hybrid approach that reduces computational costs while maintaining performance comparable to LC. The advantage of SELF-ROUTE is most significant for smaller values of *k*, where *k* is the number of retrieved text chunks, and SELF-ROUTE shows a marked improvement in performance over RAG, while as k increases the performance of RAG and SELF-ROUTE approaches that of LC. + +Another example of a hybrid approach that combines the benefits of both LC and RAGs is RetroLLM {cite}`li2024retrollmempoweringlargelanguage`, which is a unified framework that integrates retrieval and generation into a single process, enabling language models to generate fine-grained evidence directly from a corpus. The key contribution is that this approach delivers those benefits while eliminating the need for a separate retriever, addressing limitations of traditional RAG methods. Experimental results demonstrate RetroLLM's superior performance compared to traditional RAG methods, across both in-domain and out-of-domain tasks. It also achieves a significant reduction in token consumption due to its fine-grained evidence retrieval. + +CAG {cite}`chan2024dontragcacheaugmentedgeneration` is another solution that eliminates the need for RAGs as it proposes cache-augmented generation (CAG). CAG preloads all relevant data into a large language model's extended context window, eliminating the need for real-time retrieval and improving speed and accuracy. This is achieved by precomputing a key-value cache, further optimizing inference time. CAG demonstrates superior performance compared to RAG by achieving higher BERT scores in most evaluated scenarios, indicating better answer quality, and by having significantly reduced generation times. These results suggest that CAG can be both more accurate and more efficient than traditional RAG systems. + +Another relevant development in this area is the introduction of LOFT {cite}`lee2024longcontextlanguagemodelssubsume`, a benchmark to assess this paradigm shift from RAGs to LCs, using real-world tasks requiring context up to millions of tokens. Evidence suggests LCs can deliver performance with simplified pipelines compared to RAGs, particularly for tasking requiring multi-hop reasoning over long contexts when using Chain-of-Thought {cite}`wei2023chainofthoughtpromptingelicitsreasoning`. However, LCs can still be outperformed by specialized retrievers, in particular Gecko, a specialized model fine-tuned on extensive text retrieval and similarity tasks. + +Bottom-line: Do we really need RAGs? The answer is conditional: + +* **RAG may be relevant when cost-effectiveness is a key requirement** and where the model needs to access vast amounts of external knowledge without incurring high computational expenses. However, as LLMs context window sizes increase and LLMs cost per input token decreases, RAGs may not be as relevant as it was before. +* **Long-context LLMs are superior when performance is the primary concern**, and the model needs to handle extensive texts that require deep contextual understanding and reasoning. +* **Hybrid approaches like SELF-ROUTE are valuable as they combine the strengths of RAG and LC** offering a practical balance between cost and performance, especially for applications where both factors are critical. + +Ultimately, the choice among RAG, LC, or a hybrid method depends on the specific requirements of the task, available resources, and the acceptable trade-off between cost and performance. + +In a later case study, we demonstrate the power of LCs as we construct a Quiz generator with citations over a large knowledge base without the use of chunking nor RAGs. + + +## A Note on Frameworks + +We have covered a few open source tools for parsing data and provided a canonical RAG pipeline directly using an open source VectorDB together with an LLM. There is a growing number of frameworks that offer similar functionality wrapping the same core concepts at a higher level of abstraction. The two most popular ones are `Langchain` and `LlamaIndex`. + +For instance, the code below shows how to use `LlamaIndex`'s `LlamaParse` for parsing input documents, which offers support for a wide range of file formats (e.g. .pdf, .pptx, .docx, .xlsx, .html). We observe that the code is very similar to the one we used for `MarkitDown` and `Docling`. + +```python +from llama_parse import LlamaParse + +# Initialize the parser +parser = LlamaParse( + api_key="llx-your-api-key-here", + result_type="markdown", # Can be "markdown" or "text" + verbose=True +) + +documents = parser.load_data(["./doc1.pdf", "./doc2.pdf"]) +``` + +As another example, the code below replicates our ChromaDB-based retrieval system using `LlamaIndex` {cite}`llamaindex2024storing`. + +As we can see, similar concepts are used: +- Documents to represent elements of the knowledge base +- Collections to store the documents +- Indexing of embeddings in the VectorDB and finally +- Querying the VectorDB to retrieve the documents + + +```python +import chromadb +from llama_index.core import VectorStoreIndex, SimpleDirectoryReader +from llama_index.vector_stores.chroma import ChromaVectorStore +from llama_index.core import StorageContext + +# load some documents +documents = SimpleDirectoryReader("./data").load_data() + +# initialize client, setting path to save data +db = chromadb.PersistentClient(path="./chroma_db") + +# create collection +chroma_collection = db.get_or_create_collection("tamingllms") + +# assign chroma as the vector_store to the context +vector_store = ChromaVectorStore(chroma_collection=chroma_collection) +storage_context = StorageContext.from_defaults(vector_store=vector_store) + +# create your index +index = VectorStoreIndex.from_documents( + documents, storage_context=storage_context +) + +# create a query engine and query +query_engine = index.as_query_engine() +response = query_engine.query("Who is the author of Taming LLMs?") +print(response) + +Frameworks are useful for quickly prototyping RAG systems and for building applications on top of them as they provide a higher level of abstraction and integration with third-party libraries. However, the underlying concepts are the same as the ones we have covered in this chapter. More often than not, problems arise when developers either do not understand the underlying concepts or fail to understand the details of the implement behind the abstractions provided by the framework. Therefore, it is recommended to try and start your implementation using lower level tools as much as possible and only when (i) the underlying problem as well as (ii) the desired solution are well understood, then consider moving to higher level frameworks if really needed. + +## Case Studies + +This section presents two case studies to complement topics we have covered in this chapter in the context of managing input data for LLMs. + +First, we cover content chunking, in particular Content Chunking with Contextual Linking which showcases how intelligent chunking strategies can overcome both context window and output token limitations. This case study illustrates techniques for breaking down and reassembling content while maintaining coherence, enabling the generation of high-quality long-form outputs despite model constraints. + +Second, we build a Quiz generator with citations using long context window. Not all knowledge intense applications require RAGs. In this case study, we show how to use long context window as well as some additional input management techniques such as prompt caching for efficiency and reference management to enhance response accuracy and verifiability. These approaches show how to maximize the benefits of larger context models while maintaining response quality. + +(chunking)= +### Case Study I: Content Chunking with Contextual Linking + +Content chunking is commonly used to breakdown long-form content into smaller, manageable chunks. In the context of RAGs, this can be helpful not only to help the retrieval system find more contextually relevant documents but also lead to a more cost efficient LLM solution since fewer tokens are processed in the context window. Furthermore, semantic chunking can increase accuracy of RAG systems {cite}`zenml2024rag`. + +Content chunking with contextual linking is a chunking technique that seeks to split input content while keeping chunk-specific context, hence allowing the LLM to maintain coherence and context when generating responses per chunks. In that way, this technique tackles two key problems: +1. The LLM's inability to process long inputs to do context-size limits +2. The LLM's inability to maintain coherence and context when generating responses per chunks + +As a consequence, a third problem is also tackled: LLM's inability to generate long-form content due to the `max_output_tokens` limitation. Since we generate responses per chunk, as we will see later, we end up with a solution that is capable of generating long-form content while maintaining coherence. + +We exemplify this technique by following these steps: +1. **Chunking the Content**: The input content is split into smaller chunks. This allows the LLM to process each chunk individually, focusing on generating a complete and detailed response for that specific section of the input. + +2. **Maintaining Context**: Each chunk is linked with contextual information from the previous chunks. This helps in maintaining the flow and coherence of the content across multiple chunks. + +3. **Generating Linked Prompts**: For each chunk, a prompt is generated that includes the chunk's content and its context. This prompt is then used to generate the output for that chunk. + +4. **Combining the Outputs**: The outputs of all chunks are combined to form the final long-form content. + +Let's examine an example implementation of this technique. + +#### Generating long-form content + +- Goal: Generate a long-form report analyzing a company's financial statement. +- Input: A company's 10K SEC filing. + +```{figure} ../_static/structured_output/diagram1.png +--- +name: content-chunking-with-contextual-linking +alt: Content Chunking with Contextual Linking +scale: 50% +align: center +--- +Content Chunking with Contextual Linking Schematic Representation. +``` + +The diagram in {numref}`content-chunking-with-contextual-linking` illustrates the process we will follow for handling long-form content generation with Large Language Models through "Content Chunking with Contextual Linking." It shows how input content is first split into manageable chunks using a chunking function (e.g. `CharacterTextSplitter` with `tiktoken` tokenizer), then each chunk is processed sequentially while maintaining context from previous chunks. For each chunk, the system updates the context, generates a dynamic prompt with specific parameters, makes a call to the LLM chain, and stores the response. After all chunks are processed, the individual responses are combined with newlines to create the final report, effectively working around the token limit constraints of LLMs while maintaining coherence across the generated content. + +**Step 1: Chunking the Content** + +There are different methods for chunking, and each of them might be appropriate for different situations. However, we can broadly group chunking strategies in two types: +- **Fixed-size Chunking**: This is the most common and straightforward approach to chunking. We simply decide the number of tokens in our chunk and, optionally, whether there should be any overlap between them. In general, we will want to keep some overlap between chunks to make sure that the semantic context doesn’t get lost between chunks. Fixed-sized chunking may be a reasonable path in many common cases. Compared to other forms of chunking, fixed-sized chunking is computationally cheap and simple to use since it doesn’t require the use of any specialied techniques or libraries. +- **Content-aware Chunking**: These are a set of methods for taking advantage of the nature of the content we’re chunking and applying more sophisticated chunking to it. Examples include: + - **Sentence Splitting**: Many models are optimized for embedding sentence-level content. Naturally, we would use sentence chunking, and there are several approaches and tools available to do this, including naive splitting (e.g. splitting on periods), NLTK, and spaCy. + - **Recursive Chunking**: Recursive chunking divides the input text into smaller chunks in a hierarchical and iterative manner using a set of separators. + - **Semantic Chunking**: This is a class of methods that leverages embeddings to extract the semantic meaning present in your data, creating chunks that are made up of sentences that talk about the same theme or topic. + + Here, we will utilize `langchain` for a content-aware sentence-splitting strategy for chunking. Langchain offers several text splitters {cite}`langchain_text_splitters` such as JSON-, Markdown- and HTML-based or split by token. We will use the `CharacterTextSplitter` with `tiktoken` as our tokenizer to count the number of tokens per chunk which we can use to ensure that we do not surpass the input token limit of our model. + + + +```python +def get_chunks(text: str, chunk_size: int, chunk_overlap: int) -> list: + """ + Split input text into chunks of specified size with specified overlap. + + Args: + text (str): The input text to be chunked. + chunk_size (int): The maximum size of each chunk in tokens. + chunk_overlap (int): The number of tokens to overlap between chunks. + + Returns: + list: A list of text chunks. + """ + from langchain_text_splitters import CharacterTextSplitter + + text_splitter = CharacterTextSplitter.from_tiktoken_encoder(chunk_size=chunk_size, chunk_overlap=chunk_overlap) + return text_splitter.split_text(text) + +``` + +**Step 2: Writing the Base Prompt Template** + +We will write a base prompt template which will serve as a foundational structure for all chunks, ensuring consistency in the instructions and context provided to the language model. The template includes the following parameters: +- `role`: Defines the role or persona the model should assume. +- `context`: Provides the background information or context for the task. +- `instruction`: Specifies the task or action the model needs to perform. +- `input_text`: Contains the actual text input that the model will process. +- `requirements`: Lists any specific requirements or constraints for the output. + + +```python +from langchain_core.prompts import PromptTemplate +def get_base_prompt_template() -> str: + + base_prompt = """ + ROLE: {role} + CONTEXT: {context} + INSTRUCTION: {instruction} + INPUT: {input} + REQUIREMENTS: {requirements} + """ + + prompt = PromptTemplate.from_template(base_prompt) + return prompt +``` + +We will write a simple function that returns an `LLMChain` which is a simple `langchain` construct that allows you to chain together a combination of prompt templates, language models and output parsers. + + +```python +from langchain_core.output_parsers import StrOutputParser +from langchain_community.chat_models import ChatLiteLLM + +def get_llm_chain(prompt_template: str, model_name: str, temperature: float = 0): + """ + Returns an LLMChain instance using langchain. + + Args: + prompt_template (str): The prompt template to use. + model_name (str): The name of the model to use. + temperature (float): The temperature setting for the model. + + Returns: + llm_chain: An instance of the LLMChain. + """ + + from dotenv import load_dotenv + import os + + # Load environment variables from .env file + load_dotenv() + + api_key_label = model_name.split("/")[0].upper() + "_API_KEY" + llm = ChatLiteLLM( + model=model_name, + temperature=temperature, + api_key=os.environ[api_key_label], + ) + llm_chain = prompt_template | llm | StrOutputParser() + return llm_chain +``` + +**Step 3: Constructing Dynamic Prompt Parameters** + +Now, we will write a function (`get_dynamic_prompt_template`) that constructs prompt parameters dynamically for each chunk. + + +```python +from typing import Dict +def get_dynamic_prompt_params(prompt_params: Dict, + part_idx: int, + total_parts: int, + chat_context: str, + chunk: str) -> str: + """ + Construct prompt template dynamically per chunk while maintaining the chat context of the response generation. + + Args: + prompt_params (Dict): Original prompt parameters + part_idx (int): Index of current conversation part + total_parts (int): Total number of conversation parts + chat_context (str): Chat context from previous parts + chunk (str): Current chunk of text to be processed + Returns: + str: Dynamically constructed prompt template with part-specific params + """ + dynamic_prompt_params = prompt_params.copy() + # saves the chat context from previous parts + dynamic_prompt_params["context"] = chat_context + # saves the current chunk of text to be processed as input + dynamic_prompt_params["input"] = chunk + + # Add part-specific instructions + if part_idx == 0: # Introduction part + dynamic_prompt_params["instruction"] = f""" + You are generating the Introduction part of a long report. + Don't cover any topics yet, just define the scope of the report. + """ + elif part_idx == total_parts - 1: # Conclusion part + dynamic_prompt_params["instruction"] = f""" + You are generating the last part of a long report. + For this part, first discuss the below INPUT. Second, write a "Conclusion" section summarizing the main points discussed given in CONTEXT. + """ + else: # Main analysis part + dynamic_prompt_params["instruction"] = f""" + You are generating part {part_idx+1} of {total_parts} parts of a long report. + For this part, analyze the below INPUT. + Organize your response in a way that is easy to read and understand either by creating new or merging with previously created structured sections given in CONTEXT. + """ + + return dynamic_prompt_params +``` + + +**Step 4: Generating the Report** + +Finally, we will write a function that generates the actual report by calling the `LLMChain` with the dynamically updated prompt parameters for each chunk and concatenating the results at the end. + + +```python +def generate_report(input_content: str, llm_model_name: str, + role: str, requirements: str, + chunk_size: int, chunk_overlap: int) -> str: + # stores the parts of the report, each generated by an individual LLM call + report_parts = [] + # split the input content into chunks + chunks = get_chunks(input_content, chunk_size, chunk_overlap) + # initialize the chat context with the input content + chat_context = input_content + # number of parts to be generated + num_parts = len(chunks) + + prompt_params = { + "role": role, # user-provided + "context": "", # dinamically updated per part + "instruction": "", # dynamically updated per part + "input": "", # dynamically updated per part + "requirements": requirements #user-priovided + } + + # get the LLMChain with the base prompt template + llm_chain = get_llm_chain(get_base_prompt_template(), + llm_model_name) + + # dynamically update prompt_params per part + print(f"Generating {num_parts} report parts") + for i, chunk in enumerate(chunks): + dynamic_prompt_params = get_dynamic_prompt_params( + prompt_params, + part_idx=i, + total_parts=num_parts, + chat_context=chat_context, + chunk=chunk + ) + + # invoke the LLMChain with the dynamically updated prompt parameters + response = llm_chain.invoke(dynamic_prompt_params) + + # update the chat context with the cummulative response + if i == 0: + chat_context = response + else: + chat_context = chat_context + response + + print(f"Generated part {i+1}/{num_parts}.") + report_parts.append(response) + + report = "\n".join(report_parts) + return report +``` + +**Example Usage** + + + +```python +# Load the text from sample 10K SEC filing +with open('../data/apple.txt', 'r') as file: + text = file.read() +``` + + +```python +# Define the chunk and chunk overlap size +MAX_CHUNK_SIZE = 10000 +MAX_CHUNK_OVERLAP = 0 +``` + + +```python +report = generate_report(text, llm_model_name="gemini/gemini-1.5-flash-latest", + role="Financial Analyst", + requirements="The report should be in a readable, structured format, easy to understand and follow. Focus on finding risk factors and market moving insights.", + chunk_size=MAX_CHUNK_SIZE, + chunk_overlap=MAX_CHUNK_OVERLAP) +``` + + +```python +# Save the generated report to a local file +with open('data/apple_report.txt', 'w') as file: + file.write(report) + +``` + + +```python +# Read and display the generated report +with open('../data/apple_report.txt', 'r') as file: + report_content = file.read() + +from IPython.display import Markdown + +# Display first and last 10% of the report content +report_lines = report_content.splitlines() +total_lines = len(report_lines) +quarter_lines = total_lines // 10 + +top_portion = '\n'.join(report_lines[:quarter_lines]) +bottom_portion = '\n'.join(report_lines[-quarter_lines:]) + +display(Markdown(f"{top_portion}\n\n (...) \n\n {bottom_portion}")) + +``` + + +**Introduction** + +This report provides a comprehensive analysis of Apple Inc.'s financial performance and position for the fiscal year ended September 28, 2024, as disclosed in its Form 10-K filing with the United States Securities and Exchange Commission. The analysis will focus on identifying key risk factors impacting Apple's business, evaluating its financial health, and uncovering market-moving insights derived from the provided data. The report will delve into Apple's various segments, product lines, and services, examining their performance and contributions to overall financial results. Specific attention will be paid to identifying trends, potential challenges, and opportunities for future growth. The analysis will also consider the broader macroeconomic environment and its influence on Apple's operations and financial outlook. Finally, the report will incorporate relevant information from Apple's definitive proxy statement for its 2025 annual meeting of shareholders, as incorporated by reference in the Form 10-K. + +**PART 2: Key Risk Factors and Market-Moving Insights** + +This section analyzes key risk factors disclosed in Apple Inc.'s 2024 Form 10-K, focusing on their potential impact on financial performance and identifying potential market-moving insights. The analysis is structured around the major risk categories identified in the filing. + +**2.1 Dependence on Third-Party Developers:** + +Apple's success is heavily reliant on the continued support and innovation of third-party software developers. The Form 10-K highlights several critical aspects of this dependence: + +* **Market Share Vulnerability:** Apple's relatively smaller market share in smartphones, personal computers, and tablets compared to competitors (Android, Windows, gaming consoles) could discourage developers from prioritizing Apple's platform, leading to fewer high-quality apps and potentially impacting customer purchasing decisions. This is a significant risk, especially given the rapid pace of technological change. A decline in app availability or quality could negatively impact sales and market share. **Market-moving insight:** Monitoring developer activity and app quality across competing platforms is crucial for assessing this risk. Any significant shift in developer focus away from iOS could be a negative market signal. + +* **App Store Dynamics:** While Apple allows developers to retain most App Store revenue, its commission structure and recent changes (e.g., complying with the Digital Markets Act (DMA) in the EU) introduce uncertainty. Changes to the App Store's policies or fee structures could materially affect Apple's revenue and profitability. **Market-moving insight:** Closely monitoring regulatory developments (especially concerning the DMA) and their impact on App Store revenue is essential. Any significant changes to Apple's App Store policies or revenue streams could trigger market reactions. + +* **Content Acquisition and Creation:** Apple's reliance on third-party digital content providers for its services introduces risks related to licensing agreements, competition, and pricing. The cost of producing its own digital content is also increasing due to competition for talent and subscribers. Failure to secure or create appealing content could negatively impact user engagement and revenue. **Market-moving insight:** Analyzing the success of Apple's original content initiatives and the renewal rates of third-party content agreements will provide insights into this risk. + +**2.2 Operational Risks:** + + + (...) + + The reconciliation of segment operating income to consolidated operating income reveals that research and development (R&D) and other corporate expenses significantly impact overall profitability. While increased R&D is generally positive, it reduces short-term profits. The geographical breakdown of net sales and long-lived assets further emphasizes the concentration of Apple's business in the U.S. and China. **Market-moving insight:** Continued weakness in the Greater China market, sustained flat iPhone sales, or any significant changes in R&D spending should be closely monitored for their potential impact on Apple's financial performance and investor sentiment. + + +**5.4 Auditor's Report and Internal Controls:** + +The auditor's report expresses an unqualified opinion on Apple's financial statements and internal control over financial reporting. However, it identifies uncertain tax positions as a critical audit matter. The significant amount of unrecognized tax benefits ($22.0 billion) and the complexity involved in evaluating these positions highlight a substantial risk. Management's assessment of these positions involves significant judgment and relies on interpretations of complex tax laws. Apple's management also asserts that its disclosure controls and procedures are effective. **Market-moving insight:** Any changes in tax laws, unfavorable rulings on uncertain tax positions, or weaknesses in internal controls could materially affect Apple's financial results and investor confidence. + + +**Conclusion** + +This report provides a comprehensive analysis of Apple Inc.'s financial performance and position for fiscal year 2024. While Apple maintains a strong financial position with substantial cash reserves and a robust capital return program, several key risk factors could significantly impact its future performance. These risks include: + +* **Dependence on third-party developers:** A shift in developer focus away from iOS or changes to the App Store's policies could negatively impact Apple's revenue and profitability. +* **Operational risks:** Employee retention challenges, reseller dependence, and cybersecurity threats pose significant operational risks. +* **Legal and regulatory risks:** Ongoing antitrust litigation, the Digital Markets Act (DMA) compliance, and data privacy regulations introduce substantial legal and regulatory uncertainties. +* **Financial risks:** Volatility in sales and profit margins, foreign exchange rate fluctuations, credit risk, and tax risks could impact Apple's financial performance. +* **Supply chain concentration:** Apple's reliance on a concentrated network of outsourcing partners, primarily located in a few Asian countries, and dependence on single or limited sources for certain custom components, exposes the company to significant supply chain risks. +* **Uncertain tax positions:** The significant amount of unrecognized tax benefits represents a substantial uncertainty that could materially affect Apple's financial results. + +Despite these risks, Apple's strong liquidity position, continued growth in its Services segment, and robust capital return program provide a degree of resilience. However, investors and analysts should closely monitor the market-moving insights identified throughout this report, including developer activity, regulatory developments, regional economic conditions, supply chain stability, and the resolution of uncertain tax positions, to assess their potential impact on Apple's future performance and valuation. The significant short-term obligations, while manageable given Apple's cash position, highlight the need for continued financial discipline and effective risk management. A deeper, more granular analysis of the financial statements and notes is recommended for a more complete assessment. + + +--- + +#### Discussion + +Results from the generated report present a few interesting aspects: + +- **Coherence**: The generated report demonstrates an apparent level of coherence. The sections are logically structured, and the flow of information is smooth. Each part of the report builds upon the previous sections, providing a comprehensive analysis of Apple Inc.'s financial performance and key risk factors. The use of headings and subheadings helps in maintaining clarity and organization throughout the document. + +- **Adherence to Instructions**: The LLM followed the provided instructions effectively. The report is in a readable, structured format, and it focuses on identifying risk factors and market-moving insights as requested. The analysis is detailed and covers various aspects of Apple's financial performance, including revenue segmentation, profitability, liquidity, and capital resources. The inclusion of market-moving insights adds value to the report, aligning with the specified requirements. + +Despite the seemingly good quality of the results, there are some limitations to consider: + +- **Depth of Analysis**: While the report covers a wide range of topics, the depth of analysis in certain sections may not be as comprehensive as a human expert's evaluation. Some nuances and contextual factors might be overlooked by the LLM. Splitting the report into multiple parts helps in mitigating this issue. + +- **Chunking Strategy**: The current approach splits the text into chunks based on size, which ensures that each chunk fits within the model's token limit. However, this method may disrupt the logical flow of the document, as sections of interest might be split across multiple chunks. An alternative approach could be "structured" chunking, where the text is divided based on meaningful sections or topics. This would preserve the coherence of each section, making it easier to follow and understand. Implementing structured chunking requires additional preprocessing to identify and segment the text appropriately, but it can significantly enhance the readability and logical flow of the generated report. + +Here, we implemented a simple strategy to improve the coherence in output generation given a multi-part chunked input. Many other strategies are possible. One related technique worth mentioning is Anthropic's Contextual Retrieval {cite}`anthropic2024contextualretrieval`. The approach, as shown in {numref}`anth_contextual`, employs an LLM itself to generate relevant context per chunk before passing these two pieces of information together to the LLM. This process was proposed in the context of RAGs to enhance its retrieval capabilities but can be applied more generally to improve output generation. +```{figure} ../_static/input/anth_contextual.png +--- +name: anth_contextual +alt: Anthropic Contextual Linking +scale: 50% +align: center +--- +Anthropic Contextual Linking {cite}`anthropic2024contextualretrieval`. +``` + +### Case Study II: Quiz Generation with Citations + +In this case study, we will build a Quiz generator with citations that explores additional input management techniques particularly useful with long context windows. The implementation includes prompt caching for efficiency and citation tracking to enhance accuracy and verifiability. We will use Gemini 1.5 Pro as our LLM model, which has a context window of 2M tokens. + +#### Use Case + +Let's assume you are a Harvard student enrolled in GOV 1039 "The Birth of Modern Democracy" (see {numref}`harvard-class`), you face a daunting reading list for next Tuesday's class on Rights. The readings include foundational documents like the Magna Carta, Declaration of Independence, and US Bill of Rights, each with specific sections to analyze. + +```{figure} ../_static/input/harvard.png +--- +name: harvard-class +alt: Harvard Class +scale: 50% +align: center +--- +Harvard's Democratic Theory Class +``` + +Instead of trudging through these dense historical texts sequentially, we would like to: +- Extract key insights and connections between these documents, conversationally. +- Engage with the material through a quiz format. +- Add citations to help with verifying answers. + + +#### Implementation + +The full implementation is available at Book's [Github repository](https://github.com/souzatharsis/tamingLLMs/tamingllms/notebooks/src/gemini_duo.py). Here, we will cover the most relevant parts of the implementation. + +**Client Class** + +First, we will define the `Client` class which will provide the key interface users will interact with. It has the following summarized interface: + +- Initialization: + - `__init__(knowledge_base: List[str] = [])`: Initialize with optional list of URLs as knowledge base + +- Core Methods: + - `add_knowledge_base(urls: List[str]) -> None`: Add URLs to the knowledge base + - `add(urls: List[str]) -> None`: Extract content from URLs and add to conversation input + - `msg(msg: str = "", add_citations: bool = False) -> str`: Enables users to send messages to the client + - `quiz(add_citations: bool = True, num_questions: int = 10) -> str`: Generate a quiz based on full input memory + +- Key Attributes: + - `knowledge_base`: List of URLs providing foundation knowledge + - `input`: Current input being studied (short-term memory) + - `input_memory`: Cumulative input + knowledge base (long-term memory) + - `response`: Latest response from LLM + - `response_memory`: Cumulative responses (long-term memory) + - `urls_memory`: Cumulative list of processed URLs + + +**Corpus-in-Context Prompting** + +The `add()` method is key since it is used to add content to the client. It takes a list of URLs and extracts the content from each URL using a content extractor (using MarkitDown). The content is then added to the conversation input memory in a way that enables citations using the "Corpus-in-Context" (CIC) Prompting {cite}`lee2024longcontextlanguagemodelssubsume`. + +{numref}`cic` shows how CIC format is used to enable citations. It inserts a corpus into the prompt. Each candidate citable part (e.g., passage, chapter) in a corpus is assigned a unique identifier (ID) that can be referenced as needed for that task. + +```{figure} ../_static/input/cic.png +--- +name: cic +alt: CIC Format +scale: 50% +align: center +--- +Example of Corpus-in-Context Prompting for retrieval. +``` + +CiC prompting leverages LLM's capacity to follow instructions by carefully annotating the corpus with document IDs. It benefits from a strong, capable models to retrieve over large corpora provided in context. + +```python + def add(self, urls: List[str]) -> None: + self.urls = urls + + # Add new content to input following CIC format to enable citations + for url in urls: + self.urls_memory.append(url) + content = self.extractor.convert(url).text_content + formatted_content = f"ID: {self.reference_id} | {content} | END ID: {self.reference_id}" + self.input += formatted_content + "\n" + self.reference_id += 1 + + # Update memory + self.input_memory = self.input_memory + self.input +``` + +The method `add_knowledge_base()` is a simple wrapper around the `add()` method. It is used to add URLs to the knowledge base, which are later cached by the LLM model as we will see later. + +```python + def add_knowledge_base(self, urls: List[str]) -> None: + self.add(urls) +``` + + +Later, when the user sends a message to the client, the `msg()` method is used to generate a response while enabling citations. `self.content_generator` is an instance of our LLM model, which we will go through next. + +```python + def msg(self, msg: str = "", add_citations: bool = False) -> str: + if add_citations: + msg = msg + "\n\n For key statements, add Input ID to the response." + + self.response = self.content_generator.generate( + input_content=self.input, + user_instructions=msg + ) + + self.response_memory = self.response_memory + self.response.text + + return self.response.text +``` + +**Prompt Caching** + +LLM-based applications often involve repeatedly passing the same input tokens to a model, which can be inefficient and costly. Context caching addresses this by allowing you to cache input tokens after their first use and reference them in subsequent requests. This approach significantly reduces costs compared to repeatedly sending the same token corpus, especially at scale. + +In our application, the user might passes a large knowledge base to the client that can be referenced multiple times by smaller user requests. Our `Client` class is composed of a `LLMBackend` class that takes the `input_memory` containing the entire knowledge base and any additional user added content. +```python +self.llm = LLMBackend(input=self.input_memory) +``` + +In our `LLMBackend` Class, we leverage prompt caching on input tokens and uses them for subsequent requests. + +```python +class LLMBackend: + def __init__(self, model_name: str, input: str, cache_ttl: int = 60): + self.cache = caching.CachedContent.create( + model=model_name, + display_name='due_knowledge_base', # used to identify the cache + system_instruction=( + self.compose_prompt(input, conversation_config) + ), + ttl=datetime.timedelta(minutes=cache_ttl), + ) + + self.model = genai.GenerativeModel.from_cached_content(cached_content=self.cache) +``` + +**Quiz Generation** + +Coming back to our `Client` class, we implement the `quiz()` method to generate a quiz based on the full input memory, i.e. the initial knowledge base and any additional user added content. + +The `quiz()` method returns a `Quiz` instance which behind the scenes caches input tokens. The user later can invoke its `generate()` method to generate a quiz passing the user instructions in `msg` parameter, as we will see later. + +```python + def quiz(self, add_citations: bool = True, num_questions: int = 10) -> str: + """ + Returns a quiz instance based on full input memory. + """ + self.quiz_instance = Quiz( + input=self.input_memory, + add_citations=add_citations, + num_questions=num_questions) + return self.quiz_instance +``` + +We write a simple prompt template for quiz generation: + +> ROLE: +> - You are a Harvard Professor providing a quiz. +> INSTRUCTIONS: +> - Generate a quiz with {num_questions} questions based on the input. +> - The quiz should be multi-choice. +> - Answers should be provided at the end of the quiz. +> - Questions should have broad coverage of the input including multiple Input IDs. +> - Level of difficulty is advanced/hard. +> - `{citations}` +> +> STRUCTURE: +> - Sequence of questions and alternatives. +> - At the end provide the correct answers. + +where, `{citations}` instructs the model to add CiC citations to the response if user requests it. + +#### Example Usage + + +**Dataset** + +First, we will define our knowledge base. + +- Harvard Class: [GOV 1039 Syllabus](https://scholar.harvard.edu/files/dlcammack/files/gov_1039_syllabus.pdf) +- Class / Topic: "Rights" +- Reading List: + - ID 1. The Declaration of Independence of the United States of America + - ID 2. The United States Bill of Rights + - ID 3. John F. Kennedy's Inaugural Address + - ID 4. Lincoln's Gettysburg Address + - ID 5. The United States Constitution + - ID 6. Give Me Liberty or Give Me Death + - ID 7. The Mayflower Compact + - ID 8. Abraham Lincoln's Second Inaugural Address + - ID 9. Abraham Lincoln's First Inaugural Address + +We will take advantage of Project Gutenberg's to create our knowledge base. + + +```python +kb = [f"https://www.gutenberg.org/cache/epub/{i}/pg{i}.txt" for i in range(1,9)] +``` + +We will import our module `gemini_duo` as `genai_duo` and initialize the `Client` class with our knowledge base. + + +```python +import gemini_duo as genai_duo +from IPython.display import Markdown, display +``` + + +```python +duo = genai_duo.Client(knowledge_base=kb) +``` + +At this point, we converted each book into markdown using MarkitDown and cached the content in our LLM model. We can access how many tokens we have cached in our LLM model by looking at the `usage_metadata` attribute of the Gemini's model response. At this point, we have cached at total of 38470 tokens. + +Now, we can add references to our knowledge base at anytime by calling the `add()` method. We add the following references: +1. The Magna Carta +2. William Shap McKechnie on Magna Carta book + + +```python +study_references = ["https://www.gutenberg.org/cache/epub/10000/pg10000.txt", "https://www.gutenberg.org/cache/epub/65363/pg65363.txt"] + +duo.add(study_references) +``` + +Now we can instantiate a `Quiz` object and generate a quiz based on the full input memory. + + +```python +quiz = duo.quiz(add_citations=True) +display(Markdown(quiz.generate())) +``` + +{numref}`quiz` shows a sample quiz with citations. Marked in yellow are the citations which refer to the input IDs of the resources we added to the model. + +```{figure} ../_static/input/quiz.png +--- +name: quiz +alt: Quiz with Citations +scale: 50% +align: center +--- +Sample Quiz with Citations. +``` + + +#### Discussion + +The experiment demonstrated the ability to build a knowledge base from multiple sources while leveraging prompt caching for efficiency and generate quizzes with citations for verifiability. The system successfully ingested content from Project Gutenberg texts, including historical documents like the Magna Carta, and used them to create interactive educational content. + +However, several limitations emerged during this process: + +1. Memory Management: The system currently loads all content into memory, which could become problematic with larger knowledge bases. A more scalable approach might involve chunking or streaming the content. + +2. Citation Quality: While the system provides citations, they lack specificity - pointing to entire documents rather than specific passages or page numbers. This limits the ability to fact-check or verify specific claims. + +3. Content Verification: While citations are provided, the system is not guaranteed to provide factual information. This could lead to potential hallucinations or misinterpretations. + +While limitations are present in this simple example, the case study highlights that not always complex systems are needed. Alternative simple strategies should be preferred when possible, particularly if capable, long-context window models are available and fit within the application requirements. + + +## Conclusion + +This chapter has explored critical strategies and techniques for managing input data in LLM applications, focusing on three key areas: data parsing, retrieval augmentation, and practical implementation patterns. We examined how parsing tools like MarkItDown and Docling can transform diverse data formats into LLM-compatible representations, demonstrating through case studies how parser quality can impact LLM performance. The chapter also investigated retrieval augmentation techniques, particularly RAG systems, showing how they can enhance LLM capabilities by providing access to external knowledge while discussing their future relevance in the context of emerging long-context language models. + +Through our case studies, we demonstrated practical approaches to handling common challenges in LLM applications. The Content Chunking with Contextual Linking case study illustrated techniques for managing long-form content generation while maintaining coherence across chunks. The Quiz Generation with Citations case study showcased how long-context windows can be effectively utilized without the need for complex retrieval systems, highlighting the importance of choosing the right approach based on specific application requirements rather than defaulting to more complex solutions. + +As the field continues to evolve, the choice between traditional RAG systems and emerging long-context models will likely become increasingly nuanced. While RAGs offer cost-effective solutions for incorporating external knowledge, the rise of long-context models suggests a future where simpler architectures might suffice for many applications. The key insight is that effective input data management requires careful consideration of trade-offs among complexity, cost, and performance, always guided by specific application requirements rather than following a one-size-fits-all approach. Success in building robust LLM applications will depend on understanding these trade-offs and selecting appropriate strategies for each use case. + +[![CC BY-NC-SA 4.0][cc-by-nc-sa-image]][cc-by-nc-sa] + +[cc-by-nc-sa]: http://creativecommons.org/licenses/by-nc-sa/4.0/ +[cc-by-nc-sa-image]: https://licensebuttons.net/l/by-nc-sa/4.0/88x31.png +[cc-by-nc-sa-shield]: https://img.shields.io/badge/License-CC-BY--NC--SA-4.0-lightgrey.svg + +``` +@misc{tharsistpsouza2024tamingllms, + author = {Tharsis T. P. Souza}, + title = {Taming LLMs: A Practical Guide to LLM Pitfalls with Open Source Software}, + year = {2024}, + chapter = {Managing Input Data}, + journal = {GitHub repository}, + url = {https://github.com/souzatharsis/tamingLLMs) +} +``` +## References +```{bibliography} +:filter: docname in docnames +``` + + diff --git a/tamingllms/notebooks/input.ipynb b/tamingllms/notebooks/input.ipynb index 8397a78..91a2aa0 100644 --- a/tamingllms/notebooks/input.ipynb +++ b/tamingllms/notebooks/input.ipynb @@ -21,22 +21,22 @@ "source": [ "## Introduction\n", "\n", - "While advances in long-context language models (LCs) {cite}`lee2024longcontextlanguagemodelssubsume` have expanded the amount of information these systems can process, significant challenges remain in managing and effectively utilizing extended data inputs:\n", + "While advances in long-context language models (LCs) {cite}`lee2024longcontextlanguagemodelssubsume` have expanded the amount of information these LLMs can process, significant challenges remain in managing and effectively utilizing extended data inputs:\n", "\n", "- LLMs are sensitive to input formatting and structure, requiring careful data preparation to achieve optimal results {cite}`he2024doespromptformattingimpact, liu2024enhancingllmscognitionstructurization, tan2024htmlraghtmlbetterplain`.\n", - "- They operate with knowledge cutoffs, providing potentially stale or outdated information that may not reflect current reality and demonstrate problems with temporal knowledge accuracy {cite}`amayuelas-etal-2024-knowledge`.\n", + "- LLMs operate with knowledge cutoffs, providing potentially outdated information that may not reflect current reality and demonstrate problems with temporal knowledge accuracy {cite}`amayuelas-etal-2024-knowledge`.\n", "- LLMs also face \"lost-in-the-middle\" problems {cite}`wu2024longdocumentsummaryevaluation` and struggle with less common but important information showing a systematic loss of long-tail knowledge {cite}`kotha2024understanding`.\n", "\n", "Motivated by these challenges, this chapter explores two key input data components:\n", "\n", - "1. Data Parsing and Chunking: Parsing and chunking documents into a unified format that is suitable and more manageable for LLMs to process.\n", + "1. Data Pre-Processing: Parsing and chunking documents into a unified format that is suitable and manageable for LLMs to process effectively.\n", "2. Retrieval Augmentation: Augmenting LLMs with the ability to retrieve relevant, recent, and specialized information.\n", "\n", - "In data parsing, we will explore some useful open source tools that help transform data into LLM-compatible formats, demonstrating their impact through a case study of structured information extraction from complex PDFs. In a second case study, we will introduce some chunking strategies to help LLMs process long inputs and implement a particular technique called Chunking with Contextual Linking the enables contextually relevant chunk processing.\n", + "In data parsing, we will explore some useful open source tools such as Docling and MarkItDown that help transform data into LLM-compatible formats, demonstrating their impact through a case study of structured information extraction from complex PDFs. In a second case study, we will introduce some chunking strategies to help LLMs process long inputs and implement a particular technique called Chunking with Contextual Linking the enables contextually relevant chunk processing.\n", "\n", - "In retrieval augmentation, we will explore how to enhance LLMs with semantic search capabilities for incorporating external context using RAGs (Retrieval Augmented Generation) while discussing whether RAGs will be really needed in the future given the rise of long-context language models.\n", + "In retrieval augmentation, we will explore how to enhance LLMs with semantic search capabilities for incorporating external context using RAGs (Retrieval Augmented Generation) using Vector Databases such as ChromaDB. We also discuss whether RAGs will be really needed in the future given the rise of long-context language models.\n", "\n", - "While RAGs are useful for incorporating external context, they are not a silver bullet nor a mandatory component for all LLM applications. In our last case study, we leverage long-context windows to build a quiz generator from a large knowledge base. We will also explore some additional relevant techniques such as prompt caching and response verification through citations.\n", + "While RAGs are useful for incorporating external context, they are not a silver bullet nor a mandatory component for all LLM applications. In our last case study, we demonstrate how long-context windows can be used to extract insights from a large knowledge base without the need for complex retrieval systems. We build a quiz generator from open books from Project Gutenberg. We will also explore some additional relevant techniques such as prompt caching and response verification through citations using \"Corpus-in-Context\" (CIC) Prompting {cite}`lee2024longcontextlanguagemodelssubsume`.\n", "\n", "By the chapter's conclusion, readers will possess relevant knowledge of input data management strategies for LLMs and practical expertise in selecting and implementing appropriate approaches and tools for specific use cases." ] @@ -45,13 +45,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ + "(parsing)=\n", "## Parsing Documents\n", "\n", "Data parsing and formatting play a critical role in LLMs performance {cite}`he2024doespromptformattingimpact, liu2024enhancingllmscognitionstructurization, tan2024htmlraghtmlbetterplain`. Hence, building robust data ingestion and preprocessing pipelines is essential for any LLM application. \n", "\n", - "This section explores open source tools that streamline input data processing, in particular for parsing purposes, providing a unified interface for converting diverse data formats into standardized representations that LLMs can effectively process. By abstracting away format-specific complexities, they allow developers to focus on core application logic rather than parsing implementation details while maximizing the LLM performance.\n", + "This section explores open source tools that streamline input data processing, in particular for parsing purposes, providing a unified interface for converting diverse data formats into standardized representations that LLMs can effectively process. By abstracting away format-specific complexities, they allow developers to focus on core application logic rather than parsing implementation details while maximizing LLM's performance.\n", "\n", - "We will cover open source tools that provide parsing capabilities for a wide range of data formats. And we will demonstrate how some of these tools can be used to extract structured information from complex PDFs demonstrating how the quality of the parser can impact LLM's performance." + "We will cover open source tools that provide parsing capabilities for a wide range of data formats. And we will show how some of these tools can be used to extract structured information from complex PDFs demonstrating how the quality of the parser can impact LLM's performance." ] }, { @@ -60,7 +61,7 @@ "source": [ "### MarkItDown\n", "\n", - "MarkItDown {cite}`microsoft2024markitdown` is a Python package and CLI tool developed by the Microsoft AutoGen team for converting various file formats to Markdown. It supports a wide range of formats including PDF, PowerPoint, Word, Excel, images (with OCR and EXIF metadata), audio (with transcription), HTML, and other text-based formats making it a useful tool for document indexing and LLM-based applications.\n", + "MarkItDown {cite}`microsoft2024markitdown` is a Python package and CLI tool developed by the Microsoft for converting various file formats to Markdown. It supports a wide range of formats including PDF, PowerPoint, Word, Excel, images (with OCR and EXIF metadata), audio (with transcription), HTML, and other text-based formats making it a useful tool for document indexing and LLM-based applications.\n", "\n", "Key features:\n", "- Simple command-line and Python API interfaces\n", @@ -289,10 +290,10 @@ "---\n", "name: docling\n", "alt: Docling's result\n", - "scale: 60%\n", + "scale: 40%\n", "align: center\n", "---\n", - "Docling's parsed result\n", + "An extract of Docling's parsed result.\n", "```\n" ] }, @@ -323,10 +324,10 @@ "---\n", "name: markitdown\n", "alt: MarkItDown's parsed result\n", - "scale: 60%\n", + "scale: 40%\n", "align: center\n", "---\n", - "MarkItDown's parsed result\n", + "An extract of MarkItDown's parsed result.\n", "```" ] }, @@ -334,13 +335,13 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Now, let's focus on the economic forecasts. In particular, we are interested in extracting the CIO's 2025E forecasts.\n", + "Now, let's focus on the economic forecasts. In particular, we are interested in extracting the CIO's 2025E forecasts. This could be a useful predictive indicator for the economy in 2025.\n", "\n", "```{figure} ../_static/input/2025.png\n", "---\n", "name: forecast2025\n", "alt: Forecast 2025\n", - "scale: 45%\n", + "scale: 40%\n", "align: center\n", "---\n", "Merrill Lynch's CIO Economic Forecasts.\n", @@ -367,7 +368,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We write a simple function to extract the economic forecasts from the document using an LLM model (with structured output) with the following prompt template, where `extract_prompt` represents the kind of data the user would like to extract and `doc` is the input document to analyze." + "We write a simple function to extract the economic forecasts from the document using an LLM model (with structured output) with the following prompt template, where `extract_prompt` represents the kind of data the user would like to extract and `doc` is the input document." ] }, { @@ -674,7 +675,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Now, let's focus on the asset class weightings. We will extract the asset class weightings from the document and compare the results from MarkItDown and Docling. The information now is presented in a quite different structure as we can see in {ref}`asset_class`. The CIO view information is represented in a spectrum starting with \"Underweight\", passing through \"Neutral\" and reaching \"Overweight\". The actual view is marked by some colored dots in the chart. Let's see if we can extract this relatively more complex information from the document.\n", + "Next, let's focus on the asset class weightings. We will extract the asset class weightings from the document and compare the results from MarkItDown and Docling. The information is now presented in a quite different structure as we can see in {numref}`asset_class`. The CIO view information is represented in a spectrum starting with \"Underweight\", passing through \"Neutral\" and reaching \"Overweight\". The actual view is marked by some colored dots in the chart. Let's see if we can extract this relatively more complex information from the document.\n", "```{figure} ../_static/input/asset_class.png\n", "---\n", "name: asset_class\n", @@ -928,16 +929,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We observe that Docling performs significantly better at 93.33% accuracy missing only one value. MarkItDown achieves 53.33% accuracy struggling with nuanced asset class weightings. In this case, Docling's structured parsed output did help the LLM to extract the information more accurately compared to MarkItDown's unstructured output. Hence, in this case, the strategy used to parse the data did impact the LLM's ability to extract structured information. Having said that, it is important to mention that a more robust analysis would run data extraction on a large sample data a number of repeated runs to estimate error rates since results are non-deterministic." + "We observe that Docling performs significantly better at 93.33% accuracy missing only one value. MarkItDown achieves 53.33% accuracy struggling with nuanced asset class weightings. In this case, Docling's structured parsed output did help the LLM to extract the information more accurately compared to MarkItDown's unstructured output. Hence, in this case, the strategy used to parse the data did impact the LLM's ability to extract structured information. Having said that, it is important to mention that a more robust analysis would run data extraction on a larger sample data a number of times across repeated runs to estimate confidence intervals since results are non-deterministic." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "What if we want to systematically extract all tables from the document? We can use Docling to do that by simply accessing the `tables` attribute of the `DocumentConverter` object.\n", + "What if we wanted to systematically extract all tables from the document? We can use Docling to do that by simply accessing the `tables` attribute of the `DocumentConverter` object.\n", "\n", - "By doing that, we observe that Docling extracted 7 tables from the document exporting tables from top down and left to right in order of appearance in the document.\n", + "By doing that, we observe that Docling successfully extracted the seven tables from the document exporting tables from top down and left to right in order of appearance in the document.\n", "Below, we display the first two and the last tables. We can see the first table successfully extracted for Equities forecasts, the second one for Fixed Income forecasts as well as the last table, which contains CIO Equity Sector Views.\n" ] }, @@ -1588,11 +1589,11 @@ "Arguably, the description's inaccuracies could be a consequence of the underlying LLM model's inability to process the image.\n", "\n", "We have covered MarkitDown and Docling as examples of open source tools that can help developers parse input data into a suitable format to LLMs. Other relevant open source tools worth mentioning include:\n", - "- Unstructured.io {cite}`unstructured2024github`: A Python library for unstructured data extraction.\n", + "- Unstructured {cite}`unstructured2024github`: A Python library for unstructured data extraction.\n", "- FireCrawl {cite}`mendable2024firecrawl`: A Fast and Efficient Web Crawler for LLM Training Data.\n", "- LlamaParse {cite}`llamaparse2024github`: Llamaindex's data parsing solution.\n", "\n", - "The choice of tool depends on the specific requirements of the application and the nature of the input data. This choice should be taken as a critical decision of any data intensive LLM-based application and deserves dedicated research and evidence-based experimentation.\n" + "The choice of tool depends on the specific requirements of the application and the nature of the input data. This choice should be taken as a critical decision of any data intensive LLM-based application and deserves dedicated research and evidence-based experimentation early-on in the development cycle.\n" ] }, { @@ -1659,7 +1660,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Turns out ChatGPT hallucinates. A quick web search on the before mentioned authors yields no results. In fact, those authors names are made up. And of course the correct answer would have been \"Tharsis Souza\".\n", + "Turns out ChatGPT hallucinates. A quick web search on the before mentioned authors yields no results. In fact, those authors names are made up. And of course the correct answer would have been yours truly, \"Tharsis Souza\".\n", "\n", "LLMs only have access to the information they have been trained on, which of course has been fixed at a point in time. Hence, LLMs operate with stale data. The problem gets exacerbated by the fact that LLMs are trained to provide an answer even if the answer is unknown by them, hence leading to hallucinations. \n", "\n", @@ -1680,7 +1681,7 @@ "4. **Domain-Specific Applications**: RAG allows LLMs to be equipped with specialized knowledge in fields like medicine, law, or engineering by retrieving information from domain-specific literature, regulations, and technical documentation. This enables accurate responses aligned with professional standards and current best practices.\n", "5. **Code Documentation and Technical Support**: RAG can help developers by retrieving relevant code examples, API documentation, and best practices from repositories and documentation, which often suffer updates frequently, enabling more accurate and contextual coding assistance.\n", "\n", - "If LLMs alone work on stale, general-purpose data with the added challenge of being prone to hallucinations, RAG systems serve as an added capability enabling LLMs to work on recent, domain-specific knowledge increasing the likelihood of LLMs to provide responses that are factual and relevant to user queries.\n" + "If LLMs alone work on stale, general-purpose data with the added challenge of being prone to hallucinations, RAG systems serve as an added capability enabling LLMs to work on recent, domain-specific knowledge increasing the likelihood of LLMs to provide responses that are factual and relevant to user's queries.\n" ] }, { @@ -1689,7 +1690,7 @@ "source": [ "### RAG Pipeline\n", "\n", - "RAG architectures vary but they all share the same goal: to retrieve relevant information from a knowledge base to maximize the LLM's ability to effectively and accurately respond to prompts, particularly when the answer requires out-of-training data information.\n", + "RAG architectures vary but they all share the same goal: To retrieve relevant information from a knowledge base to maximize the LLM's ability to effectively and accurately respond to prompts, particularly when the answer requires out-of-training data.\n", "\n", "We will introduce key components of a RAG system one by one leading to a full canonical RAG pipeline at the end that ultimately will be used to answer our original question \"Who's the author of the book Taming LLMs?\", accurately.\n", "\n", @@ -1700,7 +1701,7 @@ "- Retrieval System including re-ranking\n", "- LLM Augmented Generation via in-context learning\n", "\n", - "Data extraction, parsing and chunking are also part of a canonical pipeline as we prepare the knowledge base. Those are concepts that we have already explored in the previous sections, hence we will be succinct here. We will start by preparing the knowledge base.\n", + "Data extraction, parsing and chunking are also part of a canonical pipeline as we prepare the knowledge base. Those are concepts we explored in detail in Sections {ref}`parsing` and {ref}`chunking`, hence we will be succinct here. We will start by preparing the knowledge base.\n", "\n", "```{figure} ../_static/input/rag.svg\n", "---\n", @@ -1719,7 +1720,7 @@ "source": [ "#### Preparing the Knowledge Base\n", "\n", - "Every RAG system requires a knowledge base. In our case, the knowledge base is a set of documents that we equip the LLM to answer our authorship question.\n", + "Every RAG system requires a knowledge base. In our case, the knowledge base is a set of documents that we equip the LLM with to answer our authorship question.\n", "\n", "Hence, we will compose our knowledge base by adding the web version of (some of the chapters of) the book \"Taming LLMs\", namely:\n", "- Introduction\n", @@ -1898,11 +1899,11 @@ "- `ids`: The ids of the documents retrieved from the collection\n", "- `distances`: The distances of the documents to the query vector\n", "\n", - "We can see that the chapters \"Introduction\", \"Input\" and \"Structured Output\" are retrieved from the collection ordered by their distance to the query vector.\n", + "We can see that the chapters \"Introduction\", \"Input\" and \"Structured Output\" are retrieved from the collection ordered by their distance to the query vector, in increasing order.\n", "\n", "We observe that the Introduction chapter is the most relevant one as it ranks first, followed by the Input and Structured Output chapters. Indeed, the purpose of the book is included in the Introduction chapter demonstrating the retrieval system successfully retrieved the most relevant document to the input query, in this simple example.\n", "\n", - "In order to understand how the retrieval system works and how the \"distance to the query vector\" is computed, we need to understand how the embeddings are created and how the documents are indexed." + "In order to understand how the retrieval system works and how the \"distance to the query vector\" is computed, we need to understand how embeddings are created and how documents are indexed." ] }, { @@ -1915,7 +1916,7 @@ "\n", "[^embeddings_definition]: Bengio et al. {cite}`bengio2014representationlearningreviewnew` provide serves as an excellent reference for representation learning in general including embeddings. OpenAI provides a good intro to Embeddings for developers {cite}`openai2024embeddings`\n", "\n", - "For text data, small distances among embeddings suggest high semantic relatedness and large distances suggest low semantic relatedness among the embedded texts. HuggingFace provides a leaderboard of embeddings models {cite}`huggingface2024mteb`, which are ranked by in dimensions such as classification, clustering and reranking performance.\n", + "For text data, small distances among embeddings suggest high semantic relatedness and large distances suggest low semantic relatedness among the embedded texts. HuggingFace provides a leaderboard of embeddings models {cite}`huggingface2024mteb`, which are ranked by dimensions such as classification, clustering and reranking performance.\n", "\n", "Behind the scenes, ChromaDB is using the model `all-MiniLM-L6-v2` by default [^chroma_embeddings] to create embeddings for the input documents and the query (see {numref}`embedding`). This model is available in `sentence_transformers` {cite}`sentencetransformers2024website`. Let's see how it works.\n", "\n", @@ -1926,7 +1927,7 @@ "scale: 70%\n", "align: center\n", "---\n", - "Embedding\n", + "Embedding: From text to vectors.\n", "```\n", "\n", "[^chroma_embeddings]: ChromaDB enables custom embedding functions and provides a list of wrappers around commonly used embedding models and APIs https://docs.trychroma.com/docs/embeddings/embedding-functions" @@ -1976,7 +1977,7 @@ "source": [ "As a result, we obtain four 384-dimensional vectors representing our embeddings (one for each of the three chapters and one for the input query).\n", "\n", - "Now we can calculate similarity among the embeddings. By default, sentence transformers uses cosine similarity to calculate the similarity between embeddings. " + "Now we can calculate similarity among the embeddings. By default, sentence transformers uses cosine similarity as similarity metric." ] }, { @@ -2005,7 +2006,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Let's visualize the similarity matrix to better understand the relationships between our documents in {numref}`similarities`. The top row of the matrix represents the similarity of the input query against all chapters. That's exactly what we previously obtained by querying ChromaDB which returned a response with documents ranked by similarity to input query.\n", + "Let's visualize the similarity matrix to better understand the relationships between our documents in {numref}`similarities`. The top row of the matrix represents the similarity of the input query against all chapters. That's exactly what we previously obtained by querying ChromaDB which returned a response with documents ranked by similarity to input query. As expected, the Introduction chapter is the most similar to the input query followed by the Input and Structured Output chapters, as we previously observed with ChromaDB.\n", "\n", "```{figure} ../_static/input/similarity.png\n", "---\n", @@ -2032,7 +2033,7 @@ "source": [ "**Indexing**\n", "\n", - "Indexing is a crucial optimization technique that makes similarity searches faster and more efficient.\n", + "Indexing is an optimization technique that makes similarity searches faster and more efficient.\n", "\n", "Without indexing, finding similar vectors would require an exhaustive search - comparing a query vector against every single vector in the database. For large datasets, this becomes prohibitively slow.\n", "\n", @@ -2058,9 +2059,9 @@ " - Reduces memory footprint significantly\n", " - Good balance between accuracy and resource usage\n", "\n", - "HNSW is the underlying library for Chroma vector indexing and search {cite}`chromadb2024hnsw`. HNSW provides fast searches with high accuracy but uses more memory. LSH and quantization methods offer better memory efficiency but may sacrifice some precision.\n", + "HNSW is the underlying library for ChromaDB vector indexing and search {cite}`chromadb2024hnsw`. HNSW provides fast searches with high accuracy but uses more memory. LSH and quantization methods offer better memory efficiency but may sacrifice some precision.\n", "\n", - "But are indexing + basic embeddings based similarity sufficient? Often not, as we will see next as we cover reranking technique." + "But is the combination of indexing and basic embeddings-based similarity sufficient to retrieve relevant documents? Often not, as we will see next, as we cover reranking technique." ] }, { @@ -2069,7 +2070,7 @@ "source": [ "#### Reranking\n", "\n", - "Let's go back to querying our vector database. Here are additional examples." + "Let's go back to querying our vector database." ] }, { @@ -2204,7 +2205,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The ideia is to first run semantic similarity on embeddings, which should be fast but potentially inaccurate, and then run re-raking on the top-k results, which is more accurate but slower. By doing so, we can balance the speed and accuracy of the retrieval system.\n", + "In RAG systems, the idea is to first run semantic similarity on embeddings, which should be fast but potentially inaccurate, and then run reranking from the top-k results, which should be more accurate but slower. By doing so, we can balance the speed and accuracy of the retrieval system.\n", "\n", "Hence, instead of going over all retrieved documents:\n", "```python\n", @@ -2313,7 +2314,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Then, we run the retrieve step." + "Then, we run the retrieval step." ] }, { @@ -2382,7 +2383,7 @@ " \n", "- **Data Quality and Accuracy**: The effectiveness of RAG systems fundamentally depends on the quality and reliability of their knowledge sources. When these sources contain inaccurate, outdated, biased, or incomplete information, the system's responses become unreliable. This challenge is particularly acute when dealing with rapidly evolving topics or when sourcing information from unverified channels.\n", " \n", - "- **Computational Cost and Latency**: Implementing RAG systems at scale presents computational and operational challenges. The process of embedding documents, maintaining vector databases, and performing similarity searches across large knowledge bases demands computational, budget and operational resources. In real-time applications, these requirements can introduce noticeable latency, potentially degrading the user experience and limiting practical applications.\n", + "- **Computational Cost and Latency**: Implementing RAG systems at scale presents computational and operational challenges. The process of embedding documents, maintaining vector databases, and performing similarity searches across large knowledge bases demands computational, and operational resources. In real-time applications, these requirements can introduce noticeable latency, potentially degrading the user experience and limiting practical applications.\n", " \n", "- **Explainability and Evaluation**: The complexity of RAG systems, arising from the intricate interaction between retrieval mechanisms and generative models, makes it difficult to trace and explain their reasoning processes. Traditional evaluation metrics often fail to capture the nuanced aspects of RAG performance, such as contextual relevance and factual consistency. This limitation hampers both system improvement and stakeholder trust. Readers are encouraged to read Chapter {ref}`evals` for general LLM evaluation issues as well as consider tools such as Ragas {cite}`ragas2024evaluation` for RAG evaluation.\n", " \n", @@ -2397,14 +2398,14 @@ "\n", "### Will RAGs exist in the future?\n", "\n", - "This question is posed as we contrast RAGs with LLMs with long-context windows (LC).\n", + "This question is posed as we contrast RAGs with LLMs with long-context windows (LCs).\n", "\n", - "Recent research has shed light on this specific point {cite}`li2024retrievalaugmentedgenerationlongcontext`, suggesting that, on the one hand, RAGs can be seen as a cost-effective alternative to LC models:\n", - "* RAGs offer lower computational cost compared to LC due to the significantly shorter input length required for processing.\n", - "* This cost-efficiency arises because RAG reduces the number of input tokens to LLMs, which of course reduces usage cost as pricing is based on the number of input (and output) tokens.\n", + "Recent research has shed light on this specific point {cite}`li2024retrievalaugmentedgenerationlongcontext` suggesting a trade-off between cost and performance. On the one hand, RAGs can be seen as a cost-effective alternative to LC models:\n", + "* RAGs offer lower computational cost compared to LCs due to the significantly shorter input length required for processing.\n", + "* This cost-efficiency arises because RAG reduces the number of input tokens to LLMs, which in turn reduces overall usage cost.\n", "\n", "On the other hand, this RAG benefit is achieved at the cost of performance:\n", - "* Recent advancements in LLMs, in particular with Gemini-1.5 and GPT-4o models, demonstrate capabilities in understanding long contexts directly, which enables them to outperform RAG in terms of average performance\n", + "* Recent advancements in LLMs, in particular with Gemini-1.5 and GPT-4o models, demonstrate capabilities in understanding long contexts directly, which enables them to outperform RAG in terms of average performance.\n", "* LC models can process extremely long contexts, such as Gemini 1.5 which can handle up to 1 million tokens, and these models benefit from large-scale pretraining to develop strong long-context capabilities.\n", "\n", "This cost-performance trade-off is illustrated in {numref}`LC`, where LC models outperform RAGs in terms of average performance while RAGs are more cost-effective.\n", @@ -2423,15 +2424,17 @@ "\n", "Another example of a hybrid approach that combines the benefits of both LC and RAGs is RetroLLM {cite}`li2024retrollmempoweringlargelanguage`, which is a unified framework that integrates retrieval and generation into a single process, enabling language models to generate fine-grained evidence directly from a corpus. The key contribution is that this approach delivers those benefits while eliminating the need for a separate retriever, addressing limitations of traditional RAG methods. Experimental results demonstrate RetroLLM's superior performance compared to traditional RAG methods, across both in-domain and out-of-domain tasks. It also achieves a significant reduction in token consumption due to its fine-grained evidence retrieval.\n", "\n", - "A relevant development in this area is the introduction of LOFT {cite}`lee2024longcontextlanguagemodelssubsume`, a benchmark to assess this paradigm shift from RAGs to LCs, using real-world tasks requiring context up to millions of tokens. Evidence suggests LCs can deliver performance with simplified pipelines compared to RAGs, particularly for tasking requiring multi-hop reasoning over long contexts when using Chain-of-Thought {cite}`wei2023chainofthoughtpromptingelicitsreasoning`. However, LCs can still be outperformed by specialized retrievers, in particular Gecko, a specialized model fine-tuned on extensive text retrieval and similarity tasks.\n", + "CAG {cite}`chan2024dontragcacheaugmentedgeneration` is another solution that eliminates the need for RAGs as it proposes cache-augmented generation (CAG). CAG preloads all relevant data into a large language model's extended context window, eliminating the need for real-time retrieval and improving speed and accuracy. This is achieved by precomputing a key-value cache, further optimizing inference time. CAG demonstrates superior performance compared to RAG by achieving higher BERT scores in most evaluated scenarios, indicating better answer quality, and by having significantly reduced generation times. These results suggest that CAG can be both more accurate and more efficient than traditional RAG systems.\n", + "\n", + "Another relevant development in this area is the introduction of LOFT {cite}`lee2024longcontextlanguagemodelssubsume`, a benchmark to assess this paradigm shift from RAGs to LCs, using real-world tasks requiring context up to millions of tokens. Evidence suggests LCs can deliver performance with simplified pipelines compared to RAGs, particularly for tasking requiring multi-hop reasoning over long contexts when using Chain-of-Thought {cite}`wei2023chainofthoughtpromptingelicitsreasoning`. However, LCs can still be outperformed by specialized retrievers, in particular Gecko, a specialized model fine-tuned on extensive text retrieval and similarity tasks.\n", "\n", "Bottom-line: Do we really need RAGs? The answer is conditional:\n", "\n", - "* **RAG may be relevant when cost-effectiveness is a key requirement** and where the model needs to access vast amounts of external knowledge without incurring high computational expenses. However, as LLMs context window sizes increase and LLMs cost per input token is decreases, RAG may not be as relevant as it was before.\n", + "* **RAG may be relevant when cost-effectiveness is a key requirement** and where the model needs to access vast amounts of external knowledge without incurring high computational expenses. However, as LLMs context window sizes increase and LLMs cost per input token decreases, RAGs may not be as relevant as it was before.\n", "* **Long-context LLMs are superior when performance is the primary concern**, and the model needs to handle extensive texts that require deep contextual understanding and reasoning.\n", "* **Hybrid approaches like SELF-ROUTE are valuable as they combine the strengths of RAG and LC** offering a practical balance between cost and performance, especially for applications where both factors are critical.\n", "\n", - "Ultimately, the choice between RAG, LC, or a hybrid method depends on the specific requirements of the task, available resources, and the acceptable trade-off between cost and performance.\n", + "Ultimately, the choice among RAG, LC, or a hybrid method depends on the specific requirements of the task, available resources, and the acceptable trade-off between cost and performance.\n", "\n", "In a later case study, we demonstrate the power of LCs as we construct a Quiz generator with citations over a large knowledge base without the use of chunking nor RAGs.\n" ] @@ -2444,7 +2447,7 @@ "\n", "We have covered a few open source tools for parsing data and provided a canonical RAG pipeline directly using an open source VectorDB together with an LLM. There is a growing number of frameworks that offer similar functionality wrapping the same core concepts at a higher level of abstraction. The two most popular ones are `Langchain` and `LlamaIndex`. \n", "\n", - "For instance, the code below shows how to use `LlamaIndex`'s `LlamaParse` for parsing input documents, which offers support for a wide range of file formats (e.g. .pdf, .pptx, .docx, .xlsx, .html). We we can see that the code is very similar to the one we used for `MarkitDown` and `Docling`.\n", + "For instance, the code below shows how to use `LlamaIndex`'s `LlamaParse` for parsing input documents, which offers support for a wide range of file formats (e.g. .pdf, .pptx, .docx, .xlsx, .html). We observe that the code is very similar to the one we used for `MarkitDown` and `Docling`.\n", "\n", "```python\n", "from llama_parse import LlamaParse\n", @@ -2459,11 +2462,9 @@ "documents = parser.load_data([\"./doc1.pdf\", \"./doc2.pdf\"])\n", "```\n", "\n", - "\n", - "\n", "As another example, the code below replicates our ChromaDB-based retrieval system using `LlamaIndex` {cite}`llamaindex2024storing`.\n", "\n", - "As we can see, similar concepts are used in both frameworks:\n", + "As we can see, similar concepts are used:\n", "- Documents to represent elements of the knowledge base\n", "- Collections to store the documents\n", "- Indexing of embeddings in the VectorDB and finally\n", @@ -2528,6 +2529,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ + "(chunking)=\n", "### Case Study I: Content Chunking with Contextual Linking\n", "\n", "Content chunking is commonly used to breakdown long-form content into smaller, manageable chunks. In the context of RAGs, this can be helpful not only to help the retrieval system find more contextually relevant documents but also lead to a more cost efficient LLM solution since fewer tokens are processed in the context window. Furthermore, semantic chunking can increase accuracy of RAG systems {cite}`zenml2024rag`.\n", diff --git a/tamingllms/pdf/structured_output.pdf b/tamingllms/pdf/structured_output.pdf deleted file mode 100644 index 6d66393a8a873a9bc94ad14929cac287f62302a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 638060 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