@ant-design/agentic-ui 2.30.20 → 2.30.22
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/dist/Bubble/MessagesContent/MarkdownPreview.js +6 -5
- package/dist/Bubble/OpenAIMessageBubble/index.d.ts +11 -0
- package/dist/Bubble/OpenAIMessageBubble/index.js +8 -0
- package/dist/Bubble/OpenAIMessageBubble/mapOllamaMessages.d.ts +7 -0
- package/dist/Bubble/OpenAIMessageBubble/mapOllamaMessages.js +136 -0
- package/dist/Bubble/OpenAIMessageBubble/mapOpenAIMessages.d.ts +8 -0
- package/dist/Bubble/OpenAIMessageBubble/mapOpenAIMessages.js +156 -0
- package/dist/Bubble/OpenAIMessageBubble/mapOpenClawMessages.d.ts +8 -0
- package/dist/Bubble/OpenAIMessageBubble/mapOpenClawMessages.js +127 -0
- package/dist/Bubble/OpenAIMessageBubble/normalizeOllamaMessages.d.ts +16 -0
- package/dist/Bubble/OpenAIMessageBubble/normalizeOllamaMessages.js +110 -0
- package/dist/Bubble/OpenAIMessageBubble/normalizeOpenClawMessages.d.ts +10 -0
- package/dist/Bubble/OpenAIMessageBubble/normalizeOpenClawMessages.js +61 -0
- package/dist/Bubble/OpenAIMessageBubble/ollamaTypes.d.ts +48 -0
- package/dist/Bubble/OpenAIMessageBubble/ollamaTypes.js +1 -0
- package/dist/Bubble/OpenAIMessageBubble/openClawTypes.d.ts +27 -0
- package/dist/Bubble/OpenAIMessageBubble/openClawTypes.js +1 -0
- package/dist/Bubble/OpenAIMessageBubble/types.d.ts +71 -0
- package/dist/Bubble/OpenAIMessageBubble/types.js +1 -0
- package/dist/Bubble/OpenAIMessageBubble/useOllamaMessageBubbleData.d.ts +7 -0
- package/dist/Bubble/OpenAIMessageBubble/useOllamaMessageBubbleData.js +23 -0
- package/dist/Bubble/OpenAIMessageBubble/useOpenAIMessageBubbleData.d.ts +6 -0
- package/dist/Bubble/OpenAIMessageBubble/useOpenAIMessageBubbleData.js +20 -0
- package/dist/Bubble/OpenAIMessageBubble/useOpenClawMessageBubbleData.d.ts +7 -0
- package/dist/Bubble/OpenAIMessageBubble/useOpenClawMessageBubbleData.js +22 -0
- package/dist/Bubble/index.d.ts +2 -0
- package/dist/Bubble/index.js +1 -0
- package/dist/MarkdownEditor/editor/Editor.js +24 -12
- package/dist/MarkdownEditor/editor/elements/Table/SimpleTable.js +5 -1
- package/dist/MarkdownEditor/editor/elements/Table/commands/tableCommands.js +24 -8
- package/dist/MarkdownEditor/editor/elements/index.js +18 -14
- package/dist/MarkdownEditor/editor/plugins/useKeyboard.js +17 -5
- package/dist/MarkdownEditor/editor/store.d.ts +12 -0
- package/dist/MarkdownEditor/editor/store.js +30 -5
- package/dist/MarkdownEditor/editor/tools/InsertAutocomplete.js +15 -11
- package/dist/MarkdownInputField/AttachmentButton/AttachmentFileList/AttachmentFileListItem.d.ts +1 -1
- package/dist/MarkdownInputField/AttachmentButton/AttachmentFileList/AttachmentFileListItem.js +4 -5
- package/dist/MarkdownInputField/AttachmentButton/AttachmentFileList/index.d.ts +1 -1
- package/dist/MarkdownInputField/AttachmentButton/index.d.ts +1 -1
- package/dist/MarkdownInputField/MarkdownInputField.js +6 -1
- package/dist/MarkdownInputField/hooks/useMarkdownInputFieldHandlers.js +6 -2
- package/dist/MarkdownInputField/hooks/useMarkdownInputFieldRefs.d.ts +1 -0
- package/dist/MarkdownInputField/hooks/useMarkdownInputFieldRefs.js +36 -5
- package/dist/MarkdownInputField/utils/renderHelpers.js +5 -0
- package/dist/MarkdownRenderer/FncRefForMarkdown.d.ts +24 -0
- package/dist/MarkdownRenderer/FncRefForMarkdown.js +65 -0
- package/dist/MarkdownRenderer/MarkdownRenderer.js +24 -9
- package/dist/MarkdownRenderer/extractFootnoteDefinitions.d.ts +13 -0
- package/dist/MarkdownRenderer/extractFootnoteDefinitions.js +40 -0
- package/dist/MarkdownRenderer/markdownReactShared.d.ts +4 -1
- package/dist/MarkdownRenderer/markdownReactShared.js +20 -10
- package/dist/MarkdownRenderer/renderers/CodeRenderer.d.ts +4 -1
- package/dist/MarkdownRenderer/renderers/CodeRenderer.js +27 -3
- package/dist/MarkdownRenderer/renderers/SchemaRenderer.d.ts +2 -0
- package/dist/MarkdownRenderer/renderers/SchemaRenderer.js +33 -5
- package/dist/MarkdownRenderer/streaming/useStreamingMarkdownReact.js +2 -1
- package/dist/MarkdownRenderer/types.d.ts +5 -9
- package/dist/MarkdownRenderer/useMarkdownToReact.js +1 -1
- package/dist/Plugins/mermaid/MermaidRendererImpl.js +481 -7
- package/dist/Plugins/mermaid/style.js +71 -22
- package/dist/Plugins/mermaid/useMermaidRender.d.ts +2 -1
- package/dist/Plugins/mermaid/useMermaidRender.js +41 -13
- package/dist/Plugins/mermaid/utils.d.ts +16 -0
- package/dist/Plugins/mermaid/utils.js +197 -5
- package/dist/Workspace/Browser/index.js +19 -1
- package/package.json +8 -7
|
@@ -126,7 +126,7 @@ import { MessagesContext } from "./BubbleContext";
|
|
|
126
126
|
var _content_includes, _htmlRef_current, _htmlRef_current1, _props_markdownRenderConfig, _props_originData, _props_originData1, _props_originData2, _props_markdownRenderConfig1, _props_markdownRenderConfig2, _props_originData3, _props_markdownRenderConfig3;
|
|
127
127
|
// MarkdownRenderer 渲染路径——轻量,不创建 Slate 实例
|
|
128
128
|
if (renderMode === 'markdown') {
|
|
129
|
-
var _props_originData4, _props_markdownRenderConfig4, _props_markdownRenderConfig5, _props_markdownRenderConfig6, _props_markdownRenderConfig7, _props_markdownRenderConfig8, _props_markdownRenderConfig9, _props_markdownRenderConfig10;
|
|
129
|
+
var _props_originData4, _props_markdownRenderConfig4, _props_markdownRenderConfig5, _props_markdownRenderConfig6, _props_markdownRenderConfig7, _props_markdownRenderConfig8, _props_markdownRenderConfig9, _props_markdownRenderConfig10, _props_markdownRenderConfig11;
|
|
130
130
|
return /*#__PURE__*/ React.createElement(MarkdownRenderer, {
|
|
131
131
|
content: content,
|
|
132
132
|
streaming: shouldAnimateMarkdown,
|
|
@@ -135,14 +135,15 @@ import { MessagesContext } from "./BubbleContext";
|
|
|
135
135
|
queueOptions: (_props_markdownRenderConfig5 = props.markdownRenderConfig) === null || _props_markdownRenderConfig5 === void 0 ? void 0 : _props_markdownRenderConfig5.queueOptions,
|
|
136
136
|
streamingParagraphAnimation: (_props_markdownRenderConfig6 = props.markdownRenderConfig) === null || _props_markdownRenderConfig6 === void 0 ? void 0 : _props_markdownRenderConfig6.streamingParagraphAnimation,
|
|
137
137
|
fncProps: fncProps,
|
|
138
|
+
linkConfig: (_props_markdownRenderConfig7 = props.markdownRenderConfig) === null || _props_markdownRenderConfig7 === void 0 ? void 0 : _props_markdownRenderConfig7.linkConfig,
|
|
138
139
|
style: _object_spread({
|
|
139
140
|
maxWidth: standalone ? '100%' : undefined,
|
|
140
141
|
padding: isPaddingHidden ? 0 : undefined,
|
|
141
142
|
margin: isPaddingHidden ? 0 : undefined
|
|
142
|
-
}, ((
|
|
143
|
-
codeProps: (
|
|
144
|
-
apaasify: (
|
|
145
|
-
fileMapConfig: (
|
|
143
|
+
}, ((_props_markdownRenderConfig8 = props.markdownRenderConfig) === null || _props_markdownRenderConfig8 === void 0 ? void 0 : _props_markdownRenderConfig8.style) || {}),
|
|
144
|
+
codeProps: (_props_markdownRenderConfig9 = props.markdownRenderConfig) === null || _props_markdownRenderConfig9 === void 0 ? void 0 : _props_markdownRenderConfig9.codeProps,
|
|
145
|
+
apaasify: (_props_markdownRenderConfig10 = props.markdownRenderConfig) === null || _props_markdownRenderConfig10 === void 0 ? void 0 : _props_markdownRenderConfig10.apaasify,
|
|
146
|
+
fileMapConfig: (_props_markdownRenderConfig11 = props.markdownRenderConfig) === null || _props_markdownRenderConfig11 === void 0 ? void 0 : _props_markdownRenderConfig11.fileMapConfig
|
|
146
147
|
});
|
|
147
148
|
}
|
|
148
149
|
// Slate 渲染路径——保持向后兼容
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { mapOpenAIMessagesToMessageBubbleData } from './mapOpenAIMessages';
|
|
2
|
+
export { mapOpenClawMessagesToMessageBubbleData } from './mapOpenClawMessages';
|
|
3
|
+
export { mapOllamaMessagesToMessageBubbleData } from './mapOllamaMessages';
|
|
4
|
+
export { normalizeOpenClawMessageToOpenAI, normalizeOpenClawMessagesToOpenAI, } from './normalizeOpenClawMessages';
|
|
5
|
+
export { normalizeOllamaMessageToOpenAI, normalizeOllamaMessagesToOpenAI, } from './normalizeOllamaMessages';
|
|
6
|
+
export { useOpenAIMessageBubbleData } from './useOpenAIMessageBubbleData';
|
|
7
|
+
export { useOpenClawMessageBubbleData } from './useOpenClawMessageBubbleData';
|
|
8
|
+
export { useOllamaMessageBubbleData } from './useOllamaMessageBubbleData';
|
|
9
|
+
export type { OpenAIChatContentPart, OpenAIChatContentPartFallback, OpenAIChatMessage, OpenAIChatMessageAssistant, OpenAIChatMessageFunction, OpenAIChatMessageSystem, OpenAIChatMessageTool, OpenAIChatMessageUser, OpenAIChatRefusalPart, OpenAIChatTextPart, OpenAIMessagesMapMessage, OpenAIMessagesMapOptions, } from './types';
|
|
10
|
+
export type { OpenClawChatMessage, OpenClawChatMessageToolResult, OpenClawChatMeta, OpenClawMessagesMapOptions, } from './openClawTypes';
|
|
11
|
+
export type { OllamaChatMessage, OllamaMessagesMapOptions, OllamaToolCall, } from './ollamaTypes';
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { mapOpenAIMessagesToMessageBubbleData } from "./mapOpenAIMessages";
|
|
2
|
+
export { mapOpenClawMessagesToMessageBubbleData } from "./mapOpenClawMessages";
|
|
3
|
+
export { mapOllamaMessagesToMessageBubbleData } from "./mapOllamaMessages";
|
|
4
|
+
export { normalizeOpenClawMessageToOpenAI, normalizeOpenClawMessagesToOpenAI } from "./normalizeOpenClawMessages";
|
|
5
|
+
export { normalizeOllamaMessageToOpenAI, normalizeOllamaMessagesToOpenAI } from "./normalizeOllamaMessages";
|
|
6
|
+
export { useOpenAIMessageBubbleData } from "./useOpenAIMessageBubbleData";
|
|
7
|
+
export { useOpenClawMessageBubbleData } from "./useOpenClawMessageBubbleData";
|
|
8
|
+
export { useOllamaMessageBubbleData } from "./useOllamaMessageBubbleData";
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { MessageBubbleData } from '../../Types/message';
|
|
2
|
+
import type { OpenAIMessagesMapMessage } from './types';
|
|
3
|
+
import type { OllamaChatMessage, OllamaMessagesMapOptions } from './ollamaTypes';
|
|
4
|
+
/**
|
|
5
|
+
* 将 Ollama `/api/chat` 的 `messages` 转为 `MessageBubbleData[]`
|
|
6
|
+
*/
|
|
7
|
+
export declare function mapOllamaMessagesToMessageBubbleData(messages: OllamaChatMessage[], options?: OllamaMessagesMapOptions, mapMessage?: OpenAIMessagesMapMessage): MessageBubbleData[];
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
function _define_property(obj, key, value) {
|
|
2
|
+
if (key in obj) {
|
|
3
|
+
Object.defineProperty(obj, key, {
|
|
4
|
+
value: value,
|
|
5
|
+
enumerable: true,
|
|
6
|
+
configurable: true,
|
|
7
|
+
writable: true
|
|
8
|
+
});
|
|
9
|
+
} else {
|
|
10
|
+
obj[key] = value;
|
|
11
|
+
}
|
|
12
|
+
return obj;
|
|
13
|
+
}
|
|
14
|
+
function _object_spread(target) {
|
|
15
|
+
for(var i = 1; i < arguments.length; i++){
|
|
16
|
+
var source = arguments[i] != null ? arguments[i] : {};
|
|
17
|
+
var ownKeys = Object.keys(source);
|
|
18
|
+
if (typeof Object.getOwnPropertySymbols === "function") {
|
|
19
|
+
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
|
|
20
|
+
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
|
|
21
|
+
}));
|
|
22
|
+
}
|
|
23
|
+
ownKeys.forEach(function(key) {
|
|
24
|
+
_define_property(target, key, source[key]);
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
return target;
|
|
28
|
+
}
|
|
29
|
+
function ownKeys(object, enumerableOnly) {
|
|
30
|
+
var keys = Object.keys(object);
|
|
31
|
+
if (Object.getOwnPropertySymbols) {
|
|
32
|
+
var symbols = Object.getOwnPropertySymbols(object);
|
|
33
|
+
if (enumerableOnly) {
|
|
34
|
+
symbols = symbols.filter(function(sym) {
|
|
35
|
+
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
keys.push.apply(keys, symbols);
|
|
39
|
+
}
|
|
40
|
+
return keys;
|
|
41
|
+
}
|
|
42
|
+
function _object_spread_props(target, source) {
|
|
43
|
+
source = source != null ? source : {};
|
|
44
|
+
if (Object.getOwnPropertyDescriptors) {
|
|
45
|
+
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
|
|
46
|
+
} else {
|
|
47
|
+
ownKeys(Object(source)).forEach(function(key) {
|
|
48
|
+
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
return target;
|
|
52
|
+
}
|
|
53
|
+
function _object_without_properties(source, excluded) {
|
|
54
|
+
if (source == null) return {};
|
|
55
|
+
var target = {}, sourceKeys, key, i;
|
|
56
|
+
if (typeof Reflect !== "undefined" && Reflect.ownKeys) {
|
|
57
|
+
sourceKeys = Reflect.ownKeys(source);
|
|
58
|
+
for(i = 0; i < sourceKeys.length; i++){
|
|
59
|
+
key = sourceKeys[i];
|
|
60
|
+
if (excluded.indexOf(key) >= 0) continue;
|
|
61
|
+
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
|
|
62
|
+
target[key] = source[key];
|
|
63
|
+
}
|
|
64
|
+
return target;
|
|
65
|
+
}
|
|
66
|
+
target = _object_without_properties_loose(source, excluded);
|
|
67
|
+
if (Object.getOwnPropertySymbols) {
|
|
68
|
+
sourceKeys = Object.getOwnPropertySymbols(source);
|
|
69
|
+
for(i = 0; i < sourceKeys.length; i++){
|
|
70
|
+
key = sourceKeys[i];
|
|
71
|
+
if (excluded.indexOf(key) >= 0) continue;
|
|
72
|
+
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
|
|
73
|
+
target[key] = source[key];
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return target;
|
|
77
|
+
}
|
|
78
|
+
function _object_without_properties_loose(source, excluded) {
|
|
79
|
+
if (source == null) return {};
|
|
80
|
+
var target = {}, sourceKeys = Object.getOwnPropertyNames(source), key, i;
|
|
81
|
+
for(i = 0; i < sourceKeys.length; i++){
|
|
82
|
+
key = sourceKeys[i];
|
|
83
|
+
if (excluded.indexOf(key) >= 0) continue;
|
|
84
|
+
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
|
|
85
|
+
target[key] = source[key];
|
|
86
|
+
}
|
|
87
|
+
return target;
|
|
88
|
+
}
|
|
89
|
+
import { mapOpenAIMessagesToMessageBubbleData } from "./mapOpenAIMessages";
|
|
90
|
+
import { normalizeOllamaMessagesToOpenAI } from "./normalizeOllamaMessages";
|
|
91
|
+
function defaultOllamaGetMessageId(msg, index, originals) {
|
|
92
|
+
var _ref, _ref1;
|
|
93
|
+
var _originals_index;
|
|
94
|
+
return (_ref = (_ref1 = (_originals_index = originals[index]) === null || _originals_index === void 0 ? void 0 : _originals_index.id) !== null && _ref1 !== void 0 ? _ref1 : msg.id) !== null && _ref !== void 0 ? _ref : "ollama-msg-".concat(index);
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* 将 Ollama `/api/chat` 的 `messages` 转为 `MessageBubbleData[]`
|
|
98
|
+
*/ export function mapOllamaMessagesToMessageBubbleData(messages, options, mapMessage) {
|
|
99
|
+
var _ref = options !== null && options !== void 0 ? options : {}, _ref_appendThinkingToContent = _ref.appendThinkingToContent, appendThinkingToContent = _ref_appendThinkingToContent === void 0 ? true : _ref_appendThinkingToContent, _ref_appendImagesPlaceholder = _ref.appendImagesPlaceholder, appendImagesPlaceholder = _ref_appendImagesPlaceholder === void 0 ? true : _ref_appendImagesPlaceholder, _ref_preserveOllamaRawInExtra = _ref.preserveOllamaRawInExtra, preserveOllamaRawInExtra = _ref_preserveOllamaRawInExtra === void 0 ? true : _ref_preserveOllamaRawInExtra, userGetMessageId = _ref.getMessageId, rest = _object_without_properties(_ref, [
|
|
100
|
+
"appendThinkingToContent",
|
|
101
|
+
"appendImagesPlaceholder",
|
|
102
|
+
"preserveOllamaRawInExtra",
|
|
103
|
+
"getMessageId"
|
|
104
|
+
]);
|
|
105
|
+
var openai = normalizeOllamaMessagesToOpenAI(messages, {
|
|
106
|
+
appendThinkingToContent: appendThinkingToContent,
|
|
107
|
+
appendImagesPlaceholder: appendImagesPlaceholder
|
|
108
|
+
});
|
|
109
|
+
var getMessageId = userGetMessageId !== null && userGetMessageId !== void 0 ? userGetMessageId : function(msg, index) {
|
|
110
|
+
return defaultOllamaGetMessageId(msg, index, messages);
|
|
111
|
+
};
|
|
112
|
+
if (!preserveOllamaRawInExtra && !mapMessage) {
|
|
113
|
+
return mapOpenAIMessagesToMessageBubbleData(openai, _object_spread_props(_object_spread({}, rest), {
|
|
114
|
+
getMessageId: getMessageId
|
|
115
|
+
}));
|
|
116
|
+
}
|
|
117
|
+
var innerMap = function innerMap(msg, index, draft) {
|
|
118
|
+
var d = draft;
|
|
119
|
+
if (preserveOllamaRawInExtra && messages[index]) {
|
|
120
|
+
d = _object_spread_props(_object_spread({}, d), {
|
|
121
|
+
extra: _object_spread_props(_object_spread({}, d.extra), {
|
|
122
|
+
ollama: {
|
|
123
|
+
raw: messages[index]
|
|
124
|
+
}
|
|
125
|
+
})
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
if (mapMessage) {
|
|
129
|
+
d = mapMessage(msg, index, d);
|
|
130
|
+
}
|
|
131
|
+
return d;
|
|
132
|
+
};
|
|
133
|
+
return mapOpenAIMessagesToMessageBubbleData(openai, _object_spread_props(_object_spread({}, rest), {
|
|
134
|
+
getMessageId: getMessageId
|
|
135
|
+
}), innerMap);
|
|
136
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { MessageBubbleData } from '../../Types/message';
|
|
2
|
+
import type { OpenAIChatContentPart, OpenAIChatMessage, OpenAIMessagesMapMessage, OpenAIMessagesMapOptions } from './types';
|
|
3
|
+
/** @internal exported for OpenClaw 归一化复用 */
|
|
4
|
+
export declare function extractTextFromContent(content: string | OpenAIChatContentPart[] | null | undefined): string;
|
|
5
|
+
/**
|
|
6
|
+
* 将 OpenAI Chat Completions 风格的 messages 转为 MessageBubbleData[]
|
|
7
|
+
*/
|
|
8
|
+
export declare function mapOpenAIMessagesToMessageBubbleData(messages: OpenAIChatMessage[], options?: OpenAIMessagesMapOptions, mapMessage?: OpenAIMessagesMapMessage): MessageBubbleData[];
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
function _define_property(obj, key, value) {
|
|
2
|
+
if (key in obj) {
|
|
3
|
+
Object.defineProperty(obj, key, {
|
|
4
|
+
value: value,
|
|
5
|
+
enumerable: true,
|
|
6
|
+
configurable: true,
|
|
7
|
+
writable: true
|
|
8
|
+
});
|
|
9
|
+
} else {
|
|
10
|
+
obj[key] = value;
|
|
11
|
+
}
|
|
12
|
+
return obj;
|
|
13
|
+
}
|
|
14
|
+
function _object_spread(target) {
|
|
15
|
+
for(var i = 1; i < arguments.length; i++){
|
|
16
|
+
var source = arguments[i] != null ? arguments[i] : {};
|
|
17
|
+
var ownKeys = Object.keys(source);
|
|
18
|
+
if (typeof Object.getOwnPropertySymbols === "function") {
|
|
19
|
+
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
|
|
20
|
+
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
|
|
21
|
+
}));
|
|
22
|
+
}
|
|
23
|
+
ownKeys.forEach(function(key) {
|
|
24
|
+
_define_property(target, key, source[key]);
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
return target;
|
|
28
|
+
}
|
|
29
|
+
var DEFAULT_TOOL_ROLE = 'assistant';
|
|
30
|
+
/** @internal exported for OpenClaw 归一化复用 */ export function extractTextFromContent(content) {
|
|
31
|
+
if (content === undefined || content === null) {
|
|
32
|
+
return '';
|
|
33
|
+
}
|
|
34
|
+
if (typeof content === 'string') {
|
|
35
|
+
return content;
|
|
36
|
+
}
|
|
37
|
+
var parts = [];
|
|
38
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
39
|
+
try {
|
|
40
|
+
for(var _iterator = content[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
41
|
+
var part = _step.value;
|
|
42
|
+
if (part.type === 'text' && typeof part.text === 'string') {
|
|
43
|
+
parts.push(part.text);
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
if ('refusal' in part && typeof part.refusal === 'string') {
|
|
47
|
+
parts.push(part.refusal);
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
if (part.type === 'image_url') {
|
|
51
|
+
parts.push('[image]');
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
parts.push("[".concat(part.type, "]"));
|
|
55
|
+
}
|
|
56
|
+
} catch (err) {
|
|
57
|
+
_didIteratorError = true;
|
|
58
|
+
_iteratorError = err;
|
|
59
|
+
} finally{
|
|
60
|
+
try {
|
|
61
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
62
|
+
_iterator.return();
|
|
63
|
+
}
|
|
64
|
+
} finally{
|
|
65
|
+
if (_didIteratorError) {
|
|
66
|
+
throw _iteratorError;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return parts.join('\n');
|
|
71
|
+
}
|
|
72
|
+
function mapOpenAIRoleToRoleType(msg, toolRoleAs) {
|
|
73
|
+
switch(msg.role){
|
|
74
|
+
case 'user':
|
|
75
|
+
return 'user';
|
|
76
|
+
case 'system':
|
|
77
|
+
return 'system';
|
|
78
|
+
case 'assistant':
|
|
79
|
+
return 'assistant';
|
|
80
|
+
case 'tool':
|
|
81
|
+
case 'function':
|
|
82
|
+
return toolRoleAs;
|
|
83
|
+
default:
|
|
84
|
+
return 'assistant';
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
function appendAssistantExtras(msg, base, appendToolCalls) {
|
|
88
|
+
var _msg_tool_calls;
|
|
89
|
+
if (!appendToolCalls) {
|
|
90
|
+
return base;
|
|
91
|
+
}
|
|
92
|
+
var out = base;
|
|
93
|
+
if ((_msg_tool_calls = msg.tool_calls) === null || _msg_tool_calls === void 0 ? void 0 : _msg_tool_calls.length) {
|
|
94
|
+
out += "\n\n[tool_calls]\n".concat(JSON.stringify(msg.tool_calls, null, 2));
|
|
95
|
+
}
|
|
96
|
+
if (msg.function_call) {
|
|
97
|
+
out += "\n\n[function_call]\n".concat(JSON.stringify(msg.function_call, null, 2));
|
|
98
|
+
}
|
|
99
|
+
return out;
|
|
100
|
+
}
|
|
101
|
+
function defaultGetMessageId(msg, index) {
|
|
102
|
+
var _msg_id;
|
|
103
|
+
return (_msg_id = msg.id) !== null && _msg_id !== void 0 ? _msg_id : "openai-msg-".concat(index);
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* 将 OpenAI Chat Completions 风格的 messages 转为 MessageBubbleData[]
|
|
107
|
+
*/ export function mapOpenAIMessagesToMessageBubbleData(messages, options, mapMessage) {
|
|
108
|
+
var _ref = options !== null && options !== void 0 ? options : {}, _ref_baseTime = _ref.baseTime, baseTime = _ref_baseTime === void 0 ? Date.now() : _ref_baseTime, _ref_timeStepMs = _ref.timeStepMs, timeStepMs = _ref_timeStepMs === void 0 ? 1 : _ref_timeStepMs, _ref_bumpUpdateAtOnLastMessage = _ref.bumpUpdateAtOnLastMessage, bumpUpdateAtOnLastMessage = _ref_bumpUpdateAtOnLastMessage === void 0 ? false : _ref_bumpUpdateAtOnLastMessage, _ref_getMessageId = _ref.getMessageId, getMessageId = _ref_getMessageId === void 0 ? defaultGetMessageId : _ref_getMessageId, _ref_toolRoleAs = _ref.toolRoleAs, toolRoleAs = _ref_toolRoleAs === void 0 ? DEFAULT_TOOL_ROLE : _ref_toolRoleAs, _ref_appendToolCallsToContent = _ref.appendToolCallsToContent, appendToolCallsToContent = _ref_appendToolCallsToContent === void 0 ? true : _ref_appendToolCallsToContent, _ref_preserveRawInExtra = _ref.preserveRawInExtra, preserveRawInExtra = _ref_preserveRawInExtra === void 0 ? true : _ref_preserveRawInExtra;
|
|
109
|
+
var lastIndex = messages.length - 1;
|
|
110
|
+
return messages.map(function(msg, index) {
|
|
111
|
+
var id = getMessageId(msg, index);
|
|
112
|
+
var role = mapOpenAIRoleToRoleType(msg, toolRoleAs);
|
|
113
|
+
var createAt = baseTime + index * timeStepMs;
|
|
114
|
+
var updateAt = createAt;
|
|
115
|
+
if (bumpUpdateAtOnLastMessage && index === lastIndex) {
|
|
116
|
+
updateAt = Date.now();
|
|
117
|
+
}
|
|
118
|
+
var text = '';
|
|
119
|
+
if (msg.role === 'assistant') {
|
|
120
|
+
var a = msg;
|
|
121
|
+
text = extractTextFromContent(a.content);
|
|
122
|
+
text = appendAssistantExtras(a, text, appendToolCallsToContent);
|
|
123
|
+
} else if (msg.role === 'user' || msg.role === 'system') {
|
|
124
|
+
text = extractTextFromContent(msg.content);
|
|
125
|
+
} else if (msg.role === 'tool') {
|
|
126
|
+
var _msg_content;
|
|
127
|
+
var prefix = msg.tool_call_id ? "[tool_call_id: ".concat(msg.tool_call_id, "]\n") : '';
|
|
128
|
+
text = prefix + ((_msg_content = msg.content) !== null && _msg_content !== void 0 ? _msg_content : '');
|
|
129
|
+
} else if (msg.role === 'function') {
|
|
130
|
+
var _msg_content1;
|
|
131
|
+
var prefix1 = msg.name ? "[function: ".concat(msg.name, "]\n") : '';
|
|
132
|
+
text = prefix1 + ((_msg_content1 = msg.content) !== null && _msg_content1 !== void 0 ? _msg_content1 : '');
|
|
133
|
+
}
|
|
134
|
+
var originContent = text;
|
|
135
|
+
var extra = preserveRawInExtra ? {
|
|
136
|
+
openai: {
|
|
137
|
+
role: msg.role,
|
|
138
|
+
raw: msg
|
|
139
|
+
}
|
|
140
|
+
} : {};
|
|
141
|
+
var draft = _object_spread({
|
|
142
|
+
id: id,
|
|
143
|
+
role: role,
|
|
144
|
+
content: text,
|
|
145
|
+
originContent: originContent,
|
|
146
|
+
createAt: createAt,
|
|
147
|
+
updateAt: updateAt
|
|
148
|
+
}, Object.keys(extra).length ? {
|
|
149
|
+
extra: extra
|
|
150
|
+
} : {});
|
|
151
|
+
if (mapMessage) {
|
|
152
|
+
draft = mapMessage(msg, index, draft);
|
|
153
|
+
}
|
|
154
|
+
return draft;
|
|
155
|
+
});
|
|
156
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { MessageBubbleData } from '../../Types/message';
|
|
2
|
+
import type { OpenAIMessagesMapMessage } from './types';
|
|
3
|
+
import type { OpenClawChatMessage, OpenClawMessagesMapOptions } from './openClawTypes';
|
|
4
|
+
/**
|
|
5
|
+
* 将 OpenClaw 会话 / transcript 风格的 `messages` 转为 `MessageBubbleData[]`
|
|
6
|
+
*(内部先归一化为 OpenAI 形状再复用 {@link mapOpenAIMessagesToMessageBubbleData})。
|
|
7
|
+
*/
|
|
8
|
+
export declare function mapOpenClawMessagesToMessageBubbleData(messages: OpenClawChatMessage[], options?: OpenClawMessagesMapOptions, mapMessage?: OpenAIMessagesMapMessage): MessageBubbleData[];
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
function _define_property(obj, key, value) {
|
|
2
|
+
if (key in obj) {
|
|
3
|
+
Object.defineProperty(obj, key, {
|
|
4
|
+
value: value,
|
|
5
|
+
enumerable: true,
|
|
6
|
+
configurable: true,
|
|
7
|
+
writable: true
|
|
8
|
+
});
|
|
9
|
+
} else {
|
|
10
|
+
obj[key] = value;
|
|
11
|
+
}
|
|
12
|
+
return obj;
|
|
13
|
+
}
|
|
14
|
+
function _object_spread(target) {
|
|
15
|
+
for(var i = 1; i < arguments.length; i++){
|
|
16
|
+
var source = arguments[i] != null ? arguments[i] : {};
|
|
17
|
+
var ownKeys = Object.keys(source);
|
|
18
|
+
if (typeof Object.getOwnPropertySymbols === "function") {
|
|
19
|
+
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
|
|
20
|
+
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
|
|
21
|
+
}));
|
|
22
|
+
}
|
|
23
|
+
ownKeys.forEach(function(key) {
|
|
24
|
+
_define_property(target, key, source[key]);
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
return target;
|
|
28
|
+
}
|
|
29
|
+
function ownKeys(object, enumerableOnly) {
|
|
30
|
+
var keys = Object.keys(object);
|
|
31
|
+
if (Object.getOwnPropertySymbols) {
|
|
32
|
+
var symbols = Object.getOwnPropertySymbols(object);
|
|
33
|
+
if (enumerableOnly) {
|
|
34
|
+
symbols = symbols.filter(function(sym) {
|
|
35
|
+
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
keys.push.apply(keys, symbols);
|
|
39
|
+
}
|
|
40
|
+
return keys;
|
|
41
|
+
}
|
|
42
|
+
function _object_spread_props(target, source) {
|
|
43
|
+
source = source != null ? source : {};
|
|
44
|
+
if (Object.getOwnPropertyDescriptors) {
|
|
45
|
+
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
|
|
46
|
+
} else {
|
|
47
|
+
ownKeys(Object(source)).forEach(function(key) {
|
|
48
|
+
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
return target;
|
|
52
|
+
}
|
|
53
|
+
function _object_without_properties(source, excluded) {
|
|
54
|
+
if (source == null) return {};
|
|
55
|
+
var target = {}, sourceKeys, key, i;
|
|
56
|
+
if (typeof Reflect !== "undefined" && Reflect.ownKeys) {
|
|
57
|
+
sourceKeys = Reflect.ownKeys(source);
|
|
58
|
+
for(i = 0; i < sourceKeys.length; i++){
|
|
59
|
+
key = sourceKeys[i];
|
|
60
|
+
if (excluded.indexOf(key) >= 0) continue;
|
|
61
|
+
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
|
|
62
|
+
target[key] = source[key];
|
|
63
|
+
}
|
|
64
|
+
return target;
|
|
65
|
+
}
|
|
66
|
+
target = _object_without_properties_loose(source, excluded);
|
|
67
|
+
if (Object.getOwnPropertySymbols) {
|
|
68
|
+
sourceKeys = Object.getOwnPropertySymbols(source);
|
|
69
|
+
for(i = 0; i < sourceKeys.length; i++){
|
|
70
|
+
key = sourceKeys[i];
|
|
71
|
+
if (excluded.indexOf(key) >= 0) continue;
|
|
72
|
+
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
|
|
73
|
+
target[key] = source[key];
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return target;
|
|
77
|
+
}
|
|
78
|
+
function _object_without_properties_loose(source, excluded) {
|
|
79
|
+
if (source == null) return {};
|
|
80
|
+
var target = {}, sourceKeys = Object.getOwnPropertyNames(source), key, i;
|
|
81
|
+
for(i = 0; i < sourceKeys.length; i++){
|
|
82
|
+
key = sourceKeys[i];
|
|
83
|
+
if (excluded.indexOf(key) >= 0) continue;
|
|
84
|
+
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
|
|
85
|
+
target[key] = source[key];
|
|
86
|
+
}
|
|
87
|
+
return target;
|
|
88
|
+
}
|
|
89
|
+
import { mapOpenAIMessagesToMessageBubbleData } from "./mapOpenAIMessages";
|
|
90
|
+
import { normalizeOpenClawMessagesToOpenAI } from "./normalizeOpenClawMessages";
|
|
91
|
+
/**
|
|
92
|
+
* 将 OpenClaw 会话 / transcript 风格的 `messages` 转为 `MessageBubbleData[]`
|
|
93
|
+
*(内部先归一化为 OpenAI 形状再复用 {@link mapOpenAIMessagesToMessageBubbleData})。
|
|
94
|
+
*/ export function mapOpenClawMessagesToMessageBubbleData(messages, options, mapMessage) {
|
|
95
|
+
var openai = normalizeOpenClawMessagesToOpenAI(messages);
|
|
96
|
+
var _ref = options !== null && options !== void 0 ? options : {}, _ref_useOpenClawTimestamps = _ref.useOpenClawTimestamps, useOpenClawTimestamps = _ref_useOpenClawTimestamps === void 0 ? true : _ref_useOpenClawTimestamps, _ref_preserveOpenClawRawInExtra = _ref.preserveOpenClawRawInExtra, preserveOpenClawRawInExtra = _ref_preserveOpenClawRawInExtra === void 0 ? true : _ref_preserveOpenClawRawInExtra, rest = _object_without_properties(_ref, [
|
|
97
|
+
"useOpenClawTimestamps",
|
|
98
|
+
"preserveOpenClawRawInExtra"
|
|
99
|
+
]);
|
|
100
|
+
if (!useOpenClawTimestamps && !preserveOpenClawRawInExtra && !mapMessage) {
|
|
101
|
+
return mapOpenAIMessagesToMessageBubbleData(openai, rest);
|
|
102
|
+
}
|
|
103
|
+
var innerMap = function innerMap(msg, index, draft) {
|
|
104
|
+
var d = draft;
|
|
105
|
+
var rawClaw = messages[index];
|
|
106
|
+
if (useOpenClawTimestamps && rawClaw && typeof rawClaw.timestamp === 'number' && Number.isFinite(rawClaw.timestamp)) {
|
|
107
|
+
d = _object_spread_props(_object_spread({}, d), {
|
|
108
|
+
createAt: rawClaw.timestamp,
|
|
109
|
+
updateAt: rawClaw.timestamp
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
if (preserveOpenClawRawInExtra && rawClaw) {
|
|
113
|
+
d = _object_spread_props(_object_spread({}, d), {
|
|
114
|
+
extra: _object_spread_props(_object_spread({}, d.extra), {
|
|
115
|
+
openclaw: {
|
|
116
|
+
raw: rawClaw
|
|
117
|
+
}
|
|
118
|
+
})
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
if (mapMessage) {
|
|
122
|
+
d = mapMessage(msg, index, d);
|
|
123
|
+
}
|
|
124
|
+
return d;
|
|
125
|
+
};
|
|
126
|
+
return mapOpenAIMessagesToMessageBubbleData(openai, rest, innerMap);
|
|
127
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { OpenAIChatMessage } from './types';
|
|
2
|
+
import type { OllamaChatMessage } from './ollamaTypes';
|
|
3
|
+
/**
|
|
4
|
+
* 将单条 Ollama `ChatMessage` 转为 {@link OpenAIChatMessage},供统一映射层使用。
|
|
5
|
+
*/
|
|
6
|
+
export declare function normalizeOllamaMessageToOpenAI(msg: OllamaChatMessage, options?: {
|
|
7
|
+
appendThinkingToContent?: boolean;
|
|
8
|
+
appendImagesPlaceholder?: boolean;
|
|
9
|
+
}): OpenAIChatMessage;
|
|
10
|
+
/**
|
|
11
|
+
* 批量将 Ollama `messages` 转为 OpenAI 形状
|
|
12
|
+
*/
|
|
13
|
+
export declare function normalizeOllamaMessagesToOpenAI(messages: OllamaChatMessage[], options?: {
|
|
14
|
+
appendThinkingToContent?: boolean;
|
|
15
|
+
appendImagesPlaceholder?: boolean;
|
|
16
|
+
}): OpenAIChatMessage[];
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
function _define_property(obj, key, value) {
|
|
2
|
+
if (key in obj) {
|
|
3
|
+
Object.defineProperty(obj, key, {
|
|
4
|
+
value: value,
|
|
5
|
+
enumerable: true,
|
|
6
|
+
configurable: true,
|
|
7
|
+
writable: true
|
|
8
|
+
});
|
|
9
|
+
} else {
|
|
10
|
+
obj[key] = value;
|
|
11
|
+
}
|
|
12
|
+
return obj;
|
|
13
|
+
}
|
|
14
|
+
function _object_spread(target) {
|
|
15
|
+
for(var i = 1; i < arguments.length; i++){
|
|
16
|
+
var source = arguments[i] != null ? arguments[i] : {};
|
|
17
|
+
var ownKeys = Object.keys(source);
|
|
18
|
+
if (typeof Object.getOwnPropertySymbols === "function") {
|
|
19
|
+
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
|
|
20
|
+
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
|
|
21
|
+
}));
|
|
22
|
+
}
|
|
23
|
+
ownKeys.forEach(function(key) {
|
|
24
|
+
_define_property(target, key, source[key]);
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
return target;
|
|
28
|
+
}
|
|
29
|
+
function ownKeys(object, enumerableOnly) {
|
|
30
|
+
var keys = Object.keys(object);
|
|
31
|
+
if (Object.getOwnPropertySymbols) {
|
|
32
|
+
var symbols = Object.getOwnPropertySymbols(object);
|
|
33
|
+
if (enumerableOnly) {
|
|
34
|
+
symbols = symbols.filter(function(sym) {
|
|
35
|
+
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
keys.push.apply(keys, symbols);
|
|
39
|
+
}
|
|
40
|
+
return keys;
|
|
41
|
+
}
|
|
42
|
+
function _object_spread_props(target, source) {
|
|
43
|
+
source = source != null ? source : {};
|
|
44
|
+
if (Object.getOwnPropertyDescriptors) {
|
|
45
|
+
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
|
|
46
|
+
} else {
|
|
47
|
+
ownKeys(Object(source)).forEach(function(key) {
|
|
48
|
+
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
return target;
|
|
52
|
+
}
|
|
53
|
+
function buildDisplayContent(msg, appendThinking, appendImagesPlaceholder) {
|
|
54
|
+
var _msg_content;
|
|
55
|
+
var text = (_msg_content = msg.content) !== null && _msg_content !== void 0 ? _msg_content : '';
|
|
56
|
+
if (appendThinking && msg.thinking) {
|
|
57
|
+
text += "".concat(text ? '\n\n' : '', "[thinking]\n").concat(msg.thinking);
|
|
58
|
+
}
|
|
59
|
+
if (appendImagesPlaceholder && msg.images && msg.images.length > 0) {
|
|
60
|
+
text += "".concat(text ? '\n\n' : '', "[images: ").concat(msg.images.length, " attached]");
|
|
61
|
+
}
|
|
62
|
+
return text;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* 将单条 Ollama `ChatMessage` 转为 {@link OpenAIChatMessage},供统一映射层使用。
|
|
66
|
+
*/ export function normalizeOllamaMessageToOpenAI(msg, options) {
|
|
67
|
+
var appendThinking = (options === null || options === void 0 ? void 0 : options.appendThinkingToContent) !== false;
|
|
68
|
+
var appendImages = (options === null || options === void 0 ? void 0 : options.appendImagesPlaceholder) !== false;
|
|
69
|
+
var content = buildDisplayContent(msg, appendThinking, appendImages);
|
|
70
|
+
var base = {
|
|
71
|
+
id: msg.id
|
|
72
|
+
};
|
|
73
|
+
if (msg.role === 'assistant') {
|
|
74
|
+
var _msg_tool_calls;
|
|
75
|
+
return _object_spread(_object_spread_props(_object_spread({}, base), {
|
|
76
|
+
role: 'assistant',
|
|
77
|
+
content: content
|
|
78
|
+
}), ((_msg_tool_calls = msg.tool_calls) === null || _msg_tool_calls === void 0 ? void 0 : _msg_tool_calls.length) ? {
|
|
79
|
+
tool_calls: msg.tool_calls
|
|
80
|
+
} : {});
|
|
81
|
+
}
|
|
82
|
+
if (msg.role === 'tool') {
|
|
83
|
+
var prefix = msg.tool_name ? "[tool_name: ".concat(msg.tool_name, "]\n") : '';
|
|
84
|
+
return _object_spread(_object_spread_props(_object_spread({}, base), {
|
|
85
|
+
role: 'tool',
|
|
86
|
+
content: prefix + content
|
|
87
|
+
}), msg.tool_call_id ? {
|
|
88
|
+
tool_call_id: msg.tool_call_id
|
|
89
|
+
} : {}, msg.tool_name ? {
|
|
90
|
+
name: msg.tool_name
|
|
91
|
+
} : {});
|
|
92
|
+
}
|
|
93
|
+
if (msg.role === 'system') {
|
|
94
|
+
return _object_spread_props(_object_spread({}, base), {
|
|
95
|
+
role: 'system',
|
|
96
|
+
content: content
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
return _object_spread_props(_object_spread({}, base), {
|
|
100
|
+
role: 'user',
|
|
101
|
+
content: content
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* 批量将 Ollama `messages` 转为 OpenAI 形状
|
|
106
|
+
*/ export function normalizeOllamaMessagesToOpenAI(messages, options) {
|
|
107
|
+
return messages.map(function(m) {
|
|
108
|
+
return normalizeOllamaMessageToOpenAI(m, options);
|
|
109
|
+
});
|
|
110
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { OpenAIChatMessage } from './types';
|
|
2
|
+
import type { OpenClawChatMessage } from './openClawTypes';
|
|
3
|
+
/**
|
|
4
|
+
* 将单条 OpenClaw 风格消息转为可与 {@link mapOpenAIMessagesToMessageBubbleData} 兼容的 OpenAI 形状(`toolResult` → `tool`)。
|
|
5
|
+
*/
|
|
6
|
+
export declare function normalizeOpenClawMessageToOpenAI(msg: OpenClawChatMessage): OpenAIChatMessage;
|
|
7
|
+
/**
|
|
8
|
+
* 批量将 OpenClaw transcript 消息转为 OpenAI Chat Completions 兼容结构
|
|
9
|
+
*/
|
|
10
|
+
export declare function normalizeOpenClawMessagesToOpenAI(messages: OpenClawChatMessage[]): OpenAIChatMessage[];
|