@jsonstudio/llms 0.4.4 → 0.4.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (159) hide show
  1. package/dist/conversion/codec-registry.js +11 -1
  2. package/dist/conversion/codecs/anthropic-openai-codec.d.ts +13 -0
  3. package/dist/conversion/codecs/anthropic-openai-codec.js +18 -473
  4. package/dist/conversion/codecs/gemini-openai-codec.js +91 -48
  5. package/dist/conversion/codecs/responses-openai-codec.js +9 -2
  6. package/dist/conversion/hub/format-adapters/anthropic-format-adapter.js +3 -0
  7. package/dist/conversion/hub/format-adapters/chat-format-adapter.js +3 -0
  8. package/dist/conversion/hub/format-adapters/gemini-format-adapter.js +3 -0
  9. package/dist/conversion/hub/format-adapters/responses-format-adapter.d.ts +19 -0
  10. package/dist/conversion/hub/format-adapters/responses-format-adapter.js +9 -0
  11. package/dist/conversion/hub/node-support.js +3 -1
  12. package/dist/conversion/hub/pipeline/hub-pipeline.js +37 -32
  13. package/dist/conversion/hub/response/provider-response.js +1 -1
  14. package/dist/conversion/hub/response/response-mappers.js +1 -1
  15. package/dist/conversion/hub/response/response-runtime.js +109 -10
  16. package/dist/conversion/hub/semantic-mappers/anthropic-mapper.js +70 -156
  17. package/dist/conversion/hub/semantic-mappers/chat-mapper.js +63 -52
  18. package/dist/conversion/hub/semantic-mappers/gemini-mapper.js +76 -143
  19. package/dist/conversion/hub/semantic-mappers/responses-mapper.js +40 -160
  20. package/dist/conversion/hub/standardized-bridge.js +3 -0
  21. package/dist/conversion/hub/tool-governance/rules.js +2 -2
  22. package/dist/conversion/index.d.ts +5 -0
  23. package/dist/conversion/index.js +5 -0
  24. package/dist/conversion/pipeline/codecs/v2/anthropic-openai-pipeline.d.ts +12 -0
  25. package/dist/conversion/pipeline/codecs/v2/anthropic-openai-pipeline.js +100 -0
  26. package/dist/conversion/pipeline/codecs/v2/openai-openai-pipeline.d.ts +15 -0
  27. package/dist/conversion/pipeline/codecs/v2/openai-openai-pipeline.js +174 -0
  28. package/dist/conversion/pipeline/codecs/v2/responses-openai-pipeline.d.ts +14 -0
  29. package/dist/conversion/pipeline/codecs/v2/responses-openai-pipeline.js +166 -0
  30. package/dist/conversion/pipeline/codecs/v2/shared/openai-chat-helpers.d.ts +13 -0
  31. package/dist/conversion/pipeline/codecs/v2/shared/openai-chat-helpers.js +66 -0
  32. package/dist/conversion/pipeline/hooks/adapter-context.d.ts +7 -0
  33. package/dist/conversion/pipeline/hooks/adapter-context.js +18 -0
  34. package/dist/conversion/pipeline/hooks/protocol-hooks.d.ts +67 -0
  35. package/dist/conversion/pipeline/hooks/protocol-hooks.js +1 -0
  36. package/dist/conversion/pipeline/index.d.ts +35 -0
  37. package/dist/conversion/pipeline/index.js +103 -0
  38. package/dist/conversion/pipeline/meta/meta-bag.d.ts +20 -0
  39. package/dist/conversion/pipeline/meta/meta-bag.js +81 -0
  40. package/dist/conversion/pipeline/schema/canonical-chat.d.ts +18 -0
  41. package/dist/conversion/pipeline/schema/canonical-chat.js +1 -0
  42. package/dist/conversion/pipeline/schema/index.d.ts +1 -0
  43. package/dist/conversion/pipeline/schema/index.js +1 -0
  44. package/dist/conversion/responses/responses-openai-bridge.d.ts +48 -0
  45. package/dist/conversion/responses/responses-openai-bridge.js +157 -1146
  46. package/dist/conversion/shared/anthropic-message-utils.d.ts +12 -0
  47. package/dist/conversion/shared/anthropic-message-utils.js +587 -0
  48. package/dist/conversion/shared/bridge-actions.d.ts +39 -0
  49. package/dist/conversion/shared/bridge-actions.js +709 -0
  50. package/dist/conversion/shared/bridge-conversation-store.d.ts +41 -0
  51. package/dist/conversion/shared/bridge-conversation-store.js +279 -0
  52. package/dist/conversion/shared/bridge-id-utils.d.ts +7 -0
  53. package/dist/conversion/shared/bridge-id-utils.js +42 -0
  54. package/dist/conversion/shared/bridge-instructions.d.ts +1 -0
  55. package/dist/conversion/shared/bridge-instructions.js +113 -0
  56. package/dist/conversion/shared/bridge-message-types.d.ts +39 -0
  57. package/dist/conversion/shared/bridge-message-types.js +1 -0
  58. package/dist/conversion/shared/bridge-message-utils.d.ts +22 -0
  59. package/dist/conversion/shared/bridge-message-utils.js +473 -0
  60. package/dist/conversion/shared/bridge-metadata.d.ts +1 -0
  61. package/dist/conversion/shared/bridge-metadata.js +1 -0
  62. package/dist/conversion/shared/bridge-policies.d.ts +18 -0
  63. package/dist/conversion/shared/bridge-policies.js +276 -0
  64. package/dist/conversion/shared/bridge-request-adapter.d.ts +28 -0
  65. package/dist/conversion/shared/bridge-request-adapter.js +430 -0
  66. package/dist/conversion/shared/chat-output-normalizer.d.ts +4 -0
  67. package/dist/conversion/shared/chat-output-normalizer.js +56 -0
  68. package/dist/conversion/shared/chat-request-filters.js +24 -1
  69. package/dist/conversion/shared/gemini-tool-utils.d.ts +5 -0
  70. package/dist/conversion/shared/gemini-tool-utils.js +130 -0
  71. package/dist/conversion/shared/metadata-passthrough.d.ts +11 -0
  72. package/dist/conversion/shared/metadata-passthrough.js +57 -0
  73. package/dist/conversion/shared/output-content-normalizer.d.ts +12 -0
  74. package/dist/conversion/shared/output-content-normalizer.js +119 -0
  75. package/dist/conversion/shared/reasoning-normalizer.d.ts +21 -0
  76. package/dist/conversion/shared/reasoning-normalizer.js +368 -0
  77. package/dist/conversion/shared/reasoning-tool-normalizer.d.ts +12 -0
  78. package/dist/conversion/shared/reasoning-tool-normalizer.js +132 -0
  79. package/dist/conversion/shared/reasoning-tool-parser.d.ts +10 -0
  80. package/dist/conversion/shared/reasoning-tool-parser.js +95 -0
  81. package/dist/conversion/shared/reasoning-utils.d.ts +2 -0
  82. package/dist/conversion/shared/reasoning-utils.js +42 -0
  83. package/dist/conversion/shared/responses-conversation-store.js +5 -11
  84. package/dist/conversion/shared/responses-message-utils.d.ts +15 -0
  85. package/dist/conversion/shared/responses-message-utils.js +206 -0
  86. package/dist/conversion/shared/responses-output-builder.d.ts +15 -0
  87. package/dist/conversion/shared/responses-output-builder.js +179 -0
  88. package/dist/conversion/shared/responses-output-utils.d.ts +7 -0
  89. package/dist/conversion/shared/responses-output-utils.js +108 -0
  90. package/dist/conversion/shared/responses-request-adapter.d.ts +28 -0
  91. package/dist/conversion/shared/responses-request-adapter.js +9 -40
  92. package/dist/conversion/shared/responses-response-utils.d.ts +3 -0
  93. package/dist/conversion/shared/responses-response-utils.js +209 -0
  94. package/dist/conversion/shared/responses-tool-utils.d.ts +12 -0
  95. package/dist/conversion/shared/responses-tool-utils.js +90 -0
  96. package/dist/conversion/shared/responses-types.d.ts +33 -0
  97. package/dist/conversion/shared/responses-types.js +1 -0
  98. package/dist/conversion/shared/tool-call-utils.d.ts +11 -0
  99. package/dist/conversion/shared/tool-call-utils.js +56 -0
  100. package/dist/conversion/shared/tool-mapping.d.ts +19 -0
  101. package/dist/conversion/shared/tool-mapping.js +124 -0
  102. package/dist/conversion/shared/tool-normalizers.d.ts +4 -0
  103. package/dist/conversion/shared/tool-normalizers.js +84 -0
  104. package/dist/router/virtual-router/bootstrap.js +18 -3
  105. package/dist/router/virtual-router/provider-registry.js +4 -2
  106. package/dist/router/virtual-router/types.d.ts +212 -0
  107. package/dist/sse/index.d.ts +38 -2
  108. package/dist/sse/index.js +27 -0
  109. package/dist/sse/json-to-sse/anthropic-json-to-sse-converter.d.ts +14 -0
  110. package/dist/sse/json-to-sse/anthropic-json-to-sse-converter.js +106 -73
  111. package/dist/sse/json-to-sse/chat-json-to-sse-converter.js +6 -2
  112. package/dist/sse/json-to-sse/gemini-json-to-sse-converter.d.ts +14 -0
  113. package/dist/sse/json-to-sse/gemini-json-to-sse-converter.js +99 -0
  114. package/dist/sse/json-to-sse/index.d.ts +7 -0
  115. package/dist/sse/json-to-sse/index.js +2 -0
  116. package/dist/sse/json-to-sse/sequencers/anthropic-sequencer.d.ts +13 -0
  117. package/dist/sse/json-to-sse/sequencers/anthropic-sequencer.js +150 -0
  118. package/dist/sse/json-to-sse/sequencers/chat-sequencer.d.ts +39 -0
  119. package/dist/sse/json-to-sse/sequencers/chat-sequencer.js +49 -3
  120. package/dist/sse/json-to-sse/sequencers/gemini-sequencer.d.ts +10 -0
  121. package/dist/sse/json-to-sse/sequencers/gemini-sequencer.js +95 -0
  122. package/dist/sse/json-to-sse/sequencers/responses-sequencer.js +31 -5
  123. package/dist/sse/registry/sse-codec-registry.d.ts +32 -0
  124. package/dist/sse/registry/sse-codec-registry.js +30 -1
  125. package/dist/sse/shared/reasoning-dispatcher.d.ts +10 -0
  126. package/dist/sse/shared/reasoning-dispatcher.js +25 -0
  127. package/dist/sse/shared/responses-output-normalizer.d.ts +12 -0
  128. package/dist/sse/shared/responses-output-normalizer.js +45 -0
  129. package/dist/sse/shared/serializers/anthropic-event-serializer.d.ts +2 -0
  130. package/dist/sse/shared/serializers/anthropic-event-serializer.js +9 -0
  131. package/dist/sse/shared/serializers/gemini-event-serializer.d.ts +2 -0
  132. package/dist/sse/shared/serializers/gemini-event-serializer.js +5 -0
  133. package/dist/sse/shared/serializers/index.d.ts +41 -0
  134. package/dist/sse/shared/serializers/index.js +2 -0
  135. package/dist/sse/shared/writer.d.ts +127 -0
  136. package/dist/sse/shared/writer.js +37 -1
  137. package/dist/sse/sse-to-json/anthropic-sse-to-json-converter.d.ts +11 -0
  138. package/dist/sse/sse-to-json/anthropic-sse-to-json-converter.js +92 -127
  139. package/dist/sse/sse-to-json/builders/anthropic-response-builder.d.ts +16 -0
  140. package/dist/sse/sse-to-json/builders/anthropic-response-builder.js +151 -0
  141. package/dist/sse/sse-to-json/builders/response-builder.d.ts +165 -0
  142. package/dist/sse/sse-to-json/builders/response-builder.js +27 -6
  143. package/dist/sse/sse-to-json/chat-sse-to-json-converter.d.ts +114 -0
  144. package/dist/sse/sse-to-json/chat-sse-to-json-converter.js +79 -3
  145. package/dist/sse/sse-to-json/gemini-sse-to-json-converter.d.ts +13 -0
  146. package/dist/sse/sse-to-json/gemini-sse-to-json-converter.js +160 -0
  147. package/dist/sse/sse-to-json/index.d.ts +7 -0
  148. package/dist/sse/sse-to-json/index.js +2 -0
  149. package/dist/sse/sse-to-json/parsers/sse-parser.js +53 -1
  150. package/dist/sse/types/anthropic-types.d.ts +170 -0
  151. package/dist/sse/types/anthropic-types.js +8 -5
  152. package/dist/sse/types/chat-types.d.ts +10 -0
  153. package/dist/sse/types/chat-types.js +2 -1
  154. package/dist/sse/types/core-interfaces.d.ts +1 -1
  155. package/dist/sse/types/gemini-types.d.ts +116 -0
  156. package/dist/sse/types/gemini-types.js +5 -0
  157. package/dist/sse/types/index.d.ts +5 -2
  158. package/dist/sse/types/index.js +2 -0
  159. package/package.json +1 -1
@@ -0,0 +1,276 @@
1
+ import { RESPONSES_INSTRUCTIONS_REASONING_FIELD } from './reasoning-normalizer.js';
2
+ const OPENAI_CHAT_ALLOWED_FIELDS = [
3
+ 'messages',
4
+ 'tools',
5
+ 'tool_outputs',
6
+ 'model',
7
+ 'temperature',
8
+ 'top_p',
9
+ 'top_k',
10
+ 'max_tokens',
11
+ 'frequency_penalty',
12
+ 'presence_penalty',
13
+ 'logit_bias',
14
+ 'response_format',
15
+ 'parallel_tool_calls',
16
+ 'tool_choice',
17
+ 'seed',
18
+ 'user',
19
+ 'metadata',
20
+ 'stop',
21
+ 'stop_sequences',
22
+ 'stream'
23
+ ];
24
+ const ANTHROPIC_ALLOWED_FIELDS = [
25
+ 'model',
26
+ 'messages',
27
+ 'tools',
28
+ 'system',
29
+ 'stop_sequences',
30
+ 'temperature',
31
+ 'top_p',
32
+ 'top_k',
33
+ 'max_tokens',
34
+ 'max_output_tokens',
35
+ 'metadata',
36
+ 'stream',
37
+ 'tool_choice'
38
+ ];
39
+ const RESPONSES_ALLOWED_FIELDS = [
40
+ 'id',
41
+ 'object',
42
+ 'created_at',
43
+ 'model',
44
+ 'status',
45
+ 'input',
46
+ 'instructions',
47
+ 'output',
48
+ 'output_text',
49
+ 'required_action',
50
+ 'response_id',
51
+ 'previous_response_id',
52
+ 'tool_outputs',
53
+ 'tools',
54
+ 'metadata',
55
+ 'include',
56
+ 'store',
57
+ 'user',
58
+ 'response_format',
59
+ 'temperature',
60
+ 'top_p',
61
+ 'top_k',
62
+ 'max_tokens',
63
+ 'max_output_tokens',
64
+ 'logit_bias',
65
+ 'seed',
66
+ 'parallel_tool_calls',
67
+ 'tool_choice',
68
+ 'stream',
69
+ 'instructions_is_raw'
70
+ ];
71
+ const GEMINI_ALLOWED_FIELDS = [
72
+ 'model',
73
+ 'contents',
74
+ 'systemInstruction',
75
+ 'system_instruction',
76
+ 'generationConfig',
77
+ 'generation_config',
78
+ 'safetySettings',
79
+ 'safety_settings',
80
+ 'metadata',
81
+ 'toolConfig',
82
+ 'tool_config',
83
+ 'tools',
84
+ 'tool_choice',
85
+ 'parallelToolCalls',
86
+ 'parallel_tool_calls',
87
+ 'responseMimeType',
88
+ 'response_mime_type',
89
+ 'stopSequences',
90
+ 'stop_sequences',
91
+ 'cachedContent',
92
+ 'prompt',
93
+ 'response',
94
+ 'candidates',
95
+ 'usageMetadata',
96
+ 'responseMetadata',
97
+ 'promptFeedback',
98
+ 'modelVersion',
99
+ 'client',
100
+ 'user',
101
+ 'stream'
102
+ ];
103
+ function reasoningAction(idPrefix) {
104
+ return {
105
+ name: 'reasoning.extract',
106
+ options: {
107
+ dropFromContent: true,
108
+ idPrefix
109
+ }
110
+ };
111
+ }
112
+ const RESPONSES_POLICY = {
113
+ id: 'openai-responses-default',
114
+ protocol: 'openai-responses',
115
+ request: {
116
+ inbound: [
117
+ {
118
+ name: 'messages.inject-system-instruction',
119
+ options: {
120
+ field: 'instructions',
121
+ reasoningField: RESPONSES_INSTRUCTIONS_REASONING_FIELD
122
+ }
123
+ },
124
+ { name: 'messages.ensure-system-instruction' },
125
+ reasoningAction('responses_reasoning'),
126
+ { name: 'tools.ensure-placeholders' },
127
+ { name: 'metadata.extra-fields', options: { allowedKeys: RESPONSES_ALLOWED_FIELDS } },
128
+ { name: 'metadata.provider-field', options: { field: 'metadata', target: 'providerMetadata' } },
129
+ { name: 'metadata.provider-sentinel', options: { sentinel: '__rcc_provider_metadata', target: 'providerMetadata' } }
130
+ ],
131
+ outbound: [
132
+ { name: 'messages.normalize-history' },
133
+ { name: 'tools.capture-results' },
134
+ { name: 'tools.ensure-placeholders' },
135
+ { name: 'messages.ensure-output-fields', options: { toolFallback: 'Tool call completed (no output).' } },
136
+ { name: 'messages.ensure-system-instruction' },
137
+ reasoningAction('responses_reasoning'),
138
+ { name: 'metadata.extra-fields', options: { allowedKeys: RESPONSES_ALLOWED_FIELDS } },
139
+ { name: 'metadata.provider-field', options: { field: 'metadata', target: 'providerMetadata' } },
140
+ { name: 'metadata.provider-sentinel', options: { sentinel: '__rcc_provider_metadata', target: 'providerMetadata' } }
141
+ ]
142
+ },
143
+ response: {
144
+ inbound: [
145
+ { name: 'reasoning.attach-output' },
146
+ reasoningAction('responses_reasoning'),
147
+ { name: 'metadata.extra-fields', options: { allowedKeys: RESPONSES_ALLOWED_FIELDS } }
148
+ ],
149
+ outbound: [
150
+ reasoningAction('responses_reasoning'),
151
+ { name: 'metadata.extra-fields', options: { allowedKeys: RESPONSES_ALLOWED_FIELDS } }
152
+ ]
153
+ }
154
+ };
155
+ const OPENAI_CHAT_POLICY = {
156
+ id: 'openai-chat-default',
157
+ protocol: 'openai-chat',
158
+ request: {
159
+ inbound: [
160
+ reasoningAction('openai_chat_reasoning'),
161
+ { name: 'messages.ensure-system-instruction' },
162
+ { name: 'metadata.system-sentinel', options: { sentinel: '__rcc_raw_system', target: 'rawSystem' } },
163
+ { name: 'metadata.extra-fields', options: { allowedKeys: OPENAI_CHAT_ALLOWED_FIELDS } },
164
+ { name: 'metadata.provider-field', options: { field: 'metadata', target: 'providerMetadata' } },
165
+ { name: 'metadata.provider-sentinel', options: { sentinel: '__rcc_provider_metadata', target: 'providerMetadata' } }
166
+ ],
167
+ outbound: [
168
+ { name: 'messages.normalize-history' },
169
+ { name: 'tools.capture-results' },
170
+ { name: 'tools.ensure-placeholders' },
171
+ { name: 'messages.ensure-output-fields', options: { toolFallback: 'Tool call completed (no output).' } },
172
+ { name: 'messages.ensure-system-instruction' },
173
+ reasoningAction('openai_chat_reasoning'),
174
+ { name: 'metadata.system-sentinel', options: { sentinel: '__rcc_raw_system', target: 'rawSystem' } },
175
+ { name: 'metadata.extra-fields', options: { allowedKeys: OPENAI_CHAT_ALLOWED_FIELDS } },
176
+ { name: 'metadata.provider-field', options: { field: 'metadata', target: 'providerMetadata' } },
177
+ { name: 'metadata.provider-sentinel', options: { sentinel: '__rcc_provider_metadata', target: 'providerMetadata' } }
178
+ ]
179
+ },
180
+ response: {
181
+ inbound: [
182
+ reasoningAction('openai_chat_reasoning'),
183
+ { name: 'metadata.extra-fields', options: { allowedKeys: OPENAI_CHAT_ALLOWED_FIELDS } }
184
+ ],
185
+ outbound: [
186
+ reasoningAction('openai_chat_reasoning'),
187
+ { name: 'metadata.extra-fields', options: { allowedKeys: OPENAI_CHAT_ALLOWED_FIELDS } }
188
+ ]
189
+ }
190
+ };
191
+ const ANTHROPIC_POLICY = {
192
+ id: 'anthropic-messages-default',
193
+ protocol: 'anthropic-messages',
194
+ request: {
195
+ inbound: [
196
+ reasoningAction('anthropic_reasoning'),
197
+ { name: 'messages.ensure-system-instruction' },
198
+ { name: 'metadata.extra-fields', options: { allowedKeys: ANTHROPIC_ALLOWED_FIELDS } }
199
+ ],
200
+ outbound: [
201
+ { name: 'messages.normalize-history' },
202
+ { name: 'tools.capture-results' },
203
+ { name: 'tools.ensure-placeholders' },
204
+ { name: 'messages.ensure-output-fields', options: { toolFallback: 'Tool call completed (no output).' } },
205
+ { name: 'messages.ensure-system-instruction' },
206
+ reasoningAction('anthropic_reasoning'),
207
+ { name: 'metadata.extra-fields', options: { allowedKeys: ANTHROPIC_ALLOWED_FIELDS } }
208
+ ]
209
+ },
210
+ response: {
211
+ inbound: [
212
+ reasoningAction('anthropic_reasoning'),
213
+ { name: 'metadata.extra-fields', options: { allowedKeys: ANTHROPIC_ALLOWED_FIELDS } }
214
+ ],
215
+ outbound: [
216
+ reasoningAction('anthropic_reasoning'),
217
+ { name: 'metadata.extra-fields', options: { allowedKeys: ANTHROPIC_ALLOWED_FIELDS } }
218
+ ]
219
+ }
220
+ };
221
+ const GEMINI_POLICY = {
222
+ id: 'gemini-chat-default',
223
+ protocol: 'gemini-chat',
224
+ request: {
225
+ inbound: [
226
+ reasoningAction('gemini_reasoning'),
227
+ { name: 'messages.ensure-system-instruction' },
228
+ { name: 'metadata.extra-fields', options: { allowedKeys: GEMINI_ALLOWED_FIELDS } }
229
+ ],
230
+ outbound: [
231
+ { name: 'messages.normalize-history' },
232
+ { name: 'tools.capture-results' },
233
+ { name: 'tools.ensure-placeholders' },
234
+ { name: 'messages.ensure-output-fields', options: { toolFallback: 'Tool call completed (no output).' } },
235
+ { name: 'messages.ensure-system-instruction' },
236
+ reasoningAction('gemini_reasoning'),
237
+ { name: 'metadata.extra-fields', options: { allowedKeys: GEMINI_ALLOWED_FIELDS } }
238
+ ]
239
+ },
240
+ response: {
241
+ inbound: [
242
+ reasoningAction('gemini_reasoning'),
243
+ { name: 'metadata.extra-fields', options: { allowedKeys: GEMINI_ALLOWED_FIELDS } }
244
+ ],
245
+ outbound: [
246
+ reasoningAction('gemini_reasoning'),
247
+ { name: 'metadata.extra-fields', options: { allowedKeys: GEMINI_ALLOWED_FIELDS } }
248
+ ]
249
+ }
250
+ };
251
+ const POLICIES = [RESPONSES_POLICY, OPENAI_CHAT_POLICY, ANTHROPIC_POLICY, GEMINI_POLICY];
252
+ export function resolveBridgePolicy(options) {
253
+ if (!options)
254
+ return undefined;
255
+ const { protocol, moduleType } = options;
256
+ if (protocol) {
257
+ const match = POLICIES.find((policy) => policy.protocol === protocol);
258
+ if (match)
259
+ return match;
260
+ }
261
+ if (moduleType) {
262
+ const match = POLICIES.find((policy) => policy.moduleType === moduleType);
263
+ if (match)
264
+ return match;
265
+ }
266
+ return undefined;
267
+ }
268
+ export function resolvePolicyActions(policy, stage) {
269
+ if (!policy)
270
+ return undefined;
271
+ const [phaseKey, directionKey] = stage.split('_');
272
+ const phase = policy[phaseKey];
273
+ if (!phase)
274
+ return undefined;
275
+ return phase[directionKey];
276
+ }
@@ -0,0 +1,28 @@
1
+ import type { BridgeInputItem, BridgeToolDefinition } from './bridge-message-types.js';
2
+ export interface ResponsesRequestContext {
3
+ requestId?: string;
4
+ instructions?: string;
5
+ originalSystemMessages?: string[];
6
+ input?: BridgeInputItem[];
7
+ include?: unknown;
8
+ store?: unknown;
9
+ toolChoice?: unknown;
10
+ parallelToolCalls?: boolean;
11
+ metadata?: Record<string, unknown>;
12
+ responseFormat?: unknown;
13
+ toolsRaw?: BridgeToolDefinition[];
14
+ stream?: boolean;
15
+ instructionsIsRaw?: boolean;
16
+ isChatPayload?: boolean;
17
+ isResponsesPayload?: boolean;
18
+ }
19
+ export interface BuildChatRequestResult {
20
+ request: Record<string, unknown>;
21
+ toolsNormalized?: Array<Record<string, unknown>>;
22
+ }
23
+ export declare function captureResponsesContext(payload: Record<string, unknown>, dto?: {
24
+ route?: {
25
+ requestId?: string;
26
+ };
27
+ }): ResponsesRequestContext;
28
+ export declare function buildChatRequestFromResponses(payload: Record<string, unknown>, context: ResponsesRequestContext): BuildChatRequestResult;