@deepagents/context 0.28.0 → 0.29.1

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/browser.js CHANGED
@@ -901,6 +901,33 @@ async function estimate(modelId, renderer, ...fragments) {
901
901
 
902
902
  // packages/context/src/lib/fragments/message/user.ts
903
903
  import { generateId as generateId2, isTextUIPart } from "ai";
904
+ function everyNTurns(n) {
905
+ return (turn) => turn % n === 0;
906
+ }
907
+ function once() {
908
+ return (turn) => turn === 1;
909
+ }
910
+ function firstN(n) {
911
+ return (turn) => turn <= n;
912
+ }
913
+ function afterTurn(n) {
914
+ return (turn) => turn > n;
915
+ }
916
+ function and(...predicates) {
917
+ return (turn) => predicates.every((p) => p(turn));
918
+ }
919
+ function or(...predicates) {
920
+ return (turn) => predicates.some((p) => p(turn));
921
+ }
922
+ function not(predicate) {
923
+ return (turn) => !predicate(turn);
924
+ }
925
+ function isConditionalReminder(fragment2) {
926
+ return fragment2.name === "reminder" && !!fragment2.metadata?.reminder;
927
+ }
928
+ function getConditionalReminder(fragment2) {
929
+ return fragment2.metadata.reminder;
930
+ }
904
931
  var SYSTEM_REMINDER_OPEN_TAG = "<system-reminder>";
905
932
  var SYSTEM_REMINDER_CLOSE_TAG = "</system-reminder>";
906
933
  function getReminderRanges(metadata) {
@@ -1035,66 +1062,61 @@ function applyPartReminder(message2, value) {
1035
1062
  mode: "part"
1036
1063
  };
1037
1064
  }
1038
- function hasSchedule(reminder2) {
1039
- return reminder2.everyNTurns !== void 0 || reminder2.once !== void 0 || reminder2.firstN !== void 0 || reminder2.afterTurn !== void 0 || reminder2.when !== void 0;
1065
+ function resolveReminderText(item, ctx) {
1066
+ return typeof item.text === "function" ? item.text(ctx) : item.text;
1040
1067
  }
1041
- function shouldIncludeReminder(reminder2, turn) {
1042
- if (reminder2.once && turn !== 1) return false;
1043
- if (reminder2.firstN !== void 0 && turn > reminder2.firstN) return false;
1044
- if (reminder2.afterTurn !== void 0 && turn <= reminder2.afterTurn)
1045
- return false;
1046
- if (reminder2.everyNTurns !== void 0 && turn % reminder2.everyNTurns !== 0)
1047
- return false;
1048
- if (reminder2.when && !reminder2.when(turn)) return false;
1049
- return true;
1068
+ function applyReminderToMessage(message2, item, ctx) {
1069
+ const resolvedText = resolveReminderText(item, ctx);
1070
+ if (resolvedText.trim().length === 0) {
1071
+ return null;
1072
+ }
1073
+ return item.asPart ? applyPartReminder(message2, resolvedText) : applyInlineReminder(message2, resolvedText);
1074
+ }
1075
+ function mergeReminderMetadata(message2, addedReminders) {
1076
+ if (addedReminders.length === 0) return;
1077
+ const metadata = isRecord(message2.metadata) ? { ...message2.metadata } : {};
1078
+ const existing = Array.isArray(metadata.reminders) ? metadata.reminders : [];
1079
+ metadata.reminders = [...existing, ...addedReminders];
1080
+ message2.metadata = metadata;
1050
1081
  }
1051
1082
  function reminder(text, options) {
1052
1083
  if (typeof text === "string") {
1053
1084
  assertReminderText(text);
1054
1085
  }
1086
+ if (options && "when" in options && options.when) {
1087
+ return {
1088
+ name: "reminder",
1089
+ metadata: {
1090
+ reminder: {
1091
+ text,
1092
+ when: options.when,
1093
+ asPart: options.asPart ?? false
1094
+ }
1095
+ }
1096
+ };
1097
+ }
1055
1098
  return {
1056
1099
  text,
1057
- asPart: options?.asPart ?? false,
1058
- ...options?.everyNTurns !== void 0 && {
1059
- everyNTurns: options.everyNTurns
1060
- },
1061
- ...options?.once !== void 0 && { once: options.once },
1062
- ...options?.firstN !== void 0 && { firstN: options.firstN },
1063
- ...options?.afterTurn !== void 0 && { afterTurn: options.afterTurn },
1064
- ...options?.when !== void 0 && { when: options.when }
1100
+ asPart: options?.asPart ?? false
1065
1101
  };
1066
1102
  }
1067
- function resolveReminderText(item, ctx) {
1068
- return typeof item.text === "function" ? item.text(ctx) : item.text;
1069
- }
1070
1103
  function user(content, ...reminders) {
1071
1104
  const message2 = typeof content === "string" ? {
1072
1105
  id: generateId2(),
1073
1106
  role: "user",
1074
1107
  parts: [{ type: "text", text: content }]
1075
1108
  } : { ...content, role: "user", parts: [...content.parts] };
1076
- const immediateReminders = reminders.filter((r) => !hasSchedule(r));
1077
- const scheduledReminders = reminders.filter((r) => hasSchedule(r));
1078
- if (immediateReminders.length > 0) {
1079
- const addedReminders = [];
1109
+ if (reminders.length > 0) {
1080
1110
  const plainText = extractPlainText(message2);
1081
- for (const item of immediateReminders) {
1082
- const resolvedText = resolveReminderText(item, { content: plainText });
1083
- if (resolvedText.trim().length === 0) {
1084
- continue;
1085
- }
1086
- addedReminders.push(
1087
- item.asPart ? applyPartReminder(message2, resolvedText) : applyInlineReminder(message2, resolvedText)
1088
- );
1089
- }
1090
- if (addedReminders.length > 0) {
1091
- const metadata = isRecord(message2.metadata) ? { ...message2.metadata } : {};
1092
- const existingReminders = Array.isArray(metadata.reminders) ? metadata.reminders : [];
1093
- metadata.reminders = [...existingReminders, ...addedReminders];
1094
- message2.metadata = metadata;
1111
+ const addedReminders = [];
1112
+ for (const item of reminders) {
1113
+ const meta = applyReminderToMessage(message2, item, {
1114
+ content: plainText
1115
+ });
1116
+ if (meta) addedReminders.push(meta);
1095
1117
  }
1118
+ mergeReminderMetadata(message2, addedReminders);
1096
1119
  }
1097
- const fragmentMetadata = scheduledReminders.length > 0 ? { scheduledReminders } : void 0;
1098
1120
  return {
1099
1121
  id: message2.id,
1100
1122
  name: "user",
@@ -1107,8 +1129,7 @@ function user(content, ...reminders) {
1107
1129
  encode() {
1108
1130
  return message2;
1109
1131
  }
1110
- },
1111
- metadata: fragmentMetadata
1132
+ }
1112
1133
  };
1113
1134
  }
1114
1135
 
@@ -2174,35 +2195,45 @@ export {
2174
2195
  TomlRenderer,
2175
2196
  ToonRenderer,
2176
2197
  XmlRenderer,
2198
+ afterTurn,
2177
2199
  alias,
2178
2200
  analogy,
2201
+ and,
2179
2202
  applyInlineReminder,
2180
2203
  applyPartReminder,
2204
+ applyReminderToMessage,
2181
2205
  assistant,
2182
2206
  assistantText,
2183
2207
  clarification,
2184
2208
  correction,
2185
2209
  defaultTokenizer,
2186
2210
  estimate,
2211
+ everyNTurns,
2187
2212
  example,
2188
2213
  explain,
2189
2214
  fail,
2215
+ firstN,
2190
2216
  fragment,
2191
2217
  fromFragment,
2218
+ getConditionalReminder,
2192
2219
  getFragmentData,
2193
2220
  getModelsRegistry,
2194
2221
  getReminderRanges,
2195
2222
  glossary,
2196
2223
  guardrail,
2197
- hasSchedule,
2198
2224
  hint,
2199
2225
  identity,
2226
+ isConditionalReminder,
2200
2227
  isFragment,
2201
2228
  isFragmentObject,
2202
2229
  isLazyFragment,
2203
2230
  isMessageFragment,
2204
2231
  lastAssistantMessage,
2232
+ mergeReminderMetadata,
2205
2233
  message,
2234
+ not,
2235
+ once,
2236
+ or,
2206
2237
  pass,
2207
2238
  persistedWriter,
2208
2239
  persona,
@@ -2215,7 +2246,6 @@ export {
2215
2246
  resolveReminderText,
2216
2247
  role,
2217
2248
  runGuardrailChain,
2218
- shouldIncludeReminder,
2219
2249
  soul,
2220
2250
  stop,
2221
2251
  stripReminders,