veryfront 0.1.342 → 0.1.344
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/esm/deno.js +1 -1
- package/esm/src/agent/fork-runtime-stream.d.ts +25 -8
- package/esm/src/agent/fork-runtime-stream.d.ts.map +1 -1
- package/esm/src/agent/fork-runtime-stream.js +33 -10
- package/esm/src/agent/index.d.ts +1 -1
- package/esm/src/agent/index.d.ts.map +1 -1
- package/esm/src/agent/index.js +1 -1
- package/esm/src/agent/runtime/index.js +3 -3
- package/esm/src/agent/runtime/runtime-tool-types.d.ts +2 -2
- package/esm/src/agent/runtime/runtime-tool-types.d.ts.map +1 -1
- package/esm/src/agent/runtime/text-generation-runtime-message-converter.d.ts +19 -0
- package/esm/src/agent/runtime/text-generation-runtime-message-converter.d.ts.map +1 -0
- package/esm/src/agent/runtime/{model-message-converter.js → text-generation-runtime-message-converter.js} +18 -15
- package/esm/src/agent/runtime/text-generation-runtime-message-types.d.ts +44 -0
- package/esm/src/agent/runtime/text-generation-runtime-message-types.d.ts.map +1 -0
- package/esm/src/agent/runtime/{model-runtime-types.js → text-generation-runtime-message-types.js} +1 -1
- package/esm/src/chat/conversation.d.ts +7 -3
- package/esm/src/chat/conversation.d.ts.map +1 -1
- package/esm/src/chat/conversation.js +5 -1
- package/esm/src/chat/message-prep.d.ts +19 -12
- package/esm/src/chat/message-prep.d.ts.map +1 -1
- package/esm/src/chat/message-prep.js +14 -7
- package/esm/src/chat/types.d.ts +3 -0
- package/esm/src/chat/types.d.ts.map +1 -1
- package/esm/src/runtime/runtime-bridge.d.ts +3 -3
- package/esm/src/runtime/runtime-bridge.d.ts.map +1 -1
- package/esm/src/utils/version-constant.d.ts +1 -1
- package/esm/src/utils/version-constant.js +1 -1
- package/package.json +1 -1
- package/src/deno.js +1 -1
- package/src/deps/esm.sh/@types/react-dom@19.2.3/client.d.ts +1 -1
- package/src/deps/esm.sh/@types/{react@19.2.3 → react@19.2.14}/global.d.ts +1 -0
- package/src/deps/esm.sh/@types/{react@19.2.3 → react@19.2.14}/index.d.ts +93 -24
- package/src/deps/esm.sh/react-dom@19.2.4/client.d.ts +1 -1
- package/src/src/agent/fork-runtime-stream.ts +63 -18
- package/src/src/agent/index.ts +6 -0
- package/src/src/agent/runtime/index.ts +3 -3
- package/src/src/agent/runtime/runtime-tool-types.ts +2 -2
- package/src/src/agent/runtime/{model-message-converter.ts → text-generation-runtime-message-converter.ts} +33 -25
- package/src/src/agent/runtime/text-generation-runtime-message-types.ts +55 -0
- package/src/src/chat/conversation.ts +14 -7
- package/src/src/chat/message-prep.ts +39 -27
- package/src/src/chat/types.ts +3 -0
- package/src/src/runtime/runtime-bridge.ts +4 -4
- package/src/src/utils/version-constant.ts +1 -1
- package/esm/src/agent/runtime/model-message-converter.d.ts +0 -19
- package/esm/src/agent/runtime/model-message-converter.d.ts.map +0 -1
- package/esm/src/agent/runtime/model-runtime-types.d.ts +0 -44
- package/esm/src/agent/runtime/model-runtime-types.d.ts.map +0 -1
- package/src/src/agent/runtime/model-runtime-types.ts +0 -55
|
@@ -33,7 +33,7 @@ import {
|
|
|
33
33
|
setSpanAttributes,
|
|
34
34
|
withSpan,
|
|
35
35
|
} from "../../observability/tracing/index.js";
|
|
36
|
-
import {
|
|
36
|
+
import { convertToTextGenerationRuntimeMessages } from "./text-generation-runtime-message-converter.js";
|
|
37
37
|
import { convertToolsToRuntimeTools } from "./model-tool-converter.js";
|
|
38
38
|
import { resolveProviderOptionsWithDefaults } from "./default-provider-options.js";
|
|
39
39
|
import {
|
|
@@ -789,7 +789,7 @@ export class AgentRuntime {
|
|
|
789
789
|
return generateText({
|
|
790
790
|
model: languageModel,
|
|
791
791
|
system: currentSystemPrompt,
|
|
792
|
-
messages:
|
|
792
|
+
messages: convertToTextGenerationRuntimeMessages(currentMessages),
|
|
793
793
|
tools: convertToolsToRuntimeTools(tools, {
|
|
794
794
|
model: effectiveModel,
|
|
795
795
|
allowedToolNames: allowedRemoteToolNames,
|
|
@@ -1069,7 +1069,7 @@ export class AgentRuntime {
|
|
|
1069
1069
|
const result = streamText({
|
|
1070
1070
|
model: languageModel,
|
|
1071
1071
|
system: currentSystemPrompt,
|
|
1072
|
-
messages:
|
|
1072
|
+
messages: convertToTextGenerationRuntimeMessages(currentMessages),
|
|
1073
1073
|
tools: convertToolsToRuntimeTools(tools, {
|
|
1074
1074
|
model: effectiveModel,
|
|
1075
1075
|
allowedToolNames: allowedRemoteToolNames,
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* boundary. These cover only the shapes the framework consumes today.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import type {
|
|
8
|
+
import type { TextGenerationRuntimeMessage } from "./text-generation-runtime-message-types.js";
|
|
9
9
|
|
|
10
10
|
export type RuntimeToolSet = Record<string, unknown>;
|
|
11
11
|
|
|
@@ -47,7 +47,7 @@ export interface RuntimeRepairToolCall {
|
|
|
47
47
|
export interface RuntimeToolCallRepairContext {
|
|
48
48
|
error: unknown;
|
|
49
49
|
inputSchema: (...args: unknown[]) => unknown;
|
|
50
|
-
messages:
|
|
50
|
+
messages: TextGenerationRuntimeMessage[];
|
|
51
51
|
system?: string;
|
|
52
52
|
toolCall: RuntimeRepairToolCall;
|
|
53
53
|
tools: RuntimeToolSet;
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Text-Generation Runtime Message Converter
|
|
3
3
|
*
|
|
4
4
|
* Converts between veryfront's internal Message format and the current
|
|
5
|
-
*
|
|
5
|
+
* text-generation runtime message format.
|
|
6
6
|
*
|
|
7
|
-
* @module ai/agent/runtime/
|
|
7
|
+
* @module ai/agent/runtime/text-generation-runtime-message-converter
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
import type {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
} from "./
|
|
11
|
+
TextGenerationRuntimeAssistantMessage,
|
|
12
|
+
TextGenerationRuntimeMessage,
|
|
13
|
+
TextGenerationRuntimeTextPart,
|
|
14
|
+
TextGenerationRuntimeToolCallPart,
|
|
15
|
+
TextGenerationRuntimeToolMessage,
|
|
16
|
+
} from "./text-generation-runtime-message-types.js";
|
|
17
17
|
import {
|
|
18
18
|
getTextFromParts,
|
|
19
19
|
getToolArguments,
|
|
@@ -23,9 +23,9 @@ import {
|
|
|
23
23
|
} from "../types.js";
|
|
24
24
|
|
|
25
25
|
/**
|
|
26
|
-
* Convert a veryfront Message to the current
|
|
26
|
+
* Convert a veryfront Message to the current text-generation runtime message format.
|
|
27
27
|
*/
|
|
28
|
-
export function
|
|
28
|
+
export function convertToTextGenerationRuntimeMessage(msg: Message): TextGenerationRuntimeMessage {
|
|
29
29
|
switch (msg.role) {
|
|
30
30
|
case "system": {
|
|
31
31
|
const text = getTextFromParts(msg.parts);
|
|
@@ -38,7 +38,7 @@ export function convertToModelMessage(msg: Message): ModelRuntimeMessage {
|
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
case "assistant": {
|
|
41
|
-
const content: Array<
|
|
41
|
+
const content: Array<TextGenerationRuntimeTextPart | TextGenerationRuntimeToolCallPart> = [];
|
|
42
42
|
|
|
43
43
|
for (const part of msg.parts) {
|
|
44
44
|
if (part.type === "text" && "text" in part) {
|
|
@@ -66,12 +66,15 @@ export function convertToModelMessage(msg: Message): ModelRuntimeMessage {
|
|
|
66
66
|
content.push({ type: "text", text: "" });
|
|
67
67
|
}
|
|
68
68
|
|
|
69
|
-
const assistantMessage:
|
|
69
|
+
const assistantMessage: TextGenerationRuntimeAssistantMessage = {
|
|
70
|
+
role: "assistant",
|
|
71
|
+
content,
|
|
72
|
+
};
|
|
70
73
|
return assistantMessage;
|
|
71
74
|
}
|
|
72
75
|
|
|
73
76
|
case "tool": {
|
|
74
|
-
const content:
|
|
77
|
+
const content: TextGenerationRuntimeToolMessage["content"] = [];
|
|
75
78
|
|
|
76
79
|
for (const part of msg.parts) {
|
|
77
80
|
if (part.type !== "tool-result") continue;
|
|
@@ -85,7 +88,7 @@ export function convertToModelMessage(msg: Message): ModelRuntimeMessage {
|
|
|
85
88
|
});
|
|
86
89
|
}
|
|
87
90
|
|
|
88
|
-
const toolMessage:
|
|
91
|
+
const toolMessage: TextGenerationRuntimeToolMessage = { role: "tool", content };
|
|
89
92
|
return toolMessage;
|
|
90
93
|
}
|
|
91
94
|
|
|
@@ -99,7 +102,7 @@ export function convertToModelMessage(msg: Message): ModelRuntimeMessage {
|
|
|
99
102
|
|
|
100
103
|
function convertToolResultPart(
|
|
101
104
|
part: ToolResultPart,
|
|
102
|
-
):
|
|
105
|
+
): TextGenerationRuntimeToolMessage {
|
|
103
106
|
return {
|
|
104
107
|
role: "tool",
|
|
105
108
|
content: [{
|
|
@@ -112,15 +115,17 @@ function convertToolResultPart(
|
|
|
112
115
|
}
|
|
113
116
|
|
|
114
117
|
/**
|
|
115
|
-
* Convert an array of veryfront Messages to the current
|
|
118
|
+
* Convert an array of veryfront Messages to the current text-generation runtime message format.
|
|
116
119
|
*/
|
|
117
|
-
export function
|
|
118
|
-
|
|
120
|
+
export function convertToTextGenerationRuntimeMessages(
|
|
121
|
+
messages: Message[],
|
|
122
|
+
): TextGenerationRuntimeMessage[] {
|
|
123
|
+
const textGenerationRuntimeMessages: TextGenerationRuntimeMessage[] = [];
|
|
119
124
|
const toolResultMessageIndexes = new Map<string, number>();
|
|
120
125
|
|
|
121
126
|
for (const message of messages) {
|
|
122
127
|
if (message.role !== "tool") {
|
|
123
|
-
|
|
128
|
+
textGenerationRuntimeMessages.push(convertToTextGenerationRuntimeMessage(message));
|
|
124
129
|
continue;
|
|
125
130
|
}
|
|
126
131
|
|
|
@@ -129,7 +134,7 @@ export function convertToModelMessages(messages: Message[]): ModelRuntimeMessage
|
|
|
129
134
|
);
|
|
130
135
|
|
|
131
136
|
if (toolResultParts.length === 0) {
|
|
132
|
-
|
|
137
|
+
textGenerationRuntimeMessages.push(convertToTextGenerationRuntimeMessage(message));
|
|
133
138
|
continue;
|
|
134
139
|
}
|
|
135
140
|
|
|
@@ -138,14 +143,17 @@ export function convertToModelMessages(messages: Message[]): ModelRuntimeMessage
|
|
|
138
143
|
const existingIndex = toolResultMessageIndexes.get(toolResultPart.toolCallId);
|
|
139
144
|
|
|
140
145
|
if (existingIndex === undefined) {
|
|
141
|
-
toolResultMessageIndexes.set(
|
|
142
|
-
|
|
146
|
+
toolResultMessageIndexes.set(
|
|
147
|
+
toolResultPart.toolCallId,
|
|
148
|
+
textGenerationRuntimeMessages.length,
|
|
149
|
+
);
|
|
150
|
+
textGenerationRuntimeMessages.push(toolResultMessage);
|
|
143
151
|
continue;
|
|
144
152
|
}
|
|
145
153
|
|
|
146
|
-
|
|
154
|
+
textGenerationRuntimeMessages[existingIndex] = toolResultMessage;
|
|
147
155
|
}
|
|
148
156
|
}
|
|
149
157
|
|
|
150
|
-
return
|
|
158
|
+
return textGenerationRuntimeMessages;
|
|
151
159
|
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Text-Generation Runtime Message Types
|
|
3
|
+
*
|
|
4
|
+
* Framework-owned message types for the current text-generation runtime
|
|
5
|
+
* boundary. These describe the subset of message shapes the runtime uses
|
|
6
|
+
* today without exposing SDK-owned message contracts upward.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
export interface TextGenerationRuntimeTextPart {
|
|
10
|
+
type: "text";
|
|
11
|
+
text: string;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export interface TextGenerationRuntimeToolCallPart {
|
|
15
|
+
type: "tool-call";
|
|
16
|
+
toolCallId: string;
|
|
17
|
+
toolName: string;
|
|
18
|
+
input: Record<string, unknown>;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export interface TextGenerationRuntimeToolResultPart {
|
|
22
|
+
type: "tool-result";
|
|
23
|
+
toolCallId: string;
|
|
24
|
+
toolName: string;
|
|
25
|
+
output: {
|
|
26
|
+
type: "json";
|
|
27
|
+
value: unknown;
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export interface TextGenerationRuntimeSystemMessage {
|
|
32
|
+
role: "system";
|
|
33
|
+
content: string;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export interface TextGenerationRuntimeUserMessage {
|
|
37
|
+
role: "user";
|
|
38
|
+
content: string;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export interface TextGenerationRuntimeAssistantMessage {
|
|
42
|
+
role: "assistant";
|
|
43
|
+
content: Array<TextGenerationRuntimeTextPart | TextGenerationRuntimeToolCallPart>;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export interface TextGenerationRuntimeToolMessage {
|
|
47
|
+
role: "tool";
|
|
48
|
+
content: TextGenerationRuntimeToolResultPart[];
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export type TextGenerationRuntimeMessage =
|
|
52
|
+
| TextGenerationRuntimeSystemMessage
|
|
53
|
+
| TextGenerationRuntimeUserMessage
|
|
54
|
+
| TextGenerationRuntimeAssistantMessage
|
|
55
|
+
| TextGenerationRuntimeToolMessage;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import "../../_dnt.polyfills.js";
|
|
2
2
|
import { z } from "zod";
|
|
3
|
-
import type {
|
|
3
|
+
import type { ChatUiMessage, ChatUiMessagePart, ProviderModelMessage } from "./types.js";
|
|
4
4
|
|
|
5
5
|
const textPartSchema = z.object({ type: z.literal("text"), text: z.string() });
|
|
6
6
|
const imagePartSchema = z.object({
|
|
@@ -470,7 +470,7 @@ export function isReasoningPart(value: unknown): value is ReasoningPartLike {
|
|
|
470
470
|
return isRecord(value) && value.type === "reasoning" && typeof value.text === "string";
|
|
471
471
|
}
|
|
472
472
|
|
|
473
|
-
export function extractTextFromMessage(message:
|
|
473
|
+
export function extractTextFromMessage(message: ProviderModelMessage): string {
|
|
474
474
|
if (!message || !message.content) return "";
|
|
475
475
|
|
|
476
476
|
const { content } = message;
|
|
@@ -704,7 +704,7 @@ function buildToolResultOutput(toolPart: { state: string; output?: unknown; erro
|
|
|
704
704
|
return null;
|
|
705
705
|
}
|
|
706
706
|
|
|
707
|
-
function convertSystemMessage(message: ChatUiMessage):
|
|
707
|
+
function convertSystemMessage(message: ChatUiMessage): ProviderModelMessage[] {
|
|
708
708
|
const content = message.parts.flatMap((part) => (isTextPart(part) ? [part.text] : [])).join("");
|
|
709
709
|
if (content.length === 0) {
|
|
710
710
|
return [];
|
|
@@ -718,7 +718,7 @@ function convertSystemMessage(message: ChatUiMessage): ChatModelMessage[] {
|
|
|
718
718
|
];
|
|
719
719
|
}
|
|
720
720
|
|
|
721
|
-
function convertUserMessage(message: ChatUiMessage):
|
|
721
|
+
function convertUserMessage(message: ChatUiMessage): ProviderModelMessage[] {
|
|
722
722
|
const content: Array<
|
|
723
723
|
{ type: "text"; text: string } | {
|
|
724
724
|
type: "file";
|
|
@@ -752,7 +752,7 @@ function convertUserMessage(message: ChatUiMessage): ChatModelMessage[] {
|
|
|
752
752
|
];
|
|
753
753
|
}
|
|
754
754
|
|
|
755
|
-
function convertAssistantMessage(message: ChatUiMessage):
|
|
755
|
+
function convertAssistantMessage(message: ChatUiMessage): ProviderModelMessage[] {
|
|
756
756
|
const rawToolNamesById = buildRawToolNameMap(message.parts);
|
|
757
757
|
const assistantContent: Array<
|
|
758
758
|
| { type: "text"; text: string }
|
|
@@ -776,7 +776,7 @@ function convertAssistantMessage(message: ChatUiMessage): ChatModelMessage[] {
|
|
|
776
776
|
};
|
|
777
777
|
}> = [];
|
|
778
778
|
const pendingToolCallIds = new Set<string>();
|
|
779
|
-
const messages:
|
|
779
|
+
const messages: ProviderModelMessage[] = [];
|
|
780
780
|
|
|
781
781
|
const flushAssistantMessage = (content: typeof assistantContent) => {
|
|
782
782
|
if (content.length === 0) {
|
|
@@ -915,7 +915,9 @@ function convertAssistantMessage(message: ChatUiMessage): ChatModelMessage[] {
|
|
|
915
915
|
return messages;
|
|
916
916
|
}
|
|
917
917
|
|
|
918
|
-
export function
|
|
918
|
+
export function convertUiMessagesToProviderModelMessages(
|
|
919
|
+
messages: ChatUiMessage[],
|
|
920
|
+
): ProviderModelMessage[] {
|
|
919
921
|
return messages.flatMap((message) => {
|
|
920
922
|
switch (message.role) {
|
|
921
923
|
case "system":
|
|
@@ -929,3 +931,8 @@ export function convertUiMessagesToModelMessages(messages: ChatUiMessage[]): Cha
|
|
|
929
931
|
}
|
|
930
932
|
});
|
|
931
933
|
}
|
|
934
|
+
|
|
935
|
+
/**
|
|
936
|
+
* @deprecated Use convertUiMessagesToProviderModelMessages for provider-facing model payloads.
|
|
937
|
+
*/
|
|
938
|
+
export const convertUiMessagesToModelMessages = convertUiMessagesToProviderModelMessages;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import "../../_dnt.polyfills.js";
|
|
2
2
|
import {
|
|
3
|
-
|
|
3
|
+
convertUiMessagesToProviderModelMessages,
|
|
4
4
|
getStringField,
|
|
5
5
|
isReasoningPart,
|
|
6
6
|
isToolCallPart,
|
|
@@ -8,12 +8,12 @@ import {
|
|
|
8
8
|
} from "./conversation.js";
|
|
9
9
|
import {
|
|
10
10
|
buildDataFileAnnotation,
|
|
11
|
-
type ChatModelMessage,
|
|
12
11
|
type ChatToolResultOutput,
|
|
13
12
|
type ChatToolResultPart,
|
|
14
13
|
type ChatUiMessage,
|
|
15
14
|
type ChatUiMessagePart,
|
|
16
15
|
normalizeInlineAttachmentMediaType,
|
|
16
|
+
type ProviderModelMessage,
|
|
17
17
|
type UploadedFileReference,
|
|
18
18
|
} from "./types.js";
|
|
19
19
|
|
|
@@ -29,10 +29,10 @@ function truncate(text: string, maxLen: number): string {
|
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
export function compressTurn(
|
|
32
|
-
messages:
|
|
32
|
+
messages: ProviderModelMessage[],
|
|
33
33
|
startIdx: number,
|
|
34
34
|
endIdx: number,
|
|
35
|
-
):
|
|
35
|
+
): ProviderModelMessage[] {
|
|
36
36
|
let userQuery = "";
|
|
37
37
|
const toolNames: string[] = [];
|
|
38
38
|
let assistantConclusion = "";
|
|
@@ -72,7 +72,7 @@ interface TurnWindow {
|
|
|
72
72
|
compressed?: boolean;
|
|
73
73
|
}
|
|
74
74
|
|
|
75
|
-
function collectTurns(messages:
|
|
75
|
+
function collectTurns(messages: ProviderModelMessage[]): TurnWindow[] {
|
|
76
76
|
const turns: TurnWindow[] = [];
|
|
77
77
|
let currentTurn: TurnWindow | null = null;
|
|
78
78
|
|
|
@@ -98,10 +98,10 @@ function collectTurns(messages: ChatModelMessage[]): TurnWindow[] {
|
|
|
98
98
|
}
|
|
99
99
|
|
|
100
100
|
export function enforceTokenBudgetWithTurnCompression(
|
|
101
|
-
messages:
|
|
101
|
+
messages: ProviderModelMessage[],
|
|
102
102
|
budget: number,
|
|
103
103
|
overhead: number,
|
|
104
|
-
):
|
|
104
|
+
): ProviderModelMessage[] {
|
|
105
105
|
const effectiveBudget = budget - overhead;
|
|
106
106
|
let totalTokens = messages.reduce((sum, message) => sum + estimateTokens(message.content), 0);
|
|
107
107
|
if (totalTokens <= effectiveBudget) return messages;
|
|
@@ -337,7 +337,7 @@ function isKeepableModelPart(part: unknown, includeReasoning: boolean): boolean
|
|
|
337
337
|
}
|
|
338
338
|
}
|
|
339
339
|
|
|
340
|
-
function hasValidContent(message:
|
|
340
|
+
function hasValidContent(message: ProviderModelMessage): boolean {
|
|
341
341
|
const content = message.content;
|
|
342
342
|
|
|
343
343
|
if (content === undefined || content === null) return false;
|
|
@@ -351,8 +351,10 @@ function cleanContent<T>(content: T[]): T[] {
|
|
|
351
351
|
return content.filter((part) => isKeepableModelPart(part, hasSubstantiveContent));
|
|
352
352
|
}
|
|
353
353
|
|
|
354
|
-
export function
|
|
355
|
-
|
|
354
|
+
export function sanitizeProviderModelMessages(
|
|
355
|
+
messages: ProviderModelMessage[],
|
|
356
|
+
): ProviderModelMessage[] {
|
|
357
|
+
const result: ProviderModelMessage[] = [];
|
|
356
358
|
|
|
357
359
|
for (const message of messages) {
|
|
358
360
|
if (Array.isArray(message.content)) {
|
|
@@ -377,7 +379,12 @@ export function sanitizeModelMessages(messages: ChatModelMessage[]): ChatModelMe
|
|
|
377
379
|
return result;
|
|
378
380
|
}
|
|
379
381
|
|
|
380
|
-
|
|
382
|
+
/**
|
|
383
|
+
* @deprecated Use sanitizeProviderModelMessages for provider-facing model payloads.
|
|
384
|
+
*/
|
|
385
|
+
export const sanitizeModelMessages = sanitizeProviderModelMessages;
|
|
386
|
+
|
|
387
|
+
function filterValidMessages(messages: ProviderModelMessage[]): ProviderModelMessage[] {
|
|
381
388
|
return messages.filter((message) => {
|
|
382
389
|
const content = message.content;
|
|
383
390
|
if (content === undefined || content === null) return false;
|
|
@@ -387,23 +394,25 @@ function filterValidMessages(messages: ChatModelMessage[]): ChatModelMessage[] {
|
|
|
387
394
|
});
|
|
388
395
|
}
|
|
389
396
|
|
|
390
|
-
export function
|
|
397
|
+
export function prepareProviderModelMessagesFromUiMessages(
|
|
398
|
+
messages: ChatUiMessage[],
|
|
399
|
+
): ProviderModelMessage[] {
|
|
391
400
|
const validMessages = messages.filter((message) =>
|
|
392
401
|
message && typeof message === "object" && "role" in message
|
|
393
402
|
);
|
|
394
403
|
const normalizedMessages = normalizeMessageFilePartMediaTypes(validMessages);
|
|
395
404
|
const strippedPendingToolMessages = stripPendingToolParts(normalizedMessages);
|
|
396
405
|
const rewrittenMessages = rewriteUnsupportedFilePartsAsAnnotations(strippedPendingToolMessages);
|
|
397
|
-
const
|
|
398
|
-
const patchedMessages = ensureToolCallInputs(dedupeToolHistory(
|
|
399
|
-
const sanitized =
|
|
406
|
+
const providerModelMessages = convertUiMessagesToProviderModelMessages(rewrittenMessages);
|
|
407
|
+
const patchedMessages = ensureToolCallInputs(dedupeToolHistory(providerModelMessages));
|
|
408
|
+
const sanitized = sanitizeProviderModelMessages(patchedMessages);
|
|
400
409
|
const masked = maskOldToolOutputs(sanitized);
|
|
401
410
|
const compacted = enforceTokenBudget(masked);
|
|
402
411
|
const filtered = filterValidMessages(compacted);
|
|
403
412
|
return repairToolPairs(filtered);
|
|
404
413
|
}
|
|
405
414
|
|
|
406
|
-
function buildToolCallMap(messages:
|
|
415
|
+
function buildToolCallMap(messages: ProviderModelMessage[]): Map<string, ToolCallInfo> {
|
|
407
416
|
const map = new Map<string, ToolCallInfo>();
|
|
408
417
|
|
|
409
418
|
for (const msg of messages) {
|
|
@@ -493,7 +502,7 @@ function wrapToolResultOutput(
|
|
|
493
502
|
return original;
|
|
494
503
|
}
|
|
495
504
|
|
|
496
|
-
export function maskOldToolOutputs(messages:
|
|
505
|
+
export function maskOldToolOutputs(messages: ProviderModelMessage[]): ProviderModelMessage[] {
|
|
497
506
|
let lastUserIdx = -1;
|
|
498
507
|
for (let i = messages.length - 1; i >= 0; i--) {
|
|
499
508
|
if (messages[i].role === "user") {
|
|
@@ -573,7 +582,7 @@ function createSyntheticToolResult(toolCallId: string, toolName: string): ChatTo
|
|
|
573
582
|
};
|
|
574
583
|
}
|
|
575
584
|
|
|
576
|
-
export function repairToolPairs(messages:
|
|
585
|
+
export function repairToolPairs(messages: ProviderModelMessage[]): ProviderModelMessage[] {
|
|
577
586
|
const result = [...messages];
|
|
578
587
|
let mutated = false;
|
|
579
588
|
|
|
@@ -702,7 +711,7 @@ export function repairToolPairs(messages: ChatModelMessage[]): ChatModelMessage[
|
|
|
702
711
|
content: [...repairedResults, ...nextMessage.content],
|
|
703
712
|
};
|
|
704
713
|
} else {
|
|
705
|
-
const toolMessage:
|
|
714
|
+
const toolMessage: ProviderModelMessage = {
|
|
706
715
|
role: "tool",
|
|
707
716
|
content: repairedResults,
|
|
708
717
|
};
|
|
@@ -719,7 +728,7 @@ export function estimateOverhead(instructions: unknown, toolCount: number): numb
|
|
|
719
728
|
return instructionTokens + toolCount * TOKENS_PER_TOOL;
|
|
720
729
|
}
|
|
721
730
|
|
|
722
|
-
export function ensureToolCallInputs(messages:
|
|
731
|
+
export function ensureToolCallInputs(messages: ProviderModelMessage[]): ProviderModelMessage[] {
|
|
723
732
|
let mutated = false;
|
|
724
733
|
|
|
725
734
|
const result = messages.map((msg) => {
|
|
@@ -750,9 +759,9 @@ export function ensureToolCallInputs(messages: ChatModelMessage[]): ChatModelMes
|
|
|
750
759
|
}
|
|
751
760
|
|
|
752
761
|
export function compactForStep(
|
|
753
|
-
messages:
|
|
762
|
+
messages: ProviderModelMessage[],
|
|
754
763
|
overhead: number = 0,
|
|
755
|
-
):
|
|
764
|
+
): ProviderModelMessage[] {
|
|
756
765
|
const compacted = enforceTokenBudget(
|
|
757
766
|
maskOldToolOutputs(messages),
|
|
758
767
|
DEFAULT_TOKEN_BUDGET,
|
|
@@ -769,12 +778,12 @@ export function compactForStep(
|
|
|
769
778
|
return ensureToolCallInputs(repairToolPairs(dedupeToolHistory(trimmed)));
|
|
770
779
|
}
|
|
771
780
|
|
|
772
|
-
export function dedupeToolHistory(messages:
|
|
781
|
+
export function dedupeToolHistory(messages: ProviderModelMessage[]): ProviderModelMessage[] {
|
|
773
782
|
const seenToolCallIds = new Set<string>();
|
|
774
783
|
const seenToolResultIds = new Set<string>();
|
|
775
784
|
let mutated = false;
|
|
776
785
|
|
|
777
|
-
const deduped:
|
|
786
|
+
const deduped: ProviderModelMessage[] = [];
|
|
778
787
|
|
|
779
788
|
const filterParts = <T>(parts: T[]): { filtered: T[]; changed: boolean } => {
|
|
780
789
|
const filtered = parts.filter((part) => {
|
|
@@ -830,10 +839,10 @@ export function dedupeToolHistory(messages: ChatModelMessage[]): ChatModelMessag
|
|
|
830
839
|
}
|
|
831
840
|
|
|
832
841
|
export function enforceTokenBudget(
|
|
833
|
-
messages:
|
|
842
|
+
messages: ProviderModelMessage[],
|
|
834
843
|
budget: number = DEFAULT_TOKEN_BUDGET,
|
|
835
844
|
overhead: number = 0,
|
|
836
|
-
):
|
|
845
|
+
): ProviderModelMessage[] {
|
|
837
846
|
if (messages.length === 0) {
|
|
838
847
|
return messages;
|
|
839
848
|
}
|
|
@@ -841,4 +850,7 @@ export function enforceTokenBudget(
|
|
|
841
850
|
return enforceTokenBudgetWithTurnCompression(messages, budget, overhead);
|
|
842
851
|
}
|
|
843
852
|
|
|
844
|
-
|
|
853
|
+
/**
|
|
854
|
+
* @deprecated Use prepareProviderModelMessagesFromUiMessages for provider-facing model payloads.
|
|
855
|
+
*/
|
|
856
|
+
export const prepareModelMessagesFromUiMessages = prepareProviderModelMessagesFromUiMessages;
|
package/src/src/chat/types.ts
CHANGED
|
@@ -251,6 +251,9 @@ export type ProviderModelMessage =
|
|
|
251
251
|
| ChatAssistantMessage
|
|
252
252
|
| ChatToolMessage;
|
|
253
253
|
|
|
254
|
+
/**
|
|
255
|
+
* @deprecated Use ProviderModelMessage for provider-facing model payloads.
|
|
256
|
+
*/
|
|
254
257
|
export type ChatModelMessage = ProviderModelMessage;
|
|
255
258
|
|
|
256
259
|
export interface DurableRootRunDescriptor {
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* module. Higher-level framework code imports framework-owned runtime
|
|
6
6
|
* types and calls into this bridge at the edge.
|
|
7
7
|
*/
|
|
8
|
-
import type {
|
|
8
|
+
import type { TextGenerationRuntimeMessage } from "../agent/runtime/text-generation-runtime-message-types.js";
|
|
9
9
|
import type {
|
|
10
10
|
RuntimeGenerateTextResult,
|
|
11
11
|
RuntimeStreamResult,
|
|
@@ -21,7 +21,7 @@ import type {
|
|
|
21
21
|
type GenerateTextOptions = {
|
|
22
22
|
model: ModelRuntime;
|
|
23
23
|
system?: unknown;
|
|
24
|
-
messages:
|
|
24
|
+
messages: TextGenerationRuntimeMessage[];
|
|
25
25
|
tools?: RuntimeToolSet;
|
|
26
26
|
experimental_repairToolCall?: RuntimeToolCallRepairFunction;
|
|
27
27
|
maxOutputTokens?: number;
|
|
@@ -41,7 +41,7 @@ type GenerateTextOptions = {
|
|
|
41
41
|
type StreamTextOptions = {
|
|
42
42
|
model: ModelRuntime;
|
|
43
43
|
system?: unknown;
|
|
44
|
-
messages:
|
|
44
|
+
messages: TextGenerationRuntimeMessage[];
|
|
45
45
|
tools?: RuntimeToolSet;
|
|
46
46
|
experimental_repairToolCall?: RuntimeToolCallRepairFunction;
|
|
47
47
|
maxOutputTokens?: number;
|
|
@@ -165,7 +165,7 @@ function normalizeSystemPrompt(system: GenerateTextOptions["system"]): string |
|
|
|
165
165
|
|
|
166
166
|
function toRuntimePrompt(
|
|
167
167
|
system: string | undefined,
|
|
168
|
-
messages:
|
|
168
|
+
messages: TextGenerationRuntimeMessage[],
|
|
169
169
|
): RuntimePromptMessage[] {
|
|
170
170
|
const prompt: RuntimePromptMessage[] = [];
|
|
171
171
|
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Model Message Converter
|
|
3
|
-
*
|
|
4
|
-
* Converts between veryfront's internal Message format and the current
|
|
5
|
-
* model-runtime message format.
|
|
6
|
-
*
|
|
7
|
-
* @module ai/agent/runtime/model-message-converter
|
|
8
|
-
*/
|
|
9
|
-
import type { ModelRuntimeMessage } from "./model-runtime-types.js";
|
|
10
|
-
import { type Message } from "../types.js";
|
|
11
|
-
/**
|
|
12
|
-
* Convert a veryfront Message to the current model-runtime message format.
|
|
13
|
-
*/
|
|
14
|
-
export declare function convertToModelMessage(msg: Message): ModelRuntimeMessage;
|
|
15
|
-
/**
|
|
16
|
-
* Convert an array of veryfront Messages to the current model-runtime message format.
|
|
17
|
-
*/
|
|
18
|
-
export declare function convertToModelMessages(messages: Message[]): ModelRuntimeMessage[];
|
|
19
|
-
//# sourceMappingURL=model-message-converter.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"model-message-converter.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/model-message-converter.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAEV,mBAAmB,EAIpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAGL,KAAK,OAAO,EAGb,MAAM,aAAa,CAAC;AAErB;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,mBAAmB,CAsEvE;AAgBD;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,mBAAmB,EAAE,CAkCjF"}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Model Runtime Types
|
|
3
|
-
*
|
|
4
|
-
* Framework-owned message types for the current text-generation runtime
|
|
5
|
-
* boundary. These describe the subset of message shapes the runtime uses
|
|
6
|
-
* today without exposing SDK-owned message contracts upward.
|
|
7
|
-
*/
|
|
8
|
-
export interface ModelRuntimeTextPart {
|
|
9
|
-
type: "text";
|
|
10
|
-
text: string;
|
|
11
|
-
}
|
|
12
|
-
export interface ModelRuntimeToolCallPart {
|
|
13
|
-
type: "tool-call";
|
|
14
|
-
toolCallId: string;
|
|
15
|
-
toolName: string;
|
|
16
|
-
input: Record<string, unknown>;
|
|
17
|
-
}
|
|
18
|
-
export interface ModelRuntimeToolResultPart {
|
|
19
|
-
type: "tool-result";
|
|
20
|
-
toolCallId: string;
|
|
21
|
-
toolName: string;
|
|
22
|
-
output: {
|
|
23
|
-
type: "json";
|
|
24
|
-
value: unknown;
|
|
25
|
-
};
|
|
26
|
-
}
|
|
27
|
-
export interface ModelRuntimeSystemMessage {
|
|
28
|
-
role: "system";
|
|
29
|
-
content: string;
|
|
30
|
-
}
|
|
31
|
-
export interface ModelRuntimeUserMessage {
|
|
32
|
-
role: "user";
|
|
33
|
-
content: string;
|
|
34
|
-
}
|
|
35
|
-
export interface ModelRuntimeAssistantMessage {
|
|
36
|
-
role: "assistant";
|
|
37
|
-
content: Array<ModelRuntimeTextPart | ModelRuntimeToolCallPart>;
|
|
38
|
-
}
|
|
39
|
-
export interface ModelRuntimeToolMessage {
|
|
40
|
-
role: "tool";
|
|
41
|
-
content: ModelRuntimeToolResultPart[];
|
|
42
|
-
}
|
|
43
|
-
export type ModelRuntimeMessage = ModelRuntimeSystemMessage | ModelRuntimeUserMessage | ModelRuntimeAssistantMessage | ModelRuntimeToolMessage;
|
|
44
|
-
//# sourceMappingURL=model-runtime-types.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"model-runtime-types.d.ts","sourceRoot":"","sources":["../../../../src/src/agent/runtime/model-runtime-types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,WAAW,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,aAAa,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,OAAO,CAAC;KAChB,CAAC;CACH;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,4BAA4B;IAC3C,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,KAAK,CAAC,oBAAoB,GAAG,wBAAwB,CAAC,CAAC;CACjE;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,0BAA0B,EAAE,CAAC;CACvC;AAED,MAAM,MAAM,mBAAmB,GAC3B,yBAAyB,GACzB,uBAAuB,GACvB,4BAA4B,GAC5B,uBAAuB,CAAC"}
|