will-taggart commited on
Commit
a6fd066
·
verified ·
1 Parent(s): 154fcd2

Complete report folder move to paper

Browse files
acm/AFFECTOR-ARC-ACM-source.zip DELETED
@@ -1,3 +0,0 @@
1
- version https://git-lfs.github.com/spec/v1
2
- oid sha256:b853151dde3750c4ebb79ff61d2930ada77ac75456f79fcd03b2535b6fa05f01
3
- size 214206
 
 
 
 
acm/AFFECTOR-ARC-ACM.bbl DELETED
@@ -1,264 +0,0 @@
1
- %%% -*-BibTeX-*-
2
- %%% Do NOT edit. File created by BibTeX with style
3
- %%% ACM-Reference-Format-Journals [18-Jan-2012].
4
-
5
- \begin{thebibliography}{12}
6
-
7
- %%% ====================================================================
8
- %%% NOTE TO THE USER: you can override these defaults by providing
9
- %%% customized versions of any of these macros before the \bibliography
10
- %%% command. Each of them MUST provide its own final punctuation,
11
- %%% except for \shownote{}, \showDOI{}, and \showURL{}. The latter two
12
- %%% do not use final punctuation, in order to avoid confusing it with
13
- %%% the Web address.
14
- %%%
15
- %%% To suppress output of a particular field, define its macro to expand
16
- %%% to an empty string, or better, \unskip, like this:
17
- %%%
18
- %%% \newcommand{\showDOI}[1]{\unskip} % LaTeX syntax
19
- %%%
20
- %%% \def \showDOI #1{\unskip} % plain TeX syntax
21
- %%%
22
- %%% ====================================================================
23
-
24
- \ifx \showCODEN \undefined \def \showCODEN #1{\unskip} \fi
25
- \ifx \showDOI \undefined \def \showDOI #1{#1}\fi
26
- \ifx \showISBNx \undefined \def \showISBNx #1{\unskip} \fi
27
- \ifx \showISBNxiii \undefined \def \showISBNxiii #1{\unskip} \fi
28
- \ifx \showISSN \undefined \def \showISSN #1{\unskip} \fi
29
- \ifx \showLCCN \undefined \def \showLCCN #1{\unskip} \fi
30
- \ifx \shownote \undefined \def \shownote #1{#1} \fi
31
- \ifx \showarticletitle \undefined \def \showarticletitle #1{#1} \fi
32
- \ifx \showURL \undefined \def \showURL {\relax} \fi
33
- % The following commands are used for tagged output and should be
34
- % invisible to TeX
35
- \providecommand\bibfield[2]{#2}
36
- \providecommand\bibinfo[2]{#2}
37
- \providecommand\natexlab[1]{#1}
38
- \providecommand\showeprint[2][]{arXiv:#2}
39
-
40
- \bibitem[Cui and Chen(2025)]%
41
- {cui2025pas}
42
- \bibfield{author}{\bibinfo{person}{Sasha Cui} {and} \bibinfo{person}{Zhongren
43
- Chen}.} \bibinfo{year}{2025}\natexlab{}.
44
- \newblock \bibinfo{title}{{Painless Activation Steering: An Automated,
45
- Lightweight Approach for Post-Training Large Language Models}}.
46
- \newblock
47
- \newblock
48
- \showeprint[arxiv]{2509.22739v3}
49
- \urldef\tempurl%
50
- \url{https://arxiv.org/abs/2509.22739v3}
51
- \showURL{%
52
- \tempurl}
53
- \newblock
54
- \shownote{Cited version dated 2026-05-15; metadata checked 2026-11-13}.
55
-
56
-
57
- \bibitem[Diallo et~al\mbox{.}(2026)]%
58
- {diallo2026style}
59
- \bibfield{author}{\bibinfo{person}{Diaoulé Diallo}, \bibinfo{person}{Katharina
60
- Dworatzyk}, \bibinfo{person}{Sophie Jentzsch}, \bibinfo{person}{Peer
61
- Schütt}, \bibinfo{person}{Sabine Theis}, {and} \bibinfo{person}{Tobias
62
- Hecking}.} \bibinfo{year}{2026}\natexlab{}.
63
- \newblock \bibinfo{title}{{The Effectiveness of Style Vectors for Steering
64
- Large Language Models: A Human Evaluation}}.
65
- \newblock
66
- \newblock
67
- \showeprint[arxiv]{2601.21505v1}
68
- \urldef\tempurl%
69
- \url{https://arxiv.org/abs/2601.21505v1}
70
- \showURL{%
71
- \tempurl}
72
- \newblock
73
- \shownote{Cited version dated 2026-01-29; metadata checked 2026-11-13}.
74
-
75
-
76
- \bibitem[Ferrando et~al\mbox{.}(2025)]%
77
- {ferrando2025dsas}
78
- \bibfield{author}{\bibinfo{person}{Alex Ferrando}, \bibinfo{person}{Xavier
79
- Suau}, \bibinfo{person}{Jordi Gonzàlez}, {and} \bibinfo{person}{Pau
80
- Rodriguez}.} \bibinfo{year}{2025}\natexlab{}.
81
- \newblock \bibinfo{title}{{Dynamically Scaled Activation Steering}}.
82
- \newblock
83
- \newblock
84
- \showeprint[arxiv]{2512.03661v2}
85
- \urldef\tempurl%
86
- \url{https://arxiv.org/abs/2512.03661v2}
87
- \showURL{%
88
- \tempurl}
89
- \newblock
90
- \shownote{Cited version dated 2026-07-30; metadata checked 2026-11-13}.
91
-
92
-
93
- \bibitem[Ha et~al\mbox{.}(2026)]%
94
- {ha2026empathy}
95
- \bibfield{author}{\bibinfo{person}{JuHeon Ha}, \bibinfo{person}{Byounghan Lee},
96
- \bibinfo{person}{Yunseo Choi}, {and} \bibinfo{person}{Kyung-Ah Sohn}.}
97
- \bibinfo{year}{2026}\natexlab{}.
98
- \newblock \bibinfo{title}{{Empathy Is Steerable but Multi-Axial: Mechanism
99
- Geometry and Persona Effects in LLMs}}.
100
- \newblock
101
- \newblock
102
- \showeprint[arxiv]{2609.15654v1}
103
- \urldef\tempurl%
104
- \url{https://arxiv.org/abs/2609.15654v1}
105
- \showURL{%
106
- \tempurl}
107
- \newblock
108
- \shownote{Cited version dated 2026-09-14; metadata checked 2026-11-13}.
109
-
110
-
111
- \bibitem[Jeong(2026)]%
112
- {jeong2026emotion}
113
- \bibfield{author}{\bibinfo{person}{Jihoon Jeong}.}
114
- \bibinfo{year}{2026}\natexlab{}.
115
- \newblock \bibinfo{title}{{Extracting and Steering Emotion Representations in
116
- Small Language Models: A Methodological Comparison}}.
117
- \newblock
118
- \newblock
119
- \showeprint[arxiv]{2604.04064v1}
120
- \urldef\tempurl%
121
- \url{https://arxiv.org/abs/2604.04064v1}
122
- \showURL{%
123
- \tempurl}
124
- \newblock
125
- \shownote{Cited version dated 2026-04-05; metadata checked 2026-11-13}.
126
-
127
-
128
- \bibitem[Panickssery et~al\mbox{.}(2024)]%
129
- {panickssery2024caa}
130
- \bibfield{author}{\bibinfo{person}{Nina Panickssery}, \bibinfo{person}{Nick
131
- Gabrieli}, \bibinfo{person}{Julian Schulz}, \bibinfo{person}{Meg Tong},
132
- \bibinfo{person}{Evan Hubinger}, {and} \bibinfo{person}{Alexander~Matt
133
- Turner}.} \bibinfo{year}{2024}\natexlab{}.
134
- \newblock \bibinfo{title}{{Steering Llama 2 via Contrastive Activation
135
- Addition}}.
136
- \newblock
137
- \newblock
138
- \showeprint[arxiv]{2312.06681v4}
139
- \urldef\tempurl%
140
- \url{https://arxiv.org/abs/2312.06681v4}
141
- \showURL{%
142
- \tempurl}
143
- \newblock
144
- \shownote{Cited version dated 2024-07-05; metadata checked 2026-11-13}.
145
-
146
-
147
- \bibitem[Shu et~al\mbox{.}(2026)]%
148
- {shu2026emotion}
149
- \bibfield{author}{\bibinfo{person}{Bangzhao Shu}, \bibinfo{person}{Arinjay
150
- Singh}, {and} \bibinfo{person}{Mai ElSherief}.}
151
- \bibinfo{year}{2026}\natexlab{}.
152
- \newblock \bibinfo{title}{{Why Are Some Emotions Harder for LLMs? Uncovering
153
- the Causal Mechanisms of Emotion Inference via Sparse Autoencoders}}.
154
- \newblock
155
- \newblock
156
- \showeprint[arxiv]{2604.25866v3}
157
- \urldef\tempurl%
158
- \url{https://arxiv.org/abs/2604.25866v3}
159
- \showURL{%
160
- \tempurl}
161
- \newblock
162
- \shownote{Cited version dated 2026-10-24; metadata checked 2026-11-13}.
163
-
164
-
165
- \bibitem[Sun et~al\mbox{.}(2026)]%
166
- {sun2026emotion}
167
- \bibfield{author}{\bibinfo{person}{Moran Sun}, \bibinfo{person}{Tianlin Li},
168
- \bibinfo{person}{Yuwei Zheng}, \bibinfo{person}{Zhenhong Zhou},
169
- \bibinfo{person}{Aishan Liu}, \bibinfo{person}{Xianglong Liu}, {and}
170
- \bibinfo{person}{Yang Liu}.} \bibinfo{year}{2026}\natexlab{}.
171
- \newblock \bibinfo{title}{{How Emotion Shapes the Behavior of LLMs and Agents:
172
- A Mechanistic Study}}.
173
- \newblock
174
- \newblock
175
- \showeprint[arxiv]{2604.00005v1}
176
- \urldef\tempurl%
177
- \url{https://arxiv.org/abs/2604.00005v1}
178
- \showURL{%
179
- \tempurl}
180
- \newblock
181
- \shownote{Cited version dated 2026-03-09; metadata checked 2026-11-13}.
182
-
183
-
184
- \bibitem[Turner et~al\mbox{.}(2023)]%
185
- {turner2023actadd}
186
- \bibfield{author}{\bibinfo{person}{Alex Turner}, \bibinfo{person}{Lisa
187
- Thiergart}, \bibinfo{person}{David Udell}, \bibinfo{person}{Gavin Leech},
188
- \bibinfo{person}{Ulisse Mini}, {and} \bibinfo{person}{Monte MacDiarmid}.}
189
- \bibinfo{year}{2023}\natexlab{}.
190
- \newblock \bibinfo{title}{{Activation Addition: Steering Language Models
191
- Without Optimization}}.
192
- \newblock
193
- \newblock
194
- \showeprint[arxiv]{2308.10248v1}
195
- \urldef\tempurl%
196
- \url{https://arxiv.org/abs/2308.10248v1}
197
- \showURL{%
198
- \tempurl}
199
- \newblock
200
- \shownote{Cited version dated 2023-08-20; metadata checked 2026-11-13}.
201
-
202
-
203
- \bibitem[Wang et~al\mbox{.}(2026)]%
204
- {wang2026readbest}
205
- \bibfield{author}{\bibinfo{person}{Yibo Wang}, \bibinfo{person}{Jisheng Dang},
206
- \bibinfo{person}{Bimei Wang}, \bibinfo{person}{Yitao Wu},
207
- \bibinfo{person}{Wencan Zhang}, \bibinfo{person}{Hong Peng},
208
- \bibinfo{person}{Jizhao Liu}, \bibinfo{person}{Bin Hu}, \bibinfo{person}{Qi
209
- Tian}, {and} \bibinfo{person}{Tat-Seng Chua}.}
210
- \bibinfo{year}{2026}\natexlab{}.
211
- \newblock \bibinfo{title}{{Read-Best Is Not Steer-Best: A Probing--Steering
212
- Layer Dissociation in Omni-Modal Large Language Models}}.
213
- \newblock
214
- \newblock
215
- \showeprint[arxiv]{2609.22135v1}
216
- \urldef\tempurl%
217
- \url{https://arxiv.org/abs/2609.22135v1}
218
- \showURL{%
219
- \tempurl}
220
- \newblock
221
- \shownote{Cited version dated 2026-08-24; metadata checked 2026-11-13}.
222
-
223
-
224
- \bibitem[Wu et~al\mbox{.}(2025)]%
225
- {wu2025emotion}
226
- \bibfield{author}{\bibinfo{person}{Xiuwen Wu}, \bibinfo{person}{Hao Wang},
227
- \bibinfo{person}{Zhiang Yan}, \bibinfo{person}{Xiaohan Tang},
228
- \bibinfo{person}{Pengfei Xu}, \bibinfo{person}{Wai-Ting Siok},
229
- \bibinfo{person}{Ping Li}, \bibinfo{person}{Jia-Hong Gao},
230
- \bibinfo{person}{Bingjiang Lyu}, {and} \bibinfo{person}{Lang Qin}.}
231
- \bibinfo{year}{2025}\natexlab{}.
232
- \newblock \bibinfo{title}{{AI shares emotion with humans across languages and
233
- cultures}}.
234
- \newblock
235
- \newblock
236
- \showeprint[arxiv]{2506.13978v1}
237
- \urldef\tempurl%
238
- \url{https://arxiv.org/abs/2506.13978v1}
239
- \showURL{%
240
- \tempurl}
241
- \newblock
242
- \shownote{Cited version dated 2025-06-11; metadata checked 2026-11-13}.
243
-
244
-
245
- \bibitem[Yang et~al\mbox{.}(2026)]%
246
- {yang2026steerscope}
247
- \bibfield{author}{\bibinfo{person}{Haotian Yang}, \bibinfo{person}{Huikang
248
- Jiang}, \bibinfo{person}{Yucheng Wu}, \bibinfo{person}{Wen-Jie Jiang},
249
- \bibinfo{person}{Chenpeng Wang}, \bibinfo{person}{Yibin Lou}, {and}
250
- \bibinfo{person}{Liangming Pan}.} \bibinfo{year}{2026}\natexlab{}.
251
- \newblock \bibinfo{title}{{Does Steering Break Your Model? A Multi-Dimensional
252
- Evaluation Suite for LLM Steering Methods}}.
253
- \newblock
254
- \newblock
255
- \showeprint[arxiv]{2610.07722v1}
256
- \urldef\tempurl%
257
- \url{https://arxiv.org/abs/2610.07722v1}
258
- \showURL{%
259
- \tempurl}
260
- \newblock
261
- \shownote{Cited version dated 2026-10-06; metadata checked 2026-11-13}.
262
-
263
-
264
- \end{thebibliography}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
acm/AFFECTOR-ARC-ACM.pdf DELETED
@@ -1,3 +0,0 @@
1
- version https://git-lfs.github.com/spec/v1
2
- oid sha256:4d34c7993aad06ba2df9c62cae433e61a7e7cd2d4299087e19d061dbac469743
3
- size 124747
 
 
 
 
acm/AFFECTOR-ARC-ACM.tex DELETED
@@ -1,741 +0,0 @@
1
- % ACM manuscript layout for an independently distributed technical report.
2
- \documentclass[manuscript,screen,nonacm]{acmart}
3
- \setcopyright{none}
4
- \settopmatter{printacmref=false,printccs=false}
5
- \acmDOI{}
6
- \acmISBN{}
7
- \usepackage{longtable,booktabs,array,calc}
8
- \usepackage{xurl}
9
- \usepackage{fvextra}
10
- \DefineVerbatimEnvironment{verbatim}{Verbatim}{breaklines=true,fontsize=\small}
11
- \usepackage{tikz}
12
- \usetikzlibrary{positioning}
13
- \providecommand{\tightlist}{\setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}
14
- \providecommand{\passthrough}[1]{#1}
15
- \providecommand{\pandocbounded}[1]{#1}
16
- \begin{document}
17
- \title{AFFECTOR-ARC: Emotional Trajectory Control through Transformer
18
- Activation Steering}
19
- \author{William Taggart}
20
- \affiliation{\department{Modern and Classical Languages and Literatures}
21
- \institution{Virginia Tech}\city{Blacksburg}\state{Virginia}\country{USA}}
22
- \email{wtaggart@vt.edu}
23
- \subtitle{Technical Report: November 13, 2026}
24
- \begin{abstract}
25
- AFFECTOR-ARC is an experimental command-line system for rewriting text
26
- under a user-defined emotional trajectory. It runs a frozen Qwen3.5-0.8B
27
- model on an NVIDIA GPU and changes selected internal activations during
28
- generation. A trajectory specifies valence, inward/outward emotional
29
- orientation, and intensity across normalized document position. Small
30
- sets of contrasting English passages establish three activation
31
- directions at each selected transformer layer. At inference time, the
32
- requested coordinates determine a weighted displacement, scaled relative
33
- to the current hidden-state magnitude, smoothed across decoding steps,
34
- and constrained by an RMS budget. Paired hooks apply this displacement
35
- to both the feed-forward input and its residual path. Document rewriting
36
- combines these interventions with four editing styles, sentence-aware
37
- segmentation, bounded generation, and incremental reporting. This report
38
- derives the mechanism from its implemented operations and distinguishes
39
- numerical controls from emotional outcomes. CPU policy tests pass; the
40
- current revision still requires CUDA validation. No measured claim of
41
- emotional accuracy, semantic preservation, or multilingual effectiveness
42
- is made.
43
- \end{abstract}
44
- \keywords{activation steering, emotional text generation, transformer models, controllable generation}
45
- \maketitle
46
- \section{Literature review: activation steering and
47
- emotion}\label{literature-review-activation-steering-and-emotion}
48
-
49
- This focused review covers twelve papers, emphasizing 2025-2026 research
50
- and retaining two methodological foundations. Titles, author lists,
51
- version histories, and the claims summarized here were checked against
52
- arXiv records and the corresponding paper text on November 13, 2026. The
53
- cited versions are fixed below; availability on arXiv alone does not
54
- establish peer review. The implications for this project are research
55
- motivations, not evidence that its implementation reproduces these
56
- results.
57
-
58
- \textbf{From activation differences to behavioral control.} Activation
59
- steering changes internal model states during inference while leaving
60
- the backbone weights fixed. Turner et al.~derive intervention vectors
61
- from contrasting prompts; Panickssery et al.~average differences across
62
- positive and negative behavioral examples. These provide the
63
- methodological basis for contrastive calibration, but do not validate a
64
- particular emotional coordinate system or insertion site.
65
- \citep{turner2023actadd}; \citep{panickssery2024caa}.
66
-
67
- \textbf{Emotional expression and human judgment.} Wu et al.~relate model
68
- emotion spaces to human valence/arousal judgments and report
69
- concept-based steering across linguistic-cultural settings. Diallo et
70
- al.~evaluate perceived emotional intensity and text quality with human
71
- raters, finding that effects depend on emotion and steering strength.
72
- Together they motivate separate measures of emotional movement and
73
- readability. Their axes and numerical strengths cannot be assumed
74
- equivalent to this project's inward/outward direction or RMS-scaled
75
- controls. \citep{wu2025emotion}; \citep{diallo2026style}.
76
-
77
- \textbf{Emotion can affect more than tone.} Sun et al.'s E-STEER uses
78
- valence-arousal-dominance interventions to study reasoning, generation,
79
- safety, and agent behavior, reporting non-monotonic relationships.
80
- Jeong's small-model comparison reports both coherent emotional changes
81
- and degeneration, including repetition, depending on extraction method
82
- and architecture. These findings motivate reporting failed generations
83
- alongside successes and testing strength sweeps rather than assuming
84
- that larger perturbations improve emotional fit. Neither study
85
- establishes an operating range for this implementation.
86
- \citep{sun2026emotion}; \citep{jeong2026emotion}.
87
-
88
- \textbf{Reading an emotion is different from controlling it.} Shu et
89
- al.'s revised study identifies uneven causal organization of sparse
90
- features across emotion categories and tests interventions for emotion
91
- recognition. Wang et al.~show, in omni-modal models, that layers with
92
- strong emotion-probing accuracy need not be the best intervention
93
- layers. Recognition results therefore inform evaluator design, while
94
- layer selection for rewriting still requires causal tests on generated
95
- text. Neither finding licenses importing layer indices across
96
- architectures. \citep{shu2026emotion}; \citep{wang2026readbest}.
97
-
98
- \textbf{Multiple axes and adaptive control.} Ha et al.~find that
99
- supportive-empathy directions are only partially separable: intervening
100
- on one can shift other EPITOME proxy scores. Cui and Chen automate
101
- vector extraction from labeled data, with task-dependent benefits.
102
- Ferrando et al.~adapt intervention strength to context, studying the
103
- balance between toxicity mitigation and retained utility. These
104
- approaches motivate broader calibration, cross-axis tests, and future
105
- adaptive control. The present coordinate mixture is not an
106
- implementation of their learned selectors or context-dependent gates.
107
- \citep{ha2026empathy}; \citep{cui2025pas}; \citep{ferrando2025dsas}.
108
-
109
- \textbf{Evaluation must include costs as well as target effects.} Yang
110
- et al.'s SteerScope evaluates steering efficacy jointly with side
111
- effects, generalization, and data dependence. In its tested settings,
112
- activation methods do not dominate prompt steering on the
113
- efficacy/side-effect trade-off. For this project, the resulting
114
- evaluation priorities are prompt-only and unsteered baselines, blinded
115
- emotional and quality ratings, content-change assessment appropriate to
116
- the rewrite style, and complete accounting of repetition, truncation,
117
- and original-text fallbacks. This is an evaluation agenda, not a
118
- completed benchmark. \citep{yang2026steerscope}.
119
-
120
- \section{Problem and operating
121
- principle}\label{problem-and-operating-principle}
122
-
123
- A language model generates text by repeatedly estimating a distribution
124
- over the next token. Its intermediate hidden states are numerical
125
- vectors that contribute to those estimates. Changing a hidden state can
126
- change the continuation even when the input text and the model's stored
127
- parameters remain fixed.
128
-
129
- AFFECTOR-ARC uses this property to influence the emotional expression of
130
- a rewrite. The user supplies an input document and a sequence of
131
- emotional coordinates. The software maps positions in the input to
132
- positions on that sequence, converts the coordinates into activation
133
- displacements, and applies the displacements while generating each
134
- rewritten passage.
135
-
136
- The term \textbf{geometry} means an ordered path through a
137
- three-dimensional coordinate space, together with layer settings and
138
- optional calibration matrices. It does not mean that the software
139
- reconstructs a solid surface or applies geometric constraints directly
140
- to words. A text's emotional interpretation, a numerical target, and a
141
- model's hidden states are distinct objects. The calibration is an
142
- experimental mapping between them.
143
-
144
- Two execution modes are available:
145
-
146
- \begin{itemize}
147
- \tightlist
148
- \item
149
- \textbf{Rewrite:} process an entire UTF-8 text document in chunks,
150
- write the transformed text, and record attempts and failures.
151
- \item
152
- \textbf{Smoke:} run five controlled generation conditions to check
153
- basic intervention and cleanup behavior.
154
- \end{itemize}
155
-
156
- The interface is a command-line runner for a CUDA allocation. It does
157
- not provide a desktop interface, a hosted API service, automatic
158
- emotional scoring, or conversational history.
159
-
160
- \section{Runtime and data flow}\label{runtime-and-data-flow}
161
-
162
- The runner loads \nolinkurl{Qwen/Qwen3.5-0.8B} at revision
163
- \nolinkurl{2fc06364715b967f1860aea9cf38778875588b17}. The implementation
164
- uses \nolinkurl{Qwen3_5ForConditionalGeneration}, its text decoder layers,
165
- float32 computation, eager attention, and the first process-visible CUDA
166
- device. It checks for 24 decoder layers; the geometry and calibration
167
- code assume hidden width 1,024. The backbone is in evaluation mode, its
168
- parameters have gradients disabled, and calibration and generation run
169
- without gradient tracking.
170
-
171
- The execution sequence is:
172
-
173
- \begin{verbatim}
174
- Read text and geometry settings
175
- → validate controls
176
- → load the pinned model on CUDA
177
- → calibrate the selected layers
178
- → select rewrite or smoke mode
179
- → generate with temporary activation hooks
180
- → remove hooks and save results
181
- \end{verbatim}
182
-
183
- Source files are distributed with the repository.
184
- \nolinkurl{ENGINE_MANIFEST.json} records hashes for the bundled engine
185
- snapshot. Model weights are downloaded separately. The setup script
186
- creates a Python 3.12 environment, installs PyTorch from the CUDA 12.6
187
- wheel index, pins Transformers to 5.22.2, runs the CPU policy tests, and
188
- records installed packages in \nolinkurl{environment-resolved.txt}. PyTorch
189
- and several support packages are resolved during setup rather than fully
190
- locked in advance.
191
-
192
- The example Slurm script requests one GPU, eight CPU cores, 64 GB of
193
- host memory, and one hour. These are scheduling requests, not measured
194
- minimum requirements. Users must supply an allocation and a suitable
195
- model cache. The runner is single-process and single-GPU; it is not a
196
- concurrent inference server.
197
-
198
- \section{Emotional coordinates and trajectory
199
- interpolation}\label{emotional-coordinates-and-trajectory-interpolation}
200
-
201
- A trajectory point is
202
-
203
- \[
204
- p_j=(t_j,v_j,d_j,i_j),
205
- \]
206
-
207
- where positions \(t_j\) increase strictly within \([0,1]\). Valence
208
- \(v_j\) ranges from negative to positive in \([-1,1]\). Direction
209
- \(d_j\) ranges from inward-oriented to outward-oriented emotion in
210
- \([-1,1]\). Intensity \(i_j\) ranges from low to high in \([0,1]\).
211
- Direction is an operational contrast concerning emotional orientation;
212
- it is not dominance, speaker identification, or positive versus negative
213
- sentiment.
214
-
215
- Between adjacent points, the software linearly interpolates each
216
- emotional coordinate. Before the first point and after the last, it uses
217
- the endpoint values. The coefficient vector passed to the activation
218
- module is
219
-
220
- \[
221
- c(t)=\bigl(v(t),d(t),2i(t)-1\bigr).
222
- \]
223
-
224
- Consequently, intensity 0.5 contributes a zero intensity coefficient;
225
- intensity zero contributes a negative coefficient. These are control
226
- conventions, not empirically established psychological units.
227
-
228
- For a chunk occupying character offsets \([a,b)\) in an input of length
229
- \(N\), its target is evaluated at
230
-
231
- \[
232
- t=\frac{a+b}{2N}.
233
- \]
234
-
235
- That target remains constant throughout generation of the chunk. A long
236
- trajectory can therefore guide a short document without pairing source
237
- and target paragraphs one to one. Only the positions sampled by the
238
- target chunks are used; narrow changes between those positions may be
239
- missed. The mapping uses original input positions, not positions in the
240
- expanding or contracting output. Adjacent chunks receive separate
241
- generation calls without prior rewritten chunks as conversational
242
- context.
243
-
244
- The runner accepts a native geometry JSON file and supported analysis
245
- JSON structures containing emotional coordinates. It recalibrates the
246
- basis on the current CUDA runtime even when the imported geometry
247
- includes one. With no geometry argument, it uses a demonstration path
248
- with three points; this path is not inferred from the input document.
249
-
250
- \section{Estimating activation
251
- directions}\label{estimating-activation-directions}
252
-
253
- A hidden state at a selected layer is a vector in \(\mathbb{R}^{1024}\).
254
- To estimate a direction associated with one emotional contrast, the
255
- system compares the model's states for paired passages that differ in
256
- the desired property.
257
-
258
- There are four hand-authored English pairs for each of three axes. For
259
- layer \(\ell\), axis \(j\), and pair \(k\), let \(h^+_{\ell,j,k}\) and
260
- \(h^-_{\ell,j,k}\) denote the captured states for the two members. The
261
- mean difference is
262
-
263
- \[
264
- u_{\ell,j}=\frac14\sum_{k=1}^{4}
265
- \left(h^+_{\ell,j,k}-h^-_{\ell,j,k}\right).
266
- \]
267
-
268
- For a vector of dimension \(D\), define root-mean-square magnitude as
269
-
270
- \[
271
- \operatorname{RMS}(x)=\sqrt{\frac1D\sum_{r=1}^{D}x_r^2}.
272
- \]
273
-
274
- The normalized direction is
275
-
276
- \[
277
- b_{\ell,j}=\frac{u_{\ell,j}}
278
- {\max(\operatorname{RMS}(u_{\ell,j}),10^{-8})}.
279
- \]
280
-
281
- The three directions form the rows of a matrix
282
- \(B_\ell\in\mathbb{R}^{3\times1024}\). Calibration captures the final
283
- chat-formatted prompt position immediately before
284
- \nolinkurl{post_attention_layernorm}. It does not average all token
285
- positions. All selected layers are captured during the same 24 forward
286
- passes: three axes, four pairs, and two members per pair.
287
-
288
- Default layers are 8, 16, and 23, using zero-based indexing, with
289
- weights 1, 1, and 0.5. This is subtraction, averaging, and
290
- normalization; there is no training optimizer, backbone fine-tuning,
291
- orthogonalization, or outcome-based fitting. The small calibration set
292
- may encode vocabulary, topic, or perspective along with emotion.
293
- Normalizing the vectors does not establish that the axes are independent
294
- or valid across languages.
295
-
296
- \section{From coordinates to bounded
297
- displacements}\label{from-coordinates-to-bounded-displacements}
298
-
299
- \subsection{Selecting and weighting
300
- axes}\label{selecting-and-weighting-axes}
301
-
302
- Let \(T\) be axis temperature. Each coordinate first receives magnitude
303
-
304
- \[
305
- q_j=|c_j|^{1/T}.
306
- \]
307
-
308
- Axes are sorted by this magnitude. The algorithm retains at most
309
- \nolinkurl{axis_top_k} axes and stops adding axes after their accumulated
310
- magnitude reaches \nolinkurl{axis_mass} times the total magnitude.
311
- Selection includes the axis that crosses the threshold. The retained
312
- coefficients are
313
-
314
- \[
315
- a_j=\operatorname{sign}(c_j)q_jm_j,
316
- \]
317
-
318
- where \(m_j\) is one for a retained axis and zero otherwise.
319
- Coefficients are not renormalized after selection. For coordinate
320
- magnitudes below one, \(T<1\) reduces their magnitudes and emphasizes
321
- relative differences; \(T>1\) increases them and makes those differences
322
- less pronounced. These operations affect three activation coefficients,
323
- not token probabilities.
324
-
325
- \subsection{Strength, inertia, and
326
- budget}\label{strength-inertia-and-budget}
327
-
328
- For the current final-token state \(h_{\ell,n}\), strength \(s\), and
329
- layer weight \(w_\ell\), the raw displacement is
330
-
331
- \[
332
- r_{\ell,n}=s\,w_\ell\operatorname{RMS}(h_{\ell,n})(aB_\ell).
333
- \]
334
-
335
- Multiplication by the current state's RMS expresses the intervention
336
- relative to the layer's numerical scale. A negative layer weight
337
- reverses the mixed direction at that layer.
338
-
339
- On the first decoding step, the smoothed displacement equals
340
- \(r_{\ell,n}\). On later steps, inertia \(\rho\) combines the previous
341
- applied displacement with the new raw displacement:
342
-
343
- \[
344
- \widetilde\delta_{\ell,n}=\rho\delta_{\ell,n-1}+(1-\rho)r_{\ell,n}.
345
- \]
346
-
347
- Budget \(\beta\) then limits the RMS ratio:
348
-
349
- \[
350
- \delta_{\ell,n}=\widetilde\delta_{\ell,n}
351
- \min\left(1,
352
- \frac{\beta\operatorname{RMS}(h_{\ell,n})}
353
- {\max(\operatorname{RMS}(\widetilde\delta_{\ell,n}),10^{-12})}
354
- \right).
355
- \]
356
-
357
- Strength determines the proposed displacement; budget supplies its
358
- ceiling. Raising the budget has no effect when the proposed displacement
359
- already fits below it. Budget 1 permits a displacement as large in RMS
360
- as the hidden state itself. It is not a token allowance, a
361
- semantic-change quota, or a guarantee of stronger emotional accuracy.
362
- Inertia uses the previous already-capped displacement and resets with
363
- each new generation call.
364
-
365
- \subsection{Intervention site}\label{intervention-site}
366
-
367
- Let \(h\) denote the state entering the feed-forward portion of a
368
- decoder block. Without intervention, that portion computes
369
-
370
- \[
371
- y=h+\operatorname{FFN}(\operatorname{Norm}(h)).
372
- \]
373
-
374
- The implemented intervention produces
375
-
376
- \[
377
- y=(h+\delta)+\operatorname{FFN}(\operatorname{Norm}(h+\delta)).
378
- \]
379
-
380
- A pre-hook adds \(\delta\) to the normalization input; a block-output
381
- hook adds the same displacement to the residual result. Adding a vector
382
- only after an unchanged feed-forward computation would have a different
383
- effect. Only the final prompt position is modified during prefill;
384
- cached decoding modifies the current generated position. The module does
385
- not wait for specific words or phrases. Generation hooks are removed in
386
- a \nolinkurl{finally} block.
387
-
388
- This is an open-loop intervention. Coefficients come from the requested
389
- absolute coordinates, not the difference between a measured output
390
- emotion and the target. A zero coefficient adds no intervention on that
391
- axis; it does not actively neutralize emotion already expressed by the
392
- model.
393
-
394
- \section{User controls and rewrite
395
- instructions}\label{user-controls-and-rewrite-instructions}
396
-
397
- { % do not increment counter
398
- \begin{longtable}[]{@{}
399
- >{\raggedright\arraybackslash}p{(\linewidth - 4\tabcolsep) * \real{0.3000}}
400
- >{\raggedleft\arraybackslash}p{(\linewidth - 4\tabcolsep) * \real{0.4000}}
401
- >{\raggedright\arraybackslash}p{(\linewidth - 4\tabcolsep) * \real{0.3000}}@{}}
402
- \toprule\noalign{}
403
- \begin{minipage}[b]{\linewidth}\raggedright
404
- Control
405
- \end{minipage} & \begin{minipage}[b]{\linewidth}\raggedleft
406
- Default without an imported override
407
- \end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright
408
- Function
409
- \end{minipage} \\
410
- \midrule\noalign{}
411
- \endhead
412
- \bottomrule\noalign{}
413
- \endlastfoot
414
- Strength & 0.12 & Scale the proposed activation displacement \\
415
- Budget & 0.20 & Cap displacement RMS relative to hidden-state RMS \\
416
- Inertia & 0.20 & Weight the preceding applied displacement \\
417
- Axis top-k & 3 & Maximum number of retained emotional axes \\
418
- Axis mass & 1.0 & Cumulative magnitude threshold for axis selection \\
419
- Axis temperature & 1.0 & Exponent control for emotional-axis
420
- magnitudes \\
421
- Temperature & 0 & Select greedy decoding or token sampling \\
422
- Top-p & 0.95 & Probability-mass cutoff when sampling \\
423
- Top-k & 40 & Token candidate count when sampling \\
424
- Base output tokens & 512 & Initial generation allowance, expanded in
425
- rewrite mode \\
426
- Time limit & 120 seconds & Per-generation stopping threshold \\
427
- \end{longtable}
428
- }
429
-
430
- The CLI overrides only the activation settings explicitly supplied;
431
- other settings come from the imported geometry or defaults. Validation
432
- permits strength 0--2, budget 0--1, inertia 0--0.99, axis top-k 1--3,
433
- axis mass 0.01--1, and axis temperature 0.1--3. These accepted ranges
434
- are not validated operating recommendations. The terminal displays the
435
- warning: \textbf{Extreme values for strength, budget, and inertia may
436
- cause generation failures.}
437
-
438
- At temperature zero, decoding is greedy and top-p/top-k are inactive. At
439
- positive temperature, they affect token selection after the model
440
- computes its scores. They do not replace or modify the three-axis
441
- activation selection mechanism.
442
-
443
- Four system-prompt styles provide separate editing constraints:
444
-
445
- \begin{itemize}
446
- \tightlist
447
- \item
448
- \textbf{Minimal:} change a few words or phrases while preserving
449
- nearly all wording and sentence order.
450
- \item
451
- \textbf{Restrained:} adjust tone through wording, rhythm, and emphasis
452
- while preserving central meaning, facts, terminology, and structure;
453
- invent no scenes or metaphors.
454
- \item
455
- \textbf{Balanced:} allow a clearer emotional shift and modest
456
- figurative language while retaining central meaning, facts, people,
457
- and events.
458
- \item
459
- \textbf{Creative:} permit changes to meaning, imagery, and events,
460
- while requesting concise output in the same language.
461
- \end{itemize}
462
-
463
- Restrained is the default in rewrite mode. Smoke mode retains its
464
- original general rewriting instruction unless a style is explicitly
465
- selected. Each prompt requests complete sentences and treats supplied
466
- text as material rather than instructions. A per-chunk suffix specifies
467
- the original character count and hard character allowance. Numerical
468
- emotional coordinates are not inserted into these prompts; the
469
- coordinates act through hidden states. Prompt instructions influence
470
- generation but are not formal semantic guarantees. The runner has no
471
- semantic-equivalence rejection filter and does not lower steering
472
- settings automatically.
473
-
474
- \section{Segmentation, length control, and
475
- repetition}\label{segmentation-length-control-and-repetition}
476
-
477
- The runner reads and trims the outer whitespace of a UTF-8 text file.
478
- Blank lines define paragraphs. Long paragraphs are split using a
479
- 700-character ceiling, preferring sentence punctuation when a suitable
480
- boundary exists, then whitespace, and finally a hard split. This is a
481
- punctuation heuristic, not a linguistic sentence parser. Original
482
- whitespace between chunks is preserved during output assembly.
483
-
484
- Within each original paragraph, the character ceiling is 125\% of the
485
- original span processed so far. If \(s\) is the first chunk's start,
486
- \(b_j\) the current chunk's end, and \(U_j\) the output characters and
487
- intervening whitespace already used, the current allowance is
488
-
489
- \[
490
- L_j=\max\left(0,\left\lfloor1.25(b_j-s)\right\rfloor-U_j\right).
491
- \]
492
-
493
- Unused allowance carries forward within that paragraph. It cannot be
494
- borrowed from future chunks or transferred across a blank-line paragraph
495
- boundary. Character counts are Python string lengths, not word counts,
496
- encoded byte counts, or model-token counts.
497
-
498
- Generation aims for the original length. Starting at 85\% of the current
499
- input chunk's characters, a recognized sentence ending can stop
500
- generation. A separate hard character threshold prevents excessive
501
- expansion. The token allowance is
502
-
503
- \[
504
- K_j=\min\left(2048,\max(K_{\mathrm{base}},L_j)\right),
505
- \]
506
-
507
- which supplies decoding headroom but does not imply one token equals one
508
- character. The time threshold is checked between decoding steps and
509
- cannot interrupt a blocked GPU kernel immediately.
510
-
511
- Decoding also uses a repetition penalty of 1.1 and an eight-token
512
- no-repeat n-gram constraint. A text-level detector checks every eight
513
- generation steps for repeated three- to six-word sequences appearing at
514
- least four times in the last 100 words, or a short compact character
515
- pattern repeated at least six times in the last 240 characters. These
516
- heuristics can miss some loops and can flag intentional repetition.
517
-
518
- After a generation attempt, the runner checks for repetition, empty
519
- output, excessive length, and an unfinished ending. A problematic draft
520
- is reduced to a complete, nonrepetitive sentence prefix within its
521
- allowance. If none exists, the original chunk is retained and flagged.
522
- The returned draft remains in the report's attempt record before
523
- sentence salvage. However, the engine has already clipped it to the hard
524
- character allowance; the report is not a lossless record of characters
525
- beyond that boundary.
526
-
527
- Sentence cleanup prevents chopped words from being joined directly to
528
- the next passage, but it may omit ideas from the tail of a draft.
529
- Neither punctuation recognition nor output-size compliance establishes
530
- completeness of meaning.
531
-
532
- \section{Failure handling and output
533
- artifacts}\label{failure-handling-and-output-artifacts}
534
-
535
- Each chunk receives one generation attempt at the requested activation
536
- settings. A caught generation exception is recorded; the original chunk
537
- remains in the assembled text and processing continues. Calibration
538
- failures, invalid inputs, filesystem failures, and process termination
539
- are outside this per-chunk recovery mechanism and can stop a run. A
540
- persistent device failure may cause subsequent chunks to fail as well.
541
-
542
- After each processed chunk, the runner writes:
543
-
544
- \begin{enumerate}
545
- \def\labelenumi{\arabic{enumi}.}
546
- \tightlist
547
- \item
548
- An atomic JSON report containing the input, geometry, calibration
549
- basis, runtime identity, style, sampling settings, character spans,
550
- target coordinates, and per-chunk records.
551
- \item
552
- A matching plain-text file containing completed rewrites plus original
553
- text at unprocessed or retained positions.
554
- \end{enumerate}
555
-
556
- Successful generation records include stopping reason, token count,
557
- elapsed time, activation-injection count, and mean displacement RMS.
558
- Attempt records retain returned drafts, effective controls, detected
559
- issues, and exceptions where applicable. At normal completion the report
560
- adds failure and review counts. \nolinkurl{complete} means every chunk was
561
- processed, not that every chunk was successfully rewritten or
562
- emotionally accurate.
563
-
564
- JSON writes use temporary-file replacement. The companion text file is
565
- written normally and may be incomplete if interrupted during that write.
566
- Reports are incremental records, not automatic resume checkpoints:
567
- rerunning starts over and overwrites the selected output paths. Use a
568
- distinct output filename for each experiment. Reports contain the input
569
- text and should be treated as document-bearing artifacts.
570
-
571
- \section{Engineering checks and
572
- evidence}\label{engineering-checks-and-evidence}
573
-
574
- Smoke mode is the default and operates on one supplied passage. It runs
575
- baseline, zero-strength, positive-valence, negative-valence, and
576
- restored-baseline conditions. Positive and negative conditions use
577
- coefficient vectors \((0.8,0,0)\) and \((-0.8,0,0)\). The third
578
- coordinate zero corresponds to intensity 0.5.
579
-
580
- With greedy decoding, the checks require zero-strength and baseline
581
- decoded text/token counts to match, nonzero injections in the positive
582
- and negative cases, restored hook counts, restored baseline text/token
583
- counts, and disabled backbone gradients. Positive and negative outputs
584
- need not differ for these checks to pass. Settings that suppress all
585
- effective intervention are unsuitable for the nonzero-injection checks.
586
-
587
- Smoke mode defaults to the original 128-token allowance and 600-second
588
- time threshold. Its original instruction permits changes in phrasing,
589
- imagery, and emotional expression while preserving the passage's main
590
- subject and recognizable situation. It omits the new repetition penalty,
591
- n-gram guard, and document-length salvage so that existing commands
592
- retain their original generation configuration and compare raw
593
- generations. It saves completed conditions incrementally and marks
594
- \nolinkurl{checks_complete} only after assertions pass. It does not
595
- compare logits, full token sequences, parameter hashes, or independently
596
- measured per-step RMS bounds. Run with ordinary Python rather than
597
- assertion-disabling optimization flags.
598
-
599
- For the November 13 revision, seven CPU policy tests passed, Python and
600
- shell syntax were checked, and CLI loading was verified. Tests cover
601
- such behavior as unchanged requested controls, paragraph allowance
602
- accounting, draft retention, sentence cleanup, and continuing after a
603
- failed chunk. They do not execute the CUDA model. The current revision
604
- has not yet been run on an ARC GPU. A successful GPU run was reported
605
- for an earlier revision on November 12; it is historical evidence, not
606
- validation of the current code.
607
-
608
- \section{Reproduction}\label{reproduction}
609
-
610
- Inside a suitable ARC GPU allocation, from a fresh repository copy:
611
-
612
- \begin{verbatim}
613
- bash setup.sh
614
- source "$(conda info --base)/etc/profile.d/conda.sh"
615
- conda activate "$PWD/.conda"
616
- python run_arc.py --mode smoke --text-file passage.txt \
617
- --output runs/smoke.json
618
- \end{verbatim}
619
-
620
- Setup expects a fresh \nolinkurl{.conda} destination. A populated model
621
- cache or permitted download route is required. Existing compatible
622
- environments can execute the updated source directly.
623
-
624
- To rewrite a document:
625
-
626
- \begin{verbatim}
627
- python run_arc.py --mode rewrite --text-file target.txt \
628
- --geometry shape.json --style Restrained \
629
- --strength 0.47 --budget 0.47 --inertia 0.2 \
630
- --temperature 0 --top-p 0.95 --top-k 40 \
631
- --output runs/rewrite.json
632
- \end{verbatim}
633
-
634
- These strength and budget values illustrate explicit configuration; they
635
- are not an experimentally established optimum. Omitting
636
- \nolinkurl{--geometry} selects the demonstration trajectory. Batch smoke
637
- execution uses
638
- \nolinkurl{sbatch --account=YOUR_ALLOCATION smoke.sbatch}; the
639
- allocation and partition must suit the user's cluster access.
640
-
641
- Archive the repository revision, engine manifest, resolved dependencies,
642
- GPU and driver information, command-line arguments, input, geometry, and
643
- report. The engine identity's \nolinkurl{source_commit} field currently
644
- contains a snapshot label rather than a Git commit hash, so the
645
- repository revision should be recorded separately. The default seed is
646
- zero and TF32 matrix multiplication is disabled, but identical results
647
- across hardware and library versions are not guaranteed.
648
-
649
- \section{Scientific limits and evaluation
650
- requirements}\label{scientific-limits-and-evaluation-requirements}
651
-
652
- The system offers a direct, inspectable intervention, not a demonstrated
653
- emotional matching algorithm. Its main limitations are the small English
654
- calibration set, untested interactions between axes and layers,
655
- open-loop use of absolute targets, and lack of independent output
656
- assessment. The model can change subject matter or factual claims,
657
- especially under Creative instructions or strong perturbations. Stronger
658
- displacement can degrade fluency without improving emotional alignment.
659
-
660
- A proper evaluation should distinguish emotional movement from target
661
- accuracy. Collect independent ratings of input and output along
662
- operationally defined axes, compare requested and observed trajectories,
663
- and report failures and unmodified fallbacks alongside successful
664
- generations. Include unsteered rewriting, prompt-only emotional
665
- instructions, opposite targets, random directions of matched magnitude,
666
- and layer/axis ablations. Keep decoding settings fixed for controlled
667
- comparisons, and separate greedy from sampled experiments.
668
-
669
- Semantic fidelity should be evaluated against the selected style:
670
- Creative permits mutation, whereas Restrained requests factual
671
- preservation. Fluency, coherence across chunks, omitted material,
672
- repetition, length ratios, latency, and memory consumption are separate
673
- outcomes. No automatic similarity score, feedback optimization, or
674
- acceptance threshold is implemented in this runner.
675
-
676
- Changing to a larger model requires new architecture validation, basis
677
- calibration, layer selection, and operating-range experiments. A basis
678
- with three rows and 1,024 columns cannot simply be reused with a
679
- different hidden width or intervention site. Multilingual operation
680
- likewise requires independent calibration and evaluation; same-language
681
- prompt wording alone does not establish it.
682
-
683
- \section{Implementation sources}\label{implementation-sources}
684
-
685
- This report describes the repository's executable operations rather than
686
- relying on another application's interface or documentation.
687
-
688
- \begin{itemize}
689
- \tightlist
690
- \item
691
- \href{https://huggingface.co/will-taggart/AFFECTOR-ARC/blob/main/run_arc.py}{CUDA
692
- runner and smoke protocol}
693
- \item
694
- \href{https://huggingface.co/will-taggart/AFFECTOR-ARC/blob/main/document_run.py}{Document
695
- transformation and incremental output}
696
- \item
697
- \href{https://huggingface.co/will-taggart/AFFECTOR-ARC/blob/main/engine/steering.py}{Calibration,
698
- displacement math, hooks, and decoding}
699
- \item
700
- \href{https://huggingface.co/will-taggart/AFFECTOR-ARC/blob/main/engine/geometry.py}{Geometry
701
- schema and interpolation}
702
- \item
703
- \href{https://huggingface.co/will-taggart/AFFECTOR-ARC/blob/main/engine/documents.py}{Segmentation
704
- and character allowance}
705
- \item
706
- \href{https://huggingface.co/will-taggart/AFFECTOR-ARC/blob/main/engine/rewrite_policy.py}{Rewrite
707
- system prompts}
708
- \item
709
- \href{https://huggingface.co/will-taggart/AFFECTOR-ARC/blob/main/engine/generation.py}{Repetition
710
- detection and draft salvage}
711
- \item
712
- \href{https://huggingface.co/will-taggart/AFFECTOR-ARC/blob/main/ENGINE_MANIFEST.json}{Engine
713
- source hashes}
714
- \item
715
- \href{https://huggingface.co/will-taggart/AFFECTOR-ARC/blob/main/tests/test_generation.py}{Generation
716
- policy tests} and
717
- \href{https://huggingface.co/will-taggart/AFFECTOR-ARC/blob/main/tests/test_document_run.py}{document-run
718
- tests}
719
- \end{itemize}
720
-
721
- \section*{AI assistance disclosure}
722
- This project was created with assistance from GPT-6 Astra and Codex. AI
723
- tools supported software development, testing, and the drafting and
724
- revision of this technical report. William Taggart is responsible for
725
- the project's research decisions and the final software and
726
- documentation. AI assistance does not constitute independent validation
727
- of the implementation or its scientific claims; the validation evidence
728
- and limitations are stated separately in this report.
729
-
730
- \bibliographystyle{ACM-Reference-Format}
731
- \bibliography{references}
732
-
733
- \section*{Suggested citation}
734
- William Taggart. 2026. AFFECTOR-ARC: Emotional Trajectory Control
735
- through Transformer Activation Steering. Technical report. Modern and
736
- Classical Languages and Literatures, Virginia Tech. ACM manuscript
737
- edition, November 13, 2026.
738
- \url{https://huggingface.co/will-taggart/AFFECTOR-ARC/blob/main/TECHNICAL_REPORT.md}
739
-
740
-
741
- \end{document}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
acm/LITERATURE_SOURCES.md DELETED
@@ -1,100 +0,0 @@
1
- # Literature source verification
2
-
3
- Checked November 13, 2026. This is a focused literature selection, not an exhaustive systematic review or independent replication. Bibliographic metadata was checked on arXiv abstract records and compared with the associated HTML/PDF text. The section locations below identify support for the bounded summaries in the reports. Peer-review status is not inferred from arXiv hosting.
4
-
5
- ## R1. Activation Addition: Steering Language Models Without Optimization
6
-
7
- Authors: Alex Turner; Lisa Thiergart; David Udell; Gavin Leech; Ulisse Mini; Monte MacDiarmid.
8
-
9
- Record: [2308.10248v1](https://arxiv.org/abs/2308.10248v1). Paper: [version-specific text](https://arxiv.org/html/2308.10248v1). Version date: 2023-08-20.
10
-
11
- Verification notes: Methods; natural-language control of sentiment, topic, style.
12
-
13
- ## R2. Steering Llama 2 via Contrastive Activation Addition
14
-
15
- Authors: Nina Panickssery; Nick Gabrieli; Julian Schulz; Meg Tong; Evan Hubinger; Alexander Matt Turner.
16
-
17
- Record: [2312.06681v4](https://arxiv.org/abs/2312.06681v4). Paper: [version-specific text](https://arxiv.org/html/2312.06681v4). Version date: 2024-07-05.
18
-
19
- Verification notes: Section 3 and Figure 1; sections 4-7; first submitted 2023.
20
-
21
- ## R3. AI shares emotion with humans across languages and cultures
22
-
23
- Authors: Xiuwen Wu; Hao Wang; Zhiang Yan; Xiaohan Tang; Pengfei Xu; Wai-Ting Siok; Ping Li; Jia-Hong Gao; Bingjiang Lyu; Lang Qin.
24
-
25
- Record: [2506.13978v1](https://arxiv.org/abs/2506.13978v1). Paper: [version-specific text](https://arxiv.org/pdf/2506.13978v1). Version date: 2025-06-11.
26
-
27
- Verification notes: PDF abstract and introduction; emotion-space alignment and steering; no arXiv HTML.
28
-
29
- ## R4. The Effectiveness of Style Vectors for Steering Large Language Models: A Human Evaluation
30
-
31
- Authors: Diaoulé Diallo; Katharina Dworatzyk; Sophie Jentzsch; Peer Schütt; Sabine Theis; Tobias Hecking.
32
-
33
- Record: [2601.21505v1](https://arxiv.org/abs/2601.21505v1). Paper: [version-specific text](https://arxiv.org/html/2601.21505v1). Version date: 2026-01-29.
34
-
35
- Verification notes: Sections V-VII; arXiv record also lists IEEE Access 13 (2025), 191443-191457, DOI 10.1109/ACCESS.2025.3628500.
36
-
37
- ## R5. How Emotion Shapes the Behavior of LLMs and Agents: A Mechanistic Study
38
-
39
- Authors: Moran Sun; Tianlin Li; Yuwei Zheng; Zhenhong Zhou; Aishan Liu; Xianglong Liu; Yang Liu.
40
-
41
- Record: [2604.00005v1](https://arxiv.org/abs/2604.00005v1). Paper: [version-specific text](https://arxiv.org/html/2604.00005v1). Version date: 2026-03-09.
42
-
43
- Verification notes: Sections 3-5; VAD-based E-STEER; date follows submission history rather than ID prefix.
44
-
45
- ## R6. Extracting and Steering Emotion Representations in Small Language Models: A Methodological Comparison
46
-
47
- Authors: Jihoon Jeong.
48
-
49
- Record: [2604.04064v1](https://arxiv.org/abs/2604.04064v1). Paper: [version-specific text](https://arxiv.org/html/2604.04064v1). Version date: 2026-04-05.
50
-
51
- Verification notes: Sections 3 and 5-8; exploratory model-dependent regimes; no independent replication claimed.
52
-
53
- ## R7. Why Are Some Emotions Harder for LLMs? Uncovering the Causal Mechanisms of Emotion Inference via Sparse Autoencoders
54
-
55
- Authors: Bangzhao Shu; Arinjay Singh; Mai ElSherief.
56
-
57
- Record: [2604.25866v3](https://arxiv.org/abs/2604.25866v3). Paper: [version-specific text](https://arxiv.org/html/2604.25866v3). Version date: 2026-10-24.
58
-
59
- Verification notes: Sections 4-6; current v3 title differs from v1 From Syntax to Emotion.
60
-
61
- ## R8. Read-Best Is Not Steer-Best: A Probing--Steering Layer Dissociation in Omni-Modal Large Language Models
62
-
63
- Authors: Yibo Wang; Jisheng Dang; Bimei Wang; Yitao Wu; Wencan Zhang; Hong Peng; Jizhao Liu; Bin Hu; Qi Tian; Tat-Seng Chua.
64
-
65
- Record: [2609.22135v1](https://arxiv.org/abs/2609.22135v1). Paper: [version-specific text](https://arxiv.org/html/2609.22135v1). Version date: 2026-08-24.
66
-
67
- Verification notes: Sections III-V and VIII; date follows submission history rather than ID prefix.
68
-
69
- ## R9. Empathy Is Steerable but Multi-Axial: Mechanism Geometry and Persona Effects in LLMs
70
-
71
- Authors: JuHeon Ha; Byounghan Lee; Yunseo Choi; Kyung-Ah Sohn.
72
-
73
- Record: [2609.15654v1](https://arxiv.org/abs/2609.15654v1). Paper: [version-specific text](https://arxiv.org/html/2609.15654v1). Version date: 2026-09-14.
74
-
75
- Verification notes: Sections 3-4 and 7; EPITOME proxy outcomes; arXiv comments report acceptance to EMNLP 2026 main conference.
76
-
77
- ## R10. Painless Activation Steering: An Automated, Lightweight Approach for Post-Training Large Language Models
78
-
79
- Authors: Sasha Cui; Zhongren Chen.
80
-
81
- Record: [2509.22739v3](https://arxiv.org/abs/2509.22739v3). Paper: [version-specific text](https://arxiv.org/html/2509.22739v3). Version date: 2026-05-15.
82
-
83
- Verification notes: Sections 2-3 and 5; first submitted 2025; v3 checked.
84
-
85
- ## R11. Dynamically Scaled Activation Steering
86
-
87
- Authors: Alex Ferrando; Xavier Suau; Jordi Gonzàlez; Pau Rodriguez.
88
-
89
- Record: [2512.03661v2](https://arxiv.org/abs/2512.03661v2). Paper: [version-specific text](https://arxiv.org/html/2512.03661v2). Version date: 2026-07-30.
90
-
91
- Verification notes: Sections 3-5; first submitted 2025; v2 checked; author names follow arXiv metadata.
92
-
93
- ## R12. Does Steering Break Your Model? A Multi-Dimensional Evaluation Suite for LLM Steering Methods
94
-
95
- Authors: Haotian Yang; Huikang Jiang; Yucheng Wu; Wen-Jie Jiang; Chenpeng Wang; Yibin Lou; Liangming Pan.
96
-
97
- Record: [2610.07722v1](https://arxiv.org/abs/2610.07722v1). Paper: [version-specific text](https://arxiv.org/html/2610.07722v1). Version date: 2026-10-06.
98
-
99
- Verification notes: Sections 3-5; efficacy and side effects under matched evaluation.
100
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
acm/README.md DELETED
@@ -1,21 +0,0 @@
1
- # AFFECTOR-ARC: Emotional Trajectory Control through Transformer Activation Steering
2
-
3
- Uses the official ACM acmart class with manuscript, screen, and nonacm options. This is an independently distributed report, not an assertion of ACM publication or acceptance. No venue, DOI, or copyright transfer is invented.
4
-
5
- ## Build
6
-
7
- With a current TeX Live/MacTeX installation including acmart:
8
-
9
- latexmk -pdf AFFECTOR-ARC-ACM.tex
10
-
11
- Or Tectonic 0.17.0:
12
-
13
- tectonic --keep-logs --keep-intermediates AFFECTOR-ARC-ACM.tex
14
-
15
- The bibliography uses ACM-Reference-Format.bst. The generated .bbl is included; references.bib remains editable. All packages are standard TeX distribution packages. No shell escape is needed. The manuscript layout is single-column; change manuscript to sigconf for a venue requiring two columns, then recheck layout.
16
-
17
- Includes the source Markdown snapshot and citation verification notes. Equations, tables, and citations are native LaTeX. AI disclosure appears immediately before the references.
18
-
19
- Original report: https://huggingface.co/will-taggart/AFFECTOR-ARC/blob/main/TECHNICAL_REPORT.md
20
-
21
- Build verified with Tectonic 0.17.0 and bundled acmart v1.83 (2022/02/19). All 12 bibliography entries resolve.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
acm/references.bib DELETED
@@ -1,120 +0,0 @@
1
- @misc{turner2023actadd,
2
- author = {Alex Turner and Lisa Thiergart and David Udell and Gavin Leech and Ulisse Mini and Monte MacDiarmid},
3
- title = {{Activation Addition: Steering Language Models Without Optimization}},
4
- year = {2023},
5
- eprint = {2308.10248v1},
6
- archivePrefix = {arXiv},
7
- url = {https://arxiv.org/abs/2308.10248v1},
8
- note = {Cited version dated 2023-08-20; metadata checked 2026-11-13}
9
- }
10
-
11
- @misc{panickssery2024caa,
12
- author = {Nina Panickssery and Nick Gabrieli and Julian Schulz and Meg Tong and Evan Hubinger and Alexander Matt Turner},
13
- title = {{Steering Llama 2 via Contrastive Activation Addition}},
14
- year = {2024},
15
- eprint = {2312.06681v4},
16
- archivePrefix = {arXiv},
17
- url = {https://arxiv.org/abs/2312.06681v4},
18
- note = {Cited version dated 2024-07-05; metadata checked 2026-11-13}
19
- }
20
-
21
- @misc{wu2025emotion,
22
- author = {Xiuwen Wu and Hao Wang and Zhiang Yan and Xiaohan Tang and Pengfei Xu and Wai-Ting Siok and Ping Li and Jia-Hong Gao and Bingjiang Lyu and Lang Qin},
23
- title = {{AI shares emotion with humans across languages and cultures}},
24
- year = {2025},
25
- eprint = {2506.13978v1},
26
- archivePrefix = {arXiv},
27
- url = {https://arxiv.org/abs/2506.13978v1},
28
- note = {Cited version dated 2025-06-11; metadata checked 2026-11-13}
29
- }
30
-
31
- @misc{diallo2026style,
32
- author = {Diaoulé Diallo and Katharina Dworatzyk and Sophie Jentzsch and Peer Schütt and Sabine Theis and Tobias Hecking},
33
- title = {{The Effectiveness of Style Vectors for Steering Large Language Models: A Human Evaluation}},
34
- year = {2026},
35
- eprint = {2601.21505v1},
36
- archivePrefix = {arXiv},
37
- url = {https://arxiv.org/abs/2601.21505v1},
38
- note = {Cited version dated 2026-01-29; metadata checked 2026-11-13}
39
- }
40
-
41
- @misc{sun2026emotion,
42
- author = {Moran Sun and Tianlin Li and Yuwei Zheng and Zhenhong Zhou and Aishan Liu and Xianglong Liu and Yang Liu},
43
- title = {{How Emotion Shapes the Behavior of LLMs and Agents: A Mechanistic Study}},
44
- year = {2026},
45
- eprint = {2604.00005v1},
46
- archivePrefix = {arXiv},
47
- url = {https://arxiv.org/abs/2604.00005v1},
48
- note = {Cited version dated 2026-03-09; metadata checked 2026-11-13}
49
- }
50
-
51
- @misc{jeong2026emotion,
52
- author = {Jihoon Jeong},
53
- title = {{Extracting and Steering Emotion Representations in Small Language Models: A Methodological Comparison}},
54
- year = {2026},
55
- eprint = {2604.04064v1},
56
- archivePrefix = {arXiv},
57
- url = {https://arxiv.org/abs/2604.04064v1},
58
- note = {Cited version dated 2026-04-05; metadata checked 2026-11-13}
59
- }
60
-
61
- @misc{shu2026emotion,
62
- author = {Bangzhao Shu and Arinjay Singh and Mai ElSherief},
63
- title = {{Why Are Some Emotions Harder for LLMs? Uncovering the Causal Mechanisms of Emotion Inference via Sparse Autoencoders}},
64
- year = {2026},
65
- eprint = {2604.25866v3},
66
- archivePrefix = {arXiv},
67
- url = {https://arxiv.org/abs/2604.25866v3},
68
- note = {Cited version dated 2026-10-24; metadata checked 2026-11-13}
69
- }
70
-
71
- @misc{wang2026readbest,
72
- author = {Yibo Wang and Jisheng Dang and Bimei Wang and Yitao Wu and Wencan Zhang and Hong Peng and Jizhao Liu and Bin Hu and Qi Tian and Tat-Seng Chua},
73
- title = {{Read-Best Is Not Steer-Best: A Probing--Steering Layer Dissociation in Omni-Modal Large Language Models}},
74
- year = {2026},
75
- eprint = {2609.22135v1},
76
- archivePrefix = {arXiv},
77
- url = {https://arxiv.org/abs/2609.22135v1},
78
- note = {Cited version dated 2026-08-24; metadata checked 2026-11-13}
79
- }
80
-
81
- @misc{ha2026empathy,
82
- author = {JuHeon Ha and Byounghan Lee and Yunseo Choi and Kyung-Ah Sohn},
83
- title = {{Empathy Is Steerable but Multi-Axial: Mechanism Geometry and Persona Effects in LLMs}},
84
- year = {2026},
85
- eprint = {2609.15654v1},
86
- archivePrefix = {arXiv},
87
- url = {https://arxiv.org/abs/2609.15654v1},
88
- note = {Cited version dated 2026-09-14; metadata checked 2026-11-13}
89
- }
90
-
91
- @misc{cui2025pas,
92
- author = {Sasha Cui and Zhongren Chen},
93
- title = {{Painless Activation Steering: An Automated, Lightweight Approach for Post-Training Large Language Models}},
94
- year = {2025},
95
- eprint = {2509.22739v3},
96
- archivePrefix = {arXiv},
97
- url = {https://arxiv.org/abs/2509.22739v3},
98
- note = {Cited version dated 2026-05-15; metadata checked 2026-11-13}
99
- }
100
-
101
- @misc{ferrando2025dsas,
102
- author = {Alex Ferrando and Xavier Suau and Jordi Gonzàlez and Pau Rodriguez},
103
- title = {{Dynamically Scaled Activation Steering}},
104
- year = {2025},
105
- eprint = {2512.03661v2},
106
- archivePrefix = {arXiv},
107
- url = {https://arxiv.org/abs/2512.03661v2},
108
- note = {Cited version dated 2026-07-30; metadata checked 2026-11-13}
109
- }
110
-
111
- @misc{yang2026steerscope,
112
- author = {Haotian Yang and Huikang Jiang and Yucheng Wu and Wen-Jie Jiang and Chenpeng Wang and Yibin Lou and Liangming Pan},
113
- title = {{Does Steering Break Your Model? A Multi-Dimensional Evaluation Suite for LLM Steering Methods}},
114
- year = {2026},
115
- eprint = {2610.07722v1},
116
- archivePrefix = {arXiv},
117
- url = {https://arxiv.org/abs/2610.07722v1},
118
- note = {Cited version dated 2026-10-06; metadata checked 2026-11-13}
119
- }
120
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
acm/source.md DELETED
@@ -1,357 +0,0 @@
1
- # AFFECTOR-ARC: Emotional Trajectory Control through Transformer Activation Steering
2
-
3
- **William Taggart**
4
- Modern and Classical Languages and Literatures, Virginia Tech
5
- Email: wtaggart@vt.edu
6
- **Technical report · November 13, 2026 · Revision 0.2**
7
-
8
- ## Abstract
9
-
10
- AFFECTOR-ARC is an experimental command-line system for rewriting text under a user-defined emotional trajectory. It runs a frozen Qwen3.5-0.8B model on an NVIDIA GPU and changes selected internal activations during generation. A trajectory specifies valence, inward/outward emotional orientation, and intensity across normalized document position. Small sets of contrasting English passages establish three activation directions at each selected transformer layer. At inference time, the requested coordinates determine a weighted displacement, scaled relative to the current hidden-state magnitude, smoothed across decoding steps, and constrained by an RMS budget. Paired hooks apply this displacement to both the feed-forward input and its residual path. Document rewriting combines these interventions with four editing styles, sentence-aware segmentation, bounded generation, and incremental reporting. This report derives the mechanism from its implemented operations and distinguishes numerical controls from emotional outcomes. CPU policy tests pass; the current revision still requires CUDA validation. No measured claim of emotional accuracy, semantic preservation, or multilingual effectiveness is made.
11
-
12
- ## Literature review: activation steering and emotion
13
-
14
- This focused review covers twelve papers, emphasizing 2025-2026 research and retaining two methodological foundations. Titles, author lists, version histories, and the claims summarized here were checked against arXiv records and the corresponding paper text on November 13, 2026. The cited versions are fixed below; availability on arXiv alone does not establish peer review. The implications for this project are research motivations, not evidence that its implementation reproduces these results.
15
-
16
- **From activation differences to behavioral control.** Activation steering changes internal model states during inference while leaving the backbone weights fixed. Turner et al. derive intervention vectors from contrasting prompts; Panickssery et al. average differences across positive and negative behavioral examples. These provide the methodological basis for contrastive calibration, but do not validate a particular emotional coordinate system or insertion site. [Turner et al., 2023 (R1)](https://arxiv.org/abs/2308.10248v1); [Panickssery et al., 2024 (R2)](https://arxiv.org/abs/2312.06681v4).
17
-
18
- **Emotional expression and human judgment.** Wu et al. relate model emotion spaces to human valence/arousal judgments and report concept-based steering across linguistic-cultural settings. Diallo et al. evaluate perceived emotional intensity and text quality with human raters, finding that effects depend on emotion and steering strength. Together they motivate separate measures of emotional movement and readability. Their axes and numerical strengths cannot be assumed equivalent to this project's inward/outward direction or RMS-scaled controls. [Wu et al., 2025 (R3)](https://arxiv.org/abs/2506.13978v1); [Diallo et al., 2026 arXiv version (R4)](https://arxiv.org/abs/2601.21505v1).
19
-
20
- **Emotion can affect more than tone.** Sun et al.'s E-STEER uses valence-arousal-dominance interventions to study reasoning, generation, safety, and agent behavior, reporting non-monotonic relationships. Jeong's small-model comparison reports both coherent emotional changes and degeneration, including repetition, depending on extraction method and architecture. These findings motivate reporting failed generations alongside successes and testing strength sweeps rather than assuming that larger perturbations improve emotional fit. Neither study establishes an operating range for this implementation. [Sun et al., 2026 (R5)](https://arxiv.org/abs/2604.00005v1); [Jeong, 2026 (R6)](https://arxiv.org/abs/2604.04064v1).
21
-
22
- **Reading an emotion is different from controlling it.** Shu et al.'s revised study identifies uneven causal organization of sparse features across emotion categories and tests interventions for emotion recognition. Wang et al. show, in omni-modal models, that layers with strong emotion-probing accuracy need not be the best intervention layers. Recognition results therefore inform evaluator design, while layer selection for rewriting still requires causal tests on generated text. Neither finding licenses importing layer indices across architectures. [Shu et al., 2026, v3 (R7)](https://arxiv.org/abs/2604.25866v3); [Wang et al., 2026 (R8)](https://arxiv.org/abs/2609.22135v1).
23
-
24
- **Multiple axes and adaptive control.** Ha et al. find that supportive-empathy directions are only partially separable: intervening on one can shift other EPITOME proxy scores. Cui and Chen automate vector extraction from labeled data, with task-dependent benefits. Ferrando et al. adapt intervention strength to context, studying the balance between toxicity mitigation and retained utility. These approaches motivate broader calibration, cross-axis tests, and future adaptive control. The present coordinate mixture is not an implementation of their learned selectors or context-dependent gates. [Ha et al., 2026 (R9)](https://arxiv.org/abs/2609.15654v1); [Cui and Chen, 2025, revised 2026 (R10)](https://arxiv.org/abs/2509.22739v3); [Ferrando et al., 2025, revised 2026 (R11)](https://arxiv.org/abs/2512.03661v2).
25
-
26
- **Evaluation must include costs as well as target effects.** Yang et al.'s SteerScope evaluates steering efficacy jointly with side effects, generalization, and data dependence. In its tested settings, activation methods do not dominate prompt steering on the efficacy/side-effect trade-off. For this project, the resulting evaluation priorities are prompt-only and unsteered baselines, blinded emotional and quality ratings, content-change assessment appropriate to the rewrite style, and complete accounting of repetition, truncation, and original-text fallbacks. This is an evaluation agenda, not a completed benchmark. [Yang et al., 2026 (R12)](https://arxiv.org/abs/2610.07722v1).
27
-
28
- ## 1. Problem and operating principle
29
-
30
- A language model generates text by repeatedly estimating a distribution over the next token. Its intermediate hidden states are numerical vectors that contribute to those estimates. Changing a hidden state can change the continuation even when the input text and the model's stored parameters remain fixed.
31
-
32
- AFFECTOR-ARC uses this property to influence the emotional expression of a rewrite. The user supplies an input document and a sequence of emotional coordinates. The software maps positions in the input to positions on that sequence, converts the coordinates into activation displacements, and applies the displacements while generating each rewritten passage.
33
-
34
- The term **geometry** means an ordered path through a three-dimensional coordinate space, together with layer settings and optional calibration matrices. It does not mean that the software reconstructs a solid surface or applies geometric constraints directly to words. A text's emotional interpretation, a numerical target, and a model's hidden states are distinct objects. The calibration is an experimental mapping between them.
35
-
36
- Two execution modes are available:
37
-
38
- - **Rewrite:** process an entire UTF-8 text document in chunks, write the transformed text, and record attempts and failures.
39
- - **Smoke:** run five controlled generation conditions to check basic intervention and cleanup behavior.
40
-
41
- The interface is a command-line runner for a CUDA allocation. It does not provide a desktop interface, a hosted API service, automatic emotional scoring, or conversational history.
42
-
43
- ## 2. Runtime and data flow
44
-
45
- The runner loads `Qwen/Qwen3.5-0.8B` at revision `2fc06364715b967f1860aea9cf38778875588b17`. The implementation uses `Qwen3_5ForConditionalGeneration`, its text decoder layers, float32 computation, eager attention, and the first process-visible CUDA device. It checks for 24 decoder layers; the geometry and calibration code assume hidden width 1,024. The backbone is in evaluation mode, its parameters have gradients disabled, and calibration and generation run without gradient tracking.
46
-
47
- The execution sequence is:
48
-
49
- ```text
50
- Read text and geometry settings
51
- → validate controls
52
- → load the pinned model on CUDA
53
- → calibrate the selected layers
54
- → select rewrite or smoke mode
55
- → generate with temporary activation hooks
56
- → remove hooks and save results
57
- ```
58
-
59
- Source files are distributed with the repository. `ENGINE_MANIFEST.json` records hashes for the bundled engine snapshot. Model weights are downloaded separately. The setup script creates a Python 3.12 environment, installs PyTorch from the CUDA 12.6 wheel index, pins Transformers to 5.22.2, runs the CPU policy tests, and records installed packages in `environment-resolved.txt`. PyTorch and several support packages are resolved during setup rather than fully locked in advance.
60
-
61
- The example Slurm script requests one GPU, eight CPU cores, 64 GB of host memory, and one hour. These are scheduling requests, not measured minimum requirements. Users must supply an allocation and a suitable model cache. The runner is single-process and single-GPU; it is not a concurrent inference server.
62
-
63
- ## 3. Emotional coordinates and trajectory interpolation
64
-
65
- A trajectory point is
66
-
67
- $$
68
- p_j=(t_j,v_j,d_j,i_j),
69
- $$
70
-
71
- where positions $t_j$ increase strictly within $[0,1]$. Valence $v_j$ ranges from negative to positive in $[-1,1]$. Direction $d_j$ ranges from inward-oriented to outward-oriented emotion in $[-1,1]$. Intensity $i_j$ ranges from low to high in $[0,1]$. Direction is an operational contrast concerning emotional orientation; it is not dominance, speaker identification, or positive versus negative sentiment.
72
-
73
- Between adjacent points, the software linearly interpolates each emotional coordinate. Before the first point and after the last, it uses the endpoint values. The coefficient vector passed to the activation module is
74
-
75
- $$
76
- c(t)=\bigl(v(t),d(t),2i(t)-1\bigr).
77
- $$
78
-
79
- Consequently, intensity 0.5 contributes a zero intensity coefficient; intensity zero contributes a negative coefficient. These are control conventions, not empirically established psychological units.
80
-
81
- For a chunk occupying character offsets $[a,b)$ in an input of length $N$, its target is evaluated at
82
-
83
- $$
84
- t=\frac{a+b}{2N}.
85
- $$
86
-
87
- That target remains constant throughout generation of the chunk. A long trajectory can therefore guide a short document without pairing source and target paragraphs one to one. Only the positions sampled by the target chunks are used; narrow changes between those positions may be missed. The mapping uses original input positions, not positions in the expanding or contracting output. Adjacent chunks receive separate generation calls without prior rewritten chunks as conversational context.
88
-
89
- The runner accepts a native geometry JSON file and supported analysis JSON structures containing emotional coordinates. It recalibrates the basis on the current CUDA runtime even when the imported geometry includes one. With no geometry argument, it uses a demonstration path with three points; this path is not inferred from the input document.
90
-
91
- ## 4. Estimating activation directions
92
-
93
- A hidden state at a selected layer is a vector in $\mathbb{R}^{1024}$. To estimate a direction associated with one emotional contrast, the system compares the model's states for paired passages that differ in the desired property.
94
-
95
- There are four hand-authored English pairs for each of three axes. For layer $\ell$, axis $j$, and pair $k$, let $h^+_{\ell,j,k}$ and $h^-_{\ell,j,k}$ denote the captured states for the two members. The mean difference is
96
-
97
- $$
98
- u_{\ell,j}=\frac14\sum_{k=1}^{4}
99
- \left(h^+_{\ell,j,k}-h^-_{\ell,j,k}\right).
100
- $$
101
-
102
- For a vector of dimension $D$, define root-mean-square magnitude as
103
-
104
- $$
105
- \operatorname{RMS}(x)=\sqrt{\frac1D\sum_{r=1}^{D}x_r^2}.
106
- $$
107
-
108
- The normalized direction is
109
-
110
- $$
111
- b_{\ell,j}=\frac{u_{\ell,j}}
112
- {\max(\operatorname{RMS}(u_{\ell,j}),10^{-8})}.
113
- $$
114
-
115
- The three directions form the rows of a matrix $B_\ell\in\mathbb{R}^{3\times1024}$. Calibration captures the final chat-formatted prompt position immediately before `post_attention_layernorm`. It does not average all token positions. All selected layers are captured during the same 24 forward passes: three axes, four pairs, and two members per pair.
116
-
117
- Default layers are 8, 16, and 23, using zero-based indexing, with weights 1, 1, and 0.5. This is subtraction, averaging, and normalization; there is no training optimizer, backbone fine-tuning, orthogonalization, or outcome-based fitting. The small calibration set may encode vocabulary, topic, or perspective along with emotion. Normalizing the vectors does not establish that the axes are independent or valid across languages.
118
-
119
- ## 5. From coordinates to bounded displacements
120
-
121
- ### 5.1 Selecting and weighting axes
122
-
123
- Let $T$ be axis temperature. Each coordinate first receives magnitude
124
-
125
- $$
126
- q_j=|c_j|^{1/T}.
127
- $$
128
-
129
- Axes are sorted by this magnitude. The algorithm retains at most `axis_top_k` axes and stops adding axes after their accumulated magnitude reaches `axis_mass` times the total magnitude. Selection includes the axis that crosses the threshold. The retained coefficients are
130
-
131
- $$
132
- a_j=\operatorname{sign}(c_j)q_jm_j,
133
- $$
134
-
135
- where $m_j$ is one for a retained axis and zero otherwise. Coefficients are not renormalized after selection. For coordinate magnitudes below one, $T<1$ reduces their magnitudes and emphasizes relative differences; $T>1$ increases them and makes those differences less pronounced. These operations affect three activation coefficients, not token probabilities.
136
-
137
- ### 5.2 Strength, inertia, and budget
138
-
139
- For the current final-token state $h_{\ell,n}$, strength $s$, and layer weight $w_\ell$, the raw displacement is
140
-
141
- $$
142
- r_{\ell,n}=s\,w_\ell\operatorname{RMS}(h_{\ell,n})(aB_\ell).
143
- $$
144
-
145
- Multiplication by the current state's RMS expresses the intervention relative to the layer's numerical scale. A negative layer weight reverses the mixed direction at that layer.
146
-
147
- On the first decoding step, the smoothed displacement equals $r_{\ell,n}$. On later steps, inertia $\rho$ combines the previous applied displacement with the new raw displacement:
148
-
149
- $$
150
- \widetilde\delta_{\ell,n}=\rho\delta_{\ell,n-1}+(1-\rho)r_{\ell,n}.
151
- $$
152
-
153
- Budget $\beta$ then limits the RMS ratio:
154
-
155
- $$
156
- \delta_{\ell,n}=\widetilde\delta_{\ell,n}
157
- \min\left(1,
158
- \frac{\beta\operatorname{RMS}(h_{\ell,n})}
159
- {\max(\operatorname{RMS}(\widetilde\delta_{\ell,n}),10^{-12})}
160
- \right).
161
- $$
162
-
163
- Strength determines the proposed displacement; budget supplies its ceiling. Raising the budget has no effect when the proposed displacement already fits below it. Budget 1 permits a displacement as large in RMS as the hidden state itself. It is not a token allowance, a semantic-change quota, or a guarantee of stronger emotional accuracy. Inertia uses the previous already-capped displacement and resets with each new generation call.
164
-
165
- ### 5.3 Intervention site
166
-
167
- Let $h$ denote the state entering the feed-forward portion of a decoder block. Without intervention, that portion computes
168
-
169
- $$
170
- y=h+\operatorname{FFN}(\operatorname{Norm}(h)).
171
- $$
172
-
173
- The implemented intervention produces
174
-
175
- $$
176
- y=(h+\delta)+\operatorname{FFN}(\operatorname{Norm}(h+\delta)).
177
- $$
178
-
179
- A pre-hook adds $\delta$ to the normalization input; a block-output hook adds the same displacement to the residual result. Adding a vector only after an unchanged feed-forward computation would have a different effect. Only the final prompt position is modified during prefill; cached decoding modifies the current generated position. The module does not wait for specific words or phrases. Generation hooks are removed in a `finally` block.
180
-
181
- This is an open-loop intervention. Coefficients come from the requested absolute coordinates, not the difference between a measured output emotion and the target. A zero coefficient adds no intervention on that axis; it does not actively neutralize emotion already expressed by the model.
182
-
183
- ## 6. User controls and rewrite instructions
184
-
185
- | Control | Default without an imported override | Function |
186
- |---|---:|---|
187
- | Strength | 0.12 | Scale the proposed activation displacement |
188
- | Budget | 0.20 | Cap displacement RMS relative to hidden-state RMS |
189
- | Inertia | 0.20 | Weight the preceding applied displacement |
190
- | Axis top-k | 3 | Maximum number of retained emotional axes |
191
- | Axis mass | 1.0 | Cumulative magnitude threshold for axis selection |
192
- | Axis temperature | 1.0 | Exponent control for emotional-axis magnitudes |
193
- | Temperature | 0 | Select greedy decoding or token sampling |
194
- | Top-p | 0.95 | Probability-mass cutoff when sampling |
195
- | Top-k | 40 | Token candidate count when sampling |
196
- | Base output tokens | 512 | Initial generation allowance, expanded in rewrite mode |
197
- | Time limit | 120 seconds | Per-generation stopping threshold |
198
-
199
- The CLI overrides only the activation settings explicitly supplied; other settings come from the imported geometry or defaults. Validation permits strength 0–2, budget 0–1, inertia 0–0.99, axis top-k 1–3, axis mass 0.01–1, and axis temperature 0.1–3. These accepted ranges are not validated operating recommendations. The terminal displays the warning: **Extreme values for strength, budget, and inertia may cause generation failures.**
200
-
201
- At temperature zero, decoding is greedy and top-p/top-k are inactive. At positive temperature, they affect token selection after the model computes its scores. They do not replace or modify the three-axis activation selection mechanism.
202
-
203
- Four system-prompt styles provide separate editing constraints:
204
-
205
- - **Minimal:** change a few words or phrases while preserving nearly all wording and sentence order.
206
- - **Restrained:** adjust tone through wording, rhythm, and emphasis while preserving central meaning, facts, terminology, and structure; invent no scenes or metaphors.
207
- - **Balanced:** allow a clearer emotional shift and modest figurative language while retaining central meaning, facts, people, and events.
208
- - **Creative:** permit changes to meaning, imagery, and events, while requesting concise output in the same language.
209
-
210
- Restrained is the default in rewrite mode. Smoke mode retains its original general rewriting instruction unless a style is explicitly selected. Each prompt requests complete sentences and treats supplied text as material rather than instructions. A per-chunk suffix specifies the original character count and hard character allowance. Numerical emotional coordinates are not inserted into these prompts; the coordinates act through hidden states. Prompt instructions influence generation but are not formal semantic guarantees. The runner has no semantic-equivalence rejection filter and does not lower steering settings automatically.
211
-
212
- ## 7. Segmentation, length control, and repetition
213
-
214
- The runner reads and trims the outer whitespace of a UTF-8 text file. Blank lines define paragraphs. Long paragraphs are split using a 700-character ceiling, preferring sentence punctuation when a suitable boundary exists, then whitespace, and finally a hard split. This is a punctuation heuristic, not a linguistic sentence parser. Original whitespace between chunks is preserved during output assembly.
215
-
216
- Within each original paragraph, the character ceiling is 125% of the original span processed so far. If $s$ is the first chunk's start, $b_j$ the current chunk's end, and $U_j$ the output characters and intervening whitespace already used, the current allowance is
217
-
218
- $$
219
- L_j=\max\left(0,\left\lfloor1.25(b_j-s)\right\rfloor-U_j\right).
220
- $$
221
-
222
- Unused allowance carries forward within that paragraph. It cannot be borrowed from future chunks or transferred across a blank-line paragraph boundary. Character counts are Python string lengths, not word counts, encoded byte counts, or model-token counts.
223
-
224
- Generation aims for the original length. Starting at 85% of the current input chunk's characters, a recognized sentence ending can stop generation. A separate hard character threshold prevents excessive expansion. The token allowance is
225
-
226
- $$
227
- K_j=\min\left(2048,\max(K_{\mathrm{base}},L_j)\right),
228
- $$
229
-
230
- which supplies decoding headroom but does not imply one token equals one character. The time threshold is checked between decoding steps and cannot interrupt a blocked GPU kernel immediately.
231
-
232
- Decoding also uses a repetition penalty of 1.1 and an eight-token no-repeat n-gram constraint. A text-level detector checks every eight generation steps for repeated three- to six-word sequences appearing at least four times in the last 100 words, or a short compact character pattern repeated at least six times in the last 240 characters. These heuristics can miss some loops and can flag intentional repetition.
233
-
234
- After a generation attempt, the runner checks for repetition, empty output, excessive length, and an unfinished ending. A problematic draft is reduced to a complete, nonrepetitive sentence prefix within its allowance. If none exists, the original chunk is retained and flagged. The returned draft remains in the report's attempt record before sentence salvage. However, the engine has already clipped it to the hard character allowance; the report is not a lossless record of characters beyond that boundary.
235
-
236
- Sentence cleanup prevents chopped words from being joined directly to the next passage, but it may omit ideas from the tail of a draft. Neither punctuation recognition nor output-size compliance establishes completeness of meaning.
237
-
238
- ## 8. Failure handling and output artifacts
239
-
240
- Each chunk receives one generation attempt at the requested activation settings. A caught generation exception is recorded; the original chunk remains in the assembled text and processing continues. Calibration failures, invalid inputs, filesystem failures, and process termination are outside this per-chunk recovery mechanism and can stop a run. A persistent device failure may cause subsequent chunks to fail as well.
241
-
242
- After each processed chunk, the runner writes:
243
-
244
- 1. An atomic JSON report containing the input, geometry, calibration basis, runtime identity, style, sampling settings, character spans, target coordinates, and per-chunk records.
245
- 2. A matching plain-text file containing completed rewrites plus original text at unprocessed or retained positions.
246
-
247
- Successful generation records include stopping reason, token count, elapsed time, activation-injection count, and mean displacement RMS. Attempt records retain returned drafts, effective controls, detected issues, and exceptions where applicable. At normal completion the report adds failure and review counts. `complete` means every chunk was processed, not that every chunk was successfully rewritten or emotionally accurate.
248
-
249
- JSON writes use temporary-file replacement. The companion text file is written normally and may be incomplete if interrupted during that write. Reports are incremental records, not automatic resume checkpoints: rerunning starts over and overwrites the selected output paths. Use a distinct output filename for each experiment. Reports contain the input text and should be treated as document-bearing artifacts.
250
-
251
- ## 9. Engineering checks and evidence
252
-
253
- Smoke mode is the default and operates on one supplied passage. It runs baseline, zero-strength, positive-valence, negative-valence, and restored-baseline conditions. Positive and negative conditions use coefficient vectors $(0.8,0,0)$ and $(-0.8,0,0)$. The third coordinate zero corresponds to intensity 0.5.
254
-
255
- With greedy decoding, the checks require zero-strength and baseline decoded text/token counts to match, nonzero injections in the positive and negative cases, restored hook counts, restored baseline text/token counts, and disabled backbone gradients. Positive and negative outputs need not differ for these checks to pass. Settings that suppress all effective intervention are unsuitable for the nonzero-injection checks.
256
-
257
- Smoke mode defaults to the original 128-token allowance and 600-second time threshold. Its original instruction permits changes in phrasing, imagery, and emotional expression while preserving the passage’s main subject and recognizable situation. It omits the new repetition penalty, n-gram guard, and document-length salvage so that existing commands retain their original generation configuration and compare raw generations. It saves completed conditions incrementally and marks `checks_complete` only after assertions pass. It does not compare logits, full token sequences, parameter hashes, or independently measured per-step RMS bounds. Run with ordinary Python rather than assertion-disabling optimization flags.
258
-
259
- For the November 13 revision, seven CPU policy tests passed, Python and shell syntax were checked, and CLI loading was verified. Tests cover such behavior as unchanged requested controls, paragraph allowance accounting, draft retention, sentence cleanup, and continuing after a failed chunk. They do not execute the CUDA model. The current revision has not yet been run on an ARC GPU. A successful GPU run was reported for an earlier revision on November 12; it is historical evidence, not validation of the current code.
260
-
261
- ## 10. Reproduction
262
-
263
- Inside a suitable ARC GPU allocation, from a fresh repository copy:
264
-
265
- ```bash
266
- bash setup.sh
267
- source "$(conda info --base)/etc/profile.d/conda.sh"
268
- conda activate "$PWD/.conda"
269
- python run_arc.py --mode smoke --text-file passage.txt \
270
- --output runs/smoke.json
271
- ```
272
-
273
- Setup expects a fresh `.conda` destination. A populated model cache or permitted download route is required. Existing compatible environments can execute the updated source directly.
274
-
275
- To rewrite a document:
276
-
277
- ```bash
278
- python run_arc.py --mode rewrite --text-file target.txt \
279
- --geometry shape.json --style Restrained \
280
- --strength 0.47 --budget 0.47 --inertia 0.2 \
281
- --temperature 0 --top-p 0.95 --top-k 40 \
282
- --output runs/rewrite.json
283
- ```
284
-
285
- These strength and budget values illustrate explicit configuration; they are not an experimentally established optimum. Omitting `--geometry` selects the demonstration trajectory. Batch smoke execution uses `sbatch --account=YOUR_ALLOCATION smoke.sbatch`; the allocation and partition must suit the user's cluster access.
286
-
287
- Archive the repository revision, engine manifest, resolved dependencies, GPU and driver information, command-line arguments, input, geometry, and report. The engine identity's `source_commit` field currently contains a snapshot label rather than a Git commit hash, so the repository revision should be recorded separately. The default seed is zero and TF32 matrix multiplication is disabled, but identical results across hardware and library versions are not guaranteed.
288
-
289
- ## 11. Scientific limits and evaluation requirements
290
-
291
- The system offers a direct, inspectable intervention, not a demonstrated emotional matching algorithm. Its main limitations are the small English calibration set, untested interactions between axes and layers, open-loop use of absolute targets, and lack of independent output assessment. The model can change subject matter or factual claims, especially under Creative instructions or strong perturbations. Stronger displacement can degrade fluency without improving emotional alignment.
292
-
293
- A proper evaluation should distinguish emotional movement from target accuracy. Collect independent ratings of input and output along operationally defined axes, compare requested and observed trajectories, and report failures and unmodified fallbacks alongside successful generations. Include unsteered rewriting, prompt-only emotional instructions, opposite targets, random directions of matched magnitude, and layer/axis ablations. Keep decoding settings fixed for controlled comparisons, and separate greedy from sampled experiments.
294
-
295
- Semantic fidelity should be evaluated against the selected style: Creative permits mutation, whereas Restrained requests factual preservation. Fluency, coherence across chunks, omitted material, repetition, length ratios, latency, and memory consumption are separate outcomes. No automatic similarity score, feedback optimization, or acceptance threshold is implemented in this runner.
296
-
297
- Changing to a larger model requires new architecture validation, basis calibration, layer selection, and operating-range experiments. A basis with three rows and 1,024 columns cannot simply be reused with a different hidden width or intervention site. Multilingual operation likewise requires independent calibration and evaluation; same-language prompt wording alone does not establish it.
298
-
299
- ## Implementation sources
300
-
301
- This report describes the repository's executable operations rather than relying on another application's interface or documentation.
302
-
303
- - [CUDA runner and smoke protocol](run_arc.py)
304
- - [Document transformation and incremental output](document_run.py)
305
- - [Calibration, displacement math, hooks, and decoding](engine/steering.py)
306
- - [Geometry schema and interpolation](engine/geometry.py)
307
- - [Segmentation and character allowance](engine/documents.py)
308
- - [Rewrite system prompts](engine/rewrite_policy.py)
309
- - [Repetition detection and draft salvage](engine/generation.py)
310
- - [Engine source hashes](ENGINE_MANIFEST.json)
311
- - [Generation policy tests](tests/test_generation.py) and [document-run tests](tests/test_document_run.py)
312
-
313
- ## AI assistance disclosure
314
-
315
- This project was created with assistance from GPT-6 Astra and Codex. AI tools supported software development, testing, and the drafting and revision of this technical report. William Taggart is responsible for the project's research decisions and the final software and documentation. AI assistance does not constitute independent validation of the implementation or its scientific claims; the validation evidence and limitations are stated separately in this report.
316
-
317
- ## Research references
318
-
319
- Version-specific arXiv records are linked below. Years distinguish original release from later revision where applicable. These research references supplement the implementation and infrastructure sources elsewhere in this report. Reusable citations: [BibTeX](references.bib). Verification details: [source-check notes](LITERATURE_SOURCES.md).
320
-
321
- **R1.** Alex Turner; Lisa Thiergart; David Udell; Gavin Leech; Ulisse Mini; Monte MacDiarmid. 2023. Activation Addition: Steering Language Models Without Optimization. [arXiv:2308.10248v1](https://arxiv.org/abs/2308.10248v1). Cited version dated 2023-08-20.
322
-
323
- **R2.** Nina Panickssery; Nick Gabrieli; Julian Schulz; Meg Tong; Evan Hubinger; Alexander Matt Turner. 2024. Steering Llama 2 via Contrastive Activation Addition. [arXiv:2312.06681v4](https://arxiv.org/abs/2312.06681v4). Cited version dated 2024-07-05.
324
-
325
- **R3.** Xiuwen Wu; Hao Wang; Zhiang Yan; Xiaohan Tang; Pengfei Xu; Wai-Ting Siok; Ping Li; Jia-Hong Gao; Bingjiang Lyu; Lang Qin. 2025. AI shares emotion with humans across languages and cultures. [arXiv:2506.13978v1](https://arxiv.org/abs/2506.13978v1). Cited version dated 2025-06-11.
326
-
327
- **R4.** Diaoulé Diallo; Katharina Dworatzyk; Sophie Jentzsch; Peer Schütt; Sabine Theis; Tobias Hecking. 2026. The Effectiveness of Style Vectors for Steering Large Language Models: A Human Evaluation. [arXiv:2601.21505v1](https://arxiv.org/abs/2601.21505v1). Cited version dated 2026-01-29. ArXiv record lists IEEE Access 13 (2025), 191443-191457; DOI: 10.1109/ACCESS.2025.3628500.
328
-
329
- **R5.** Moran Sun; Tianlin Li; Yuwei Zheng; Zhenhong Zhou; Aishan Liu; Xianglong Liu; Yang Liu. 2026. How Emotion Shapes the Behavior of LLMs and Agents: A Mechanistic Study. [arXiv:2604.00005v1](https://arxiv.org/abs/2604.00005v1). Cited version dated 2026-03-09.
330
-
331
- **R6.** Jihoon Jeong. 2026. Extracting and Steering Emotion Representations in Small Language Models: A Methodological Comparison. [arXiv:2604.04064v1](https://arxiv.org/abs/2604.04064v1). Cited version dated 2026-04-05.
332
-
333
- **R7.** Bangzhao Shu; Arinjay Singh; Mai ElSherief. 2026. Why Are Some Emotions Harder for LLMs? Uncovering the Causal Mechanisms of Emotion Inference via Sparse Autoencoders. [arXiv:2604.25866v3](https://arxiv.org/abs/2604.25866v3). Cited version dated 2026-10-24.
334
-
335
- **R8.** Yibo Wang; Jisheng Dang; Bimei Wang; Yitao Wu; Wencan Zhang; Hong Peng; Jizhao Liu; Bin Hu; Qi Tian; Tat-Seng Chua. 2026. Read-Best Is Not Steer-Best: A Probing--Steering Layer Dissociation in Omni-Modal Large Language Models. [arXiv:2609.22135v1](https://arxiv.org/abs/2609.22135v1). Cited version dated 2026-08-24.
336
-
337
- **R9.** JuHeon Ha; Byounghan Lee; Yunseo Choi; Kyung-Ah Sohn. 2026. Empathy Is Steerable but Multi-Axial: Mechanism Geometry and Persona Effects in LLMs. [arXiv:2609.15654v1](https://arxiv.org/abs/2609.15654v1). Cited version dated 2026-09-14. ArXiv comments report acceptance to the EMNLP 2026 main conference.
338
-
339
- **R10.** Sasha Cui; Zhongren Chen. 2025. Painless Activation Steering: An Automated, Lightweight Approach for Post-Training Large Language Models. [arXiv:2509.22739v3](https://arxiv.org/abs/2509.22739v3). Cited version dated 2026-05-15.
340
-
341
- **R11.** Alex Ferrando; Xavier Suau; Jordi Gonzàlez; Pau Rodriguez. 2025. Dynamically Scaled Activation Steering. [arXiv:2512.03661v2](https://arxiv.org/abs/2512.03661v2). Cited version dated 2026-07-30.
342
-
343
- **R12.** Haotian Yang; Huikang Jiang; Yucheng Wu; Wen-Jie Jiang; Chenpeng Wang; Yibin Lou; Liangming Pan. 2026. Does Steering Break Your Model? A Multi-Dimensional Evaluation Suite for LLM Steering Methods. [arXiv:2610.07722v1](https://arxiv.org/abs/2610.07722v1). Cited version dated 2026-10-06.
344
-
345
- ### Suggested citation
346
-
347
- ```bibtex
348
- @techreport{taggart2026affectorarc,
349
- author = {Taggart, William},
350
- title = {{AFFECTOR-ARC}: Emotional Trajectory Control through Transformer Activation Steering},
351
- institution = {Modern and Classical Languages and Literatures, Virginia Tech},
352
- year = {2026},
353
- month = nov,
354
- note = {Technical report, revision 0.2; current CUDA and emotional-effectiveness validation pending},
355
- url = {https://huggingface.co/will-taggart/AFFECTOR-ARC/blob/main/TECHNICAL_REPORT.md}
356
- }
357
- ```