mojentic 1.0.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/LICENSE +21 -0
- package/README.md +459 -0
- package/dist/agents/async-aggregator-agent.d.ts +101 -0
- package/dist/agents/async-aggregator-agent.d.ts.map +1 -0
- package/dist/agents/async-aggregator-agent.js +160 -0
- package/dist/agents/async-aggregator-agent.js.map +1 -0
- package/dist/agents/async-dispatcher.d.ts +98 -0
- package/dist/agents/async-dispatcher.d.ts.map +1 -0
- package/dist/agents/async-dispatcher.js +173 -0
- package/dist/agents/async-dispatcher.js.map +1 -0
- package/dist/agents/async-llm-agent-with-memory.d.ts +95 -0
- package/dist/agents/async-llm-agent-with-memory.d.ts.map +1 -0
- package/dist/agents/async-llm-agent-with-memory.js +136 -0
- package/dist/agents/async-llm-agent-with-memory.js.map +1 -0
- package/dist/agents/async-llm-agent.d.ts +85 -0
- package/dist/agents/async-llm-agent.d.ts.map +1 -0
- package/dist/agents/async-llm-agent.js +87 -0
- package/dist/agents/async-llm-agent.js.map +1 -0
- package/dist/agents/base-agent.d.ts +59 -0
- package/dist/agents/base-agent.d.ts.map +1 -0
- package/dist/agents/base-agent.js +24 -0
- package/dist/agents/base-agent.js.map +1 -0
- package/dist/agents/base-async-agent.d.ts +42 -0
- package/dist/agents/base-async-agent.d.ts.map +1 -0
- package/dist/agents/base-async-agent.js +6 -0
- package/dist/agents/base-async-agent.js.map +1 -0
- package/dist/agents/event.d.ts +26 -0
- package/dist/agents/event.d.ts.map +1 -0
- package/dist/agents/event.js +13 -0
- package/dist/agents/event.js.map +1 -0
- package/dist/agents/index.d.ts +14 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +30 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/iterative-problem-solver.d.ts +83 -0
- package/dist/agents/iterative-problem-solver.d.ts.map +1 -0
- package/dist/agents/iterative-problem-solver.js +120 -0
- package/dist/agents/iterative-problem-solver.js.map +1 -0
- package/dist/agents/router.d.ts +44 -0
- package/dist/agents/router.d.ts.map +1 -0
- package/dist/agents/router.js +53 -0
- package/dist/agents/router.js.map +1 -0
- package/dist/agents/simple-recursive-agent.d.ts +182 -0
- package/dist/agents/simple-recursive-agent.d.ts.map +1 -0
- package/dist/agents/simple-recursive-agent.js +272 -0
- package/dist/agents/simple-recursive-agent.js.map +1 -0
- package/dist/context/index.d.ts +5 -0
- package/dist/context/index.d.ts.map +1 -0
- package/dist/context/index.js +21 -0
- package/dist/context/index.js.map +1 -0
- package/dist/context/shared-working-memory.d.ts +76 -0
- package/dist/context/shared-working-memory.d.ts.map +1 -0
- package/dist/context/shared-working-memory.js +121 -0
- package/dist/context/shared-working-memory.js.map +1 -0
- package/dist/error.d.ts +93 -0
- package/dist/error.d.ts.map +1 -0
- package/dist/error.js +149 -0
- package/dist/error.js.map +1 -0
- package/dist/examples/react/decisioning-agent.d.ts +48 -0
- package/dist/examples/react/decisioning-agent.d.ts.map +1 -0
- package/dist/examples/react/decisioning-agent.js +204 -0
- package/dist/examples/react/decisioning-agent.js.map +1 -0
- package/dist/examples/react/events.d.ts +77 -0
- package/dist/examples/react/events.d.ts.map +1 -0
- package/dist/examples/react/events.js +9 -0
- package/dist/examples/react/events.js.map +1 -0
- package/dist/examples/react/formatters.d.ts +23 -0
- package/dist/examples/react/formatters.d.ts.map +1 -0
- package/dist/examples/react/formatters.js +68 -0
- package/dist/examples/react/formatters.js.map +1 -0
- package/dist/examples/react/index.d.ts +12 -0
- package/dist/examples/react/index.d.ts.map +1 -0
- package/dist/examples/react/index.js +28 -0
- package/dist/examples/react/index.js.map +1 -0
- package/dist/examples/react/models.d.ts +57 -0
- package/dist/examples/react/models.d.ts.map +1 -0
- package/dist/examples/react/models.js +19 -0
- package/dist/examples/react/models.js.map +1 -0
- package/dist/examples/react/output-agent.d.ts +23 -0
- package/dist/examples/react/output-agent.d.ts.map +1 -0
- package/dist/examples/react/output-agent.js +28 -0
- package/dist/examples/react/output-agent.js.map +1 -0
- package/dist/examples/react/summarization-agent.d.ts +46 -0
- package/dist/examples/react/summarization-agent.d.ts.map +1 -0
- package/dist/examples/react/summarization-agent.js +102 -0
- package/dist/examples/react/summarization-agent.js.map +1 -0
- package/dist/examples/react/thinking-agent.d.ts +47 -0
- package/dist/examples/react/thinking-agent.d.ts.map +1 -0
- package/dist/examples/react/thinking-agent.js +127 -0
- package/dist/examples/react/thinking-agent.js.map +1 -0
- package/dist/examples/react/tool-call-agent.d.ts +25 -0
- package/dist/examples/react/tool-call-agent.d.ts.map +1 -0
- package/dist/examples/react/tool-call-agent.js +83 -0
- package/dist/examples/react/tool-call-agent.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/dist/llm/agent.d.ts +68 -0
- package/dist/llm/agent.d.ts.map +1 -0
- package/dist/llm/agent.js +85 -0
- package/dist/llm/agent.js.map +1 -0
- package/dist/llm/broker.d.ts +150 -0
- package/dist/llm/broker.d.ts.map +1 -0
- package/dist/llm/broker.js +355 -0
- package/dist/llm/broker.js.map +1 -0
- package/dist/llm/chat-session.d.ts +98 -0
- package/dist/llm/chat-session.d.ts.map +1 -0
- package/dist/llm/chat-session.js +156 -0
- package/dist/llm/chat-session.js.map +1 -0
- package/dist/llm/gateway.d.ts +28 -0
- package/dist/llm/gateway.d.ts.map +1 -0
- package/dist/llm/gateway.js +6 -0
- package/dist/llm/gateway.js.map +1 -0
- package/dist/llm/gateways/index.d.ts +9 -0
- package/dist/llm/gateways/index.d.ts.map +1 -0
- package/dist/llm/gateways/index.js +25 -0
- package/dist/llm/gateways/index.js.map +1 -0
- package/dist/llm/gateways/ollama.d.ts +30 -0
- package/dist/llm/gateways/ollama.d.ts.map +1 -0
- package/dist/llm/gateways/ollama.js +322 -0
- package/dist/llm/gateways/ollama.js.map +1 -0
- package/dist/llm/gateways/openai-messages-adapter.d.ts +29 -0
- package/dist/llm/gateways/openai-messages-adapter.d.ts.map +1 -0
- package/dist/llm/gateways/openai-messages-adapter.js +188 -0
- package/dist/llm/gateways/openai-messages-adapter.js.map +1 -0
- package/dist/llm/gateways/openai-model-registry.d.ts +82 -0
- package/dist/llm/gateways/openai-model-registry.d.ts.map +1 -0
- package/dist/llm/gateways/openai-model-registry.js +352 -0
- package/dist/llm/gateways/openai-model-registry.js.map +1 -0
- package/dist/llm/gateways/openai.d.ts +40 -0
- package/dist/llm/gateways/openai.d.ts.map +1 -0
- package/dist/llm/gateways/openai.js +469 -0
- package/dist/llm/gateways/openai.js.map +1 -0
- package/dist/llm/gateways/tokenizerGateway.d.ts +61 -0
- package/dist/llm/gateways/tokenizerGateway.d.ts.map +1 -0
- package/dist/llm/gateways/tokenizerGateway.js +75 -0
- package/dist/llm/gateways/tokenizerGateway.js.map +1 -0
- package/dist/llm/index.d.ts +11 -0
- package/dist/llm/index.d.ts.map +1 -0
- package/dist/llm/index.js +27 -0
- package/dist/llm/index.js.map +1 -0
- package/dist/llm/models.d.ts +95 -0
- package/dist/llm/models.d.ts.map +1 -0
- package/dist/llm/models.js +50 -0
- package/dist/llm/models.js.map +1 -0
- package/dist/llm/tools/ask-user.d.ts +39 -0
- package/dist/llm/tools/ask-user.d.ts.map +1 -0
- package/dist/llm/tools/ask-user.js +111 -0
- package/dist/llm/tools/ask-user.js.map +1 -0
- package/dist/llm/tools/current-datetime.d.ts +17 -0
- package/dist/llm/tools/current-datetime.d.ts.map +1 -0
- package/dist/llm/tools/current-datetime.js +76 -0
- package/dist/llm/tools/current-datetime.js.map +1 -0
- package/dist/llm/tools/date-resolver.d.ts +17 -0
- package/dist/llm/tools/date-resolver.d.ts.map +1 -0
- package/dist/llm/tools/date-resolver.js +135 -0
- package/dist/llm/tools/date-resolver.js.map +1 -0
- package/dist/llm/tools/ephemeral-task-manager/append-task.d.ts +13 -0
- package/dist/llm/tools/ephemeral-task-manager/append-task.d.ts.map +1 -0
- package/dist/llm/tools/ephemeral-task-manager/append-task.js +54 -0
- package/dist/llm/tools/ephemeral-task-manager/append-task.js.map +1 -0
- package/dist/llm/tools/ephemeral-task-manager/clear-tasks.d.ts +13 -0
- package/dist/llm/tools/ephemeral-task-manager/clear-tasks.d.ts.map +1 -0
- package/dist/llm/tools/ephemeral-task-manager/clear-tasks.js +37 -0
- package/dist/llm/tools/ephemeral-task-manager/clear-tasks.js.map +1 -0
- package/dist/llm/tools/ephemeral-task-manager/complete-task.d.ts +15 -0
- package/dist/llm/tools/ephemeral-task-manager/complete-task.d.ts.map +1 -0
- package/dist/llm/tools/ephemeral-task-manager/complete-task.js +56 -0
- package/dist/llm/tools/ephemeral-task-manager/complete-task.js.map +1 -0
- package/dist/llm/tools/ephemeral-task-manager/index.d.ts +44 -0
- package/dist/llm/tools/ephemeral-task-manager/index.d.ts.map +1 -0
- package/dist/llm/tools/ephemeral-task-manager/index.js +73 -0
- package/dist/llm/tools/ephemeral-task-manager/index.js.map +1 -0
- package/dist/llm/tools/ephemeral-task-manager/insert-task-after.d.ts +13 -0
- package/dist/llm/tools/ephemeral-task-manager/insert-task-after.d.ts.map +1 -0
- package/dist/llm/tools/ephemeral-task-manager/insert-task-after.js +59 -0
- package/dist/llm/tools/ephemeral-task-manager/insert-task-after.js.map +1 -0
- package/dist/llm/tools/ephemeral-task-manager/list-tasks.d.ts +14 -0
- package/dist/llm/tools/ephemeral-task-manager/list-tasks.d.ts.map +1 -0
- package/dist/llm/tools/ephemeral-task-manager/list-tasks.js +45 -0
- package/dist/llm/tools/ephemeral-task-manager/list-tasks.js.map +1 -0
- package/dist/llm/tools/ephemeral-task-manager/prepend-task.d.ts +13 -0
- package/dist/llm/tools/ephemeral-task-manager/prepend-task.d.ts.map +1 -0
- package/dist/llm/tools/ephemeral-task-manager/prepend-task.js +54 -0
- package/dist/llm/tools/ephemeral-task-manager/prepend-task.js.map +1 -0
- package/dist/llm/tools/ephemeral-task-manager/start-task.d.ts +15 -0
- package/dist/llm/tools/ephemeral-task-manager/start-task.d.ts.map +1 -0
- package/dist/llm/tools/ephemeral-task-manager/start-task.js +56 -0
- package/dist/llm/tools/ephemeral-task-manager/start-task.js.map +1 -0
- package/dist/llm/tools/ephemeral-task-manager/task-list.d.ts +68 -0
- package/dist/llm/tools/ephemeral-task-manager/task-list.d.ts.map +1 -0
- package/dist/llm/tools/ephemeral-task-manager/task-list.js +120 -0
- package/dist/llm/tools/ephemeral-task-manager/task-list.js.map +1 -0
- package/dist/llm/tools/ephemeral-task-manager/task.d.ts +21 -0
- package/dist/llm/tools/ephemeral-task-manager/task.d.ts.map +1 -0
- package/dist/llm/tools/ephemeral-task-manager/task.js +24 -0
- package/dist/llm/tools/ephemeral-task-manager/task.js.map +1 -0
- package/dist/llm/tools/file-manager.d.ts +127 -0
- package/dist/llm/tools/file-manager.d.ts.map +1 -0
- package/dist/llm/tools/file-manager.js +598 -0
- package/dist/llm/tools/file-manager.js.map +1 -0
- package/dist/llm/tools/index.d.ts +11 -0
- package/dist/llm/tools/index.d.ts.map +1 -0
- package/dist/llm/tools/index.js +27 -0
- package/dist/llm/tools/index.js.map +1 -0
- package/dist/llm/tools/tell-user.d.ts +31 -0
- package/dist/llm/tools/tell-user.d.ts.map +1 -0
- package/dist/llm/tools/tell-user.js +57 -0
- package/dist/llm/tools/tell-user.js.map +1 -0
- package/dist/llm/tools/tool-wrapper.d.ts +54 -0
- package/dist/llm/tools/tool-wrapper.d.ts.map +1 -0
- package/dist/llm/tools/tool-wrapper.js +91 -0
- package/dist/llm/tools/tool-wrapper.js.map +1 -0
- package/dist/llm/tools/tool.d.ts +70 -0
- package/dist/llm/tools/tool.d.ts.map +1 -0
- package/dist/llm/tools/tool.js +19 -0
- package/dist/llm/tools/tool.js.map +1 -0
- package/dist/llm/tools/web-search-tool.d.ts +35 -0
- package/dist/llm/tools/web-search-tool.d.ts.map +1 -0
- package/dist/llm/tools/web-search-tool.js +105 -0
- package/dist/llm/tools/web-search-tool.js.map +1 -0
- package/dist/llm/utils/image.d.ts +30 -0
- package/dist/llm/utils/image.d.ts.map +1 -0
- package/dist/llm/utils/image.js +65 -0
- package/dist/llm/utils/image.js.map +1 -0
- package/dist/tracer/eventStore.d.ts +101 -0
- package/dist/tracer/eventStore.d.ts.map +1 -0
- package/dist/tracer/eventStore.js +120 -0
- package/dist/tracer/eventStore.js.map +1 -0
- package/dist/tracer/index.d.ts +8 -0
- package/dist/tracer/index.d.ts.map +1 -0
- package/dist/tracer/index.js +24 -0
- package/dist/tracer/index.js.map +1 -0
- package/dist/tracer/nullTracer.d.ts +127 -0
- package/dist/tracer/nullTracer.d.ts.map +1 -0
- package/dist/tracer/nullTracer.js +148 -0
- package/dist/tracer/nullTracer.js.map +1 -0
- package/dist/tracer/tracerEvents.d.ts +209 -0
- package/dist/tracer/tracerEvents.d.ts.map +1 -0
- package/dist/tracer/tracerEvents.js +312 -0
- package/dist/tracer/tracerEvents.js.map +1 -0
- package/dist/tracer/tracerSystem.d.ts +149 -0
- package/dist/tracer/tracerSystem.d.ts.map +1 -0
- package/dist/tracer/tracerSystem.js +196 -0
- package/dist/tracer/tracerSystem.js.map +1 -0
- package/package.json +87 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai-messages-adapter.d.ts","sourceRoot":"","sources":["../../../src/llm/gateways/openai-messages-adapter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,UAAU,EAAY,MAAM,WAAW,CAAC;AAEjD,UAAU,aAAa;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE;YAAE,GAAG,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC,CAAC;IACtF,UAAU,CAAC,EAAE,KAAK,CAAC;QACjB,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,UAAU,CAAC;QACjB,QAAQ,EAAE;YACR,IAAI,EAAE,MAAM,CAAC;YACb,SAAS,EAAE,MAAM,CAAC;SACnB,CAAC;KACH,CAAC,CAAC;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAmCD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,aAAa,EAAE,CAgF7E"}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Adapter for converting LLM messages to OpenAI format.
|
|
4
|
+
*/
|
|
5
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
8
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
9
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
10
|
+
}
|
|
11
|
+
Object.defineProperty(o, k2, desc);
|
|
12
|
+
}) : (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
o[k2] = m[k];
|
|
15
|
+
}));
|
|
16
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
17
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
18
|
+
}) : function(o, v) {
|
|
19
|
+
o["default"] = v;
|
|
20
|
+
});
|
|
21
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
22
|
+
var ownKeys = function(o) {
|
|
23
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
24
|
+
var ar = [];
|
|
25
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
26
|
+
return ar;
|
|
27
|
+
};
|
|
28
|
+
return ownKeys(o);
|
|
29
|
+
};
|
|
30
|
+
return function (mod) {
|
|
31
|
+
if (mod && mod.__esModule) return mod;
|
|
32
|
+
var result = {};
|
|
33
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
34
|
+
__setModuleDefault(result, mod);
|
|
35
|
+
return result;
|
|
36
|
+
};
|
|
37
|
+
})();
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.adaptMessagesToOpenAI = adaptMessagesToOpenAI;
|
|
40
|
+
const fs = __importStar(require("fs"));
|
|
41
|
+
const path = __importStar(require("path"));
|
|
42
|
+
/**
|
|
43
|
+
* Read a file as binary data.
|
|
44
|
+
* Note: This function intentionally accepts dynamic file paths as it needs to read
|
|
45
|
+
* user-specified image files for multimodal API requests.
|
|
46
|
+
*/
|
|
47
|
+
function readFileAsBinary(filePath) {
|
|
48
|
+
// eslint-disable-next-line security/detect-non-literal-fs-filename
|
|
49
|
+
return fs.readFileSync(filePath);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Encode binary data as base64 string.
|
|
53
|
+
*/
|
|
54
|
+
function encodeBase64(data) {
|
|
55
|
+
return data.toString('base64');
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Determine image type from file extension.
|
|
59
|
+
*/
|
|
60
|
+
function getImageType(filePath) {
|
|
61
|
+
const ext = path.extname(filePath).toLowerCase().slice(1);
|
|
62
|
+
// Convert 'jpg' to 'jpeg'
|
|
63
|
+
if (ext === 'jpg') {
|
|
64
|
+
return 'jpeg';
|
|
65
|
+
}
|
|
66
|
+
// Use 'jpeg' for unknown extensions, otherwise use the detected type
|
|
67
|
+
const validTypes = ['jpeg', 'png', 'gif', 'webp'];
|
|
68
|
+
return validTypes.includes(ext) ? ext : 'jpeg';
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Adapt LLM messages to OpenAI format.
|
|
72
|
+
*/
|
|
73
|
+
function adaptMessagesToOpenAI(messages) {
|
|
74
|
+
const newMessages = [];
|
|
75
|
+
for (const m of messages) {
|
|
76
|
+
if (m.role === 'system') {
|
|
77
|
+
newMessages.push({
|
|
78
|
+
role: 'system',
|
|
79
|
+
content: typeof m.content === 'string' ? m.content : '',
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
else if (m.role === 'user') {
|
|
83
|
+
// Check for images in content array
|
|
84
|
+
const imagePaths = extractImagePaths(m);
|
|
85
|
+
if (imagePaths.length > 0) {
|
|
86
|
+
// Create a content structure with text and images
|
|
87
|
+
const content = [];
|
|
88
|
+
// Add text content
|
|
89
|
+
const textContent = typeof m.content === 'string' ? m.content : getTextFromContent(m);
|
|
90
|
+
if (textContent) {
|
|
91
|
+
content.push({ type: 'text', text: textContent });
|
|
92
|
+
}
|
|
93
|
+
// Add each image as a base64-encoded URL
|
|
94
|
+
for (const imagePath of imagePaths) {
|
|
95
|
+
try {
|
|
96
|
+
const binaryData = readFileAsBinary(imagePath);
|
|
97
|
+
const base64Image = encodeBase64(binaryData);
|
|
98
|
+
const imageType = getImageType(imagePath);
|
|
99
|
+
content.push({
|
|
100
|
+
type: 'image_url',
|
|
101
|
+
image_url: {
|
|
102
|
+
url: `data:image/${imageType};base64,${base64Image}`,
|
|
103
|
+
},
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
catch (e) {
|
|
107
|
+
console.error(`Failed to encode image: ${e} (${imagePath})`);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
newMessages.push({ role: 'user', content });
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
newMessages.push({
|
|
114
|
+
role: 'user',
|
|
115
|
+
content: typeof m.content === 'string' ? m.content : getTextFromContent(m),
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
else if (m.role === 'assistant') {
|
|
120
|
+
const msg = {
|
|
121
|
+
role: 'assistant',
|
|
122
|
+
content: typeof m.content === 'string' ? m.content : getTextFromContent(m) || '',
|
|
123
|
+
};
|
|
124
|
+
if (m.tool_calls && m.tool_calls.length > 0) {
|
|
125
|
+
msg.tool_calls = m.tool_calls.map((tc) => ({
|
|
126
|
+
id: tc.id || '',
|
|
127
|
+
type: 'function',
|
|
128
|
+
function: {
|
|
129
|
+
name: tc.function.name,
|
|
130
|
+
arguments: JSON.stringify(tc.function.arguments),
|
|
131
|
+
},
|
|
132
|
+
}));
|
|
133
|
+
}
|
|
134
|
+
newMessages.push(msg);
|
|
135
|
+
}
|
|
136
|
+
else if (m.role === 'tool') {
|
|
137
|
+
if (m.tool_calls && m.tool_calls.length > 0) {
|
|
138
|
+
newMessages.push({
|
|
139
|
+
role: 'tool',
|
|
140
|
+
content: typeof m.content === 'string' ? m.content : '',
|
|
141
|
+
tool_call_id: m.tool_calls[0].id || '',
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
console.error(`Unknown message role: ${m.role}`);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return newMessages;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Extract image paths from a message.
|
|
153
|
+
*/
|
|
154
|
+
function extractImagePaths(message) {
|
|
155
|
+
if (!Array.isArray(message.content)) {
|
|
156
|
+
return [];
|
|
157
|
+
}
|
|
158
|
+
const paths = [];
|
|
159
|
+
for (const item of message.content) {
|
|
160
|
+
if (item.type === 'image_url' && item.image_url?.url) {
|
|
161
|
+
// If it's a file path (not a data URI or URL), add it
|
|
162
|
+
const url = item.image_url.url;
|
|
163
|
+
if (!url.startsWith('data:') && !url.startsWith('http')) {
|
|
164
|
+
paths.push(url);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
return paths;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Get text content from a message with array content.
|
|
172
|
+
*/
|
|
173
|
+
function getTextFromContent(message) {
|
|
174
|
+
if (typeof message.content === 'string') {
|
|
175
|
+
return message.content;
|
|
176
|
+
}
|
|
177
|
+
if (!Array.isArray(message.content)) {
|
|
178
|
+
return '';
|
|
179
|
+
}
|
|
180
|
+
const textParts = [];
|
|
181
|
+
for (const item of message.content) {
|
|
182
|
+
if (item.type === 'text' && item.text) {
|
|
183
|
+
textParts.push(item.text);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
return textParts.join('\n');
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=openai-messages-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai-messages-adapter.js","sourceRoot":"","sources":["../../../src/llm/gateways/openai-messages-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenAI Model Registry for managing model-specific configurations and capabilities.
|
|
3
|
+
*
|
|
4
|
+
* This module provides infrastructure for categorizing OpenAI models and managing
|
|
5
|
+
* their specific parameter requirements and capabilities.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Classification of OpenAI model types based on their capabilities and parameters.
|
|
9
|
+
*/
|
|
10
|
+
export declare enum ModelType {
|
|
11
|
+
/** Models like o1, o3 that use max_completion_tokens */
|
|
12
|
+
REASONING = "reasoning",
|
|
13
|
+
/** Standard chat models that use max_tokens */
|
|
14
|
+
CHAT = "chat",
|
|
15
|
+
/** Text embedding models */
|
|
16
|
+
EMBEDDING = "embedding",
|
|
17
|
+
/** Content moderation models */
|
|
18
|
+
MODERATION = "moderation"
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Defines the capabilities and parameter requirements for a model.
|
|
22
|
+
*/
|
|
23
|
+
export interface ModelCapabilities {
|
|
24
|
+
modelType: ModelType;
|
|
25
|
+
supportsTools: boolean;
|
|
26
|
+
supportsStreaming: boolean;
|
|
27
|
+
supportsVision: boolean;
|
|
28
|
+
maxContextTokens?: number;
|
|
29
|
+
maxOutputTokens?: number;
|
|
30
|
+
/** null means all temperatures supported, empty array means no temperature parameter allowed */
|
|
31
|
+
supportedTemperatures?: number[] | null;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Get the correct parameter name for token limits based on model type.
|
|
35
|
+
*/
|
|
36
|
+
export declare function getTokenLimitParam(capabilities: ModelCapabilities): string;
|
|
37
|
+
/**
|
|
38
|
+
* Check if the model supports a specific temperature value.
|
|
39
|
+
*/
|
|
40
|
+
export declare function supportsTemperature(capabilities: ModelCapabilities, temperature: number): boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Registry for managing OpenAI model configurations and capabilities.
|
|
43
|
+
*
|
|
44
|
+
* This class provides a centralized way to manage model-specific configurations,
|
|
45
|
+
* parameter mappings, and capabilities for OpenAI models.
|
|
46
|
+
*/
|
|
47
|
+
export declare class OpenAIModelRegistry {
|
|
48
|
+
private models;
|
|
49
|
+
private patternMappings;
|
|
50
|
+
constructor();
|
|
51
|
+
private initializeDefaultModels;
|
|
52
|
+
/**
|
|
53
|
+
* Get the capabilities for a specific model.
|
|
54
|
+
*/
|
|
55
|
+
getModelCapabilities(modelName: string): ModelCapabilities;
|
|
56
|
+
private getDefaultCapabilitiesForType;
|
|
57
|
+
/**
|
|
58
|
+
* Check if a model is a reasoning model.
|
|
59
|
+
*/
|
|
60
|
+
isReasoningModel(modelName: string): boolean;
|
|
61
|
+
/**
|
|
62
|
+
* Get a list of all explicitly registered models.
|
|
63
|
+
*/
|
|
64
|
+
getRegisteredModels(): string[];
|
|
65
|
+
/**
|
|
66
|
+
* Register a new model with its capabilities.
|
|
67
|
+
*/
|
|
68
|
+
registerModel(modelName: string, capabilities: ModelCapabilities): void;
|
|
69
|
+
/**
|
|
70
|
+
* Register a pattern for inferring model types.
|
|
71
|
+
*/
|
|
72
|
+
registerPattern(pattern: string, modelType: ModelType): void;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Get the global OpenAI model registry instance.
|
|
76
|
+
*/
|
|
77
|
+
export declare function getModelRegistry(): OpenAIModelRegistry;
|
|
78
|
+
/**
|
|
79
|
+
* Reset the global model registry (for testing).
|
|
80
|
+
*/
|
|
81
|
+
export declare function resetModelRegistry(): void;
|
|
82
|
+
//# sourceMappingURL=openai-model-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai-model-registry.d.ts","sourceRoot":"","sources":["../../../src/llm/gateways/openai-model-registry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,oBAAY,SAAS;IACnB,wDAAwD;IACxD,SAAS,cAAc;IACvB,+CAA+C;IAC/C,IAAI,SAAS;IACb,4BAA4B;IAC5B,SAAS,cAAc;IACvB,gCAAgC;IAChC,UAAU,eAAe;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,SAAS,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC;IACvB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,cAAc,EAAE,OAAO,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gGAAgG;IAChG,qBAAqB,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;CACzC;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,iBAAiB,GAAG,MAAM,CAK1E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAWjG;AAED;;;;;GAKG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAA6C;IAC3D,OAAO,CAAC,eAAe,CAAqC;;IAM5D,OAAO,CAAC,uBAAuB;IA6M/B;;OAEG;IACH,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,iBAAiB;IAuB1D,OAAO,CAAC,6BAA6B;IAkCrC;;OAEG;IACH,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAK5C;;OAEG;IACH,mBAAmB,IAAI,MAAM,EAAE;IAI/B;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,iBAAiB,GAAG,IAAI;IAIvE;;OAEG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI;CAG7D;AAKD;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,mBAAmB,CAKtD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC"}
|
|
@@ -0,0 +1,352 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* OpenAI Model Registry for managing model-specific configurations and capabilities.
|
|
4
|
+
*
|
|
5
|
+
* This module provides infrastructure for categorizing OpenAI models and managing
|
|
6
|
+
* their specific parameter requirements and capabilities.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.OpenAIModelRegistry = exports.ModelType = void 0;
|
|
10
|
+
exports.getTokenLimitParam = getTokenLimitParam;
|
|
11
|
+
exports.supportsTemperature = supportsTemperature;
|
|
12
|
+
exports.getModelRegistry = getModelRegistry;
|
|
13
|
+
exports.resetModelRegistry = resetModelRegistry;
|
|
14
|
+
/**
|
|
15
|
+
* Classification of OpenAI model types based on their capabilities and parameters.
|
|
16
|
+
*/
|
|
17
|
+
var ModelType;
|
|
18
|
+
(function (ModelType) {
|
|
19
|
+
/** Models like o1, o3 that use max_completion_tokens */
|
|
20
|
+
ModelType["REASONING"] = "reasoning";
|
|
21
|
+
/** Standard chat models that use max_tokens */
|
|
22
|
+
ModelType["CHAT"] = "chat";
|
|
23
|
+
/** Text embedding models */
|
|
24
|
+
ModelType["EMBEDDING"] = "embedding";
|
|
25
|
+
/** Content moderation models */
|
|
26
|
+
ModelType["MODERATION"] = "moderation";
|
|
27
|
+
})(ModelType || (exports.ModelType = ModelType = {}));
|
|
28
|
+
/**
|
|
29
|
+
* Get the correct parameter name for token limits based on model type.
|
|
30
|
+
*/
|
|
31
|
+
function getTokenLimitParam(capabilities) {
|
|
32
|
+
if (capabilities.modelType === ModelType.REASONING) {
|
|
33
|
+
return 'max_completion_tokens';
|
|
34
|
+
}
|
|
35
|
+
return 'max_tokens';
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Check if the model supports a specific temperature value.
|
|
39
|
+
*/
|
|
40
|
+
function supportsTemperature(capabilities, temperature) {
|
|
41
|
+
if (capabilities.supportedTemperatures === null ||
|
|
42
|
+
capabilities.supportedTemperatures === undefined) {
|
|
43
|
+
return true; // All temperatures supported if not restricted
|
|
44
|
+
}
|
|
45
|
+
if (capabilities.supportedTemperatures.length === 0) {
|
|
46
|
+
return false; // No temperature values supported (parameter not allowed)
|
|
47
|
+
}
|
|
48
|
+
return capabilities.supportedTemperatures.includes(temperature);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Registry for managing OpenAI model configurations and capabilities.
|
|
52
|
+
*
|
|
53
|
+
* This class provides a centralized way to manage model-specific configurations,
|
|
54
|
+
* parameter mappings, and capabilities for OpenAI models.
|
|
55
|
+
*/
|
|
56
|
+
class OpenAIModelRegistry {
|
|
57
|
+
models = new Map();
|
|
58
|
+
patternMappings = new Map();
|
|
59
|
+
constructor() {
|
|
60
|
+
this.initializeDefaultModels();
|
|
61
|
+
}
|
|
62
|
+
initializeDefaultModels() {
|
|
63
|
+
// Reasoning Models (o1, o3, o4, gpt-5 series)
|
|
64
|
+
const reasoningModels = [
|
|
65
|
+
'o1',
|
|
66
|
+
'o1-2024-12-17',
|
|
67
|
+
'o1-mini',
|
|
68
|
+
'o1-mini-2024-09-12',
|
|
69
|
+
'o1-pro',
|
|
70
|
+
'o1-pro-2025-03-19',
|
|
71
|
+
'o3',
|
|
72
|
+
'o3-2025-04-16',
|
|
73
|
+
'o3-deep-research',
|
|
74
|
+
'o3-deep-research-2025-06-26',
|
|
75
|
+
'o3-mini',
|
|
76
|
+
'o3-mini-2025-01-31',
|
|
77
|
+
'o3-pro',
|
|
78
|
+
'o3-pro-2025-06-10',
|
|
79
|
+
'o4-mini',
|
|
80
|
+
'o4-mini-2025-04-16',
|
|
81
|
+
'o4-mini-deep-research',
|
|
82
|
+
'o4-mini-deep-research-2025-06-26',
|
|
83
|
+
'gpt-5',
|
|
84
|
+
'gpt-5-2025-08-07',
|
|
85
|
+
'gpt-5-chat-latest',
|
|
86
|
+
'gpt-5-codex',
|
|
87
|
+
'gpt-5-mini',
|
|
88
|
+
'gpt-5-mini-2025-08-07',
|
|
89
|
+
'gpt-5-nano',
|
|
90
|
+
'gpt-5-nano-2025-08-07',
|
|
91
|
+
];
|
|
92
|
+
for (const model of reasoningModels) {
|
|
93
|
+
const isDeepResearch = model.includes('deep-research');
|
|
94
|
+
const isGpt5 = model.includes('gpt-5');
|
|
95
|
+
const isO1Series = model.startsWith('o1');
|
|
96
|
+
const isO3Series = model.startsWith('o3');
|
|
97
|
+
const isO4Series = model.startsWith('o4');
|
|
98
|
+
const isMiniOrNano = model.includes('mini') || model.includes('nano');
|
|
99
|
+
// GPT-5 models may support more features than o1/o3/o4
|
|
100
|
+
const supportsTools = isGpt5;
|
|
101
|
+
const supportsStreaming = isGpt5;
|
|
102
|
+
// Set context and output tokens based on model tier
|
|
103
|
+
let contextTokens;
|
|
104
|
+
let outputTokens;
|
|
105
|
+
if (isGpt5) {
|
|
106
|
+
contextTokens = isMiniOrNano ? 200000 : 300000;
|
|
107
|
+
outputTokens = isMiniOrNano ? 32768 : 50000;
|
|
108
|
+
}
|
|
109
|
+
else if (isDeepResearch) {
|
|
110
|
+
contextTokens = 200000;
|
|
111
|
+
outputTokens = 100000;
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
contextTokens = 128000;
|
|
115
|
+
outputTokens = 32768;
|
|
116
|
+
}
|
|
117
|
+
// Temperature restrictions based on model series
|
|
118
|
+
let supportedTemps;
|
|
119
|
+
if (isGpt5 || isO1Series || isO4Series) {
|
|
120
|
+
supportedTemps = [1.0];
|
|
121
|
+
}
|
|
122
|
+
else if (isO3Series) {
|
|
123
|
+
supportedTemps = []; // o3 series doesn't support temperature
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
supportedTemps = null;
|
|
127
|
+
}
|
|
128
|
+
this.models.set(model, {
|
|
129
|
+
modelType: ModelType.REASONING,
|
|
130
|
+
supportsTools,
|
|
131
|
+
supportsStreaming,
|
|
132
|
+
supportsVision: false,
|
|
133
|
+
maxContextTokens: contextTokens,
|
|
134
|
+
maxOutputTokens: outputTokens,
|
|
135
|
+
supportedTemperatures: supportedTemps,
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
// Chat Models (GPT-4 and GPT-4.1 series)
|
|
139
|
+
const gpt4AndNewerModels = [
|
|
140
|
+
'chatgpt-4o-latest',
|
|
141
|
+
'gpt-4',
|
|
142
|
+
'gpt-4-0125-preview',
|
|
143
|
+
'gpt-4-0613',
|
|
144
|
+
'gpt-4-1106-preview',
|
|
145
|
+
'gpt-4-turbo',
|
|
146
|
+
'gpt-4-turbo-2024-04-09',
|
|
147
|
+
'gpt-4-turbo-preview',
|
|
148
|
+
'gpt-4.1',
|
|
149
|
+
'gpt-4.1-2025-04-14',
|
|
150
|
+
'gpt-4.1-mini',
|
|
151
|
+
'gpt-4.1-mini-2025-04-14',
|
|
152
|
+
'gpt-4.1-nano',
|
|
153
|
+
'gpt-4.1-nano-2025-04-14',
|
|
154
|
+
'gpt-4o',
|
|
155
|
+
'gpt-4o-2024-05-13',
|
|
156
|
+
'gpt-4o-2024-08-06',
|
|
157
|
+
'gpt-4o-2024-11-20',
|
|
158
|
+
'gpt-4o-audio-preview',
|
|
159
|
+
'gpt-4o-audio-preview-2024-10-01',
|
|
160
|
+
'gpt-4o-audio-preview-2024-12-17',
|
|
161
|
+
'gpt-4o-audio-preview-2025-06-03',
|
|
162
|
+
'gpt-4o-mini',
|
|
163
|
+
'gpt-4o-mini-2024-07-18',
|
|
164
|
+
'gpt-4o-mini-audio-preview',
|
|
165
|
+
'gpt-4o-mini-audio-preview-2024-12-17',
|
|
166
|
+
'gpt-4o-mini-realtime-preview',
|
|
167
|
+
'gpt-4o-mini-realtime-preview-2024-12-17',
|
|
168
|
+
'gpt-4o-mini-search-preview',
|
|
169
|
+
'gpt-4o-mini-search-preview-2025-03-11',
|
|
170
|
+
'gpt-4o-mini-transcribe',
|
|
171
|
+
'gpt-4o-mini-tts',
|
|
172
|
+
'gpt-4o-realtime-preview',
|
|
173
|
+
'gpt-4o-realtime-preview-2024-10-01',
|
|
174
|
+
'gpt-4o-realtime-preview-2024-12-17',
|
|
175
|
+
'gpt-4o-realtime-preview-2025-06-03',
|
|
176
|
+
'gpt-4o-search-preview',
|
|
177
|
+
'gpt-4o-search-preview-2025-03-11',
|
|
178
|
+
'gpt-4o-transcribe',
|
|
179
|
+
];
|
|
180
|
+
for (const model of gpt4AndNewerModels) {
|
|
181
|
+
const visionSupport = model.includes('gpt-4o') || model.includes('audio-preview') || model.includes('realtime');
|
|
182
|
+
const isMiniOrNano = model.includes('mini') || model.includes('nano');
|
|
183
|
+
const isAudio = model.includes('audio') || model.includes('realtime') || model.includes('transcribe');
|
|
184
|
+
const isGpt41 = model.includes('gpt-4.1');
|
|
185
|
+
let contextTokens;
|
|
186
|
+
let outputTokens;
|
|
187
|
+
if (isGpt41) {
|
|
188
|
+
contextTokens = isMiniOrNano ? 128000 : 200000;
|
|
189
|
+
outputTokens = isMiniOrNano ? 16384 : 32768;
|
|
190
|
+
}
|
|
191
|
+
else if (model.includes('gpt-4o')) {
|
|
192
|
+
contextTokens = 128000;
|
|
193
|
+
outputTokens = 16384;
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
// GPT-4 series
|
|
197
|
+
contextTokens = 32000;
|
|
198
|
+
outputTokens = 8192;
|
|
199
|
+
}
|
|
200
|
+
this.models.set(model, {
|
|
201
|
+
modelType: ModelType.CHAT,
|
|
202
|
+
supportsTools: true,
|
|
203
|
+
supportsStreaming: !isAudio,
|
|
204
|
+
supportsVision: visionSupport,
|
|
205
|
+
maxContextTokens: contextTokens,
|
|
206
|
+
maxOutputTokens: outputTokens,
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
// Chat Models (GPT-3.5 series)
|
|
210
|
+
const gpt35Models = [
|
|
211
|
+
'gpt-3.5-turbo',
|
|
212
|
+
'gpt-3.5-turbo-0125',
|
|
213
|
+
'gpt-3.5-turbo-1106',
|
|
214
|
+
'gpt-3.5-turbo-16k',
|
|
215
|
+
'gpt-3.5-turbo-instruct',
|
|
216
|
+
'gpt-3.5-turbo-instruct-0914',
|
|
217
|
+
];
|
|
218
|
+
for (const model of gpt35Models) {
|
|
219
|
+
this.models.set(model, {
|
|
220
|
+
modelType: ModelType.CHAT,
|
|
221
|
+
supportsTools: !model.includes('instruct'),
|
|
222
|
+
supportsStreaming: !model.includes('instruct'),
|
|
223
|
+
supportsVision: false,
|
|
224
|
+
maxContextTokens: 16385,
|
|
225
|
+
maxOutputTokens: 4096,
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
// Embedding Models
|
|
229
|
+
const embeddingModels = [
|
|
230
|
+
'text-embedding-3-large',
|
|
231
|
+
'text-embedding-3-small',
|
|
232
|
+
'text-embedding-ada-002',
|
|
233
|
+
];
|
|
234
|
+
for (const model of embeddingModels) {
|
|
235
|
+
this.models.set(model, {
|
|
236
|
+
modelType: ModelType.EMBEDDING,
|
|
237
|
+
supportsTools: false,
|
|
238
|
+
supportsStreaming: false,
|
|
239
|
+
supportsVision: false,
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
// Pattern mappings for unknown models
|
|
243
|
+
this.patternMappings.set('o1', ModelType.REASONING);
|
|
244
|
+
this.patternMappings.set('o3', ModelType.REASONING);
|
|
245
|
+
this.patternMappings.set('o4', ModelType.REASONING);
|
|
246
|
+
this.patternMappings.set('gpt-5', ModelType.REASONING);
|
|
247
|
+
this.patternMappings.set('gpt-4', ModelType.CHAT);
|
|
248
|
+
this.patternMappings.set('gpt-4.1', ModelType.CHAT);
|
|
249
|
+
this.patternMappings.set('gpt-3.5', ModelType.CHAT);
|
|
250
|
+
this.patternMappings.set('chatgpt', ModelType.CHAT);
|
|
251
|
+
this.patternMappings.set('text-embedding', ModelType.EMBEDDING);
|
|
252
|
+
this.patternMappings.set('text-moderation', ModelType.MODERATION);
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Get the capabilities for a specific model.
|
|
256
|
+
*/
|
|
257
|
+
getModelCapabilities(modelName) {
|
|
258
|
+
// Direct lookup first
|
|
259
|
+
const capabilities = this.models.get(modelName);
|
|
260
|
+
if (capabilities) {
|
|
261
|
+
return capabilities;
|
|
262
|
+
}
|
|
263
|
+
// Pattern matching for unknown models
|
|
264
|
+
const modelLower = modelName.toLowerCase();
|
|
265
|
+
for (const [pattern, modelType] of this.patternMappings) {
|
|
266
|
+
if (modelLower.includes(pattern)) {
|
|
267
|
+
console.warn(`Using pattern matching for unknown model: ${modelName} (pattern: ${pattern}, inferred: ${modelType})`);
|
|
268
|
+
return this.getDefaultCapabilitiesForType(modelType);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
// Default to chat model if no pattern matches
|
|
272
|
+
console.warn(`Unknown model, defaulting to chat model capabilities: ${modelName}`);
|
|
273
|
+
return this.getDefaultCapabilitiesForType(ModelType.CHAT);
|
|
274
|
+
}
|
|
275
|
+
getDefaultCapabilitiesForType(modelType) {
|
|
276
|
+
switch (modelType) {
|
|
277
|
+
case ModelType.REASONING:
|
|
278
|
+
return {
|
|
279
|
+
modelType: ModelType.REASONING,
|
|
280
|
+
supportsTools: false,
|
|
281
|
+
supportsStreaming: false,
|
|
282
|
+
supportsVision: false,
|
|
283
|
+
};
|
|
284
|
+
case ModelType.CHAT:
|
|
285
|
+
return {
|
|
286
|
+
modelType: ModelType.CHAT,
|
|
287
|
+
supportsTools: true,
|
|
288
|
+
supportsStreaming: true,
|
|
289
|
+
supportsVision: false,
|
|
290
|
+
};
|
|
291
|
+
case ModelType.EMBEDDING:
|
|
292
|
+
return {
|
|
293
|
+
modelType: ModelType.EMBEDDING,
|
|
294
|
+
supportsTools: false,
|
|
295
|
+
supportsStreaming: false,
|
|
296
|
+
supportsVision: false,
|
|
297
|
+
};
|
|
298
|
+
case ModelType.MODERATION:
|
|
299
|
+
default:
|
|
300
|
+
return {
|
|
301
|
+
modelType: ModelType.MODERATION,
|
|
302
|
+
supportsTools: false,
|
|
303
|
+
supportsStreaming: false,
|
|
304
|
+
supportsVision: false,
|
|
305
|
+
};
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* Check if a model is a reasoning model.
|
|
310
|
+
*/
|
|
311
|
+
isReasoningModel(modelName) {
|
|
312
|
+
const capabilities = this.getModelCapabilities(modelName);
|
|
313
|
+
return capabilities.modelType === ModelType.REASONING;
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* Get a list of all explicitly registered models.
|
|
317
|
+
*/
|
|
318
|
+
getRegisteredModels() {
|
|
319
|
+
return Array.from(this.models.keys());
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Register a new model with its capabilities.
|
|
323
|
+
*/
|
|
324
|
+
registerModel(modelName, capabilities) {
|
|
325
|
+
this.models.set(modelName, capabilities);
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* Register a pattern for inferring model types.
|
|
329
|
+
*/
|
|
330
|
+
registerPattern(pattern, modelType) {
|
|
331
|
+
this.patternMappings.set(pattern, modelType);
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
exports.OpenAIModelRegistry = OpenAIModelRegistry;
|
|
335
|
+
// Global registry instance
|
|
336
|
+
let registryInstance = null;
|
|
337
|
+
/**
|
|
338
|
+
* Get the global OpenAI model registry instance.
|
|
339
|
+
*/
|
|
340
|
+
function getModelRegistry() {
|
|
341
|
+
if (!registryInstance) {
|
|
342
|
+
registryInstance = new OpenAIModelRegistry();
|
|
343
|
+
}
|
|
344
|
+
return registryInstance;
|
|
345
|
+
}
|
|
346
|
+
/**
|
|
347
|
+
* Reset the global model registry (for testing).
|
|
348
|
+
*/
|
|
349
|
+
function resetModelRegistry() {
|
|
350
|
+
registryInstance = null;
|
|
351
|
+
}
|
|
352
|
+
//# sourceMappingURL=openai-model-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai-model-registry.js","sourceRoot":"","sources":["../../../src/llm/gateways/openai-model-registry.ts"],"names":[],"mappings":"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"}
|