Proveo sam dva dana čitajući izvorni kod Claude Code mehanizma kompresije i sastavio ovu kompletnu analizu četvorofaznog procesa
Mnogi su podsticali da napišem povratni udarac za AI Agent intervju pitanja, zapravo već pišem, deo je već sastavljen na naprednom putu, možete ući kroz AI Agent meni da vidite.
Samo još nisam sve sredio u stilu povratnog udarca.

Prvo nastojim da svaki dan sakupim po jedan materijal, a kasnije ću ih sve zajedno srediti, ispitna pitanja o Claude Code-u ne bi trebalo da zastare. U ovom članku ćemo obraditi mehanizam kompresije Claude Code-a.
- Kada se vrši kompresija?
- Šta se zadržava, a šta odbacuje pri kompresiji?
- Kako se nakon kompresije obnavlja radno stanje?
Da bih to objasnio jasno, proveo sam dva dana čitajući od početka do kraja više od deset fajlova izvornog koda u compact direktorijumu. Od najlakšeg sečenja pravilima, do strukturirane summarizacije vođene LLM-om, pa sve do mehanizma prekidača struje i rezervnog rešenja — svaki sloj ima jasne uslove okidanja i izlazne strategije.

Vežite pojaseve, polazimo~
01,Zašto je potrebna kompresija?
Opus 4.6 podrazumevano ima kontekstni prozor od 200K tokena, Opus 4.7/4.8 je proširen na 1M tokena.
200K je već jako veliko, može da primi oko 150 hiljada kineskih znakova.
Ali svi koji su koristili Claude Code znaju da brzina rasta konteksta prevazilazi očekivanja.
Svaki put kada Claude Code izvrši poziv alata (čitanje fajla, pretraga, pokretanje komande), rezultat se u celosti upisuje u istoriju razgovora.
Još veći problem je Context Rot (degradacija konteksta). Što je prozor veći, pažnja modela je raspršenija, lako "zaboravi" rane ključne instrukcije, ili pobrka neki neuspeo pokušaj iz sredine sa konačnim rešenjem.

Zato je kompresija neophodna, ona je ključni mehanizam koji osigurava da Claude Code ostane upotrebljiv u dugim sesijama.
02,Četiri faze mehanizma kompresije
Iz izvornog koda sam izveo kompletan tok:

Prva faza: Mikrokompresija (MicroCompaction). Tiho predprocesiranje, vođeno pravilima, ne poziva LLM. Vrši sečenje rezultata alata na licu mesta, uklanja suvišne izlaze.
Druga faza: Autokompresija (AutoCompaction). Vođena LLM-om, kada upotreba konteksta premaši threshold, koristi se nezavisan LLM poziv za generisanje strukturiranog sažetka koji zamenjuje čitavu istoriju razgovora.
Treća faza: Blokirajući limit (Blocking Limit). Kada se kontekst približi limitu, direktno se odbija slanje zahteva, čime se sprečava API da vrati grešku 413.
Četvrta faza: Reaktivna rezerva (Reactive Fallback). Ako prve tri faze ne uspeju da kontrolišu veličinu konteksta, nakon što se zaista primi greška prompt_too_long, izvršava se najagresivnija kompresija: brisanje najstarijih poruka jedna po jedna.
03,Tiho predprocesiranje
MicroCompaction se pokreće pre svakog API poziva, ne poziva LLM, ne generiše sažetak, radi samo jedno: seče rezultate alata.
U izvornom kodu je definisana lista "komprimabilnih alata":
const COMPACTABLE_TOOLS = new Set<string>([
FILE_READ_TOOL_NAME,
...SHELL_TOOL_NAMES,
GREP_TOOL_NAME,
GLOB_TOOL_NAME,
WEB_SEARCH_TOOL_NAME,
WEB_FETCH_TOOL_NAME,
FILE_EDIT_TOOL_NAME,
FILE_WRITE_TOOL_NAME,
])Zajedničko za ove alate je da su povratni rezultati jako dugački. Jedno čitanje fajla može vratiti nekoliko stotina linija koda, jedna grep pretraga može poklopiti na stotine linija rezultata iz desetina fajlova. Ali nakon što model obradi te rezultate, kompletna povratna vrednost više nije od koristi. Model je već na osnovu rezultata pretrage pronašao ciljani fajl, već na osnovu sadržaja fajla napravio izmene, a zadržavanje pune istorije izlaza samo troši prostor.

Način obrade MicroCompaction-a je zamena na licu mesta u listi poruka, sečenjem ili zamenom sadržaja starog tool_result-a sa tekstom rezervacije [Old tool result content cleared]. Model ne vidi kompletan istorijski izlaz alata, ali najnoviji rezultati alata se zadržavaju.
Ovaj dizajn podseća na algoritam zamene stranica u operativnim sistemima: nedavno korišćeni podaci ostaju u memoriji, a podaci koji dugo nisu bili pristupani se izbacuju.
Razlika je u tome što operativni sistem izbačene podatke može vratiti, dok je MicroCompaction nepovratan — jednom očišćeni rezultati alata su stvarno nestali. Ali to nije problem, jer se informacije koje model treba već odražavaju u narednim izmenama koda i sadržaju razgovora.
Čišćenje zasnovano na vremenskom intervalu
MicroCompaction ima i vremenski okidač, konfigurisan u timeBasedMCConfig.ts:
const TIME_BASED_MC_CONFIG_DEFAULTS: TimeBasedMCConfig = {
enabled: false,
gapThresholdMinutes: 60,
keepRecent: 5,
}Ovde treba prvo objasniti koncept Prompt Cache-a. Pri svakoj interakciji sa Claude Code-om, sistem mora da pošalje kompletnu istoriju razgovora Anthropic-ovom API-ju. Prompt Cache mehanizam omogućava serveru da kešira već obrađeni prefiks konteksta, pa ako se pri sledećem zahtevu prefiks nije promenio, ne mora ponovo da se računa. To štedi i vreme i novac (tokeni koji pogode keš se naplaćuju samo desetina originalne cene).

Ali Prompt Cache ima TTL (time to live).
Anthropic-ov Prompt Caching podrazumevani TTL je 5 minuta, a podržava i 1-satni TTL; da li Claude Code koristi 1-satni TTL zavisi od korisničkih kvalifikacija, provajdera i prekidača za konfiguraciju.
U izvornom kodu MicroCompaction postavlja threshold na 60 minuta kako bi očistio stare rezultate alata tek kada se može sa sigurnošću reći da je keš na serveru istekao, izbegavajući aktivno razbijanje keša koji bi još uvek mogao da bude pogođen. Smisao je: kada je keš već hladan, sledeći zahtev ionako mora ponovo da pošalje i izračuna prefiks, pa se prvo smanjuje stari rezultat alata i smanjuje količina podataka koje treba ponovo poslati.
keepRecent: 5 znači da se zadržava poslednjih 5 komprimabilnih rezultata alata, a raniji se svi zamjenjuju sa [Old tool result content cleared]. I ovaj broj je pažljivo odabran: premalo bi moglo očistiti informacije koje model još uvek treba, previše ne bi ostvarilo uštedu. 5 je iskustvena vrednost.
Najveća prednost MicroCompaction-a je nula troškova: ne troši API pozive, ne pravi dodatne troškove tokena, čista obrada pravilima, veoma brza. Ne utiče na semantičku kompletnost razgovora, samo čisti suvišne podatke koje je model već "probavio".
04,Autokompresija
MicroCompaction čisti samo rezultate alata, dok AutoCompaction mora da preoblikuje čitavu istoriju razgovora u sažetak.
Threshold okidanja
Uslov okidanja AutoCompaction-a definisan je u autoCompact.ts:
const MAX_OUTPUT_TOKENS_FOR_SUMMARY = 20_000
export function getEffectiveContextWindowSize(model: string): number {
const reservedTokensForSummary = Math.min(
getMaxOutputTokensForModel(model),
MAX_OUTPUT_TOKENS_FOR_SUMMARY,
)
let contextWindow = getContextWindowForModel(model, getSdkBetas())
return contextWindow - reservedTokensForSummary
}
export const AUTOCOMPACT_BUFFER_TOKENS = 13_000Proces računanja je u dva koraka.

Prvi korak: izračunaj efektivni kontekstni prozor. Od prozora od 200K mora se rezervisati 20,000 tokena za izlaz kompresijskog sažetka (ova brojka dolazi iz p99.99 statistike: 99.99 percentil izlaza kompresijskog sažetka je 17,387 tokena). Zato je efektivni prozor 180,000 tokena.
Drugi korak: na osnovu efektivnog prozora se još oduzima sigurnosni bafer od 13,000 tokena. Konačni threshold za autokompresiju je 167,000 tokena, što je oko 83.5% originalnog prozora od 200K.
To znači, kada vaš razgovor potroši 167K tokena, Claude Code će automatski pokrenuti kompresiju. Ovaj threshold je oko 83.5% originalnog prozora, ostavljajući dovoljno prostora za samu operaciju kompresije.
Ako koristite model sa kontekstnim prozorom od 1M (na primer Opus 4.8 sa [1m] sufiksom), efektivni prozor je 980K, threshold za autokompresiju je oko 967K, što znači da možete koristiti do 96.7% pre kompresije.
Međutim, Anthropic je takođe otkrio da se pod 1M prozorom događaji autokompresije smanjili za samo 15% (znatno ispod očekivanog), što pokazuje da rast konteksta većine dugih sesija nije linearan — čak i kada je prozor 5 puta veći, kada treba da se komprimuje, kompresovaće se.
Proces kompresije
Nakon okidanja kompresije, Claude Code izvršava sledeće korake:

- Prvo izvrši pre-kompresione udice (Pre-Compact Hooks, ako je korisnik konfigurisao hooks)
- Pozovi funkciju
compactConversation, šaljući kompletnu istoriju razgovora nezavisnom forked agent-u - Ovaj forked agent je LLM instanca specijalno namenjena kompresiji, ima samo jednu rundu (
maxTurns: 1), mora da završi sažetak u jednom odgovoru - Nakon što se dobije sažetak, funkcija
formatCompactSummaryvrši formatiranje i uklanja sadržaj radne beleške - Zameni originalnu istoriju razgovora formatiranim sažetkom i izgradi novu listu poruka
- Izvrši post-kompresiono čišćenje (Post-Compact Cleanup), čisti sve keševe i praćenje stanja
- Obavesti Prompt Cache sistem da je kompresija izvršena (sprečava lažne pozitivne detekcije pogotka keša)
- Izvrši post-kompresione udice (Post-Compact Hooks)
- Automatski ponovo pročitaj nedavno pristupane fajlove, obnovi radni kontekst
Tokom kompresije se u terminalu prikazuje poruka koja vas obaveštava da je kompresija u toku. Čitav proces obično traje od desetak sekundi do pola minuta, u zavisnosti od dužine istorije razgovora.
Dve putanje kompresije
U izvornom kodu zapravo postoje dve putanje kompresije:
Putanja jedna: Kompresija memorije sesije (Session Memory Compact). Ako je uključena funkcija memorije sesije, Claude Code u pozadini kontinuirano vodi inkrementalne beleške. Pri kompresiji se te beleške koriste kao sažetak, bez potrebe da LLM ponovo čita čitav razgovor.

export const DEFAULT_SM_COMPACT_CONFIG: SessionMemoryCompactConfig = {
minTokens: 10_000,
minTextBlockMessages: 5,
maxTokens: 40_000,
}Prednost ove putanje je brzina, jer su beleške već generisane u pozadini i pri kompresiji se samo uzimaju.
Tri parametra u konfiguraciji kontrolišu minimalan broj tokena koji se zadržavaju nakon kompresije (10,000), minimalan broj poruka koje se zadržavaju (5 poruka sa tekstualnim sadržajem) i maksimalan broj tokena (40,000).
To znači da čak i ako postoji memorija sesije, neće se sve nedavne poruke odbaciti — zadržava se najmanje 5 nedavnih razgovora i 10K tokena sadržaja.
Međutim, kompresija memorije sesije je trenutno eksperimentalna funkcija i zahteva specifičnu konfiguraciju da bi se aktivirala. Prema izvornom kodu, njen prioritet je viši od potpunog sažetka razgovora, sistem će prvo pokušati sa putanjom kompresije memorije sesije i tek kada je Session Memory prazan, sadržaj nedovoljan ili funkcija nije uključena, vraća se na standardnu putanju.
Putanja dva: Kompletan sažetak razgovora (Full Conversation Summarization). Standardna putanja, koju trenutno većina korisnika zaista koristi. Kompletan razgovor se šalje nezavisnoj LLM instanci, koja nakon čitanja celog teksta generiše kompletan strukturirani sažetak. Ovaj proces zahteva jedan kompletan API poziv i troši približno onoliko tokena koliko svi tokeni trenutnog razgovora plus tokeni izlaza sažetka.

05,Kompresijski prompt
Kvalitet kompresije zavisi od toga koliko dobro je napisan kompresijski prompt (Compaction Prompt). Ovaj Prompt je definisan u prompt.ts i najjezgrovitiji je deo celog mehanizma kompresije.
Sprečavanje poziva alata
Početak Prompt-a je izjava o "zabrani pozivanja alata" izuzetno stroge prirode:
const NO_TOOLS_PREAMBLE = `CRITICAL: Respond with TEXT ONLY. Do NOT call any tools.
- Do NOT use Read, Bash, Grep, Glob, Edit, Write, or ANY other tool.
- You already have all the context you need in the conversation above.
- Tool calls will be REJECTED and will waste your only turn — you will fail the task.
- Your entire response must be plain text: an <analysis> block followed by a <summary> block.
`Operacija kompresije je nezavisan forked agent (agent grane) koji sa glavnom sesijom deli isti skup alata.

Zašto deljenje?
Zato što Anthropic-ov Prompt Cache radi uparivanje na osnovu "prefiksa" zahteva, a skup alata je deo prefiksa. Ako forked agent za kompresiju ukloni skup alata, cache key se ne bi poklapao i ne bi mogao da iskoristi keš koji je glavna sesija akumulirala.
Ali to nosi jednu nuspojavu.
Kada model vidi skup alata, oseća nagon da "pozove alat". Na primer, model će oceniti "moram da pročitam neki fajl da bih napisao tačan sažetak", a zatim pokuša da pozove Read alat.
Zbog ograničenja maxTurns: 1, poziv alata će biti direktno odbijen, ali tekstualni izlaz te runde takođe nestaje i kompresija direktno ne uspeva.
Zato Anthropic-ovo rešenje jeste da "zabrana pozivanja alata" stoji na samom početku Prompt-a, velikim i podebljanim slovima, jasno govoreći modelu: imaš samo jednu priliku, ako je potrošiš na poziv alata, potpuno si propao.
Ovaj tekst ima i okvir koji se zatvara, na kraju Prompt-a stoji NO_TOOLS_TRAILER koji podseća:
const NO_TOOLS_TRAILER =
'\n\nREMINDER: Do NOT call any tools. Respond with plain text only — ' +
'an <analysis> block followed by a <summary> block. ' +
'Tool calls will be rejected and you will fail the task.'Dvofazni izlaz
Kompresijski prompt zahteva od modela da izbaci dva XML bloka:
<analysis> blok: radna beleška procesa razmišljanja. Model analizira svaku poruku hronološkim redom, beležeći korisničku nameru, tehničke odluke, detalje koda, greške i rešenja.
<summary> blok: zvanični sažetak, sadrži 9 fiksnih sekcija:
- Primary Request and Intent: suštinska potreba i namera korisnika
- Key Technical Concepts: tehnički koncepti i frameworkovi
- Files and Code Sections: fajlovi nad kojima je rađeno, isječci koda, izmene
- Errors and Fixes: greške na koje se naišlo i rešenja
- Problem Solving: rešeni problemi i oni koji se još uvek ispituju
- All User Messages: sve korisničke poruke koje nisu rezultati alata (originalan tekst)
- Pending Tasks: zadaci koje treba završiti
- Current Work: šta se radilo pre kompresije
- Optional Next Step: plan za sledeći korak

<analysis> blok se nakon generisanja sažetka direktno uklanja funkcijom formatCompactSummary.
export function formatCompactSummary(summary: string): string {
let formattedSummary = summary
formattedSummary = formattedSummary.replace(
/<analysis>[\s\S]*?<\/analysis>/,
'',
)
// ...
}Drugim rečima, analysis je samo "radna beleška" koja omogućava modelu da prvo razjasni svoje misli i poboljša kvalitet konačnog sažetka, ali sama beleška ne zauzima naknadni prostor konteksta.
Ovo je klasična tehnika u prompt inženjerstvu, koja se zove "drafting scratchpad pattern" (obrazac radne beleške). Omogućava modelu da prvo u privremenom prostoru radi analizu i rezonovanje, ali zadržava samo konačni zaključak. Podseća na Chain-of-Thought, ali je razlika u tome što se CoT proces razmišljanja obično zadržava u izlazu, dok se drafting scratchpad aktivno uklanja u fazi postobrade.

Delimična kompresija
Pored pune kompresije, postoji i delimična kompresija (Partial Compact). Kada u razgovoru već postoji prethodni sažetak kompresije, nije potrebno ponovo komprimovati čitav razgovor, već samo deo koji je dodat nakon prethodnog sažetka.
U izvornom kodu su definisana dva pravca:
frompravac: kompresuje samo nedavne poruke, zadržava rani kontekstup_topravac: kompresuje do određene tačke, zadržava naredne poruke
Prednost delimične kompresije je manji opseg kompresije, LLM obrađuje manje ulaza, brži je i troši manje tokena.
06,Blokirajući limit
Autokompresija nije svemoguća. Ako nakon kompresije kontekst i dalje prekoračuje standard, ili LLM poziv sam ne uspe, iza njega stoje još dve linije odbrane.
Blokirajući limit (Blocking Limit)
Na osnovu efektivnog kontekstnog prozora, zadržava se samo bafer od 3,000 tokena:
export const MANUAL_COMPACT_BUFFER_TOKENS = 3_000Kada upotreba konteksta premaši efektivni prozor - 3,000 tokena (oko 88.5%), Claude Code direktno odbija da pošalje API zahtev. Ovo je mnogo bolje nego primiti grešku 413 i onda je obraditi — greška 413 znači da je zahtev već poslat i da je jedan API poziv protraćen.

Prekidač struje (Circuit Breaker)
Ovo je dizajn u izvornom kodu koji mi se najviše sviđa.
const MAX_CONSECUTIVE_AUTOCOMPACT_FAILURES = 3Logika prekidača struje je veoma jednostavna: nakon 3 uzastopna neuspeha, zaustavlja se ponovni pokušaj autokompresije. Jer ako 3 puta zaredom ne uspe, to znači da je kontekst možda u stanju iz kojeg se ne može oporaviti kompresijom (na primer, jedna poruka sama po sebi premašuje limit), a nastavak ponovnih pokušaja samo troši resurse.

Rezervno rešenje
Kada API zaista vrati grešku prompt_too_long, reaktivna rezerva izvršava najagresivniju kompresiju: po strategiji drainage se briše najstarija poruka jedna po jedna.

07,Strategija grupisanja poruka
Pri kompresiji je potrebno odlučiti koje poruke se mogu "upakovati" zajedno. U grouping.ts je implementirano grupisanje poruka na osnovu API rundi.
export function groupMessagesByApiRound(messages: Message[]): Message[][] {
const groups: Message[][] = []
let current: Message[] = []
let lastAssistantId: string | undefined
for (const msg of messages) {
if (
msg.type === 'assistant' &&
msg.message.id !== lastAssistantId &&
current.length > 0
) {
groups.push(current)
current = [msg]
} else {
current.push(msg)
}
if (msg.type === 'assistant') {
lastAssistantId = msg.message.id
}
}
if (current.length > 0) {
groups.push(current)
}
return groups
}Granica grupisanja nije "korisnik je poslao novu poruku", već "pojavio se novi assistant message ID".
Zašto?
Komentar u izvornom kodu objašnjava: u scenarijima SDK i API poziva, čitav workload može imati samo jednu korisničku poruku, ali agent će izvršiti desetine rundi poziva alata. Ako bi se grupisalo po korisničkim porukama, čitava sesija bi bila jedna grupa i ne bi moglo da se radi inkrementalno kompresovanje. Grupisanje po API rundi omogućava finu kontrolu do svakog para tool_use → tool_result.

08,Mehanizam oporavka nakon kompresije
Nakon završetka kompresije, Claude Code ne samo da baci sažetak modelu i završi. Postoji i kompletan mehanizam oporavka.
Čišćenje nakon kompresije (Post-Compact Cleanup)
U postCompactCleanup.ts su navedena sva stanja koja treba resetovati nakon kompresije:
export function runPostCompactCleanup(querySource?: QuerySource): void {
resetMicrocompactState()
// Reset context collapse (samo glavna nit)
// Očisti getUserContext keš
resetGetMemoryFilesCache('compact')
clearSystemPromptSections()
clearClassifierApprovals()
clearSpeculativeChecks()
clearBetaTracingState()
clearSessionMessagesCache()
}Obuhvata: MicroCompaction stanje, CLAUDE.md i Memory keš fajlova, sekcije sistemskog prompta, prethodne rezultate provere dozvola alata i tako dalje.
Reset osigurava da "nova sesija" nakon kompresije ne bude kontaminirana starim stanjem. Na primer, ako se keš Memory fajlova ne očisti, model nakon kompresije može videti zastarelu verziju Memory-ja.
Jedna stavka se namerno ne čisti
U komentaru izvornog koda postoji jedno posebno objašnjenje:
We intentionally do NOT clear invoked skill content here. Skill content must survive across multiple compactions so that createSkillAttachmentIfNeeded() can include the full skill text in subsequent compaction attachments.
Sadržaj Skill-a se ne čisti nakon kompresije.
Jer je Skill stručni paket veština koji je korisnik aktivno učitao — ako se pri kompresiji izgubi, naredni razgovor gubi ova stručna uputstva. Sadržaj Skill-a se ponovo ubacuje u kontekst nakon kompresije, čime se osigurava kontinuitet kroz kompresije.
Problem izolacije Sub-agenta
Čišćenje nakon kompresije rešava i jedan suptilan problem konkurencije. Claude Code-ov Sub-agent i glavna nit rade u istom procesu i dele stanje na nivou modula. Ako Sub-agent okine kompresiju i resetuje stanje, uništiće i stanje glavne niti.
Rešenje je donošenje odluke na osnovu parametra querySource: samo kompresija glavne niti resetuje stanje na nivou modula, dok Sub-agentova kompresija preskače ova globalna resetovanja.
const isMainThreadCompact =
querySource === undefined ||
querySource.startsWith('repl_main_thread') ||
querySource === 'sdk'Automatsko ponovno čitanje fajlova
Nakon završetka kompresije, Claude Code automatski ponovo čita nedavno pristupane fajlove (maksimalno 5, sa gornjom granicom od 5K tokena po fajlu i ukupnim budžetom od 50K tokena). Tako model nakon kompresije ne mora ručno da ponovo čita kod koji je upravo gledao, već može odmah da nastavi rad.
09,Ručna kompresija i varijable okruženja
Pored automatskog okidanja, Claude Code nudi i način za ručnu kompresiju.
/compact komanda
U razgovoru unos /compact ručno okida kompresiju. Takođe podržava i prilagođene instrukcije:
/compact focus on the database migration codePrilagođene instrukcije se dodaju na kraj Compaction Prompt-a:
export function getCompactPrompt(customInstructions?: string): string {
let prompt = NO_TOOLS_PREAMBLE + BASE_COMPACT_PROMPT
if (customInstructions && customInstructions.trim() !== '') {
prompt += `\n\nAdditional Instructions:\n${customInstructions}`
}
prompt += NO_TOOLS_TRAILER
return prompt
}Ručni /compact i autokompresija nisu ista logika okidanja.
Autokompresija se oslanja na threshold potrošnje konteksta i podrazumevano se okida nakon što se od efektivnog prozora oduzme bafer od 13,000 tokena; ručni /compact pokreće korisnik i može se izvršiti unapred u bilo kom pogodnom trenutku. MANUAL_COMPACT_BUFFER_TOKENS = 3_000 u izvornom kodu je tačnije rečeno bafer prostor koji se rezerviše za ručnu kompresiju kada se približi limitu, a ne "threshold okidanja ručne kompresije".
U stvarnoj upotrebi, predlažem ručno izvršavanje /compact u sledećim trenucima:
- Nakon završetka faze istraživanja, pre početka kodiranja
- Nakon završetka jednog milestone-a
- Kada upotreba konteksta dođe do 60%-70%
- Kada dođe do velike promene u smeru zadatka

Instrukcije kompresije u CLAUDE.md
Pored argumenata komandne linije, u CLAUDE.md se mogu dodati i trajne instrukcije kompresije:
## Compact Instructions
When summarizing the conversation focus on typescript code changes
and also remember the mistakes you made and how you fixed them.Compaction Prompt će automatski pročitati ove instrukcije iz CLAUDE.md i dodati ih u prompt za sažimanje kao Additional Instructions.
