@finalai/final-agent-provider 0.1.3 → 0.2.0
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.
- package/HOSTING.md +109 -0
- package/README.md +10 -0
- package/dist/modules/harnesses/config-fields.d.mts +3 -2
- package/dist/modules/harnesses/config-fields.mjs +16 -3
- package/dist/modules/harnesses/config-fields.mjs.map +3 -3
- package/dist/modules/harnesses/index.d.mts +1 -1
- package/dist/modules/harnesses/index.mjs +2 -1
- package/dist/modules/harnesses/index.mjs.map +2 -2
- package/dist/modules/harnesses/model-reference.d.mts +6 -0
- package/dist/modules/harnesses/model-reference.mjs +12 -0
- package/dist/modules/harnesses/model-reference.mjs.map +7 -0
- package/dist/modules/harnesses/remote-claude-code.mjs +2 -2
- package/dist/modules/harnesses/remote-claude-code.mjs.map +2 -2
- package/dist/modules/harnesses/remote-codex.mjs +2 -2
- package/dist/modules/harnesses/remote-codex.mjs.map +2 -2
- package/dist/modules/harnesses/remote-pi.mjs +2 -2
- package/dist/modules/harnesses/remote-pi.mjs.map +2 -2
- package/dist/modules/harnesses/serverless-final.d.mts +2 -3
- package/dist/modules/harnesses/serverless-final.mjs +4 -9
- package/dist/modules/harnesses/serverless-final.mjs.map +2 -2
- package/dist/modules/harnesses/serverless-nanocode-claude.d.mts +2 -3
- package/dist/modules/harnesses/serverless-nanocode-claude.mjs +4 -9
- package/dist/modules/harnesses/serverless-nanocode-claude.mjs.map +2 -2
- package/dist/modules/harnesses/serverless-nanocode-codex.d.mts +2 -3
- package/dist/modules/harnesses/serverless-nanocode-codex.mjs +4 -9
- package/dist/modules/harnesses/serverless-nanocode-codex.mjs.map +2 -2
- package/dist/modules/harnesses/serverless-pi.d.mts +2 -3
- package/dist/modules/harnesses/serverless-pi.mjs +4 -4
- package/dist/modules/harnesses/serverless-pi.mjs.map +2 -2
- package/dist/modules/testing/harness.mjs +1 -1
- package/dist/modules/testing/harness.mjs.map +2 -2
- package/package.json +7 -12
- package/dist/modules/harnesses/models.d.mts +0 -281
- package/dist/modules/harnesses/models.mjs +0 -234
- package/dist/modules/harnesses/models.mjs.map +0 -7
|
@@ -1,281 +0,0 @@
|
|
|
1
|
-
export declare enum ModelVendor {
|
|
2
|
-
OpenAI = "openai",
|
|
3
|
-
Anthropic = "anthropic",
|
|
4
|
-
OpenRouter = "openrouter"
|
|
5
|
-
}
|
|
6
|
-
export interface ModelPriceIface {
|
|
7
|
-
effectiveFrom: string;
|
|
8
|
-
inputUsdPerMillion: number;
|
|
9
|
-
outputUsdPerMillion: number;
|
|
10
|
-
cachedInputUsdPerMillion: number;
|
|
11
|
-
cacheWriteUsdPerMillion: number;
|
|
12
|
-
}
|
|
13
|
-
export interface HarnessModelIface {
|
|
14
|
-
id: string;
|
|
15
|
-
vendor: ModelVendor;
|
|
16
|
-
label: string;
|
|
17
|
-
vendorModelId?: string;
|
|
18
|
-
prices?: readonly ModelPriceIface[];
|
|
19
|
-
}
|
|
20
|
-
export declare const FINAL_HARNESS_MODELS: readonly [{
|
|
21
|
-
readonly id: "deepseek-v4.1-flash";
|
|
22
|
-
readonly vendor: ModelVendor.OpenRouter;
|
|
23
|
-
readonly label: "DeepSeek V4.1 Flash";
|
|
24
|
-
readonly vendorModelId: "deepseek/deepseek-v4.1-flash";
|
|
25
|
-
readonly prices: readonly [{
|
|
26
|
-
readonly effectiveFrom: "2026-10-02T00:00:00Z";
|
|
27
|
-
readonly inputUsdPerMillion: 0.22;
|
|
28
|
-
readonly outputUsdPerMillion: 0.66;
|
|
29
|
-
readonly cachedInputUsdPerMillion: 0.007;
|
|
30
|
-
readonly cacheWriteUsdPerMillion: 0;
|
|
31
|
-
}];
|
|
32
|
-
}, {
|
|
33
|
-
readonly id: "final-claude-opus-5.5";
|
|
34
|
-
readonly vendor: ModelVendor.OpenRouter;
|
|
35
|
-
readonly label: "Opus 5.5";
|
|
36
|
-
readonly vendorModelId: "anthropic/claude-opus-5.5";
|
|
37
|
-
readonly prices: readonly [{
|
|
38
|
-
readonly effectiveFrom: "2026-10-02T00:00:00Z";
|
|
39
|
-
readonly inputUsdPerMillion: 4;
|
|
40
|
-
readonly outputUsdPerMillion: 20;
|
|
41
|
-
readonly cachedInputUsdPerMillion: 0.2;
|
|
42
|
-
readonly cacheWriteUsdPerMillion: 5;
|
|
43
|
-
}];
|
|
44
|
-
}, {
|
|
45
|
-
readonly id: "final-gpt-6.1-sol";
|
|
46
|
-
readonly vendor: ModelVendor.OpenRouter;
|
|
47
|
-
readonly label: "GPT 6.1 Sol";
|
|
48
|
-
readonly vendorModelId: "openai/gpt-6.1-sol";
|
|
49
|
-
readonly prices: readonly [{
|
|
50
|
-
readonly effectiveFrom: "2026-10-02T00:00:00Z";
|
|
51
|
-
readonly inputUsdPerMillion: 2;
|
|
52
|
-
readonly outputUsdPerMillion: 10;
|
|
53
|
-
readonly cachedInputUsdPerMillion: 0.1;
|
|
54
|
-
readonly cacheWriteUsdPerMillion: 2.5;
|
|
55
|
-
}];
|
|
56
|
-
}];
|
|
57
|
-
export declare const CODEX_RESPONSES_LITE_MODELS: readonly [{
|
|
58
|
-
readonly id: "gpt-6-sol";
|
|
59
|
-
readonly vendor: ModelVendor.OpenAI;
|
|
60
|
-
readonly label: "GPT 6 Sol";
|
|
61
|
-
readonly prices: readonly [ModelPriceIface];
|
|
62
|
-
}, {
|
|
63
|
-
readonly id: "gpt-6.1-sol";
|
|
64
|
-
readonly vendor: ModelVendor.OpenAI;
|
|
65
|
-
readonly label: "GPT 6.1 Sol";
|
|
66
|
-
readonly prices: readonly [ModelPriceIface];
|
|
67
|
-
}, {
|
|
68
|
-
readonly id: "gpt-6-luna";
|
|
69
|
-
readonly vendor: ModelVendor.OpenAI;
|
|
70
|
-
readonly label: "GPT 6 Luna";
|
|
71
|
-
readonly prices: readonly [ModelPriceIface];
|
|
72
|
-
}, {
|
|
73
|
-
readonly id: "gpt-6-astra";
|
|
74
|
-
readonly vendor: ModelVendor.OpenAI;
|
|
75
|
-
readonly label: "GPT 6 Astra";
|
|
76
|
-
readonly prices: readonly [ModelPriceIface];
|
|
77
|
-
}, {
|
|
78
|
-
readonly id: "gpt-5.6-sol";
|
|
79
|
-
readonly vendor: ModelVendor.OpenAI;
|
|
80
|
-
readonly label: "GPT 5.6 Sol";
|
|
81
|
-
readonly prices: readonly [ModelPriceIface];
|
|
82
|
-
}, {
|
|
83
|
-
readonly id: "gpt-5.6-terra";
|
|
84
|
-
readonly vendor: ModelVendor.OpenAI;
|
|
85
|
-
readonly label: "GPT 5.6 Terra";
|
|
86
|
-
readonly prices: readonly [ModelPriceIface];
|
|
87
|
-
}, {
|
|
88
|
-
readonly id: "gpt-5.6-luna";
|
|
89
|
-
readonly vendor: ModelVendor.OpenAI;
|
|
90
|
-
readonly label: "GPT 5.6 Luna";
|
|
91
|
-
readonly prices: readonly [ModelPriceIface];
|
|
92
|
-
}];
|
|
93
|
-
export declare const CODEX_CLI_MODELS: readonly [{
|
|
94
|
-
readonly id: "gpt-6-sol";
|
|
95
|
-
readonly vendor: ModelVendor.OpenAI;
|
|
96
|
-
readonly label: "GPT 6 Sol";
|
|
97
|
-
readonly prices: readonly [ModelPriceIface];
|
|
98
|
-
}, {
|
|
99
|
-
readonly id: "gpt-6.1-sol";
|
|
100
|
-
readonly vendor: ModelVendor.OpenAI;
|
|
101
|
-
readonly label: "GPT 6.1 Sol";
|
|
102
|
-
readonly prices: readonly [ModelPriceIface];
|
|
103
|
-
}, {
|
|
104
|
-
readonly id: "gpt-6-luna";
|
|
105
|
-
readonly vendor: ModelVendor.OpenAI;
|
|
106
|
-
readonly label: "GPT 6 Luna";
|
|
107
|
-
readonly prices: readonly [ModelPriceIface];
|
|
108
|
-
}, {
|
|
109
|
-
readonly id: "gpt-6-astra";
|
|
110
|
-
readonly vendor: ModelVendor.OpenAI;
|
|
111
|
-
readonly label: "GPT 6 Astra";
|
|
112
|
-
readonly prices: readonly [ModelPriceIface];
|
|
113
|
-
}, {
|
|
114
|
-
readonly id: "gpt-5.6-sol";
|
|
115
|
-
readonly vendor: ModelVendor.OpenAI;
|
|
116
|
-
readonly label: "GPT 5.6 Sol";
|
|
117
|
-
readonly prices: readonly [ModelPriceIface];
|
|
118
|
-
}, {
|
|
119
|
-
readonly id: "gpt-5.6-terra";
|
|
120
|
-
readonly vendor: ModelVendor.OpenAI;
|
|
121
|
-
readonly label: "GPT 5.6 Terra";
|
|
122
|
-
readonly prices: readonly [ModelPriceIface];
|
|
123
|
-
}, {
|
|
124
|
-
readonly id: "gpt-5.6-luna";
|
|
125
|
-
readonly vendor: ModelVendor.OpenAI;
|
|
126
|
-
readonly label: "GPT 5.6 Luna";
|
|
127
|
-
readonly prices: readonly [ModelPriceIface];
|
|
128
|
-
}, {
|
|
129
|
-
readonly id: "gpt-5.5";
|
|
130
|
-
readonly vendor: ModelVendor.OpenAI;
|
|
131
|
-
readonly label: "GPT 5.5";
|
|
132
|
-
readonly prices: readonly [ModelPriceIface];
|
|
133
|
-
}, {
|
|
134
|
-
readonly id: "gpt-5.4";
|
|
135
|
-
readonly vendor: ModelVendor.OpenAI;
|
|
136
|
-
readonly label: "GPT 5.4";
|
|
137
|
-
readonly prices: readonly [ModelPriceIface];
|
|
138
|
-
}, {
|
|
139
|
-
readonly id: "gpt-5.4-mini";
|
|
140
|
-
readonly vendor: ModelVendor.OpenAI;
|
|
141
|
-
readonly label: "GPT 5.4 Mini";
|
|
142
|
-
readonly prices: readonly [ModelPriceIface];
|
|
143
|
-
}, {
|
|
144
|
-
readonly id: "gpt-5.3-codex-spark";
|
|
145
|
-
readonly vendor: ModelVendor.OpenAI;
|
|
146
|
-
readonly label: "GPT 5.3 Codex Spark";
|
|
147
|
-
}];
|
|
148
|
-
export declare const CLAUDE_MODELS: readonly [{
|
|
149
|
-
readonly id: "claude-opus-5-5";
|
|
150
|
-
readonly vendor: ModelVendor.Anthropic;
|
|
151
|
-
readonly label: "Opus 5.5";
|
|
152
|
-
readonly prices: readonly [ModelPriceIface];
|
|
153
|
-
}, {
|
|
154
|
-
readonly id: "claude-opus-5";
|
|
155
|
-
readonly vendor: ModelVendor.Anthropic;
|
|
156
|
-
readonly label: "Opus 5";
|
|
157
|
-
readonly prices: readonly [ModelPriceIface];
|
|
158
|
-
}, {
|
|
159
|
-
readonly id: "claude-fable-5";
|
|
160
|
-
readonly vendor: ModelVendor.Anthropic;
|
|
161
|
-
readonly label: "Fable 5";
|
|
162
|
-
readonly prices: readonly [ModelPriceIface];
|
|
163
|
-
}, {
|
|
164
|
-
readonly id: "claude-sonnet-5";
|
|
165
|
-
readonly vendor: ModelVendor.Anthropic;
|
|
166
|
-
readonly label: "Sonnet 5";
|
|
167
|
-
readonly prices: readonly [ModelPriceIface];
|
|
168
|
-
}, {
|
|
169
|
-
readonly id: "claude-haiku-4-5";
|
|
170
|
-
readonly vendor: ModelVendor.Anthropic;
|
|
171
|
-
readonly label: "Haiku 4.5";
|
|
172
|
-
readonly prices: readonly [ModelPriceIface];
|
|
173
|
-
}];
|
|
174
|
-
export declare const PI_MODELS: readonly [{
|
|
175
|
-
readonly id: "deepseek-v4.1-flash";
|
|
176
|
-
readonly vendor: ModelVendor.OpenRouter;
|
|
177
|
-
readonly label: "DeepSeek V4.1 Flash";
|
|
178
|
-
readonly vendorModelId: "deepseek/deepseek-v4.1-flash";
|
|
179
|
-
readonly prices: readonly [{
|
|
180
|
-
readonly effectiveFrom: "2026-10-02T00:00:00Z";
|
|
181
|
-
readonly inputUsdPerMillion: 0.22;
|
|
182
|
-
readonly outputUsdPerMillion: 0.66;
|
|
183
|
-
readonly cachedInputUsdPerMillion: 0.007;
|
|
184
|
-
readonly cacheWriteUsdPerMillion: 0;
|
|
185
|
-
}];
|
|
186
|
-
}, ...({
|
|
187
|
-
readonly id: "gpt-6-sol";
|
|
188
|
-
readonly vendor: ModelVendor.OpenAI;
|
|
189
|
-
readonly label: "GPT 6 Sol";
|
|
190
|
-
readonly prices: readonly [ModelPriceIface];
|
|
191
|
-
} | {
|
|
192
|
-
readonly id: "gpt-6.1-sol";
|
|
193
|
-
readonly vendor: ModelVendor.OpenAI;
|
|
194
|
-
readonly label: "GPT 6.1 Sol";
|
|
195
|
-
readonly prices: readonly [ModelPriceIface];
|
|
196
|
-
} | {
|
|
197
|
-
readonly id: "gpt-6-luna";
|
|
198
|
-
readonly vendor: ModelVendor.OpenAI;
|
|
199
|
-
readonly label: "GPT 6 Luna";
|
|
200
|
-
readonly prices: readonly [ModelPriceIface];
|
|
201
|
-
} | {
|
|
202
|
-
readonly id: "gpt-6-astra";
|
|
203
|
-
readonly vendor: ModelVendor.OpenAI;
|
|
204
|
-
readonly label: "GPT 6 Astra";
|
|
205
|
-
readonly prices: readonly [ModelPriceIface];
|
|
206
|
-
} | {
|
|
207
|
-
readonly id: "gpt-5.6-sol";
|
|
208
|
-
readonly vendor: ModelVendor.OpenAI;
|
|
209
|
-
readonly label: "GPT 5.6 Sol";
|
|
210
|
-
readonly prices: readonly [ModelPriceIface];
|
|
211
|
-
} | {
|
|
212
|
-
readonly id: "gpt-5.6-terra";
|
|
213
|
-
readonly vendor: ModelVendor.OpenAI;
|
|
214
|
-
readonly label: "GPT 5.6 Terra";
|
|
215
|
-
readonly prices: readonly [ModelPriceIface];
|
|
216
|
-
} | {
|
|
217
|
-
readonly id: "gpt-5.6-luna";
|
|
218
|
-
readonly vendor: ModelVendor.OpenAI;
|
|
219
|
-
readonly label: "GPT 5.6 Luna";
|
|
220
|
-
readonly prices: readonly [ModelPriceIface];
|
|
221
|
-
} | {
|
|
222
|
-
readonly id: "gpt-5.5";
|
|
223
|
-
readonly vendor: ModelVendor.OpenAI;
|
|
224
|
-
readonly label: "GPT 5.5";
|
|
225
|
-
readonly prices: readonly [ModelPriceIface];
|
|
226
|
-
} | {
|
|
227
|
-
readonly id: "gpt-5.4";
|
|
228
|
-
readonly vendor: ModelVendor.OpenAI;
|
|
229
|
-
readonly label: "GPT 5.4";
|
|
230
|
-
readonly prices: readonly [ModelPriceIface];
|
|
231
|
-
} | {
|
|
232
|
-
readonly id: "gpt-5.4-mini";
|
|
233
|
-
readonly vendor: ModelVendor.OpenAI;
|
|
234
|
-
readonly label: "GPT 5.4 Mini";
|
|
235
|
-
readonly prices: readonly [ModelPriceIface];
|
|
236
|
-
})[], {
|
|
237
|
-
readonly id: "claude-opus-5-5";
|
|
238
|
-
readonly vendor: ModelVendor.Anthropic;
|
|
239
|
-
readonly label: "Opus 5.5";
|
|
240
|
-
readonly prices: readonly [ModelPriceIface];
|
|
241
|
-
}, {
|
|
242
|
-
readonly id: "claude-opus-5";
|
|
243
|
-
readonly vendor: ModelVendor.Anthropic;
|
|
244
|
-
readonly label: "Opus 5";
|
|
245
|
-
readonly prices: readonly [ModelPriceIface];
|
|
246
|
-
}, {
|
|
247
|
-
readonly id: "claude-fable-5";
|
|
248
|
-
readonly vendor: ModelVendor.Anthropic;
|
|
249
|
-
readonly label: "Fable 5";
|
|
250
|
-
readonly prices: readonly [ModelPriceIface];
|
|
251
|
-
}, {
|
|
252
|
-
readonly id: "claude-sonnet-5";
|
|
253
|
-
readonly vendor: ModelVendor.Anthropic;
|
|
254
|
-
readonly label: "Sonnet 5";
|
|
255
|
-
readonly prices: readonly [ModelPriceIface];
|
|
256
|
-
}, {
|
|
257
|
-
readonly id: "claude-haiku-4-5";
|
|
258
|
-
readonly vendor: ModelVendor.Anthropic;
|
|
259
|
-
readonly label: "Haiku 4.5";
|
|
260
|
-
readonly prices: readonly [ModelPriceIface];
|
|
261
|
-
}];
|
|
262
|
-
export type FinalHarnessModelId = (typeof FINAL_HARNESS_MODELS)[number]['id'];
|
|
263
|
-
export type CodexResponsesLiteModelId = (typeof CODEX_RESPONSES_LITE_MODELS)[number]['id'];
|
|
264
|
-
export type CodexCliModelId = (typeof CODEX_CLI_MODELS)[number]['id'];
|
|
265
|
-
export type ClaudeModelId = (typeof CLAUDE_MODELS)[number]['id'];
|
|
266
|
-
export type PiModelId = (typeof PI_MODELS)[number]['id'];
|
|
267
|
-
export declare const DEFAULT_FINAL_HARNESS_MODEL: FinalHarnessModelId;
|
|
268
|
-
export declare const DEFAULT_PI_MODEL: PiModelId;
|
|
269
|
-
export declare const DEFAULT_CODEX_MODEL: CodexResponsesLiteModelId;
|
|
270
|
-
export declare const DEFAULT_CLAUDE_MODEL: ClaudeModelId;
|
|
271
|
-
export declare const modelIds: (models: readonly HarnessModelIface[]) => string[];
|
|
272
|
-
export declare const modelVendor: (models: readonly HarnessModelIface[], id: string) => ModelVendor | null;
|
|
273
|
-
export declare const vendorModelRef: (models: readonly HarnessModelIface[], id: string) => string;
|
|
274
|
-
export declare const vendorsOf: (models: readonly HarnessModelIface[]) => ModelVendor[];
|
|
275
|
-
export declare const CATALOG_MODELS: readonly HarnessModelIface[];
|
|
276
|
-
export declare const modelPriceAt: (args: {
|
|
277
|
-
vendor: string;
|
|
278
|
-
model: string;
|
|
279
|
-
at: Date;
|
|
280
|
-
models?: readonly HarnessModelIface[];
|
|
281
|
-
}) => ModelPriceIface | null;
|
|
@@ -1,234 +0,0 @@
|
|
|
1
|
-
var ModelVendor = /* @__PURE__ */ ((ModelVendor2) => {
|
|
2
|
-
ModelVendor2["OpenAI"] = "openai";
|
|
3
|
-
ModelVendor2["Anthropic"] = "anthropic";
|
|
4
|
-
ModelVendor2["OpenRouter"] = "openrouter";
|
|
5
|
-
return ModelVendor2;
|
|
6
|
-
})(ModelVendor || {});
|
|
7
|
-
const OPENROUTER_RATES_EFFECTIVE_FROM = "2026-10-02T00:00:00Z";
|
|
8
|
-
const DEEPSEEK_V4_1_FLASH = {
|
|
9
|
-
id: "deepseek-v4.1-flash",
|
|
10
|
-
vendor: "openrouter" /* OpenRouter */,
|
|
11
|
-
label: "DeepSeek V4.1 Flash",
|
|
12
|
-
vendorModelId: "deepseek/deepseek-v4.1-flash",
|
|
13
|
-
prices: [
|
|
14
|
-
{
|
|
15
|
-
effectiveFrom: OPENROUTER_RATES_EFFECTIVE_FROM,
|
|
16
|
-
inputUsdPerMillion: 0.22,
|
|
17
|
-
outputUsdPerMillion: 0.66,
|
|
18
|
-
cachedInputUsdPerMillion: 7e-3,
|
|
19
|
-
cacheWriteUsdPerMillion: 0
|
|
20
|
-
}
|
|
21
|
-
]
|
|
22
|
-
};
|
|
23
|
-
const FINAL_HARNESS_MODELS = [
|
|
24
|
-
DEEPSEEK_V4_1_FLASH,
|
|
25
|
-
{
|
|
26
|
-
id: "final-claude-opus-5.5",
|
|
27
|
-
vendor: "openrouter" /* OpenRouter */,
|
|
28
|
-
label: "Opus 5.5",
|
|
29
|
-
vendorModelId: "anthropic/claude-opus-5.5",
|
|
30
|
-
prices: [
|
|
31
|
-
{
|
|
32
|
-
effectiveFrom: OPENROUTER_RATES_EFFECTIVE_FROM,
|
|
33
|
-
inputUsdPerMillion: 4,
|
|
34
|
-
outputUsdPerMillion: 20,
|
|
35
|
-
cachedInputUsdPerMillion: 0.2,
|
|
36
|
-
cacheWriteUsdPerMillion: 5
|
|
37
|
-
}
|
|
38
|
-
]
|
|
39
|
-
},
|
|
40
|
-
{
|
|
41
|
-
id: "final-gpt-6.1-sol",
|
|
42
|
-
vendor: "openrouter" /* OpenRouter */,
|
|
43
|
-
label: "GPT 6.1 Sol",
|
|
44
|
-
vendorModelId: "openai/gpt-6.1-sol",
|
|
45
|
-
prices: [
|
|
46
|
-
{
|
|
47
|
-
effectiveFrom: OPENROUTER_RATES_EFFECTIVE_FROM,
|
|
48
|
-
inputUsdPerMillion: 2,
|
|
49
|
-
outputUsdPerMillion: 10,
|
|
50
|
-
cachedInputUsdPerMillion: 0.1,
|
|
51
|
-
cacheWriteUsdPerMillion: 2.5
|
|
52
|
-
}
|
|
53
|
-
]
|
|
54
|
-
}
|
|
55
|
-
];
|
|
56
|
-
const VENDOR_LIST_RATES_EFFECTIVE_FROM = "2026-10-01T00:00:00Z";
|
|
57
|
-
const price = (input, cachedInput, cacheWrite, output) => ({
|
|
58
|
-
effectiveFrom: VENDOR_LIST_RATES_EFFECTIVE_FROM,
|
|
59
|
-
inputUsdPerMillion: input,
|
|
60
|
-
cachedInputUsdPerMillion: cachedInput,
|
|
61
|
-
cacheWriteUsdPerMillion: cacheWrite,
|
|
62
|
-
outputUsdPerMillion: output
|
|
63
|
-
});
|
|
64
|
-
const CODEX_RESPONSES_LITE_MODELS = [
|
|
65
|
-
{
|
|
66
|
-
id: "gpt-6-sol",
|
|
67
|
-
vendor: "openai" /* OpenAI */,
|
|
68
|
-
label: "GPT 6 Sol",
|
|
69
|
-
prices: [price(2, 0.2, 2.5, 10)]
|
|
70
|
-
},
|
|
71
|
-
{
|
|
72
|
-
id: "gpt-6.1-sol",
|
|
73
|
-
vendor: "openai" /* OpenAI */,
|
|
74
|
-
label: "GPT 6.1 Sol",
|
|
75
|
-
prices: [price(2, 0.1, 2.5, 10)]
|
|
76
|
-
},
|
|
77
|
-
{
|
|
78
|
-
id: "gpt-6-luna",
|
|
79
|
-
vendor: "openai" /* OpenAI */,
|
|
80
|
-
label: "GPT 6 Luna",
|
|
81
|
-
prices: [price(0.1, 0.01, 0.125, 0.5)]
|
|
82
|
-
},
|
|
83
|
-
{
|
|
84
|
-
id: "gpt-6-astra",
|
|
85
|
-
vendor: "openai" /* OpenAI */,
|
|
86
|
-
label: "GPT 6 Astra",
|
|
87
|
-
prices: [price(10, 1, 12.5, 50)]
|
|
88
|
-
},
|
|
89
|
-
{
|
|
90
|
-
id: "gpt-5.6-sol",
|
|
91
|
-
vendor: "openai" /* OpenAI */,
|
|
92
|
-
label: "GPT 5.6 Sol",
|
|
93
|
-
// A promotional price OpenAI keeps "at least through November 21, 2026";
|
|
94
|
-
// add a dated entry when it changes.
|
|
95
|
-
prices: [price(4, 0.4, 5, 20)]
|
|
96
|
-
},
|
|
97
|
-
{
|
|
98
|
-
id: "gpt-5.6-terra",
|
|
99
|
-
vendor: "openai" /* OpenAI */,
|
|
100
|
-
label: "GPT 5.6 Terra",
|
|
101
|
-
prices: [price(2, 0.2, 2.5, 12)]
|
|
102
|
-
},
|
|
103
|
-
{
|
|
104
|
-
id: "gpt-5.6-luna",
|
|
105
|
-
vendor: "openai" /* OpenAI */,
|
|
106
|
-
label: "GPT 5.6 Luna",
|
|
107
|
-
prices: [price(0.2, 0.02, 0.25, 1.2)]
|
|
108
|
-
}
|
|
109
|
-
];
|
|
110
|
-
const CODEX_CLI_MODELS = [
|
|
111
|
-
...CODEX_RESPONSES_LITE_MODELS,
|
|
112
|
-
{
|
|
113
|
-
id: "gpt-5.5",
|
|
114
|
-
vendor: "openai" /* OpenAI */,
|
|
115
|
-
label: "GPT 5.5",
|
|
116
|
-
prices: [price(5, 0.5, 0, 30)]
|
|
117
|
-
},
|
|
118
|
-
{
|
|
119
|
-
id: "gpt-5.4",
|
|
120
|
-
vendor: "openai" /* OpenAI */,
|
|
121
|
-
label: "GPT 5.4",
|
|
122
|
-
prices: [price(2.5, 0.25, 0, 15)]
|
|
123
|
-
},
|
|
124
|
-
{
|
|
125
|
-
id: "gpt-5.4-mini",
|
|
126
|
-
vendor: "openai" /* OpenAI */,
|
|
127
|
-
label: "GPT 5.4 Mini",
|
|
128
|
-
prices: [price(0.75, 0.075, 0, 4.5)]
|
|
129
|
-
},
|
|
130
|
-
// A ChatGPT subscription model, not on OpenAI's API (so never platform
|
|
131
|
-
// traffic) and retired from Codex on 2026-09-14: unpriced.
|
|
132
|
-
{ id: "gpt-5.3-codex-spark", vendor: "openai" /* OpenAI */, label: "GPT 5.3 Codex Spark" }
|
|
133
|
-
];
|
|
134
|
-
const CLAUDE_MODELS = [
|
|
135
|
-
{
|
|
136
|
-
id: "claude-opus-5-5",
|
|
137
|
-
vendor: "anthropic" /* Anthropic */,
|
|
138
|
-
label: "Opus 5.5",
|
|
139
|
-
prices: [price(4, 0.2, 5, 20)]
|
|
140
|
-
},
|
|
141
|
-
{
|
|
142
|
-
id: "claude-opus-5",
|
|
143
|
-
vendor: "anthropic" /* Anthropic */,
|
|
144
|
-
label: "Opus 5",
|
|
145
|
-
prices: [price(5, 0.5, 6.25, 25)]
|
|
146
|
-
},
|
|
147
|
-
{
|
|
148
|
-
id: "claude-fable-5",
|
|
149
|
-
vendor: "anthropic" /* Anthropic */,
|
|
150
|
-
label: "Fable 5",
|
|
151
|
-
prices: [price(10, 1, 12.5, 50)]
|
|
152
|
-
},
|
|
153
|
-
{
|
|
154
|
-
id: "claude-sonnet-5",
|
|
155
|
-
vendor: "anthropic" /* Anthropic */,
|
|
156
|
-
label: "Sonnet 5",
|
|
157
|
-
// The $2 / $10 launch price became the standard price; the rise planned
|
|
158
|
-
// for 2026-09-01 did not happen.
|
|
159
|
-
prices: [price(2, 0.2, 2.5, 10)]
|
|
160
|
-
},
|
|
161
|
-
{
|
|
162
|
-
id: "claude-haiku-4-5",
|
|
163
|
-
vendor: "anthropic" /* Anthropic */,
|
|
164
|
-
label: "Haiku 4.5",
|
|
165
|
-
prices: [price(1, 0.1, 1.25, 5)]
|
|
166
|
-
}
|
|
167
|
-
];
|
|
168
|
-
const PI_MODELS = [
|
|
169
|
-
DEEPSEEK_V4_1_FLASH,
|
|
170
|
-
...CODEX_CLI_MODELS.filter((model) => model.id !== "gpt-5.3-codex-spark"),
|
|
171
|
-
...CLAUDE_MODELS
|
|
172
|
-
];
|
|
173
|
-
const DEFAULT_FINAL_HARNESS_MODEL = "deepseek-v4.1-flash";
|
|
174
|
-
const DEFAULT_PI_MODEL = "deepseek-v4.1-flash";
|
|
175
|
-
const DEFAULT_CODEX_MODEL = "gpt-5.6-sol";
|
|
176
|
-
const DEFAULT_CLAUDE_MODEL = "claude-fable-5";
|
|
177
|
-
const modelIds = (models) => models.map((model) => model.id);
|
|
178
|
-
const modelVendor = (models, id) => models.find((model) => model.id === id)?.vendor ?? null;
|
|
179
|
-
const vendorModelRef = (models, id) => {
|
|
180
|
-
const model = models.find((candidate) => candidate.id === id);
|
|
181
|
-
return model == null ? id : `${model.vendor}/${model.vendorModelId ?? model.id}`;
|
|
182
|
-
};
|
|
183
|
-
const vendorsOf = (models) => [
|
|
184
|
-
...new Set(models.map((model) => model.vendor))
|
|
185
|
-
];
|
|
186
|
-
const ALL_CATALOG_ENTRIES = [
|
|
187
|
-
...FINAL_HARNESS_MODELS,
|
|
188
|
-
...PI_MODELS,
|
|
189
|
-
...CODEX_CLI_MODELS,
|
|
190
|
-
...CLAUDE_MODELS
|
|
191
|
-
];
|
|
192
|
-
const CATALOG_MODELS = ALL_CATALOG_ENTRIES.filter(
|
|
193
|
-
(model, index, all) => all.findIndex(
|
|
194
|
-
(other) => other.vendor === model.vendor && (other.vendorModelId ?? other.id) === (model.vendorModelId ?? model.id)
|
|
195
|
-
) === index
|
|
196
|
-
);
|
|
197
|
-
const SNAPSHOT_SUFFIX = /^-(\d{4}-\d{2}-\d{2}|\d{8})$/;
|
|
198
|
-
const namesModel = (id, reported) => reported === id || reported.startsWith(id) && SNAPSHOT_SUFFIX.test(reported.slice(id.length));
|
|
199
|
-
const modelPriceAt = (args) => {
|
|
200
|
-
const models = (args.models ?? CATALOG_MODELS).filter((model) => model.vendor === args.vendor);
|
|
201
|
-
const entry = models.find(
|
|
202
|
-
(model) => (model.vendorModelId ?? model.id) === args.model || model.id === args.model
|
|
203
|
-
) ?? models.find(
|
|
204
|
-
(model) => namesModel(model.vendorModelId ?? model.id, args.model) || namesModel(model.id, args.model)
|
|
205
|
-
);
|
|
206
|
-
const at = args.at.getTime();
|
|
207
|
-
let current = null;
|
|
208
|
-
for (const price2 of entry?.prices ?? []) {
|
|
209
|
-
const from = Date.parse(price2.effectiveFrom);
|
|
210
|
-
if (Number.isFinite(from) && from <= at) {
|
|
211
|
-
if (current == null || from >= Date.parse(current.effectiveFrom)) current = price2;
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
return current;
|
|
215
|
-
};
|
|
216
|
-
export {
|
|
217
|
-
CATALOG_MODELS,
|
|
218
|
-
CLAUDE_MODELS,
|
|
219
|
-
CODEX_CLI_MODELS,
|
|
220
|
-
CODEX_RESPONSES_LITE_MODELS,
|
|
221
|
-
DEFAULT_CLAUDE_MODEL,
|
|
222
|
-
DEFAULT_CODEX_MODEL,
|
|
223
|
-
DEFAULT_FINAL_HARNESS_MODEL,
|
|
224
|
-
DEFAULT_PI_MODEL,
|
|
225
|
-
FINAL_HARNESS_MODELS,
|
|
226
|
-
ModelVendor,
|
|
227
|
-
PI_MODELS,
|
|
228
|
-
modelIds,
|
|
229
|
-
modelPriceAt,
|
|
230
|
-
modelVendor,
|
|
231
|
-
vendorModelRef,
|
|
232
|
-
vendorsOf
|
|
233
|
-
};
|
|
234
|
-
//# sourceMappingURL=models.mjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../../src/harnesses/models.ts"],
|
|
4
|
-
"sourcesContent": ["// Model catalogs per harness, keyed by the ids the legacy catalogs already use:\n// shared/src/agents/model-catalog.json (Final, Claude, Codex entries),\n// shared/src/agents/codex-durable-models.ts (Responses Lite models nanocode serves) and\n// shared/src/agents/claude-durable-models.ts (Messages ids, without the CLI's [1m]\n// context suffix). Vendor tags let the broker route a model to the right credential.\n// Prices are versioned per model: the broker estimates the cost of\n// a request the vendor did not price from the entry effective when it was made.\n\nexport enum ModelVendor {\n OpenAI = 'openai',\n Anthropic = 'anthropic',\n OpenRouter = 'openrouter',\n}\n\n// USD per million tokens from `effectiveFrom` (ISO 8601) until a later entry.\n// `cachedInput` and `cacheWrite` price those shares of the input; the rest of\n// the input is priced at `input`.\nexport interface ModelPriceIface {\n effectiveFrom: string;\n inputUsdPerMillion: number;\n outputUsdPerMillion: number;\n cachedInputUsdPerMillion: number;\n cacheWriteUsdPerMillion: number;\n}\n\nexport interface HarnessModelIface {\n id: string;\n vendor: ModelVendor;\n label: string;\n // The vendor's own id, when it differs from the catalog id (OpenRouter's\n // `deepseek/deepseek-v4.1-flash` for `deepseek-v4.1-flash`).\n vendorModelId?: string;\n // Oldest first. Absent: unpriced (a USD budget then counts the usage as\n // reaching its ceiling).\n prices?: readonly ModelPriceIface[];\n}\n\n// The rates the Final harness's OpenRouter models were configured with when\n// they were introduced (agent-harness-workers pi/model.ts, 2026-10-02).\nconst OPENROUTER_RATES_EFFECTIVE_FROM = '2026-10-02T00:00:00Z';\n\n// The Final harness (the loop Home runs on), through the platform proxy to OpenRouter.\nconst DEEPSEEK_V4_1_FLASH = {\n id: 'deepseek-v4.1-flash',\n vendor: ModelVendor.OpenRouter,\n label: 'DeepSeek V4.1 Flash',\n vendorModelId: 'deepseek/deepseek-v4.1-flash',\n prices: [\n {\n effectiveFrom: OPENROUTER_RATES_EFFECTIVE_FROM,\n inputUsdPerMillion: 0.22,\n outputUsdPerMillion: 0.66,\n cachedInputUsdPerMillion: 0.007,\n cacheWriteUsdPerMillion: 0,\n },\n ],\n} as const satisfies HarnessModelIface;\n\nexport const FINAL_HARNESS_MODELS = [\n DEEPSEEK_V4_1_FLASH,\n {\n id: 'final-claude-opus-5.5',\n vendor: ModelVendor.OpenRouter,\n label: 'Opus 5.5',\n vendorModelId: 'anthropic/claude-opus-5.5',\n prices: [\n {\n effectiveFrom: OPENROUTER_RATES_EFFECTIVE_FROM,\n inputUsdPerMillion: 4,\n outputUsdPerMillion: 20,\n cachedInputUsdPerMillion: 0.2,\n cacheWriteUsdPerMillion: 5,\n },\n ],\n },\n {\n id: 'final-gpt-6.1-sol',\n vendor: ModelVendor.OpenRouter,\n label: 'GPT 6.1 Sol',\n vendorModelId: 'openai/gpt-6.1-sol',\n prices: [\n {\n effectiveFrom: OPENROUTER_RATES_EFFECTIVE_FROM,\n inputUsdPerMillion: 2,\n outputUsdPerMillion: 10,\n cachedInputUsdPerMillion: 0.1,\n cacheWriteUsdPerMillion: 2.5,\n },\n ],\n },\n] as const satisfies readonly HarnessModelIface[];\n\n// Vendor list prices (Standard tier, USD per million tokens) as published on\n// 2026-10-11, applied from the start of October: no platform traffic was\n// metered against this catalog before the agent stack's first deploy.\n// OpenAI: https://developers.openai.com/api/docs/pricing and\n// https://developers.openai.com/api/docs/models/<id>. Each input token is\n// billed at exactly one of input, cached input or cache write (GPT 6 and\n// GPT 5.6 charge cache writes at 1.25x input; older models do not).\n// Anthropic: https://platform.claude.com/docs/en/about-claude/pricing.\n// `cacheWrite` is the 5-minute write; 1-hour writes cost 2x input, so a\n// request using them is underestimated. Anthropic has no long-context rate for\n// these models. Regional processing and US-only inference (+10%) are not modelled.\nconst VENDOR_LIST_RATES_EFFECTIVE_FROM = '2026-10-01T00:00:00Z';\n\n// OpenAI bills a whole request whose input exceeds 272K tokens at 2x input\n// (cached, cache write) and 1.5x output. That tier is not modelled: budget\n// counters are rebuilt from hourly totals, which cannot tell a long request\n// from several short ones, so such requests are estimated at the base rates.\nconst price = (\n input: number,\n cachedInput: number,\n cacheWrite: number,\n output: number,\n): ModelPriceIface => ({\n effectiveFrom: VENDOR_LIST_RATES_EFFECTIVE_FROM,\n inputUsdPerMillion: input,\n cachedInputUsdPerMillion: cachedInput,\n cacheWriteUsdPerMillion: cacheWrite,\n outputUsdPerMillion: output,\n});\n\n// Responses Lite models: nanocode's Codex engine only runs these.\nexport const CODEX_RESPONSES_LITE_MODELS = [\n {\n id: 'gpt-6-sol',\n vendor: ModelVendor.OpenAI,\n label: 'GPT 6 Sol',\n prices: [price(2, 0.2, 2.5, 10)],\n },\n {\n id: 'gpt-6.1-sol',\n vendor: ModelVendor.OpenAI,\n label: 'GPT 6.1 Sol',\n prices: [price(2, 0.1, 2.5, 10)],\n },\n {\n id: 'gpt-6-luna',\n vendor: ModelVendor.OpenAI,\n label: 'GPT 6 Luna',\n prices: [price(0.1, 0.01, 0.125, 0.5)],\n },\n {\n id: 'gpt-6-astra',\n vendor: ModelVendor.OpenAI,\n label: 'GPT 6 Astra',\n prices: [price(10, 1, 12.5, 50)],\n },\n {\n id: 'gpt-5.6-sol',\n vendor: ModelVendor.OpenAI,\n label: 'GPT 5.6 Sol',\n // A promotional price OpenAI keeps \"at least through November 21, 2026\";\n // add a dated entry when it changes.\n prices: [price(4, 0.4, 5, 20)],\n },\n {\n id: 'gpt-5.6-terra',\n vendor: ModelVendor.OpenAI,\n label: 'GPT 5.6 Terra',\n prices: [price(2, 0.2, 2.5, 12)],\n },\n {\n id: 'gpt-5.6-luna',\n vendor: ModelVendor.OpenAI,\n label: 'GPT 5.6 Luna',\n prices: [price(0.2, 0.02, 0.25, 1.2)],\n },\n] as const satisfies readonly HarnessModelIface[];\n\n// The full Codex CLI serves every available catalog model, Responses Lite or not.\nexport const CODEX_CLI_MODELS = [\n ...CODEX_RESPONSES_LITE_MODELS,\n {\n id: 'gpt-5.5',\n vendor: ModelVendor.OpenAI,\n label: 'GPT 5.5',\n prices: [price(5, 0.5, 0, 30)],\n },\n {\n id: 'gpt-5.4',\n vendor: ModelVendor.OpenAI,\n label: 'GPT 5.4',\n prices: [price(2.5, 0.25, 0, 15)],\n },\n {\n id: 'gpt-5.4-mini',\n vendor: ModelVendor.OpenAI,\n label: 'GPT 5.4 Mini',\n prices: [price(0.75, 0.075, 0, 4.5)],\n },\n // A ChatGPT subscription model, not on OpenAI's API (so never platform\n // traffic) and retired from Codex on 2026-09-14: unpriced.\n { id: 'gpt-5.3-codex-spark', vendor: ModelVendor.OpenAI, label: 'GPT 5.3 Codex Spark' },\n] as const satisfies readonly HarnessModelIface[];\n\n// Available Claude catalog models, by Messages API id.\nexport const CLAUDE_MODELS = [\n {\n id: 'claude-opus-5-5',\n vendor: ModelVendor.Anthropic,\n label: 'Opus 5.5',\n prices: [price(4, 0.2, 5, 20)],\n },\n {\n id: 'claude-opus-5',\n vendor: ModelVendor.Anthropic,\n label: 'Opus 5',\n prices: [price(5, 0.5, 6.25, 25)],\n },\n {\n id: 'claude-fable-5',\n vendor: ModelVendor.Anthropic,\n label: 'Fable 5',\n prices: [price(10, 1, 12.5, 50)],\n },\n {\n id: 'claude-sonnet-5',\n vendor: ModelVendor.Anthropic,\n label: 'Sonnet 5',\n // The $2 / $10 launch price became the standard price; the rise planned\n // for 2026-09-01 did not happen.\n prices: [price(2, 0.2, 2.5, 10)],\n },\n {\n id: 'claude-haiku-4-5',\n vendor: ModelVendor.Anthropic,\n label: 'Haiku 4.5',\n prices: [price(1, 0.1, 1.25, 5)],\n },\n] as const satisfies readonly HarnessModelIface[];\n\n// Pi reaches OpenRouter, OpenAI and Anthropic through the proxy (or a BYOK key).\nexport const PI_MODELS = [\n DEEPSEEK_V4_1_FLASH,\n ...CODEX_CLI_MODELS.filter((model) => model.id !== 'gpt-5.3-codex-spark'),\n ...CLAUDE_MODELS,\n] as const satisfies readonly HarnessModelIface[];\n\nexport type FinalHarnessModelId = (typeof FINAL_HARNESS_MODELS)[number]['id'];\nexport type CodexResponsesLiteModelId = (typeof CODEX_RESPONSES_LITE_MODELS)[number]['id'];\nexport type CodexCliModelId = (typeof CODEX_CLI_MODELS)[number]['id'];\nexport type ClaudeModelId = (typeof CLAUDE_MODELS)[number]['id'];\nexport type PiModelId = (typeof PI_MODELS)[number]['id'];\n\n// Catalog defaults (model-catalog.json `defaults`), mapped onto these ids.\nexport const DEFAULT_FINAL_HARNESS_MODEL: FinalHarnessModelId = 'deepseek-v4.1-flash';\nexport const DEFAULT_PI_MODEL: PiModelId = 'deepseek-v4.1-flash';\nexport const DEFAULT_CODEX_MODEL: CodexResponsesLiteModelId = 'gpt-5.6-sol';\nexport const DEFAULT_CLAUDE_MODEL: ClaudeModelId = 'claude-fable-5';\n\nexport const modelIds = (models: readonly HarnessModelIface[]): string[] =>\n models.map((model) => model.id);\n\nexport const modelVendor = (models: readonly HarnessModelIface[], id: string): ModelVendor | null =>\n models.find((model) => model.id === id)?.vendor ?? null;\n\n// What the Pi engine's programs (agent-harness-workers) take as programConfig.model:\n// `<vendor>/<vendor model id>` (`openrouter/deepseek/deepseek-v4.1-flash`,\n// `openai/gpt-6-sol`). The vendor prefix also tells the broker which credential\n// the model needs. Ids outside the catalog pass through unchanged.\nexport const vendorModelRef = (models: readonly HarnessModelIface[], id: string): string => {\n const model = models.find((candidate) => candidate.id === id);\n return model == null ? id : `${model.vendor}/${model.vendorModelId ?? model.id}`;\n};\n\nexport const vendorsOf = (models: readonly HarnessModelIface[]): ModelVendor[] => [\n ...new Set(models.map((model) => model.vendor)),\n];\n\nconst ALL_CATALOG_ENTRIES: readonly HarnessModelIface[] = [\n ...FINAL_HARNESS_MODELS,\n ...PI_MODELS,\n ...CODEX_CLI_MODELS,\n ...CLAUDE_MODELS,\n];\n\n// Every catalog model, once per vendor and vendor model id.\nexport const CATALOG_MODELS: readonly HarnessModelIface[] = ALL_CATALOG_ENTRIES.filter(\n (model, index, all) =>\n all.findIndex(\n (other) =>\n other.vendor === model.vendor &&\n (other.vendorModelId ?? other.id) === (model.vendorModelId ?? model.id),\n ) === index,\n);\n\n// A dated snapshot of a model id, as vendors report it in responses\n// (`gpt-6-sol-2026-08-01`, `claude-haiku-4-5-20251001`).\nconst SNAPSHOT_SUFFIX = /^-(\\d{4}-\\d{2}-\\d{2}|\\d{8})$/;\n\nconst namesModel = (id: string, reported: string): boolean =>\n reported === id || (reported.startsWith(id) && SNAPSHOT_SUFFIX.test(reported.slice(id.length)));\n\n// The price in effect at `at` for the model a vendor reported (its own id,\n// a dated snapshot of it, or the catalog id); null when the catalog has none.\nexport const modelPriceAt = (args: {\n vendor: string;\n model: string;\n at: Date;\n models?: readonly HarnessModelIface[];\n}): ModelPriceIface | null => {\n const models = (args.models ?? CATALOG_MODELS).filter((model) => model.vendor === args.vendor);\n const entry =\n models.find(\n (model) => (model.vendorModelId ?? model.id) === args.model || model.id === args.model,\n ) ??\n models.find(\n (model) =>\n namesModel(model.vendorModelId ?? model.id, args.model) || namesModel(model.id, args.model),\n );\n const at = args.at.getTime();\n let current: ModelPriceIface | null = null;\n for (const price of entry?.prices ?? []) {\n const from = Date.parse(price.effectiveFrom);\n if (Number.isFinite(from) && from <= at) {\n if (current == null || from >= Date.parse(current.effectiveFrom)) current = price;\n }\n }\n return current;\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["ModelVendor", "price"]
|
|
7
|
-
}
|