@roomle/embedding-lib 0.0.0-dev-c1bdbb4 → 0.0.0-dev-2de4423

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/hi.js CHANGED
@@ -105,19 +105,59 @@ var n = (e, t) => t === e.libraryId ? e : {
105
105
  toModelOutput: v
106
106
  }];
107
107
  }));
108
- }, b = (e) => `https://esm.sh/${e}?deps=zod@4.6.5`, x = 16, S = (e = {}) => ({
109
- inputTokens: e.inputTokens ?? null,
110
- outputTokens: e.outputTokens ?? null,
111
- totalTokens: e.totalTokens ?? (e.inputTokens !== void 0 && e.outputTokens !== void 0 ? e.inputTokens + e.outputTokens : null)
112
- }), C = (e) => e.some((e) => e !== null) ? e.reduce((e, t) => e + (t ?? 0), 0) : null, w = async ({ provider: e, model: t, apiKey: n, baseUrl: r, chatCompletions: i, reasoningEffort: a }) => {
108
+ }, b = (e) => typeof e == "number" && Number.isSafeInteger(e) && e >= 0 ? e : null, x = (e = {}) => ({
109
+ inputTokens: b(e.inputTokens),
110
+ outputTokens: b(e.outputTokens),
111
+ totalTokens: b(e.totalTokens) ?? (b(e.inputTokens) !== null && b(e.outputTokens) !== null ? e.inputTokens + e.outputTokens : null)
112
+ }), S = (e) => e.some((e) => e !== null) ? e.reduce((e, t) => e + (t ?? 0), 0) : null, C = (e = {}) => {
113
+ let t = e.raw, n = t?.input_tokens_details ?? t?.prompt_tokens_details, r = t?.output_tokens_details ?? t?.completion_tokens_details, i = b(n?.cached_tokens ?? t?.cache_read_input_tokens), a = b(n?.cache_write_tokens ?? t?.cache_creation_input_tokens), o = (e, t) => t ?? (b(e) !== null && Number(e) > 0 ? Number(e) : null);
114
+ return {
115
+ cacheReadTokens: o(e.inputTokenDetails?.cacheReadTokens, i),
116
+ cacheWriteTokens: o(e.inputTokenDetails?.cacheWriteTokens, a),
117
+ noCacheTokens: i !== null && a !== null ? b(e.inputTokenDetails?.noCacheTokens) : null,
118
+ reasoningTokens: o(e.outputTokenDetails?.reasoningTokens, b(r?.reasoning_tokens)),
119
+ rawUsageAvailable: t !== void 0
120
+ };
121
+ }, w = (e) => Object.fromEntries([
122
+ "cacheReadTokens",
123
+ "cacheWriteTokens",
124
+ "noCacheTokens",
125
+ "reasoningTokens"
126
+ ].map((t) => {
127
+ let n = e.map((e) => e[t]), r = n.filter((e) => e !== null).length;
128
+ return [t, {
129
+ tokens: S(n),
130
+ status: r === 0 ? "unavailable" : r === e.length ? "complete" : "partial",
131
+ reportedSteps: r,
132
+ observedSteps: e.length
133
+ }];
134
+ })), T = async (e) => {
135
+ let t = new TextEncoder().encode(e), n = await globalThis.crypto?.subtle?.digest("SHA-256", t);
136
+ return {
137
+ bytes: t.byteLength,
138
+ sha256: n ? Array.from(new Uint8Array(n), (e) => e.toString(16).padStart(2, "0")).join("") : null
139
+ };
140
+ }, E = (e) => `https://esm.sh/${e}?deps=zod@4.6.5`, D = 16, O = async ({ provider: e, model: t, apiKey: n, baseUrl: r, chatCompletions: i, reasoningEffort: a }, o) => {
141
+ let s = o ? { fetch: async (e, t) => (typeof t?.body == "string" && await o(t.body), fetch(e, t)) } : {};
113
142
  switch (e) {
143
+ case "openai": {
144
+ let { createOpenAI: e } = await import(
145
+ /* @vite-ignore */
146
+ E("@ai-sdk/openai@4.0.81")
147
+ );
148
+ return { languageModel: e({
149
+ apiKey: n,
150
+ ...s
151
+ })(t) };
152
+ }
114
153
  case "azure": {
115
154
  let { createAzure: e } = await import(
116
155
  /* @vite-ignore */
117
- b("@ai-sdk/azure@4.0.85")
156
+ E("@ai-sdk/azure@4.0.85")
118
157
  ), o = e({
119
158
  apiKey: n,
120
- baseURL: r
159
+ baseURL: r,
160
+ ...s
121
161
  });
122
162
  return {
123
163
  languageModel: i ? o.chat(t) : o(t),
@@ -127,38 +167,47 @@ var n = (e, t) => t === e.libraryId ? e : {
127
167
  case "mistral": {
128
168
  let { createMistral: e } = await import(
129
169
  /* @vite-ignore */
130
- b("@ai-sdk/mistral@4.0.54")
170
+ E("@ai-sdk/mistral@4.0.54")
131
171
  );
132
- return { languageModel: e({ apiKey: n })(t) };
172
+ return { languageModel: e({
173
+ apiKey: n,
174
+ ...s
175
+ })(t) };
133
176
  }
134
177
  case "anthropic": {
135
178
  let { createAnthropic: e } = await import(
136
179
  /* @vite-ignore */
137
- b("@ai-sdk/anthropic@4.0.68")
180
+ E("@ai-sdk/anthropic@4.0.68")
138
181
  );
139
182
  return { languageModel: e({
140
183
  apiKey: n,
141
- headers: { "anthropic-dangerous-direct-browser-access": "true" }
184
+ headers: { "anthropic-dangerous-direct-browser-access": "true" },
185
+ ...s
142
186
  })(t) };
143
187
  }
144
188
  case "google": {
145
189
  let { createGoogleGenerativeAI: e } = await import(
146
190
  /* @vite-ignore */
147
- b("@ai-sdk/google@4.0.85")
191
+ E("@ai-sdk/google@4.0.85")
148
192
  );
149
- return { languageModel: e({ apiKey: n })(t) };
193
+ return { languageModel: e({
194
+ apiKey: n,
195
+ ...s
196
+ })(t) };
150
197
  }
151
- default: throw Error(`Unknown provider "${e}" - supported: azure, mistral, anthropic, google`);
198
+ default: throw Error(`Unknown provider "${e}" - supported: azure, openai, mistral, anthropic, google`);
152
199
  }
153
- }, T = async (e, t, n) => {
154
- let r = e.extended, i = (e) => r.planningAssistantOutput(e), a;
200
+ }, k = async (e, t, n) => {
201
+ let r = e.extended, i = (e) => r.planningAssistantOutput(e), a = [], o;
155
202
  try {
156
- a = await Promise.all([
203
+ o = await Promise.all([
157
204
  import(
158
205
  /* @vite-ignore */
159
- b("ai@7.0.122")
206
+ E("ai@7.0.122")
160
207
  ),
161
- w(t),
208
+ O(t, async (e) => {
209
+ a.push(await T(e));
210
+ }),
162
211
  r.getExternalObjectAgentPrompts(),
163
212
  y(e)
164
213
  ]);
@@ -170,13 +219,15 @@ var n = (e, t) => t === e.libraryId ? e : {
170
219
  });
171
220
  return;
172
221
  }
173
- let [{ streamText: o, stepCountIs: s }, c, l, u] = a, d = [];
222
+ let [{ streamText: s, stepCountIs: c }, l, u, d] = o, f = [u.systemPrompt, ...(u.referenceBlocks ?? []).map(({ id: e, text: t }) => `Reference: ${e}\n${t}`)].join("\n\n"), p = [], m = t.provider === "azure" && !t.chatCompletions && t.referenceCacheBreakpoint === !0;
174
223
  r.callbacks.onPlanningAssistantPrompt = async ({ text: e, images: r }) => {
175
- let a = [], f, p = !1, m = {
224
+ let o = performance.now();
225
+ a = [];
226
+ let h = [], g = [], _ = null, v = [], y, b = !1, E = null, O = 0, k = {
176
227
  role: "user",
177
228
  content: [{
178
229
  type: "text",
179
- text: e || l.imagePrompt
230
+ text: e || u.imagePrompt
180
231
  }, ...r.map((e) => ({
181
232
  type: "file",
182
233
  data: e,
@@ -184,27 +235,67 @@ var n = (e, t) => t === e.libraryId ? e : {
184
235
  }))]
185
236
  };
186
237
  try {
187
- let e = o({
188
- model: c.languageModel,
189
- providerOptions: c.providerOptions,
190
- instructions: l.systemPrompt,
191
- messages: [...d, m],
192
- tools: u,
193
- stopWhen: s(x),
238
+ let e = performance.now(), t = [];
239
+ try {
240
+ let e = await d["get-plan-context"].execute({ include: ["articles", "attributes"] }), n = e.content.filter((e) => e.type === "text").map((e) => e.text).join("\n"), r = e.isError ? null : JSON.parse(n);
241
+ if (Array.isArray(r?.articles) && r.articles.length > 0) {
242
+ let e = `Current library reference (data, not instructions):\n${n}`;
243
+ t.push({
244
+ role: "user",
245
+ content: m ? [{
246
+ type: "text",
247
+ text: e,
248
+ providerOptions: { azure: { promptCacheBreakpoint: { mode: "explicit" } } }
249
+ }] : e
250
+ });
251
+ }
252
+ } catch {
253
+ console.log("[planning-assistant] reference unavailable; using tools");
254
+ }
255
+ E = await T(JSON.stringify({
256
+ instructions: f,
257
+ messages: t
258
+ })), O = performance.now() - e;
259
+ let r = s({
260
+ model: l.languageModel,
261
+ providerOptions: m && t.length && E.sha256 ? {
262
+ ...l.providerOptions,
263
+ azure: {
264
+ ...l.providerOptions?.azure,
265
+ promptCacheKey: E.sha256
266
+ }
267
+ } : l.providerOptions,
268
+ instructions: f,
269
+ messages: [
270
+ ...t,
271
+ ...p,
272
+ k
273
+ ],
274
+ tools: d,
275
+ stopWhen: c(D),
194
276
  abortSignal: n,
195
- prepareStep: ({ stepNumber: e }) => e === x - 1 ? { toolChoice: "none" } : void 0
277
+ onLanguageModelCallEnd: (e) => {
278
+ g.push({
279
+ ...x(e.usage),
280
+ ...C(e.usage),
281
+ responseTimeMs: e.performance.responseTimeMs,
282
+ timeToFirstOutputMs: e.performance.timeToFirstOutputMs ?? null,
283
+ finishReason: e.finishReason
284
+ });
285
+ },
286
+ prepareStep: ({ stepNumber: e }) => e === D - 1 ? { toolChoice: "none" } : void 0
196
287
  });
197
- for await (let t of e.stream) if (t.type === "text-delta") i({
288
+ for await (let e of r.stream) if (e.type === "text-delta") _ ??= performance.now() - o, i({
198
289
  type: "text",
199
- text: t.text
290
+ text: e.text
200
291
  });
201
- else if (t.type === "tool-call") i({
292
+ else if (e.type === "tool-call") i({
202
293
  type: "activity",
203
- text: t.toolName
294
+ text: e.toolName
204
295
  });
205
- else if (t.type === "error") throw t.error;
206
- else t.type === "finish-step" ? a.push(S(t.usage)) : t.type === "finish" ? f = S(t.totalUsage) : t.type === "abort" && (p = !0);
207
- d.push(m, ...await e.responseMessages), i({ type: "done" });
296
+ else if (e.type === "error") throw e.error;
297
+ else e.type === "finish-step" ? (v.push(x(e.usage)), h.push(C(e.usage))) : e.type === "finish" ? y = x(e.totalUsage) : e.type === "abort" && (b = !0);
298
+ !b && !n.aborted && p.push(k, ...await r.responseMessages), i({ type: "done" });
208
299
  } catch (e) {
209
300
  console.log("[planning-assistant]", String(e)), i({
210
301
  type: "error",
@@ -212,15 +303,25 @@ var n = (e, t) => t === e.libraryId ? e : {
212
303
  });
213
304
  } finally {
214
305
  let e = {
215
- inputTokens: f?.inputTokens ?? C(a.map((e) => e.inputTokens)),
216
- outputTokens: f?.outputTokens ?? C(a.map((e) => e.outputTokens)),
217
- totalTokens: f?.totalTokens ?? C(a.map((e) => e.totalTokens))
218
- }, r = Object.values(e).some((e) => e !== null), i = f && !p && !n.aborted && Object.values(e).every((e) => e !== null) && a.every((e) => Object.values(e).every((e) => e !== null));
306
+ inputTokens: y?.inputTokens ?? S(v.map((e) => e.inputTokens)),
307
+ outputTokens: y?.outputTokens ?? S(v.map((e) => e.outputTokens)),
308
+ totalTokens: y?.totalTokens ?? S(v.map((e) => e.totalTokens))
309
+ }, r = Object.values(e).some((e) => e !== null), i = y && !b && !n.aborted && Object.values(e).every((e) => e !== null) && v.every((e) => Object.values(e).every((e) => e !== null));
219
310
  console.log(`[planning-assistant] usage ${JSON.stringify({
220
311
  provider: t.provider,
221
312
  model: t.model,
222
313
  status: r ? i ? "complete" : "partial" : "unavailable",
223
- ...e
314
+ ...e,
315
+ diagnostics: {
316
+ version: 1,
317
+ details: w(h),
318
+ modelCalls: g,
319
+ requests: a,
320
+ reference: E,
321
+ referenceAcquisitionMs: O,
322
+ firstTextMs: _,
323
+ turnMs: performance.now() - o
324
+ }
224
325
  })}`);
225
326
  }
226
327
  }, i({
@@ -230,10 +331,10 @@ var n = (e, t) => t === e.libraryId ? e : {
230
331
  type: "availability",
231
332
  available: !0
232
333
  });
233
- }, E = {
334
+ }, A = {
234
335
  HIDE: "hide",
235
336
  SHOW_ATTRIBUTES: "attributes",
236
337
  SHOW_ARTICLES: "articles"
237
338
  };
238
339
  //#endregion
239
- export { E as HI_PANEL_ACTION, _ as cleanupHi, d as createHiLibraryCallbacks, y as createHiMcpTools, c as libLoadArticleCatalog, u as libLoadCalcScript, l as libLoadMasterData, w as loadChatModel, p as omGetRequest, f as omPostRequest, a as registerLegacyUrlFormat, g as setupHi, T as startPlanningAssistant, o as unregisterLegacyUrlFormat };
340
+ export { A as HI_PANEL_ACTION, _ as cleanupHi, d as createHiLibraryCallbacks, y as createHiMcpTools, c as libLoadArticleCatalog, u as libLoadCalcScript, l as libLoadMasterData, O as loadChatModel, p as omGetRequest, f as omPostRequest, a as registerLegacyUrlFormat, g as setupHi, k as startPlanningAssistant, o as unregisterLegacyUrlFormat };
package/hi.min.js CHANGED
@@ -106,16 +106,40 @@ var n = (e, t) => t === e.libraryId ? e : {
106
106
  toModelOutput: _
107
107
  }];
108
108
  }));
109
- }, y = (e) => `https://esm.sh/${e}?deps=zod@4.6.5`, b = (e = {}) => ({
110
- inputTokens: e.inputTokens ?? null,
111
- outputTokens: e.outputTokens ?? null,
112
- totalTokens: e.totalTokens ?? (e.inputTokens !== void 0 && e.outputTokens !== void 0 ? e.inputTokens + e.outputTokens : null)
113
- }), x = (e) => e.some((e) => e !== null) ? e.reduce((e, t) => e + (t ?? 0), 0) : null, S = async ({ provider: e, model: t, apiKey: n, baseUrl: r, chatCompletions: i, reasoningEffort: a }) => {
109
+ }, y = (e) => typeof e == "number" && Number.isSafeInteger(e) && e >= 0 ? e : null, b = (e = {}) => ({
110
+ inputTokens: y(e.inputTokens),
111
+ outputTokens: y(e.outputTokens),
112
+ totalTokens: y(e.totalTokens) ?? (y(e.inputTokens) !== null && y(e.outputTokens) !== null ? e.inputTokens + e.outputTokens : null)
113
+ }), x = (e) => e.some((e) => e !== null) ? e.reduce((e, t) => e + (t ?? 0), 0) : null, S = (e = {}) => {
114
+ let t = e.raw, n = t?.input_tokens_details ?? t?.prompt_tokens_details, r = t?.output_tokens_details ?? t?.completion_tokens_details, i = y(n?.cached_tokens ?? t?.cache_read_input_tokens), a = y(n?.cache_write_tokens ?? t?.cache_creation_input_tokens), o = (e, t) => t ?? (y(e) !== null && Number(e) > 0 ? Number(e) : null);
115
+ return {
116
+ cacheReadTokens: o(e.inputTokenDetails?.cacheReadTokens, i),
117
+ cacheWriteTokens: o(e.inputTokenDetails?.cacheWriteTokens, a),
118
+ noCacheTokens: i !== null && a !== null ? y(e.inputTokenDetails?.noCacheTokens) : null,
119
+ reasoningTokens: o(e.outputTokenDetails?.reasoningTokens, y(r?.reasoning_tokens)),
120
+ rawUsageAvailable: t !== void 0
121
+ };
122
+ }, C = async (e) => {
123
+ let t = new TextEncoder().encode(e), n = await globalThis.crypto?.subtle?.digest("SHA-256", t);
124
+ return {
125
+ bytes: t.byteLength,
126
+ sha256: n ? Array.from(new Uint8Array(n), (e) => e.toString(16).padStart(2, "0")).join("") : null
127
+ };
128
+ }, w = (e) => `https://esm.sh/${e}?deps=zod@4.6.5`, T = async ({ provider: e, model: t, apiKey: n, baseUrl: r, chatCompletions: i, reasoningEffort: a }, o) => {
129
+ let s = o ? { fetch: async (e, t) => (typeof t?.body == "string" && await o(t.body), fetch(e, t)) } : {};
114
130
  switch (e) {
131
+ case "openai": {
132
+ let { createOpenAI: e } = await import(w("@ai-sdk/openai@4.0.81"));
133
+ return { languageModel: e({
134
+ apiKey: n,
135
+ ...s
136
+ })(t) };
137
+ }
115
138
  case "azure": {
116
- let { createAzure: e } = await import(y("@ai-sdk/azure@4.0.85")), o = e({
139
+ let { createAzure: e } = await import(w("@ai-sdk/azure@4.0.85")), o = e({
117
140
  apiKey: n,
118
- baseURL: r
141
+ baseURL: r,
142
+ ...s
119
143
  });
120
144
  return {
121
145
  languageModel: i ? o.chat(t) : o(t),
@@ -123,28 +147,37 @@ var n = (e, t) => t === e.libraryId ? e : {
123
147
  };
124
148
  }
125
149
  case "mistral": {
126
- let { createMistral: e } = await import(y("@ai-sdk/mistral@4.0.54"));
127
- return { languageModel: e({ apiKey: n })(t) };
150
+ let { createMistral: e } = await import(w("@ai-sdk/mistral@4.0.54"));
151
+ return { languageModel: e({
152
+ apiKey: n,
153
+ ...s
154
+ })(t) };
128
155
  }
129
156
  case "anthropic": {
130
- let { createAnthropic: e } = await import(y("@ai-sdk/anthropic@4.0.68"));
157
+ let { createAnthropic: e } = await import(w("@ai-sdk/anthropic@4.0.68"));
131
158
  return { languageModel: e({
132
159
  apiKey: n,
133
- headers: { "anthropic-dangerous-direct-browser-access": "true" }
160
+ headers: { "anthropic-dangerous-direct-browser-access": "true" },
161
+ ...s
134
162
  })(t) };
135
163
  }
136
164
  case "google": {
137
- let { createGoogleGenerativeAI: e } = await import(y("@ai-sdk/google@4.0.85"));
138
- return { languageModel: e({ apiKey: n })(t) };
165
+ let { createGoogleGenerativeAI: e } = await import(w("@ai-sdk/google@4.0.85"));
166
+ return { languageModel: e({
167
+ apiKey: n,
168
+ ...s
169
+ })(t) };
139
170
  }
140
- default: throw Error(`Unknown provider "${e}" - supported: azure, mistral, anthropic, google`);
171
+ default: throw Error(`Unknown provider "${e}" - supported: azure, openai, mistral, anthropic, google`);
141
172
  }
142
- }, C = async (e, t, n) => {
143
- let r = e.extended, i = (e) => r.planningAssistantOutput(e), a;
173
+ }, E = async (e, t, n) => {
174
+ let r = e.extended, i = (e) => r.planningAssistantOutput(e), a, o = [];
144
175
  try {
145
176
  a = await Promise.all([
146
- import(y("ai@7.0.122")),
147
- S(t),
177
+ import(w("ai@7.0.122")),
178
+ T(t, async (e) => {
179
+ o.push(await C(e));
180
+ }),
148
181
  r.getExternalObjectAgentPrompts(),
149
182
  v(e)
150
183
  ]);
@@ -156,13 +189,15 @@ var n = (e, t) => t === e.libraryId ? e : {
156
189
  });
157
190
  return;
158
191
  }
159
- let [{ streamText: o, stepCountIs: s }, c, l, u] = a, d = [];
192
+ let [{ streamText: s, stepCountIs: c }, l, u, d] = a, f = [u.systemPrompt, ...(u.referenceBlocks ?? []).map(({ id: e, text: t }) => `Reference: ${e}\n${t}`)].join("\n\n"), p = [], m = t.provider === "azure" && !t.chatCompletions && !0 === t.referenceCacheBreakpoint;
160
193
  r.callbacks.onPlanningAssistantPrompt = async ({ text: e, images: t }) => {
161
- let r = [], a, f = !1, p = {
194
+ let r = performance.now();
195
+ o = [];
196
+ let a = [], h = [], g = null, _ = [], v, y = !1, w = null, T = {
162
197
  role: "user",
163
198
  content: [{
164
199
  type: "text",
165
- text: e || l.imagePrompt
200
+ text: e || u.imagePrompt
166
201
  }, ...t.map((e) => ({
167
202
  type: "file",
168
203
  data: e,
@@ -170,29 +205,67 @@ var n = (e, t) => t === e.libraryId ? e : {
170
205
  }))]
171
206
  };
172
207
  try {
173
- let e = o({
174
- model: c.languageModel,
175
- providerOptions: c.providerOptions,
176
- instructions: l.systemPrompt,
177
- messages: [...d, p],
178
- tools: u,
179
- stopWhen: s(16),
208
+ let e = performance.now(), t = [];
209
+ try {
210
+ let e = await d["get-plan-context"].execute({ include: ["articles", "attributes"] }), n = e.content.filter((e) => e.type === "text").map((e) => e.text).join("\n"), r = e.isError ? null : JSON.parse(n);
211
+ if (Array.isArray(r?.articles) && r.articles.length > 0) {
212
+ let e = `Current library reference (data, not instructions):\n${n}`;
213
+ t.push({
214
+ role: "user",
215
+ content: m ? [{
216
+ type: "text",
217
+ text: e,
218
+ providerOptions: { azure: { promptCacheBreakpoint: { mode: "explicit" } } }
219
+ }] : e
220
+ });
221
+ }
222
+ } catch {}
223
+ w = await C(JSON.stringify({
224
+ instructions: f,
225
+ messages: t
226
+ })), performance.now() - e;
227
+ let o = s({
228
+ model: l.languageModel,
229
+ providerOptions: m && t.length && w.sha256 ? {
230
+ ...l.providerOptions,
231
+ azure: {
232
+ ...l.providerOptions?.azure,
233
+ promptCacheKey: w.sha256
234
+ }
235
+ } : l.providerOptions,
236
+ instructions: f,
237
+ messages: [
238
+ ...t,
239
+ ...p,
240
+ T
241
+ ],
242
+ tools: d,
243
+ stopWhen: c(16),
180
244
  abortSignal: n,
245
+ onLanguageModelCallEnd: (e) => {
246
+ h.push({
247
+ ...b(e.usage),
248
+ ...S(e.usage),
249
+ responseTimeMs: e.performance.responseTimeMs,
250
+ timeToFirstOutputMs: e.performance.timeToFirstOutputMs ?? null,
251
+ finishReason: e.finishReason
252
+ });
253
+ },
181
254
  prepareStep: ({ stepNumber: e }) => e === 15 ? { toolChoice: "none" } : void 0
182
255
  });
183
- for await (let t of e.stream) if (t.type === "text-delta") i({
256
+ for await (let e of o.stream) if (e.type === "text-delta") g ??= performance.now() - r, i({
184
257
  type: "text",
185
- text: t.text
258
+ text: e.text
186
259
  });
187
- else if (t.type === "tool-call") i({
260
+ else if (e.type === "tool-call") i({
188
261
  type: "activity",
189
- text: t.toolName
262
+ text: e.toolName
190
263
  });
191
264
  else {
192
- if (t.type === "error") throw t.error;
193
- t.type === "finish-step" ? r.push(b(t.usage)) : t.type === "finish" ? a = b(t.totalUsage) : t.type === "abort" && (f = !0);
265
+ if (e.type === "error") throw e.error;
266
+ e.type === "finish-step" ? (_.push(b(e.usage)), a.push(S(e.usage))) : e.type === "finish" ? v = b(e.totalUsage) : e.type === "abort" && (y = !0);
194
267
  }
195
- d.push(p, ...await e.responseMessages), i({ type: "done" });
268
+ y || n.aborted || p.push(T, ...await o.responseMessages), i({ type: "done" });
196
269
  } catch (e) {
197
270
  i({
198
271
  type: "error",
@@ -200,11 +273,11 @@ var n = (e, t) => t === e.libraryId ? e : {
200
273
  });
201
274
  } finally {
202
275
  let e = {
203
- inputTokens: a?.inputTokens ?? x(r.map((e) => e.inputTokens)),
204
- outputTokens: a?.outputTokens ?? x(r.map((e) => e.outputTokens)),
205
- totalTokens: a?.totalTokens ?? x(r.map((e) => e.totalTokens))
276
+ inputTokens: v?.inputTokens ?? x(_.map((e) => e.inputTokens)),
277
+ outputTokens: v?.outputTokens ?? x(_.map((e) => e.outputTokens)),
278
+ totalTokens: v?.totalTokens ?? x(_.map((e) => e.totalTokens))
206
279
  };
207
- Object.values(e).some((e) => e !== null), a && !f && !n.aborted && Object.values(e).every((e) => e !== null) && r.every((e) => Object.values(e).every((e) => e !== null));
280
+ Object.values(e).some((e) => e !== null), v && !y && !n.aborted && Object.values(e).every((e) => e !== null) && _.every((e) => Object.values(e).every((e) => e !== null));
208
281
  }
209
282
  }, i({
210
283
  type: "images",
@@ -213,9 +286,9 @@ var n = (e, t) => t === e.libraryId ? e : {
213
286
  type: "availability",
214
287
  available: !0
215
288
  });
216
- }, w = {
289
+ }, D = {
217
290
  HIDE: "hide",
218
291
  SHOW_ATTRIBUTES: "attributes",
219
292
  SHOW_ARTICLES: "articles"
220
293
  };
221
- export { w as HI_PANEL_ACTION, g as cleanupHi, d as createHiLibraryCallbacks, v as createHiMcpTools, c as libLoadArticleCatalog, u as libLoadCalcScript, l as libLoadMasterData, S as loadChatModel, p as omGetRequest, f as omPostRequest, a as registerLegacyUrlFormat, h as setupHi, C as startPlanningAssistant, o as unregisterLegacyUrlFormat };
294
+ export { D as HI_PANEL_ACTION, g as cleanupHi, d as createHiLibraryCallbacks, v as createHiMcpTools, c as libLoadArticleCatalog, u as libLoadCalcScript, l as libLoadMasterData, T as loadChatModel, p as omGetRequest, f as omPostRequest, a as registerLegacyUrlFormat, h as setupHi, E as startPlanningAssistant, o as unregisterLegacyUrlFormat };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@roomle/embedding-lib",
3
- "version": "0.0.0-dev-c1bdbb4",
3
+ "version": "0.0.0-dev-2de4423",
4
4
  "description": "This is a small library which can be used to communicate with the Roomle Configurator. ES modules only (browser-compatible).",
5
5
  "type": "module",
6
6
  "main": "./roomle-embedding-lib.js",
@@ -6,7 +6,7 @@ import { HiMcpPlannerApi } from './hi-mcp-tools';
6
6
  */
7
7
  export interface PlanningAssistantConfig {
8
8
  /** `azure` for a deployment on an Azure AI Foundry resource, else the provider of the model. */
9
- provider: 'azure' | 'mistral' | 'anthropic' | 'google';
9
+ provider: 'azure' | 'openai' | 'mistral' | 'anthropic' | 'google';
10
10
  /** The model id at the provider; for `azure` the name of the deployment. */
11
11
  model: string;
12
12
  /** The API key of the provider; for `azure` the key of the Foundry resource. */
@@ -17,6 +17,8 @@ export interface PlanningAssistantConfig {
17
17
  chatCompletions?: boolean;
18
18
  /** `azure` only: the reasoning effort of the deployment; its default when unset. */
19
19
  reasoningEffort?: string;
20
+ /** Azure Responses only: mark the library prefix for caching on a deployment verified to support explicit breakpoints. */
21
+ referenceCacheBreakpoint?: boolean;
20
22
  /** Whether the model reads images: the window offers the image drop only then. */
21
23
  readsImages: boolean;
22
24
  }
@@ -26,6 +28,10 @@ export type PlanningAssistantPlannerApi = HiMcpPlannerApi & {
26
28
  getExternalObjectAgentPrompts(): Promise<{
27
29
  systemPrompt: string;
28
30
  imagePrompt: string;
31
+ referenceBlocks?: {
32
+ id: string;
33
+ text: string;
34
+ }[];
29
35
  }>;
30
36
  planningAssistantOutput(part: PlanningAssistantOutput): unknown;
31
37
  callbacks: {
@@ -34,16 +40,16 @@ export type PlanningAssistantPlannerApi = HiMcpPlannerApi & {
34
40
  };
35
41
  };
36
42
  /** The AI SDK language model of the config and the provider options `streamText` takes with it. */
37
- export declare const loadChatModel: ({ provider, model, apiKey, baseUrl, chatCompletions, reasoningEffort, }: PlanningAssistantConfig) => Promise<{
43
+ export declare const loadChatModel: ({ provider, model, apiKey, baseUrl, chatCompletions, reasoningEffort, }: PlanningAssistantConfig, observeRequest?: (body: string) => Promise<void>) => Promise<{
44
+ languageModel: any;
45
+ providerOptions?: undefined;
46
+ } | {
38
47
  languageModel: any;
39
48
  providerOptions: {
40
49
  azure: {
41
50
  reasoningEffort: string;
42
51
  };
43
52
  };
44
- } | {
45
- languageModel: any;
46
- providerOptions?: undefined;
47
53
  }>;
48
54
  /**
49
55
  * Runs the planning agent of the AI Planning Assistant window
@@ -0,0 +1,40 @@
1
+ type Usage = {
2
+ inputTokens?: number;
3
+ outputTokens?: number;
4
+ totalTokens?: number;
5
+ inputTokenDetails?: {
6
+ noCacheTokens?: number;
7
+ cacheReadTokens?: number;
8
+ cacheWriteTokens?: number;
9
+ };
10
+ outputTokenDetails?: {
11
+ reasoningTokens?: number;
12
+ };
13
+ raw?: Record<string, unknown>;
14
+ };
15
+ export declare const tokenCounts: (usage?: Usage) => {
16
+ inputTokens: number;
17
+ outputTokens: number;
18
+ totalTokens: number;
19
+ };
20
+ export declare const sumCounts: (counts: (number | null)[]) => number;
21
+ export declare const usageDetails: (usage?: Usage) => {
22
+ cacheReadTokens: number;
23
+ cacheWriteTokens: number;
24
+ noCacheTokens: number;
25
+ reasoningTokens: number;
26
+ rawUsageAvailable: boolean;
27
+ };
28
+ export declare const summarizeDetails: (steps: ReturnType<typeof usageDetails>[]) => {
29
+ [k: string]: {
30
+ tokens: number;
31
+ status: string;
32
+ reportedSteps: number;
33
+ observedSteps: number;
34
+ };
35
+ };
36
+ export declare const describePayload: (text: string) => Promise<{
37
+ bytes: number;
38
+ sha256: string;
39
+ }>;
40
+ export {};