LLMResponse
Interface: LLMResponse
Defined in: src/adapters/types.ts:218
Properties
content
readonlycontent:string
Defined in: src/adapters/types.ts:219
providerRef?
readonlyoptionalproviderRef?:string
Defined in: src/adapters/types.ts:271
rawThinking?
readonlyoptionalrawThinking?:unknown
Defined in: src/adapters/types.ts:286
v2.14 — Provider-specific raw thinking data, opaque to the
framework. Providers that support extended thinking populate this
with their native shape (Anthropic: array of {type, thinking, signature} blocks; OpenAI: reasoning_summary value; custom:
whatever the provider emits). The framework hands this to a
configured ThinkingHandler.normalize(rawThinking) to produce
the normalized ThinkingBlock[] that lands on
LLMMessage.thinkingBlocks.
Undefined when the provider has no thinking content for this call — most calls (gpt-4o, claude without extended thinking enabled, etc.). The thinking subflow's stage early-returns in this case.
stopReason
readonlystopReason:string
Defined in: src/adapters/types.ts:270
toolCalls
readonlytoolCalls: readonlyobject[]
Defined in: src/adapters/types.ts:220
usage
readonlyusage:object
Defined in: src/adapters/types.ts:245
cacheRead?
readonlyoptionalcacheRead?:number
cacheWrite?
readonlyoptionalcacheWrite?:number
input
readonlyinput:number
output
readonlyoutput:number
thinking?
readonlyoptionalthinking?:number
v2.14 — count of reasoning/thinking tokens used by the model.
Distinct from output (which is visible-content tokens).
Semantics:
undefined— provider doesn't expose / no thinking enabled on this call / call without extended thinking0— thinking enabled but model produced no thinking tokens this call>0— actual reasoning token count (billing-relevant for both Anthropic extended thinking and OpenAI o1/o3 reasoning_tokens)
Cost dashboards reading cost.tick events should track this
separately from output — pricing differs (Anthropic charges
extended thinking at output rates; OpenAI o1/o3 reasoning tokens
are billed as a separate line item).
wireManifest?
readonlyoptionalwireManifest?:WireToolManifest
Defined in: src/adapters/types.ts:301
9.60.0 — what this request ACTUALLY carried, read back from the serialized body after every transform (see adapters/llm/wireManifest.ts, which builds it; the SHAPE lives here because it is part of the provider port, and the skill-graph fence rightly refuses this file reaching anything past the port).
The wire seam's evidence: the recorded defect was an adapter still
serializing four tool schemas after the internal frame said they were
removed — invisible to any check that reads only the pre-serialization
IR. Absent when the adapter states no manifest, and the wire check then
treats the request as INCOMPARABLE (never as "nothing crossed"); an
empty toolNames is the opposite — a stated zero.
