@exulu/backend 1.26.0 → 1.27.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/CHANGELOG.md +2 -10
- package/dist/index.cjs +344 -40
- package/dist/index.d.cts +11 -1
- package/dist/index.d.ts +11 -1
- package/dist/index.js +344 -40
- package/package.json +4 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,14 +1,6 @@
|
|
|
1
|
-
# [1.
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
### Bug Fixes
|
|
5
|
-
|
|
6
|
-
* add github token to actions ([d328d2d](https://github.com/Qventu/exulu-backend/commit/d328d2d6557d9db016cbd09db918b06c78354f7a))
|
|
7
|
-
* merged evals feature to main ([5b58fb9](https://github.com/Qventu/exulu-backend/commit/5b58fb9dcb509e528d0ca29e53686acb14b6c843))
|
|
1
|
+
# [1.27.0](https://github.com/Qventu/exulu-backend/compare/v1.26.0...v1.27.0) (2025-10-14)
|
|
8
2
|
|
|
9
3
|
|
|
10
4
|
### Features
|
|
11
5
|
|
|
12
|
-
*
|
|
13
|
-
* evals ([19aaebd](https://github.com/Qventu/exulu-backend/commit/19aaebde4f068f9440d6ba5177e03328ee7634be))
|
|
14
|
-
* file processors ([caef87b](https://github.com/Qventu/exulu-backend/commit/caef87b25b3bfd4ae684cbbf7d4507c77528b4ae))
|
|
6
|
+
* default agents and ability to import theme ([ac49c74](https://github.com/Qventu/exulu-backend/commit/ac49c742e68c172a7011766166050b907a2020a3))
|
package/dist/index.cjs
CHANGED
|
@@ -1256,6 +1256,31 @@ var rbacSchema = {
|
|
|
1256
1256
|
}
|
|
1257
1257
|
]
|
|
1258
1258
|
};
|
|
1259
|
+
var platformConfigurationsSchema = {
|
|
1260
|
+
type: "platform_configurations",
|
|
1261
|
+
name: {
|
|
1262
|
+
plural: "platform_configurations",
|
|
1263
|
+
singular: "platform_configuration"
|
|
1264
|
+
},
|
|
1265
|
+
fields: [
|
|
1266
|
+
{
|
|
1267
|
+
name: "config_key",
|
|
1268
|
+
type: "text",
|
|
1269
|
+
required: true,
|
|
1270
|
+
unique: true,
|
|
1271
|
+
index: true
|
|
1272
|
+
},
|
|
1273
|
+
{
|
|
1274
|
+
name: "config_value",
|
|
1275
|
+
type: "json",
|
|
1276
|
+
required: true
|
|
1277
|
+
},
|
|
1278
|
+
{
|
|
1279
|
+
name: "description",
|
|
1280
|
+
type: "text"
|
|
1281
|
+
}
|
|
1282
|
+
]
|
|
1283
|
+
};
|
|
1259
1284
|
var addCoreFields = (schema) => {
|
|
1260
1285
|
schema.fields.forEach((field) => {
|
|
1261
1286
|
if (field.type === "file") {
|
|
@@ -1297,7 +1322,8 @@ var coreSchemas = {
|
|
|
1297
1322
|
evalRunsSchema: () => addCoreFields(evalRunsSchema),
|
|
1298
1323
|
variablesSchema: () => addCoreFields(variablesSchema),
|
|
1299
1324
|
rbacSchema: () => addCoreFields(rbacSchema),
|
|
1300
|
-
workflowTemplatesSchema: () => addCoreFields(workflowTemplatesSchema)
|
|
1325
|
+
workflowTemplatesSchema: () => addCoreFields(workflowTemplatesSchema),
|
|
1326
|
+
platformConfigurationsSchema: () => addCoreFields(platformConfigurationsSchema)
|
|
1301
1327
|
};
|
|
1302
1328
|
}
|
|
1303
1329
|
};
|
|
@@ -1608,6 +1634,7 @@ ${enumValues}
|
|
|
1608
1634
|
fields.push(" streaming: Boolean");
|
|
1609
1635
|
fields.push(" capabilities: AgentCapabilities");
|
|
1610
1636
|
fields.push(" maxContextLength: Int");
|
|
1637
|
+
fields.push(" provider: String");
|
|
1611
1638
|
fields.push(" slug: String");
|
|
1612
1639
|
fields.push(" evals: [AgentEvalFunction]");
|
|
1613
1640
|
}
|
|
@@ -2300,7 +2327,8 @@ var backendAgentFields = [
|
|
|
2300
2327
|
"rateLimit",
|
|
2301
2328
|
"streaming",
|
|
2302
2329
|
"capabilities",
|
|
2303
|
-
"maxContextLength"
|
|
2330
|
+
"maxContextLength",
|
|
2331
|
+
"provider"
|
|
2304
2332
|
];
|
|
2305
2333
|
var removeAgentFields = (requestedFields) => {
|
|
2306
2334
|
const filtered = requestedFields.filter((field) => !backendAgentFields.includes(field));
|
|
@@ -2365,6 +2393,9 @@ var addAgentFields = async (requestedFields, agents, result, tools, user) => {
|
|
|
2365
2393
|
if (requestedFields.includes("maxContextLength")) {
|
|
2366
2394
|
result.maxContextLength = backend?.maxContextLength || 0;
|
|
2367
2395
|
}
|
|
2396
|
+
if (requestedFields.includes("provider")) {
|
|
2397
|
+
result.provider = backend?.provider || "";
|
|
2398
|
+
}
|
|
2368
2399
|
if (requestedFields.includes("evals")) {
|
|
2369
2400
|
result.evals = backend?.evals?.map((evalFunc) => ({
|
|
2370
2401
|
id: evalFunc.id,
|
|
@@ -3461,6 +3492,7 @@ type Provider {
|
|
|
3461
3492
|
name: String!
|
|
3462
3493
|
description: String
|
|
3463
3494
|
providerName: String
|
|
3495
|
+
provider: String
|
|
3464
3496
|
modelName: String
|
|
3465
3497
|
type: EnumProviderType!
|
|
3466
3498
|
}
|
|
@@ -4215,6 +4247,7 @@ var ExuluAgent2 = class {
|
|
|
4215
4247
|
// The ID is used for storing references to agents so it is important it does not change.
|
|
4216
4248
|
id;
|
|
4217
4249
|
name;
|
|
4250
|
+
provider;
|
|
4218
4251
|
description = "";
|
|
4219
4252
|
slug = "";
|
|
4220
4253
|
type;
|
|
@@ -4226,11 +4259,12 @@ var ExuluAgent2 = class {
|
|
|
4226
4259
|
// private memory: Memory | undefined; // TODO do own implementation
|
|
4227
4260
|
model;
|
|
4228
4261
|
capabilities;
|
|
4229
|
-
constructor({ id, name, description, config, rateLimit, capabilities, type, maxContextLength, evals }) {
|
|
4262
|
+
constructor({ id, name, description, config, rateLimit, capabilities, type, maxContextLength, evals, provider }) {
|
|
4230
4263
|
this.id = id;
|
|
4231
4264
|
this.name = name;
|
|
4232
4265
|
this.description = description;
|
|
4233
4266
|
this.rateLimit = rateLimit;
|
|
4267
|
+
this.provider = provider;
|
|
4234
4268
|
this.config = config;
|
|
4235
4269
|
this.type = type;
|
|
4236
4270
|
this.maxContextLength = maxContextLength;
|
|
@@ -5409,6 +5443,7 @@ var {
|
|
|
5409
5443
|
testCasesSchema: testCasesSchema2,
|
|
5410
5444
|
evalSetsSchema: evalSetsSchema2,
|
|
5411
5445
|
evalRunsSchema: evalRunsSchema2,
|
|
5446
|
+
platformConfigurationsSchema: platformConfigurationsSchema2,
|
|
5412
5447
|
agentSessionsSchema: agentSessionsSchema2,
|
|
5413
5448
|
agentMessagesSchema: agentMessagesSchema2,
|
|
5414
5449
|
rolesSchema: rolesSchema2,
|
|
@@ -5482,6 +5517,7 @@ var createExpressRoutes = async (app, agents, tools, contexts, config, tracer) =
|
|
|
5482
5517
|
agentsSchema2(),
|
|
5483
5518
|
projectsSchema2(),
|
|
5484
5519
|
evalRunsSchema2(),
|
|
5520
|
+
platformConfigurationsSchema2(),
|
|
5485
5521
|
evalSetsSchema2(),
|
|
5486
5522
|
testCasesSchema2(),
|
|
5487
5523
|
agentSessionsSchema2(),
|
|
@@ -5730,6 +5766,22 @@ Mood: friendly and intelligent.
|
|
|
5730
5766
|
authenticated: true
|
|
5731
5767
|
});
|
|
5732
5768
|
});
|
|
5769
|
+
app.get("/theme", async (req, res) => {
|
|
5770
|
+
const { db: db4 } = await postgresClient();
|
|
5771
|
+
const themeConfig = await db4.from("platform_configurations").where({ config_key: "theme_config" }).first();
|
|
5772
|
+
if (!themeConfig) {
|
|
5773
|
+
res.status(200).json({
|
|
5774
|
+
theme: {
|
|
5775
|
+
light: {},
|
|
5776
|
+
dark: {}
|
|
5777
|
+
}
|
|
5778
|
+
});
|
|
5779
|
+
return;
|
|
5780
|
+
}
|
|
5781
|
+
res.status(200).json({
|
|
5782
|
+
theme: themeConfig.config_value
|
|
5783
|
+
});
|
|
5784
|
+
});
|
|
5733
5785
|
app.get("/config", async (req, res) => {
|
|
5734
5786
|
res.status(200).json({
|
|
5735
5787
|
MCP: {
|
|
@@ -6379,33 +6431,76 @@ ${code}`
|
|
|
6379
6431
|
// src/registry/index.ts
|
|
6380
6432
|
var import_express8 = __toESM(require("express"), 1);
|
|
6381
6433
|
|
|
6382
|
-
// src/templates/agents/claude
|
|
6434
|
+
// src/templates/agents/anthropic/claude.ts
|
|
6383
6435
|
var import_anthropic = require("@ai-sdk/anthropic");
|
|
6436
|
+
var claudeOpus4Agent = new ExuluAgent2({
|
|
6437
|
+
id: `default_claude_4_opus_agent`,
|
|
6438
|
+
name: `CLAUDE-OPUS-4`,
|
|
6439
|
+
provider: "anthropic",
|
|
6440
|
+
description: `Previous Anthropic flagship model. Very high intelligence and capability. Moderately Fast.`,
|
|
6441
|
+
type: "agent",
|
|
6442
|
+
capabilities: {
|
|
6443
|
+
text: true,
|
|
6444
|
+
images: [".png", ".jpg", ".jpeg", ".webp"],
|
|
6445
|
+
files: [".pdf", ".docx", ".xlsx", ".xls", ".csv", ".pptx", ".ppt", ".json"],
|
|
6446
|
+
audio: [],
|
|
6447
|
+
video: []
|
|
6448
|
+
},
|
|
6449
|
+
evals: [],
|
|
6450
|
+
maxContextLength: 2e5,
|
|
6451
|
+
config: {
|
|
6452
|
+
name: `CLAUDE-OPUS-4`,
|
|
6453
|
+
instructions: "",
|
|
6454
|
+
model: {
|
|
6455
|
+
create: ({ apiKey }) => {
|
|
6456
|
+
const anthropic = (0, import_anthropic.createAnthropic)({
|
|
6457
|
+
apiKey
|
|
6458
|
+
});
|
|
6459
|
+
return anthropic.languageModel("claude-opus-4-0");
|
|
6460
|
+
}
|
|
6461
|
+
// todo add a field of type string that adds a dropdown list from which the user can select the model
|
|
6462
|
+
// todo for each model, check which provider is used, and require the admin to add one or multiple
|
|
6463
|
+
// API keys for the provider (which we can then auto-rotate).
|
|
6464
|
+
// todo also add custom fields for rate limiting, so the admin can set custom rate limits for the agent
|
|
6465
|
+
// and allow him/her to decide if the rate limit is per user or per agent.
|
|
6466
|
+
// todo finally allow switching on or off immutable audit logs on the agent. Which then enables OTEL
|
|
6467
|
+
// and stores the logs into the pre-defined storage.
|
|
6468
|
+
}
|
|
6469
|
+
}
|
|
6470
|
+
});
|
|
6384
6471
|
var claudeSonnet4Agent = new ExuluAgent2({
|
|
6385
6472
|
id: `claude_code_agent`,
|
|
6386
|
-
name: `
|
|
6387
|
-
|
|
6473
|
+
name: `CLAUDE-SONNET-4`,
|
|
6474
|
+
provider: "anthropic",
|
|
6475
|
+
description: `High intelligence and balanced performance, used a lot for agentic coding tasks. Anthropic provides a newer 4.5 model that is more powerful and faster.`,
|
|
6388
6476
|
type: "agent",
|
|
6477
|
+
capabilities: {
|
|
6478
|
+
text: true,
|
|
6479
|
+
images: [".png", ".jpg", ".jpeg", ".webp"],
|
|
6480
|
+
files: [".pdf", ".docx", ".xlsx", ".xls", ".csv", ".pptx", ".ppt", ".json"],
|
|
6481
|
+
audio: [],
|
|
6482
|
+
video: []
|
|
6483
|
+
},
|
|
6484
|
+
evals: [],
|
|
6485
|
+
maxContextLength: 2e5,
|
|
6389
6486
|
config: {
|
|
6390
|
-
name: `
|
|
6391
|
-
instructions: "
|
|
6487
|
+
name: `CLAUDE-SONNET-4`,
|
|
6488
|
+
instructions: "",
|
|
6392
6489
|
model: {
|
|
6393
6490
|
create: ({ apiKey }) => {
|
|
6394
6491
|
const anthropic = (0, import_anthropic.createAnthropic)({
|
|
6395
6492
|
apiKey
|
|
6396
6493
|
});
|
|
6397
|
-
return anthropic.languageModel("claude-sonnet-4-
|
|
6494
|
+
return anthropic.languageModel("claude-sonnet-4-0");
|
|
6398
6495
|
}
|
|
6399
6496
|
}
|
|
6400
6497
|
}
|
|
6401
6498
|
});
|
|
6402
|
-
|
|
6403
|
-
|
|
6404
|
-
|
|
6405
|
-
|
|
6406
|
-
|
|
6407
|
-
name: `Default Claude 4 Opus anthropic provider`,
|
|
6408
|
-
description: `Basic agent claude 4 opus agent you can use to chat with.`,
|
|
6499
|
+
var claudeSonnet45Agent = new ExuluAgent2({
|
|
6500
|
+
id: `claude_code_agent`,
|
|
6501
|
+
name: `CLAUDE-SONNET-4.5`,
|
|
6502
|
+
provider: "anthropic",
|
|
6503
|
+
description: `Best Anthropic model for complex agents and coding. Highest intelligence across most tasks with exceptional agent and coding capabilities`,
|
|
6409
6504
|
type: "agent",
|
|
6410
6505
|
capabilities: {
|
|
6411
6506
|
text: true,
|
|
@@ -6417,32 +6512,82 @@ var claudeOpus4Agent = new ExuluAgent2({
|
|
|
6417
6512
|
evals: [],
|
|
6418
6513
|
maxContextLength: 2e5,
|
|
6419
6514
|
config: {
|
|
6420
|
-
name: `
|
|
6421
|
-
instructions: "
|
|
6515
|
+
name: `CLAUDE-SONNET-4.5`,
|
|
6516
|
+
instructions: "",
|
|
6422
6517
|
model: {
|
|
6423
6518
|
create: ({ apiKey }) => {
|
|
6424
|
-
const anthropic = (0,
|
|
6519
|
+
const anthropic = (0, import_anthropic.createAnthropic)({
|
|
6425
6520
|
apiKey
|
|
6426
6521
|
});
|
|
6427
|
-
return anthropic.languageModel("claude-4-
|
|
6522
|
+
return anthropic.languageModel("claude-sonnet-4-5");
|
|
6428
6523
|
}
|
|
6429
|
-
// todo add a field of type string that adds a dropdown list from which the user can select the model
|
|
6430
|
-
// todo for each model, check which provider is used, and require the admin to add one or multiple
|
|
6431
|
-
// API keys for the provider (which we can then auto-rotate).
|
|
6432
|
-
// todo also add custom fields for rate limiting, so the admin can set custom rate limits for the agent
|
|
6433
|
-
// and allow him/her to decide if the rate limit is per user or per agent.
|
|
6434
|
-
// todo finally allow switching on or off immutable audit logs on the agent. Which then enables OTEL
|
|
6435
|
-
// and stores the logs into the pre-defined storage.
|
|
6436
6524
|
}
|
|
6437
6525
|
}
|
|
6438
6526
|
});
|
|
6439
6527
|
|
|
6440
|
-
// src/templates/agents/gpt
|
|
6528
|
+
// src/templates/agents/openai/gpt.ts
|
|
6441
6529
|
var import_openai2 = require("@ai-sdk/openai");
|
|
6530
|
+
var gpt5proAgent = new ExuluAgent2({
|
|
6531
|
+
id: `default_gpt_5_pro_agent`,
|
|
6532
|
+
provider: "openai",
|
|
6533
|
+
name: `GPT-5-PRO`,
|
|
6534
|
+
description: `GPT-5 pro uses more compute to think harder and provide consistently better answers. GPT-5 pro is available in the Responses API only to enable support for multi-turn model interactions before responding to API requests, and other advanced API features in the future. Since GPT-5 pro is designed to tackle tough problems, some requests may take several minutes to finish. To avoid timeouts, try using background mode. As our most advanced reasoning model, GPT-5 pro defaults to (and only supports) reasoning.effort: high. GPT-5 pro does not support code interpreter.`,
|
|
6535
|
+
type: "agent",
|
|
6536
|
+
capabilities: {
|
|
6537
|
+
text: true,
|
|
6538
|
+
images: [".png", ".jpg", ".jpeg", ".webp"],
|
|
6539
|
+
files: [".pdf", ".docx", ".xlsx", ".xls", ".csv", ".pptx", ".ppt", ".json"],
|
|
6540
|
+
audio: [],
|
|
6541
|
+
video: []
|
|
6542
|
+
},
|
|
6543
|
+
evals: [],
|
|
6544
|
+
maxContextLength: 4e5,
|
|
6545
|
+
config: {
|
|
6546
|
+
name: `GPT-5-PRO`,
|
|
6547
|
+
instructions: "",
|
|
6548
|
+
model: {
|
|
6549
|
+
create: ({ apiKey }) => {
|
|
6550
|
+
const openai = (0, import_openai2.createOpenAI)({
|
|
6551
|
+
apiKey
|
|
6552
|
+
});
|
|
6553
|
+
return openai.languageModel("gpt-5-pro");
|
|
6554
|
+
}
|
|
6555
|
+
}
|
|
6556
|
+
}
|
|
6557
|
+
});
|
|
6558
|
+
var gpt5CodexAgent = new ExuluAgent2({
|
|
6559
|
+
id: `default_gpt_5_codex_agent`,
|
|
6560
|
+
provider: "openai",
|
|
6561
|
+
name: `GPT-5-CODEX`,
|
|
6562
|
+
description: `GPT-5-Codex is a version of GPT-5 optimized for agentic coding tasks in Codex or similar environments. It's available in the Responses API only and the underlying model snapshot will be regularly updated. If you want to learn more about prompting GPT-5-Codex, refer to the OpenAI dedicated guide.`,
|
|
6563
|
+
type: "agent",
|
|
6564
|
+
capabilities: {
|
|
6565
|
+
text: true,
|
|
6566
|
+
images: [".png", ".jpg", ".jpeg", ".webp"],
|
|
6567
|
+
files: [".pdf", ".docx", ".xlsx", ".xls", ".csv", ".pptx", ".ppt", ".json"],
|
|
6568
|
+
audio: [],
|
|
6569
|
+
video: []
|
|
6570
|
+
},
|
|
6571
|
+
evals: [],
|
|
6572
|
+
maxContextLength: 4e5,
|
|
6573
|
+
config: {
|
|
6574
|
+
name: `GPT-5-CODEX`,
|
|
6575
|
+
instructions: "",
|
|
6576
|
+
model: {
|
|
6577
|
+
create: ({ apiKey }) => {
|
|
6578
|
+
const openai = (0, import_openai2.createOpenAI)({
|
|
6579
|
+
apiKey
|
|
6580
|
+
});
|
|
6581
|
+
return openai.languageModel("gpt-5-codex");
|
|
6582
|
+
}
|
|
6583
|
+
}
|
|
6584
|
+
}
|
|
6585
|
+
});
|
|
6442
6586
|
var gpt5MiniAgent = new ExuluAgent2({
|
|
6443
6587
|
id: `default_gpt_5_mini_agent`,
|
|
6444
|
-
|
|
6445
|
-
|
|
6588
|
+
provider: "openai",
|
|
6589
|
+
name: `GPT-5-MINI`,
|
|
6590
|
+
description: `GPT-5 mini is a faster, more cost-efficient version of GPT-5. It's great for well-defined tasks and precise prompts.`,
|
|
6446
6591
|
type: "agent",
|
|
6447
6592
|
capabilities: {
|
|
6448
6593
|
text: true,
|
|
@@ -6452,10 +6597,10 @@ var gpt5MiniAgent = new ExuluAgent2({
|
|
|
6452
6597
|
video: []
|
|
6453
6598
|
},
|
|
6454
6599
|
evals: [],
|
|
6455
|
-
maxContextLength:
|
|
6600
|
+
maxContextLength: 4e5,
|
|
6456
6601
|
config: {
|
|
6457
|
-
name: `
|
|
6458
|
-
instructions: "
|
|
6602
|
+
name: `GPT-5-MINI`,
|
|
6603
|
+
instructions: "",
|
|
6459
6604
|
model: {
|
|
6460
6605
|
create: ({ apiKey }) => {
|
|
6461
6606
|
const openai = (0, import_openai2.createOpenAI)({
|
|
@@ -6475,8 +6620,9 @@ var gpt5MiniAgent = new ExuluAgent2({
|
|
|
6475
6620
|
});
|
|
6476
6621
|
var gpt5agent = new ExuluAgent2({
|
|
6477
6622
|
id: `default_gpt_5_agent`,
|
|
6478
|
-
|
|
6479
|
-
|
|
6623
|
+
provider: "openai",
|
|
6624
|
+
name: `GPT-5`,
|
|
6625
|
+
description: `GPT-5 is the flagship model for coding, reasoning, and agentic tasks across domains.`,
|
|
6480
6626
|
type: "agent",
|
|
6481
6627
|
capabilities: {
|
|
6482
6628
|
text: true,
|
|
@@ -6486,10 +6632,10 @@ var gpt5agent = new ExuluAgent2({
|
|
|
6486
6632
|
video: []
|
|
6487
6633
|
},
|
|
6488
6634
|
evals: [],
|
|
6489
|
-
maxContextLength:
|
|
6635
|
+
maxContextLength: 4e5,
|
|
6490
6636
|
config: {
|
|
6491
|
-
name: `
|
|
6492
|
-
instructions: "
|
|
6637
|
+
name: `GPT-5`,
|
|
6638
|
+
instructions: "",
|
|
6493
6639
|
model: {
|
|
6494
6640
|
create: ({ apiKey }) => {
|
|
6495
6641
|
const openai = (0, import_openai2.createOpenAI)({
|
|
@@ -6507,6 +6653,146 @@ var gpt5agent = new ExuluAgent2({
|
|
|
6507
6653
|
}
|
|
6508
6654
|
}
|
|
6509
6655
|
});
|
|
6656
|
+
var gpt5NanoAgent = new ExuluAgent2({
|
|
6657
|
+
id: `default_gpt_5_nano_agent`,
|
|
6658
|
+
provider: "openai",
|
|
6659
|
+
name: `GPT-5-NANO`,
|
|
6660
|
+
description: `GPT-5 Nano is the fastest, cheapest version of GPT-5. It's great for summarization and classification tasks. .`,
|
|
6661
|
+
type: "agent",
|
|
6662
|
+
capabilities: {
|
|
6663
|
+
text: true,
|
|
6664
|
+
images: [".png", ".jpg", ".jpeg", ".webp"],
|
|
6665
|
+
files: [".pdf", ".docx", ".xlsx", ".xls", ".csv", ".pptx", ".ppt", ".json"],
|
|
6666
|
+
audio: [],
|
|
6667
|
+
video: []
|
|
6668
|
+
},
|
|
6669
|
+
evals: [],
|
|
6670
|
+
maxContextLength: 4e5,
|
|
6671
|
+
config: {
|
|
6672
|
+
name: `GPT-5-NANO`,
|
|
6673
|
+
instructions: "",
|
|
6674
|
+
model: {
|
|
6675
|
+
create: ({ apiKey }) => {
|
|
6676
|
+
const openai = (0, import_openai2.createOpenAI)({
|
|
6677
|
+
apiKey
|
|
6678
|
+
});
|
|
6679
|
+
return openai.languageModel("gpt-5-nano");
|
|
6680
|
+
}
|
|
6681
|
+
}
|
|
6682
|
+
}
|
|
6683
|
+
});
|
|
6684
|
+
var gpt41Agent = new ExuluAgent2({
|
|
6685
|
+
id: `default_gpt_4_1_agent`,
|
|
6686
|
+
provider: "openai",
|
|
6687
|
+
name: `GPT-4.1`,
|
|
6688
|
+
description: `GPT-4.1 excels at instruction following and tool calling, with broad knowledge across domains. It features a 1M token context window, and low latency without a reasoning step. Note that we recommend starting with GPT-5 for complex tasks`,
|
|
6689
|
+
type: "agent",
|
|
6690
|
+
capabilities: {
|
|
6691
|
+
text: true,
|
|
6692
|
+
images: [".png", ".jpg", ".jpeg", ".webp"],
|
|
6693
|
+
files: [".pdf", ".docx", ".xlsx", ".xls", ".csv", ".pptx", ".ppt", ".json"],
|
|
6694
|
+
audio: [],
|
|
6695
|
+
video: []
|
|
6696
|
+
},
|
|
6697
|
+
evals: [],
|
|
6698
|
+
maxContextLength: 1047576,
|
|
6699
|
+
config: {
|
|
6700
|
+
name: `GPT-4.1`,
|
|
6701
|
+
instructions: "",
|
|
6702
|
+
model: {
|
|
6703
|
+
create: ({ apiKey }) => {
|
|
6704
|
+
const openai = (0, import_openai2.createOpenAI)({
|
|
6705
|
+
apiKey
|
|
6706
|
+
});
|
|
6707
|
+
return openai.languageModel("gpt-4.1");
|
|
6708
|
+
}
|
|
6709
|
+
}
|
|
6710
|
+
}
|
|
6711
|
+
});
|
|
6712
|
+
var gpt41MiniAgent = new ExuluAgent2({
|
|
6713
|
+
id: `default_gpt_4_1_mini_agent`,
|
|
6714
|
+
provider: "openai",
|
|
6715
|
+
name: `GPT-4.1-MINI`,
|
|
6716
|
+
description: `GPT-4.1 mini excels at instruction following and tool calling. It features a 1M token context window, and low latency without a reasoning step.`,
|
|
6717
|
+
type: "agent",
|
|
6718
|
+
capabilities: {
|
|
6719
|
+
text: true,
|
|
6720
|
+
images: [".png", ".jpg", ".jpeg", ".webp"],
|
|
6721
|
+
files: [".pdf", ".docx", ".xlsx", ".xls", ".csv", ".pptx", ".ppt", ".json"],
|
|
6722
|
+
audio: [],
|
|
6723
|
+
video: []
|
|
6724
|
+
},
|
|
6725
|
+
evals: [],
|
|
6726
|
+
maxContextLength: 1047576,
|
|
6727
|
+
config: {
|
|
6728
|
+
name: `GPT-4.1-MINI`,
|
|
6729
|
+
instructions: "",
|
|
6730
|
+
model: {
|
|
6731
|
+
create: ({ apiKey }) => {
|
|
6732
|
+
const openai = (0, import_openai2.createOpenAI)({
|
|
6733
|
+
apiKey
|
|
6734
|
+
});
|
|
6735
|
+
return openai.languageModel("gpt-4.1-mini");
|
|
6736
|
+
}
|
|
6737
|
+
}
|
|
6738
|
+
}
|
|
6739
|
+
});
|
|
6740
|
+
var gpt4oAgent = new ExuluAgent2({
|
|
6741
|
+
id: `default_gpt_4o_agent`,
|
|
6742
|
+
provider: "openai",
|
|
6743
|
+
name: `GPT-4O`,
|
|
6744
|
+
description: `Basic agent gpt 4o agent you can use to chat with.`,
|
|
6745
|
+
type: "agent",
|
|
6746
|
+
capabilities: {
|
|
6747
|
+
text: true,
|
|
6748
|
+
images: [".png", ".jpg", ".jpeg", ".webp"],
|
|
6749
|
+
files: [".pdf", ".docx", ".xlsx", ".xls", ".csv", ".pptx", ".ppt", ".json"],
|
|
6750
|
+
audio: [],
|
|
6751
|
+
video: []
|
|
6752
|
+
},
|
|
6753
|
+
evals: [],
|
|
6754
|
+
maxContextLength: 128e3,
|
|
6755
|
+
config: {
|
|
6756
|
+
name: `Default agent`,
|
|
6757
|
+
instructions: "You are a helpful assistant.",
|
|
6758
|
+
model: {
|
|
6759
|
+
create: ({ apiKey }) => {
|
|
6760
|
+
const openai = (0, import_openai2.createOpenAI)({
|
|
6761
|
+
apiKey
|
|
6762
|
+
});
|
|
6763
|
+
return openai.languageModel("gpt-4o");
|
|
6764
|
+
}
|
|
6765
|
+
}
|
|
6766
|
+
}
|
|
6767
|
+
});
|
|
6768
|
+
var gpt4oMiniAgent = new ExuluAgent2({
|
|
6769
|
+
id: `default_gpt_4o_mini_agent`,
|
|
6770
|
+
provider: "openai",
|
|
6771
|
+
name: `GPT-4O-MINI`,
|
|
6772
|
+
description: `GPT-4o mini (\u201Co\u201D for \u201Comni\u201D) is a fast, affordable small model for focused tasks. It accepts both text and image inputs, and produces text outputs (including Structured Outputs). It is ideal for fine-tuning, and model outputs from a larger model like GPT-4o can be distilled to GPT-4o-mini to produce similar results at lower cost and latency.`,
|
|
6773
|
+
type: "agent",
|
|
6774
|
+
capabilities: {
|
|
6775
|
+
text: true,
|
|
6776
|
+
images: [".png", ".jpg", ".jpeg", ".webp"],
|
|
6777
|
+
files: [".pdf", ".docx", ".xlsx", ".xls", ".csv", ".pptx", ".ppt", ".json"],
|
|
6778
|
+
audio: [],
|
|
6779
|
+
video: []
|
|
6780
|
+
},
|
|
6781
|
+
evals: [],
|
|
6782
|
+
maxContextLength: 128e3,
|
|
6783
|
+
config: {
|
|
6784
|
+
name: `GPT-4O-MINI`,
|
|
6785
|
+
instructions: "",
|
|
6786
|
+
model: {
|
|
6787
|
+
create: ({ apiKey }) => {
|
|
6788
|
+
const openai = (0, import_openai2.createOpenAI)({
|
|
6789
|
+
apiKey
|
|
6790
|
+
});
|
|
6791
|
+
return openai.languageModel("gpt-4o-mini");
|
|
6792
|
+
}
|
|
6793
|
+
}
|
|
6794
|
+
}
|
|
6795
|
+
});
|
|
6510
6796
|
|
|
6511
6797
|
// src/registry/index.ts
|
|
6512
6798
|
var import_api4 = require("@opentelemetry/api");
|
|
@@ -6619,8 +6905,16 @@ var ExuluApp = class {
|
|
|
6619
6905
|
this._agents = [
|
|
6620
6906
|
claudeSonnet4Agent,
|
|
6621
6907
|
claudeOpus4Agent,
|
|
6908
|
+
claudeSonnet45Agent,
|
|
6622
6909
|
gpt5MiniAgent,
|
|
6623
6910
|
gpt5agent,
|
|
6911
|
+
gpt5proAgent,
|
|
6912
|
+
gpt5CodexAgent,
|
|
6913
|
+
gpt5NanoAgent,
|
|
6914
|
+
gpt41Agent,
|
|
6915
|
+
gpt41MiniAgent,
|
|
6916
|
+
gpt4oAgent,
|
|
6917
|
+
gpt4oMiniAgent,
|
|
6624
6918
|
...agents ?? []
|
|
6625
6919
|
];
|
|
6626
6920
|
this._config = config;
|
|
@@ -8066,6 +8360,7 @@ var {
|
|
|
8066
8360
|
evalSetsSchema: evalSetsSchema3,
|
|
8067
8361
|
evalRunsSchema: evalRunsSchema3,
|
|
8068
8362
|
agentSessionsSchema: agentSessionsSchema3,
|
|
8363
|
+
platformConfigurationsSchema: platformConfigurationsSchema3,
|
|
8069
8364
|
agentMessagesSchema: agentMessagesSchema3,
|
|
8070
8365
|
rolesSchema: rolesSchema3,
|
|
8071
8366
|
usersSchema: usersSchema3,
|
|
@@ -8104,6 +8399,7 @@ var up = async function(knex) {
|
|
|
8104
8399
|
testCasesSchema3(),
|
|
8105
8400
|
evalSetsSchema3(),
|
|
8106
8401
|
evalRunsSchema3(),
|
|
8402
|
+
platformConfigurationsSchema3(),
|
|
8107
8403
|
statisticsSchema3(),
|
|
8108
8404
|
projectsSchema3(),
|
|
8109
8405
|
rbacSchema3(),
|
|
@@ -8317,11 +8613,19 @@ var ExuluDefaultContexts = {
|
|
|
8317
8613
|
var ExuluDefaultAgents = {
|
|
8318
8614
|
anthropic: {
|
|
8319
8615
|
opus4: claudeOpus4Agent,
|
|
8320
|
-
sonnet4: claudeSonnet4Agent
|
|
8616
|
+
sonnet4: claudeSonnet4Agent,
|
|
8617
|
+
sonnet45: claudeSonnet45Agent
|
|
8321
8618
|
},
|
|
8322
8619
|
openai: {
|
|
8323
8620
|
gpt5Mini: gpt5MiniAgent,
|
|
8324
|
-
gpt5: gpt5agent
|
|
8621
|
+
gpt5: gpt5agent,
|
|
8622
|
+
gpt5pro: gpt5proAgent,
|
|
8623
|
+
gpt5Codex: gpt5CodexAgent,
|
|
8624
|
+
gpt5Nano: gpt5NanoAgent,
|
|
8625
|
+
gpt41: gpt41Agent,
|
|
8626
|
+
gpt41Mini: gpt41MiniAgent,
|
|
8627
|
+
gpt4o: gpt4oAgent,
|
|
8628
|
+
gpt4oMini: gpt4oMiniAgent
|
|
8325
8629
|
}
|
|
8326
8630
|
};
|
|
8327
8631
|
var ExuluVariables = {
|
package/dist/index.d.cts
CHANGED
|
@@ -193,6 +193,7 @@ interface ExuluAgentParams {
|
|
|
193
193
|
description: string;
|
|
194
194
|
config?: ExuluAgentConfig | undefined;
|
|
195
195
|
maxContextLength?: number;
|
|
196
|
+
provider: string;
|
|
196
197
|
capabilities?: {
|
|
197
198
|
text: boolean;
|
|
198
199
|
images: imageTypes[];
|
|
@@ -260,6 +261,7 @@ declare class ExuluEval {
|
|
|
260
261
|
declare class ExuluAgent {
|
|
261
262
|
id: string;
|
|
262
263
|
name: string;
|
|
264
|
+
provider: string;
|
|
263
265
|
description: string;
|
|
264
266
|
slug: string;
|
|
265
267
|
type: "agent";
|
|
@@ -280,7 +282,7 @@ declare class ExuluAgent {
|
|
|
280
282
|
audio: string[];
|
|
281
283
|
video: string[];
|
|
282
284
|
};
|
|
283
|
-
constructor({ id, name, description, config, rateLimit, capabilities, type, maxContextLength, evals }: ExuluAgentParams);
|
|
285
|
+
constructor({ id, name, description, config, rateLimit, capabilities, type, maxContextLength, evals, provider }: ExuluAgentParams);
|
|
284
286
|
get providerName(): string;
|
|
285
287
|
get modelName(): string;
|
|
286
288
|
tool: (instance: string, agents: ExuluAgent[]) => Promise<ExuluTool | null>;
|
|
@@ -1436,10 +1438,18 @@ declare const ExuluDefaultAgents: {
|
|
|
1436
1438
|
anthropic: {
|
|
1437
1439
|
opus4: ExuluAgent;
|
|
1438
1440
|
sonnet4: ExuluAgent;
|
|
1441
|
+
sonnet45: ExuluAgent;
|
|
1439
1442
|
};
|
|
1440
1443
|
openai: {
|
|
1441
1444
|
gpt5Mini: ExuluAgent;
|
|
1442
1445
|
gpt5: ExuluAgent;
|
|
1446
|
+
gpt5pro: ExuluAgent;
|
|
1447
|
+
gpt5Codex: ExuluAgent;
|
|
1448
|
+
gpt5Nano: ExuluAgent;
|
|
1449
|
+
gpt41: ExuluAgent;
|
|
1450
|
+
gpt41Mini: ExuluAgent;
|
|
1451
|
+
gpt4o: ExuluAgent;
|
|
1452
|
+
gpt4oMini: ExuluAgent;
|
|
1443
1453
|
};
|
|
1444
1454
|
};
|
|
1445
1455
|
declare const ExuluVariables: {
|
package/dist/index.d.ts
CHANGED
|
@@ -193,6 +193,7 @@ interface ExuluAgentParams {
|
|
|
193
193
|
description: string;
|
|
194
194
|
config?: ExuluAgentConfig | undefined;
|
|
195
195
|
maxContextLength?: number;
|
|
196
|
+
provider: string;
|
|
196
197
|
capabilities?: {
|
|
197
198
|
text: boolean;
|
|
198
199
|
images: imageTypes[];
|
|
@@ -260,6 +261,7 @@ declare class ExuluEval {
|
|
|
260
261
|
declare class ExuluAgent {
|
|
261
262
|
id: string;
|
|
262
263
|
name: string;
|
|
264
|
+
provider: string;
|
|
263
265
|
description: string;
|
|
264
266
|
slug: string;
|
|
265
267
|
type: "agent";
|
|
@@ -280,7 +282,7 @@ declare class ExuluAgent {
|
|
|
280
282
|
audio: string[];
|
|
281
283
|
video: string[];
|
|
282
284
|
};
|
|
283
|
-
constructor({ id, name, description, config, rateLimit, capabilities, type, maxContextLength, evals }: ExuluAgentParams);
|
|
285
|
+
constructor({ id, name, description, config, rateLimit, capabilities, type, maxContextLength, evals, provider }: ExuluAgentParams);
|
|
284
286
|
get providerName(): string;
|
|
285
287
|
get modelName(): string;
|
|
286
288
|
tool: (instance: string, agents: ExuluAgent[]) => Promise<ExuluTool | null>;
|
|
@@ -1436,10 +1438,18 @@ declare const ExuluDefaultAgents: {
|
|
|
1436
1438
|
anthropic: {
|
|
1437
1439
|
opus4: ExuluAgent;
|
|
1438
1440
|
sonnet4: ExuluAgent;
|
|
1441
|
+
sonnet45: ExuluAgent;
|
|
1439
1442
|
};
|
|
1440
1443
|
openai: {
|
|
1441
1444
|
gpt5Mini: ExuluAgent;
|
|
1442
1445
|
gpt5: ExuluAgent;
|
|
1446
|
+
gpt5pro: ExuluAgent;
|
|
1447
|
+
gpt5Codex: ExuluAgent;
|
|
1448
|
+
gpt5Nano: ExuluAgent;
|
|
1449
|
+
gpt41: ExuluAgent;
|
|
1450
|
+
gpt41Mini: ExuluAgent;
|
|
1451
|
+
gpt4o: ExuluAgent;
|
|
1452
|
+
gpt4oMini: ExuluAgent;
|
|
1443
1453
|
};
|
|
1444
1454
|
};
|
|
1445
1455
|
declare const ExuluVariables: {
|
package/dist/index.js
CHANGED
|
@@ -1205,6 +1205,31 @@ var rbacSchema = {
|
|
|
1205
1205
|
}
|
|
1206
1206
|
]
|
|
1207
1207
|
};
|
|
1208
|
+
var platformConfigurationsSchema = {
|
|
1209
|
+
type: "platform_configurations",
|
|
1210
|
+
name: {
|
|
1211
|
+
plural: "platform_configurations",
|
|
1212
|
+
singular: "platform_configuration"
|
|
1213
|
+
},
|
|
1214
|
+
fields: [
|
|
1215
|
+
{
|
|
1216
|
+
name: "config_key",
|
|
1217
|
+
type: "text",
|
|
1218
|
+
required: true,
|
|
1219
|
+
unique: true,
|
|
1220
|
+
index: true
|
|
1221
|
+
},
|
|
1222
|
+
{
|
|
1223
|
+
name: "config_value",
|
|
1224
|
+
type: "json",
|
|
1225
|
+
required: true
|
|
1226
|
+
},
|
|
1227
|
+
{
|
|
1228
|
+
name: "description",
|
|
1229
|
+
type: "text"
|
|
1230
|
+
}
|
|
1231
|
+
]
|
|
1232
|
+
};
|
|
1208
1233
|
var addCoreFields = (schema) => {
|
|
1209
1234
|
schema.fields.forEach((field) => {
|
|
1210
1235
|
if (field.type === "file") {
|
|
@@ -1246,7 +1271,8 @@ var coreSchemas = {
|
|
|
1246
1271
|
evalRunsSchema: () => addCoreFields(evalRunsSchema),
|
|
1247
1272
|
variablesSchema: () => addCoreFields(variablesSchema),
|
|
1248
1273
|
rbacSchema: () => addCoreFields(rbacSchema),
|
|
1249
|
-
workflowTemplatesSchema: () => addCoreFields(workflowTemplatesSchema)
|
|
1274
|
+
workflowTemplatesSchema: () => addCoreFields(workflowTemplatesSchema),
|
|
1275
|
+
platformConfigurationsSchema: () => addCoreFields(platformConfigurationsSchema)
|
|
1250
1276
|
};
|
|
1251
1277
|
}
|
|
1252
1278
|
};
|
|
@@ -1557,6 +1583,7 @@ ${enumValues}
|
|
|
1557
1583
|
fields.push(" streaming: Boolean");
|
|
1558
1584
|
fields.push(" capabilities: AgentCapabilities");
|
|
1559
1585
|
fields.push(" maxContextLength: Int");
|
|
1586
|
+
fields.push(" provider: String");
|
|
1560
1587
|
fields.push(" slug: String");
|
|
1561
1588
|
fields.push(" evals: [AgentEvalFunction]");
|
|
1562
1589
|
}
|
|
@@ -2249,7 +2276,8 @@ var backendAgentFields = [
|
|
|
2249
2276
|
"rateLimit",
|
|
2250
2277
|
"streaming",
|
|
2251
2278
|
"capabilities",
|
|
2252
|
-
"maxContextLength"
|
|
2279
|
+
"maxContextLength",
|
|
2280
|
+
"provider"
|
|
2253
2281
|
];
|
|
2254
2282
|
var removeAgentFields = (requestedFields) => {
|
|
2255
2283
|
const filtered = requestedFields.filter((field) => !backendAgentFields.includes(field));
|
|
@@ -2314,6 +2342,9 @@ var addAgentFields = async (requestedFields, agents, result, tools, user) => {
|
|
|
2314
2342
|
if (requestedFields.includes("maxContextLength")) {
|
|
2315
2343
|
result.maxContextLength = backend?.maxContextLength || 0;
|
|
2316
2344
|
}
|
|
2345
|
+
if (requestedFields.includes("provider")) {
|
|
2346
|
+
result.provider = backend?.provider || "";
|
|
2347
|
+
}
|
|
2317
2348
|
if (requestedFields.includes("evals")) {
|
|
2318
2349
|
result.evals = backend?.evals?.map((evalFunc) => ({
|
|
2319
2350
|
id: evalFunc.id,
|
|
@@ -3410,6 +3441,7 @@ type Provider {
|
|
|
3410
3441
|
name: String!
|
|
3411
3442
|
description: String
|
|
3412
3443
|
providerName: String
|
|
3444
|
+
provider: String
|
|
3413
3445
|
modelName: String
|
|
3414
3446
|
type: EnumProviderType!
|
|
3415
3447
|
}
|
|
@@ -4183,6 +4215,7 @@ var ExuluAgent2 = class {
|
|
|
4183
4215
|
// The ID is used for storing references to agents so it is important it does not change.
|
|
4184
4216
|
id;
|
|
4185
4217
|
name;
|
|
4218
|
+
provider;
|
|
4186
4219
|
description = "";
|
|
4187
4220
|
slug = "";
|
|
4188
4221
|
type;
|
|
@@ -4194,11 +4227,12 @@ var ExuluAgent2 = class {
|
|
|
4194
4227
|
// private memory: Memory | undefined; // TODO do own implementation
|
|
4195
4228
|
model;
|
|
4196
4229
|
capabilities;
|
|
4197
|
-
constructor({ id, name, description, config, rateLimit, capabilities, type, maxContextLength, evals }) {
|
|
4230
|
+
constructor({ id, name, description, config, rateLimit, capabilities, type, maxContextLength, evals, provider }) {
|
|
4198
4231
|
this.id = id;
|
|
4199
4232
|
this.name = name;
|
|
4200
4233
|
this.description = description;
|
|
4201
4234
|
this.rateLimit = rateLimit;
|
|
4235
|
+
this.provider = provider;
|
|
4202
4236
|
this.config = config;
|
|
4203
4237
|
this.type = type;
|
|
4204
4238
|
this.maxContextLength = maxContextLength;
|
|
@@ -5377,6 +5411,7 @@ var {
|
|
|
5377
5411
|
testCasesSchema: testCasesSchema2,
|
|
5378
5412
|
evalSetsSchema: evalSetsSchema2,
|
|
5379
5413
|
evalRunsSchema: evalRunsSchema2,
|
|
5414
|
+
platformConfigurationsSchema: platformConfigurationsSchema2,
|
|
5380
5415
|
agentSessionsSchema: agentSessionsSchema2,
|
|
5381
5416
|
agentMessagesSchema: agentMessagesSchema2,
|
|
5382
5417
|
rolesSchema: rolesSchema2,
|
|
@@ -5450,6 +5485,7 @@ var createExpressRoutes = async (app, agents, tools, contexts, config, tracer) =
|
|
|
5450
5485
|
agentsSchema2(),
|
|
5451
5486
|
projectsSchema2(),
|
|
5452
5487
|
evalRunsSchema2(),
|
|
5488
|
+
platformConfigurationsSchema2(),
|
|
5453
5489
|
evalSetsSchema2(),
|
|
5454
5490
|
testCasesSchema2(),
|
|
5455
5491
|
agentSessionsSchema2(),
|
|
@@ -5698,6 +5734,22 @@ Mood: friendly and intelligent.
|
|
|
5698
5734
|
authenticated: true
|
|
5699
5735
|
});
|
|
5700
5736
|
});
|
|
5737
|
+
app.get("/theme", async (req, res) => {
|
|
5738
|
+
const { db: db4 } = await postgresClient();
|
|
5739
|
+
const themeConfig = await db4.from("platform_configurations").where({ config_key: "theme_config" }).first();
|
|
5740
|
+
if (!themeConfig) {
|
|
5741
|
+
res.status(200).json({
|
|
5742
|
+
theme: {
|
|
5743
|
+
light: {},
|
|
5744
|
+
dark: {}
|
|
5745
|
+
}
|
|
5746
|
+
});
|
|
5747
|
+
return;
|
|
5748
|
+
}
|
|
5749
|
+
res.status(200).json({
|
|
5750
|
+
theme: themeConfig.config_value
|
|
5751
|
+
});
|
|
5752
|
+
});
|
|
5701
5753
|
app.get("/config", async (req, res) => {
|
|
5702
5754
|
res.status(200).json({
|
|
5703
5755
|
MCP: {
|
|
@@ -6347,33 +6399,76 @@ ${code}`
|
|
|
6347
6399
|
// src/registry/index.ts
|
|
6348
6400
|
import express2 from "express";
|
|
6349
6401
|
|
|
6350
|
-
// src/templates/agents/claude
|
|
6402
|
+
// src/templates/agents/anthropic/claude.ts
|
|
6351
6403
|
import { createAnthropic } from "@ai-sdk/anthropic";
|
|
6404
|
+
var claudeOpus4Agent = new ExuluAgent2({
|
|
6405
|
+
id: `default_claude_4_opus_agent`,
|
|
6406
|
+
name: `CLAUDE-OPUS-4`,
|
|
6407
|
+
provider: "anthropic",
|
|
6408
|
+
description: `Previous Anthropic flagship model. Very high intelligence and capability. Moderately Fast.`,
|
|
6409
|
+
type: "agent",
|
|
6410
|
+
capabilities: {
|
|
6411
|
+
text: true,
|
|
6412
|
+
images: [".png", ".jpg", ".jpeg", ".webp"],
|
|
6413
|
+
files: [".pdf", ".docx", ".xlsx", ".xls", ".csv", ".pptx", ".ppt", ".json"],
|
|
6414
|
+
audio: [],
|
|
6415
|
+
video: []
|
|
6416
|
+
},
|
|
6417
|
+
evals: [],
|
|
6418
|
+
maxContextLength: 2e5,
|
|
6419
|
+
config: {
|
|
6420
|
+
name: `CLAUDE-OPUS-4`,
|
|
6421
|
+
instructions: "",
|
|
6422
|
+
model: {
|
|
6423
|
+
create: ({ apiKey }) => {
|
|
6424
|
+
const anthropic = createAnthropic({
|
|
6425
|
+
apiKey
|
|
6426
|
+
});
|
|
6427
|
+
return anthropic.languageModel("claude-opus-4-0");
|
|
6428
|
+
}
|
|
6429
|
+
// todo add a field of type string that adds a dropdown list from which the user can select the model
|
|
6430
|
+
// todo for each model, check which provider is used, and require the admin to add one or multiple
|
|
6431
|
+
// API keys for the provider (which we can then auto-rotate).
|
|
6432
|
+
// todo also add custom fields for rate limiting, so the admin can set custom rate limits for the agent
|
|
6433
|
+
// and allow him/her to decide if the rate limit is per user or per agent.
|
|
6434
|
+
// todo finally allow switching on or off immutable audit logs on the agent. Which then enables OTEL
|
|
6435
|
+
// and stores the logs into the pre-defined storage.
|
|
6436
|
+
}
|
|
6437
|
+
}
|
|
6438
|
+
});
|
|
6352
6439
|
var claudeSonnet4Agent = new ExuluAgent2({
|
|
6353
6440
|
id: `claude_code_agent`,
|
|
6354
|
-
name: `
|
|
6355
|
-
|
|
6441
|
+
name: `CLAUDE-SONNET-4`,
|
|
6442
|
+
provider: "anthropic",
|
|
6443
|
+
description: `High intelligence and balanced performance, used a lot for agentic coding tasks. Anthropic provides a newer 4.5 model that is more powerful and faster.`,
|
|
6356
6444
|
type: "agent",
|
|
6445
|
+
capabilities: {
|
|
6446
|
+
text: true,
|
|
6447
|
+
images: [".png", ".jpg", ".jpeg", ".webp"],
|
|
6448
|
+
files: [".pdf", ".docx", ".xlsx", ".xls", ".csv", ".pptx", ".ppt", ".json"],
|
|
6449
|
+
audio: [],
|
|
6450
|
+
video: []
|
|
6451
|
+
},
|
|
6452
|
+
evals: [],
|
|
6453
|
+
maxContextLength: 2e5,
|
|
6357
6454
|
config: {
|
|
6358
|
-
name: `
|
|
6359
|
-
instructions: "
|
|
6455
|
+
name: `CLAUDE-SONNET-4`,
|
|
6456
|
+
instructions: "",
|
|
6360
6457
|
model: {
|
|
6361
6458
|
create: ({ apiKey }) => {
|
|
6362
6459
|
const anthropic = createAnthropic({
|
|
6363
6460
|
apiKey
|
|
6364
6461
|
});
|
|
6365
|
-
return anthropic.languageModel("claude-sonnet-4-
|
|
6462
|
+
return anthropic.languageModel("claude-sonnet-4-0");
|
|
6366
6463
|
}
|
|
6367
6464
|
}
|
|
6368
6465
|
}
|
|
6369
6466
|
});
|
|
6370
|
-
|
|
6371
|
-
|
|
6372
|
-
|
|
6373
|
-
|
|
6374
|
-
|
|
6375
|
-
name: `Default Claude 4 Opus anthropic provider`,
|
|
6376
|
-
description: `Basic agent claude 4 opus agent you can use to chat with.`,
|
|
6467
|
+
var claudeSonnet45Agent = new ExuluAgent2({
|
|
6468
|
+
id: `claude_code_agent`,
|
|
6469
|
+
name: `CLAUDE-SONNET-4.5`,
|
|
6470
|
+
provider: "anthropic",
|
|
6471
|
+
description: `Best Anthropic model for complex agents and coding. Highest intelligence across most tasks with exceptional agent and coding capabilities`,
|
|
6377
6472
|
type: "agent",
|
|
6378
6473
|
capabilities: {
|
|
6379
6474
|
text: true,
|
|
@@ -6385,32 +6480,82 @@ var claudeOpus4Agent = new ExuluAgent2({
|
|
|
6385
6480
|
evals: [],
|
|
6386
6481
|
maxContextLength: 2e5,
|
|
6387
6482
|
config: {
|
|
6388
|
-
name: `
|
|
6389
|
-
instructions: "
|
|
6483
|
+
name: `CLAUDE-SONNET-4.5`,
|
|
6484
|
+
instructions: "",
|
|
6390
6485
|
model: {
|
|
6391
6486
|
create: ({ apiKey }) => {
|
|
6392
|
-
const anthropic =
|
|
6487
|
+
const anthropic = createAnthropic({
|
|
6393
6488
|
apiKey
|
|
6394
6489
|
});
|
|
6395
|
-
return anthropic.languageModel("claude-4-
|
|
6490
|
+
return anthropic.languageModel("claude-sonnet-4-5");
|
|
6396
6491
|
}
|
|
6397
|
-
// todo add a field of type string that adds a dropdown list from which the user can select the model
|
|
6398
|
-
// todo for each model, check which provider is used, and require the admin to add one or multiple
|
|
6399
|
-
// API keys for the provider (which we can then auto-rotate).
|
|
6400
|
-
// todo also add custom fields for rate limiting, so the admin can set custom rate limits for the agent
|
|
6401
|
-
// and allow him/her to decide if the rate limit is per user or per agent.
|
|
6402
|
-
// todo finally allow switching on or off immutable audit logs on the agent. Which then enables OTEL
|
|
6403
|
-
// and stores the logs into the pre-defined storage.
|
|
6404
6492
|
}
|
|
6405
6493
|
}
|
|
6406
6494
|
});
|
|
6407
6495
|
|
|
6408
|
-
// src/templates/agents/gpt
|
|
6496
|
+
// src/templates/agents/openai/gpt.ts
|
|
6409
6497
|
import { createOpenAI } from "@ai-sdk/openai";
|
|
6498
|
+
var gpt5proAgent = new ExuluAgent2({
|
|
6499
|
+
id: `default_gpt_5_pro_agent`,
|
|
6500
|
+
provider: "openai",
|
|
6501
|
+
name: `GPT-5-PRO`,
|
|
6502
|
+
description: `GPT-5 pro uses more compute to think harder and provide consistently better answers. GPT-5 pro is available in the Responses API only to enable support for multi-turn model interactions before responding to API requests, and other advanced API features in the future. Since GPT-5 pro is designed to tackle tough problems, some requests may take several minutes to finish. To avoid timeouts, try using background mode. As our most advanced reasoning model, GPT-5 pro defaults to (and only supports) reasoning.effort: high. GPT-5 pro does not support code interpreter.`,
|
|
6503
|
+
type: "agent",
|
|
6504
|
+
capabilities: {
|
|
6505
|
+
text: true,
|
|
6506
|
+
images: [".png", ".jpg", ".jpeg", ".webp"],
|
|
6507
|
+
files: [".pdf", ".docx", ".xlsx", ".xls", ".csv", ".pptx", ".ppt", ".json"],
|
|
6508
|
+
audio: [],
|
|
6509
|
+
video: []
|
|
6510
|
+
},
|
|
6511
|
+
evals: [],
|
|
6512
|
+
maxContextLength: 4e5,
|
|
6513
|
+
config: {
|
|
6514
|
+
name: `GPT-5-PRO`,
|
|
6515
|
+
instructions: "",
|
|
6516
|
+
model: {
|
|
6517
|
+
create: ({ apiKey }) => {
|
|
6518
|
+
const openai = createOpenAI({
|
|
6519
|
+
apiKey
|
|
6520
|
+
});
|
|
6521
|
+
return openai.languageModel("gpt-5-pro");
|
|
6522
|
+
}
|
|
6523
|
+
}
|
|
6524
|
+
}
|
|
6525
|
+
});
|
|
6526
|
+
var gpt5CodexAgent = new ExuluAgent2({
|
|
6527
|
+
id: `default_gpt_5_codex_agent`,
|
|
6528
|
+
provider: "openai",
|
|
6529
|
+
name: `GPT-5-CODEX`,
|
|
6530
|
+
description: `GPT-5-Codex is a version of GPT-5 optimized for agentic coding tasks in Codex or similar environments. It's available in the Responses API only and the underlying model snapshot will be regularly updated. If you want to learn more about prompting GPT-5-Codex, refer to the OpenAI dedicated guide.`,
|
|
6531
|
+
type: "agent",
|
|
6532
|
+
capabilities: {
|
|
6533
|
+
text: true,
|
|
6534
|
+
images: [".png", ".jpg", ".jpeg", ".webp"],
|
|
6535
|
+
files: [".pdf", ".docx", ".xlsx", ".xls", ".csv", ".pptx", ".ppt", ".json"],
|
|
6536
|
+
audio: [],
|
|
6537
|
+
video: []
|
|
6538
|
+
},
|
|
6539
|
+
evals: [],
|
|
6540
|
+
maxContextLength: 4e5,
|
|
6541
|
+
config: {
|
|
6542
|
+
name: `GPT-5-CODEX`,
|
|
6543
|
+
instructions: "",
|
|
6544
|
+
model: {
|
|
6545
|
+
create: ({ apiKey }) => {
|
|
6546
|
+
const openai = createOpenAI({
|
|
6547
|
+
apiKey
|
|
6548
|
+
});
|
|
6549
|
+
return openai.languageModel("gpt-5-codex");
|
|
6550
|
+
}
|
|
6551
|
+
}
|
|
6552
|
+
}
|
|
6553
|
+
});
|
|
6410
6554
|
var gpt5MiniAgent = new ExuluAgent2({
|
|
6411
6555
|
id: `default_gpt_5_mini_agent`,
|
|
6412
|
-
|
|
6413
|
-
|
|
6556
|
+
provider: "openai",
|
|
6557
|
+
name: `GPT-5-MINI`,
|
|
6558
|
+
description: `GPT-5 mini is a faster, more cost-efficient version of GPT-5. It's great for well-defined tasks and precise prompts.`,
|
|
6414
6559
|
type: "agent",
|
|
6415
6560
|
capabilities: {
|
|
6416
6561
|
text: true,
|
|
@@ -6420,10 +6565,10 @@ var gpt5MiniAgent = new ExuluAgent2({
|
|
|
6420
6565
|
video: []
|
|
6421
6566
|
},
|
|
6422
6567
|
evals: [],
|
|
6423
|
-
maxContextLength:
|
|
6568
|
+
maxContextLength: 4e5,
|
|
6424
6569
|
config: {
|
|
6425
|
-
name: `
|
|
6426
|
-
instructions: "
|
|
6570
|
+
name: `GPT-5-MINI`,
|
|
6571
|
+
instructions: "",
|
|
6427
6572
|
model: {
|
|
6428
6573
|
create: ({ apiKey }) => {
|
|
6429
6574
|
const openai = createOpenAI({
|
|
@@ -6443,8 +6588,9 @@ var gpt5MiniAgent = new ExuluAgent2({
|
|
|
6443
6588
|
});
|
|
6444
6589
|
var gpt5agent = new ExuluAgent2({
|
|
6445
6590
|
id: `default_gpt_5_agent`,
|
|
6446
|
-
|
|
6447
|
-
|
|
6591
|
+
provider: "openai",
|
|
6592
|
+
name: `GPT-5`,
|
|
6593
|
+
description: `GPT-5 is the flagship model for coding, reasoning, and agentic tasks across domains.`,
|
|
6448
6594
|
type: "agent",
|
|
6449
6595
|
capabilities: {
|
|
6450
6596
|
text: true,
|
|
@@ -6454,10 +6600,10 @@ var gpt5agent = new ExuluAgent2({
|
|
|
6454
6600
|
video: []
|
|
6455
6601
|
},
|
|
6456
6602
|
evals: [],
|
|
6457
|
-
maxContextLength:
|
|
6603
|
+
maxContextLength: 4e5,
|
|
6458
6604
|
config: {
|
|
6459
|
-
name: `
|
|
6460
|
-
instructions: "
|
|
6605
|
+
name: `GPT-5`,
|
|
6606
|
+
instructions: "",
|
|
6461
6607
|
model: {
|
|
6462
6608
|
create: ({ apiKey }) => {
|
|
6463
6609
|
const openai = createOpenAI({
|
|
@@ -6475,6 +6621,146 @@ var gpt5agent = new ExuluAgent2({
|
|
|
6475
6621
|
}
|
|
6476
6622
|
}
|
|
6477
6623
|
});
|
|
6624
|
+
var gpt5NanoAgent = new ExuluAgent2({
|
|
6625
|
+
id: `default_gpt_5_nano_agent`,
|
|
6626
|
+
provider: "openai",
|
|
6627
|
+
name: `GPT-5-NANO`,
|
|
6628
|
+
description: `GPT-5 Nano is the fastest, cheapest version of GPT-5. It's great for summarization and classification tasks. .`,
|
|
6629
|
+
type: "agent",
|
|
6630
|
+
capabilities: {
|
|
6631
|
+
text: true,
|
|
6632
|
+
images: [".png", ".jpg", ".jpeg", ".webp"],
|
|
6633
|
+
files: [".pdf", ".docx", ".xlsx", ".xls", ".csv", ".pptx", ".ppt", ".json"],
|
|
6634
|
+
audio: [],
|
|
6635
|
+
video: []
|
|
6636
|
+
},
|
|
6637
|
+
evals: [],
|
|
6638
|
+
maxContextLength: 4e5,
|
|
6639
|
+
config: {
|
|
6640
|
+
name: `GPT-5-NANO`,
|
|
6641
|
+
instructions: "",
|
|
6642
|
+
model: {
|
|
6643
|
+
create: ({ apiKey }) => {
|
|
6644
|
+
const openai = createOpenAI({
|
|
6645
|
+
apiKey
|
|
6646
|
+
});
|
|
6647
|
+
return openai.languageModel("gpt-5-nano");
|
|
6648
|
+
}
|
|
6649
|
+
}
|
|
6650
|
+
}
|
|
6651
|
+
});
|
|
6652
|
+
var gpt41Agent = new ExuluAgent2({
|
|
6653
|
+
id: `default_gpt_4_1_agent`,
|
|
6654
|
+
provider: "openai",
|
|
6655
|
+
name: `GPT-4.1`,
|
|
6656
|
+
description: `GPT-4.1 excels at instruction following and tool calling, with broad knowledge across domains. It features a 1M token context window, and low latency without a reasoning step. Note that we recommend starting with GPT-5 for complex tasks`,
|
|
6657
|
+
type: "agent",
|
|
6658
|
+
capabilities: {
|
|
6659
|
+
text: true,
|
|
6660
|
+
images: [".png", ".jpg", ".jpeg", ".webp"],
|
|
6661
|
+
files: [".pdf", ".docx", ".xlsx", ".xls", ".csv", ".pptx", ".ppt", ".json"],
|
|
6662
|
+
audio: [],
|
|
6663
|
+
video: []
|
|
6664
|
+
},
|
|
6665
|
+
evals: [],
|
|
6666
|
+
maxContextLength: 1047576,
|
|
6667
|
+
config: {
|
|
6668
|
+
name: `GPT-4.1`,
|
|
6669
|
+
instructions: "",
|
|
6670
|
+
model: {
|
|
6671
|
+
create: ({ apiKey }) => {
|
|
6672
|
+
const openai = createOpenAI({
|
|
6673
|
+
apiKey
|
|
6674
|
+
});
|
|
6675
|
+
return openai.languageModel("gpt-4.1");
|
|
6676
|
+
}
|
|
6677
|
+
}
|
|
6678
|
+
}
|
|
6679
|
+
});
|
|
6680
|
+
var gpt41MiniAgent = new ExuluAgent2({
|
|
6681
|
+
id: `default_gpt_4_1_mini_agent`,
|
|
6682
|
+
provider: "openai",
|
|
6683
|
+
name: `GPT-4.1-MINI`,
|
|
6684
|
+
description: `GPT-4.1 mini excels at instruction following and tool calling. It features a 1M token context window, and low latency without a reasoning step.`,
|
|
6685
|
+
type: "agent",
|
|
6686
|
+
capabilities: {
|
|
6687
|
+
text: true,
|
|
6688
|
+
images: [".png", ".jpg", ".jpeg", ".webp"],
|
|
6689
|
+
files: [".pdf", ".docx", ".xlsx", ".xls", ".csv", ".pptx", ".ppt", ".json"],
|
|
6690
|
+
audio: [],
|
|
6691
|
+
video: []
|
|
6692
|
+
},
|
|
6693
|
+
evals: [],
|
|
6694
|
+
maxContextLength: 1047576,
|
|
6695
|
+
config: {
|
|
6696
|
+
name: `GPT-4.1-MINI`,
|
|
6697
|
+
instructions: "",
|
|
6698
|
+
model: {
|
|
6699
|
+
create: ({ apiKey }) => {
|
|
6700
|
+
const openai = createOpenAI({
|
|
6701
|
+
apiKey
|
|
6702
|
+
});
|
|
6703
|
+
return openai.languageModel("gpt-4.1-mini");
|
|
6704
|
+
}
|
|
6705
|
+
}
|
|
6706
|
+
}
|
|
6707
|
+
});
|
|
6708
|
+
var gpt4oAgent = new ExuluAgent2({
|
|
6709
|
+
id: `default_gpt_4o_agent`,
|
|
6710
|
+
provider: "openai",
|
|
6711
|
+
name: `GPT-4O`,
|
|
6712
|
+
description: `Basic agent gpt 4o agent you can use to chat with.`,
|
|
6713
|
+
type: "agent",
|
|
6714
|
+
capabilities: {
|
|
6715
|
+
text: true,
|
|
6716
|
+
images: [".png", ".jpg", ".jpeg", ".webp"],
|
|
6717
|
+
files: [".pdf", ".docx", ".xlsx", ".xls", ".csv", ".pptx", ".ppt", ".json"],
|
|
6718
|
+
audio: [],
|
|
6719
|
+
video: []
|
|
6720
|
+
},
|
|
6721
|
+
evals: [],
|
|
6722
|
+
maxContextLength: 128e3,
|
|
6723
|
+
config: {
|
|
6724
|
+
name: `Default agent`,
|
|
6725
|
+
instructions: "You are a helpful assistant.",
|
|
6726
|
+
model: {
|
|
6727
|
+
create: ({ apiKey }) => {
|
|
6728
|
+
const openai = createOpenAI({
|
|
6729
|
+
apiKey
|
|
6730
|
+
});
|
|
6731
|
+
return openai.languageModel("gpt-4o");
|
|
6732
|
+
}
|
|
6733
|
+
}
|
|
6734
|
+
}
|
|
6735
|
+
});
|
|
6736
|
+
var gpt4oMiniAgent = new ExuluAgent2({
|
|
6737
|
+
id: `default_gpt_4o_mini_agent`,
|
|
6738
|
+
provider: "openai",
|
|
6739
|
+
name: `GPT-4O-MINI`,
|
|
6740
|
+
description: `GPT-4o mini (\u201Co\u201D for \u201Comni\u201D) is a fast, affordable small model for focused tasks. It accepts both text and image inputs, and produces text outputs (including Structured Outputs). It is ideal for fine-tuning, and model outputs from a larger model like GPT-4o can be distilled to GPT-4o-mini to produce similar results at lower cost and latency.`,
|
|
6741
|
+
type: "agent",
|
|
6742
|
+
capabilities: {
|
|
6743
|
+
text: true,
|
|
6744
|
+
images: [".png", ".jpg", ".jpeg", ".webp"],
|
|
6745
|
+
files: [".pdf", ".docx", ".xlsx", ".xls", ".csv", ".pptx", ".ppt", ".json"],
|
|
6746
|
+
audio: [],
|
|
6747
|
+
video: []
|
|
6748
|
+
},
|
|
6749
|
+
evals: [],
|
|
6750
|
+
maxContextLength: 128e3,
|
|
6751
|
+
config: {
|
|
6752
|
+
name: `GPT-4O-MINI`,
|
|
6753
|
+
instructions: "",
|
|
6754
|
+
model: {
|
|
6755
|
+
create: ({ apiKey }) => {
|
|
6756
|
+
const openai = createOpenAI({
|
|
6757
|
+
apiKey
|
|
6758
|
+
});
|
|
6759
|
+
return openai.languageModel("gpt-4o-mini");
|
|
6760
|
+
}
|
|
6761
|
+
}
|
|
6762
|
+
}
|
|
6763
|
+
});
|
|
6478
6764
|
|
|
6479
6765
|
// src/registry/index.ts
|
|
6480
6766
|
import { trace } from "@opentelemetry/api";
|
|
@@ -6587,8 +6873,16 @@ var ExuluApp = class {
|
|
|
6587
6873
|
this._agents = [
|
|
6588
6874
|
claudeSonnet4Agent,
|
|
6589
6875
|
claudeOpus4Agent,
|
|
6876
|
+
claudeSonnet45Agent,
|
|
6590
6877
|
gpt5MiniAgent,
|
|
6591
6878
|
gpt5agent,
|
|
6879
|
+
gpt5proAgent,
|
|
6880
|
+
gpt5CodexAgent,
|
|
6881
|
+
gpt5NanoAgent,
|
|
6882
|
+
gpt41Agent,
|
|
6883
|
+
gpt41MiniAgent,
|
|
6884
|
+
gpt4oAgent,
|
|
6885
|
+
gpt4oMiniAgent,
|
|
6592
6886
|
...agents ?? []
|
|
6593
6887
|
];
|
|
6594
6888
|
this._config = config;
|
|
@@ -8034,6 +8328,7 @@ var {
|
|
|
8034
8328
|
evalSetsSchema: evalSetsSchema3,
|
|
8035
8329
|
evalRunsSchema: evalRunsSchema3,
|
|
8036
8330
|
agentSessionsSchema: agentSessionsSchema3,
|
|
8331
|
+
platformConfigurationsSchema: platformConfigurationsSchema3,
|
|
8037
8332
|
agentMessagesSchema: agentMessagesSchema3,
|
|
8038
8333
|
rolesSchema: rolesSchema3,
|
|
8039
8334
|
usersSchema: usersSchema3,
|
|
@@ -8072,6 +8367,7 @@ var up = async function(knex) {
|
|
|
8072
8367
|
testCasesSchema3(),
|
|
8073
8368
|
evalSetsSchema3(),
|
|
8074
8369
|
evalRunsSchema3(),
|
|
8370
|
+
platformConfigurationsSchema3(),
|
|
8075
8371
|
statisticsSchema3(),
|
|
8076
8372
|
projectsSchema3(),
|
|
8077
8373
|
rbacSchema3(),
|
|
@@ -8285,11 +8581,19 @@ var ExuluDefaultContexts = {
|
|
|
8285
8581
|
var ExuluDefaultAgents = {
|
|
8286
8582
|
anthropic: {
|
|
8287
8583
|
opus4: claudeOpus4Agent,
|
|
8288
|
-
sonnet4: claudeSonnet4Agent
|
|
8584
|
+
sonnet4: claudeSonnet4Agent,
|
|
8585
|
+
sonnet45: claudeSonnet45Agent
|
|
8289
8586
|
},
|
|
8290
8587
|
openai: {
|
|
8291
8588
|
gpt5Mini: gpt5MiniAgent,
|
|
8292
|
-
gpt5: gpt5agent
|
|
8589
|
+
gpt5: gpt5agent,
|
|
8590
|
+
gpt5pro: gpt5proAgent,
|
|
8591
|
+
gpt5Codex: gpt5CodexAgent,
|
|
8592
|
+
gpt5Nano: gpt5NanoAgent,
|
|
8593
|
+
gpt41: gpt41Agent,
|
|
8594
|
+
gpt41Mini: gpt41MiniAgent,
|
|
8595
|
+
gpt4o: gpt4oAgent,
|
|
8596
|
+
gpt4oMini: gpt4oMiniAgent
|
|
8293
8597
|
}
|
|
8294
8598
|
};
|
|
8295
8599
|
var ExuluVariables = {
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@exulu/backend",
|
|
3
3
|
"author": "Qventu Bv.",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.27.0",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"private": false,
|
|
7
7
|
"publishConfig": {
|
|
@@ -49,8 +49,9 @@
|
|
|
49
49
|
"typescript": "^5.8.3"
|
|
50
50
|
},
|
|
51
51
|
"dependencies": {
|
|
52
|
-
"@ai-sdk/anthropic": "^2.0.
|
|
53
|
-
"@ai-sdk/
|
|
52
|
+
"@ai-sdk/anthropic": "^2.0.27",
|
|
53
|
+
"@ai-sdk/google-vertex": "^3.0.45",
|
|
54
|
+
"@ai-sdk/openai": "^2.0.49",
|
|
54
55
|
"@anthropic-ai/sdk": "^0.56.0",
|
|
55
56
|
"@as-integrations/express5": "^1.0.0",
|
|
56
57
|
"@aws-sdk/client-s3": "^3.338.0",
|