octaflow 0.23.0 → 0.24.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/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2025 The Octabits Authors
3
+ Copyright (c) 2025–2026 The Octabits Authors
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -1,7 +1,7 @@
1
1
  import { E as RetryPolicy, g as TypedWorkflow, h as TypedStepContext, m as TypedStep, nt as Result, tt as FlowErrorShape } from "../index-BURAYZui.js";
2
2
  import { n as Logger } from "../logger-BCus3AOa.js";
3
3
  import { i as BuildStepContextArgs, o as WorkflowHooks } from "../hooks-BdxIcc92.js";
4
- import { C as isSubprocessorResidency, S as embeddingDimensionsFor, _ as EmbeddingProviderMeta, a as AiProcessingRegion, b as OpenAiCompatibleProviderId, c as AiProviderModelOption, d as AiVendorResidency, f as DEFAULT_AI_PROVIDER, g as EmbeddingProviderId, h as EMBEDDING_PROVIDER_IDS, i as AiEndpointResidency, l as AiResidencyError, m as EMBEDDING_PROVIDERS, n as AI_PROVIDER_IDS, o as AiProviderId, p as DEFAULT_EMBEDDING_PROVIDER, r as AiEndpointRegion, s as AiProviderMeta, t as AI_PROVIDERS, u as AiResidencyResult, v as OPENAI_COMPATIBLE_PROVIDER, w as resolveEndpointResidency, x as OpenAiCompatibleProviderMeta, y as OPENAI_COMPATIBLE_PROVIDER_ID } from "../provider-registry-BDKSe_iO.js";
4
+ import { C as isSubprocessorResidency, S as embeddingDimensionsFor, _ as EmbeddingProviderMeta, a as AiProcessingRegion, b as OpenAiCompatibleProviderId, c as AiProviderModelOption, d as AiVendorResidency, f as DEFAULT_AI_PROVIDER, g as EmbeddingProviderId, h as EMBEDDING_PROVIDER_IDS, i as AiEndpointResidency, l as AiResidencyError, m as EMBEDDING_PROVIDERS, n as AI_PROVIDER_IDS, o as AiProviderId, p as DEFAULT_EMBEDDING_PROVIDER, r as AiEndpointRegion, s as AiProviderMeta, t as AI_PROVIDERS, u as AiResidencyResult, v as OPENAI_COMPATIBLE_PROVIDER, w as resolveEndpointResidency, x as OpenAiCompatibleProviderMeta, y as OPENAI_COMPATIBLE_PROVIDER_ID } from "../provider-registry-BvXBqJDR.js";
5
5
  import { z } from "zod";
6
6
  import { EmbeddingModelV4, LanguageModelV4, SharedV4ProviderMetadata } from "@ai-sdk/provider";
7
7
  //#region src/ai/instrumented-model.d.ts
@@ -58,7 +58,7 @@ export declare function createInstrumentedEmbeddingModel(model: EmbeddingModelV4
58
58
  * (1 USD = 1,000,000 microdollars) to avoid float accumulation.
59
59
  *
60
60
  * The pricing table is injectable: pass your own to `createCostEstimator` for a
61
- * different provider/model set. A default Anthropic/OpenAI-embedding table ships.
61
+ * different provider/model set. A default table for the registry's vendors ships.
62
62
  */
63
63
  export interface ModelPricing {
64
64
  inputPerMillion: number;
package/dist/ai/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { S as ok, b as noopLogger, f as defineStep, l as buildWorkflow, x as err } from "../core-DNWPwFaE.js";
2
2
  import { a as readRefusalDetails, i as isAiRefusalError, n as REFUSAL_FINISH_REASON, r as createRefusalAwareModel, t as AiRefusalError } from "../refusal-BsL2HPDb.js";
3
- import { a as EMBEDDING_PROVIDERS, c as OPENAI_COMPATIBLE_PROVIDER_ID, d as resolveEndpointResidency, i as DEFAULT_EMBEDDING_PROVIDER, l as embeddingDimensionsFor, n as AI_PROVIDER_IDS, o as EMBEDDING_PROVIDER_IDS, r as DEFAULT_AI_PROVIDER, s as OPENAI_COMPATIBLE_PROVIDER, t as AI_PROVIDERS, u as isSubprocessorResidency } from "../provider-registry-DHL-Ed-L.js";
3
+ import { a as EMBEDDING_PROVIDERS, c as OPENAI_COMPATIBLE_PROVIDER_ID, d as resolveEndpointResidency, i as DEFAULT_EMBEDDING_PROVIDER, l as embeddingDimensionsFor, n as AI_PROVIDER_IDS, o as EMBEDDING_PROVIDER_IDS, r as DEFAULT_AI_PROVIDER, s as OPENAI_COMPATIBLE_PROVIDER, t as AI_PROVIDERS, u as isSubprocessorResidency } from "../provider-registry-BRwjC6_3.js";
4
4
  import { wrapEmbeddingModel, wrapLanguageModel } from "ai";
5
5
  //#region src/ai/instrumented-model.ts
6
6
  function createUsageAccumulator() {
@@ -1,4 +1,4 @@
1
- import { b as OpenAiCompatibleProviderId, g as EmbeddingProviderId, i as AiEndpointResidency, o as AiProviderId } from "../../provider-registry-BDKSe_iO.js";
1
+ import { b as OpenAiCompatibleProviderId, g as EmbeddingProviderId, i as AiEndpointResidency, o as AiProviderId } from "../../provider-registry-BvXBqJDR.js";
2
2
  import { EmbeddingModelV4, LanguageModelV4 } from "@ai-sdk/provider";
3
3
  //#region src/ai/providers/index.d.ts
4
4
  export type LanguageModelFactory = (modelId: string) => LanguageModelV4;
@@ -1,5 +1,5 @@
1
1
  import { r as createRefusalAwareModel } from "../../refusal-BsL2HPDb.js";
2
- import { a as EMBEDDING_PROVIDERS, c as OPENAI_COMPATIBLE_PROVIDER_ID, d as resolveEndpointResidency, t as AI_PROVIDERS } from "../../provider-registry-DHL-Ed-L.js";
2
+ import { a as EMBEDDING_PROVIDERS, c as OPENAI_COMPATIBLE_PROVIDER_ID, d as resolveEndpointResidency, t as AI_PROVIDERS } from "../../provider-registry-BRwjC6_3.js";
3
3
  //#region src/ai/providers/index.ts
4
4
  const LLM_LOADERS = {
5
5
  anthropic: async (apiKey, baseURL) => {
@@ -52,7 +52,7 @@ function createEmbeddingModelFactory(providerId, apiKey, baseURL) {
52
52
  * ```
53
53
  */
54
54
  async function createLanguageModelProvider(config) {
55
- const providerId = config.provider ?? "anthropic";
55
+ const providerId = config.provider ?? "mistral";
56
56
  const meta = AI_PROVIDERS[providerId];
57
57
  const factory = await createLanguageModelFactory(providerId, config.apiKey, config.baseUrl);
58
58
  const defaultModel = config.defaultModel ?? meta.defaultModel;
@@ -63,7 +63,7 @@ async function createLanguageModelProvider(config) {
63
63
  };
64
64
  }
65
65
  async function createEmbeddingModelProvider(config) {
66
- const providerId = config.provider ?? "openai";
66
+ const providerId = config.provider ?? "mistral";
67
67
  const factory = await createEmbeddingModelFactory(providerId, config.apiKey, config.baseUrl);
68
68
  const modelId = config.model ?? EMBEDDING_PROVIDERS[providerId].defaultModel;
69
69
  return {
@@ -125,6 +125,7 @@ function checkEndpoint(config) {
125
125
  url = void 0;
126
126
  }
127
127
  if (url === void 0 || url.protocol !== "http:" && url.protocol !== "https:") throw new AiProviderConfigError("ai_base_url_invalid", `baseUrl must be an absolute http(s) URL, got ${JSON.stringify(config.baseUrl)}`);
128
+ if (url.protocol === "http:" && residency.value.region !== "self-hosted") throw new AiProviderConfigError("ai_base_url_invalid", `baseUrl must be https for a vendor endpoint (residency ${residency.value.region}); http is for self-hosted endpoints only, got ${JSON.stringify(config.baseUrl)}`);
128
129
  return residency.value;
129
130
  }
130
131
  function requireModel(modelId, field) {
@@ -1,2 +1,2 @@
1
- import { C as isSubprocessorResidency, S as embeddingDimensionsFor, _ as EmbeddingProviderMeta, a as AiProcessingRegion, b as OpenAiCompatibleProviderId, c as AiProviderModelOption, d as AiVendorResidency, f as DEFAULT_AI_PROVIDER, g as EmbeddingProviderId, h as EMBEDDING_PROVIDER_IDS, i as AiEndpointResidency, l as AiResidencyError, m as EMBEDDING_PROVIDERS, n as AI_PROVIDER_IDS, o as AiProviderId, p as DEFAULT_EMBEDDING_PROVIDER, r as AiEndpointRegion, s as AiProviderMeta, t as AI_PROVIDERS, u as AiResidencyResult, v as OPENAI_COMPATIBLE_PROVIDER, w as resolveEndpointResidency, x as OpenAiCompatibleProviderMeta, y as OPENAI_COMPATIBLE_PROVIDER_ID } from "../provider-registry-BDKSe_iO.js";
1
+ import { C as isSubprocessorResidency, S as embeddingDimensionsFor, _ as EmbeddingProviderMeta, a as AiProcessingRegion, b as OpenAiCompatibleProviderId, c as AiProviderModelOption, d as AiVendorResidency, f as DEFAULT_AI_PROVIDER, g as EmbeddingProviderId, h as EMBEDDING_PROVIDER_IDS, i as AiEndpointResidency, l as AiResidencyError, m as EMBEDDING_PROVIDERS, n as AI_PROVIDER_IDS, o as AiProviderId, p as DEFAULT_EMBEDDING_PROVIDER, r as AiEndpointRegion, s as AiProviderMeta, t as AI_PROVIDERS, u as AiResidencyResult, v as OPENAI_COMPATIBLE_PROVIDER, w as resolveEndpointResidency, x as OpenAiCompatibleProviderMeta, y as OPENAI_COMPATIBLE_PROVIDER_ID } from "../provider-registry-BvXBqJDR.js";
2
2
  export { AI_PROVIDERS, AI_PROVIDER_IDS, AiEndpointRegion, AiEndpointResidency, AiProcessingRegion, AiProviderId, AiProviderMeta, AiProviderModelOption, AiResidencyError, AiResidencyResult, AiVendorResidency, DEFAULT_AI_PROVIDER, DEFAULT_EMBEDDING_PROVIDER, EMBEDDING_PROVIDERS, EMBEDDING_PROVIDER_IDS, EmbeddingProviderId, EmbeddingProviderMeta, OPENAI_COMPATIBLE_PROVIDER, OPENAI_COMPATIBLE_PROVIDER_ID, OpenAiCompatibleProviderId, OpenAiCompatibleProviderMeta, embeddingDimensionsFor, isSubprocessorResidency, resolveEndpointResidency };
@@ -1,2 +1,2 @@
1
- import { a as EMBEDDING_PROVIDERS, c as OPENAI_COMPATIBLE_PROVIDER_ID, d as resolveEndpointResidency, i as DEFAULT_EMBEDDING_PROVIDER, l as embeddingDimensionsFor, n as AI_PROVIDER_IDS, o as EMBEDDING_PROVIDER_IDS, r as DEFAULT_AI_PROVIDER, s as OPENAI_COMPATIBLE_PROVIDER, t as AI_PROVIDERS, u as isSubprocessorResidency } from "../provider-registry-DHL-Ed-L.js";
1
+ import { a as EMBEDDING_PROVIDERS, c as OPENAI_COMPATIBLE_PROVIDER_ID, d as resolveEndpointResidency, i as DEFAULT_EMBEDDING_PROVIDER, l as embeddingDimensionsFor, n as AI_PROVIDER_IDS, o as EMBEDDING_PROVIDER_IDS, r as DEFAULT_AI_PROVIDER, s as OPENAI_COMPATIBLE_PROVIDER, t as AI_PROVIDERS, u as isSubprocessorResidency } from "../provider-registry-BRwjC6_3.js";
2
2
  export { AI_PROVIDERS, AI_PROVIDER_IDS, DEFAULT_AI_PROVIDER, DEFAULT_EMBEDDING_PROVIDER, EMBEDDING_PROVIDERS, EMBEDDING_PROVIDER_IDS, OPENAI_COMPATIBLE_PROVIDER, OPENAI_COMPATIBLE_PROVIDER_ID, embeddingDimensionsFor, isSubprocessorResidency, resolveEndpointResidency };
@@ -276,7 +276,7 @@ function createPgBossStepWorker(deps) {
276
276
  }
277
277
  async function stop() {
278
278
  if (workerId) {
279
- await boss.offWork(workerId);
279
+ await boss.offWork(queueName, { id: workerId });
280
280
  workerId = null;
281
281
  }
282
282
  }
@@ -314,7 +314,7 @@ function createPgBossDlqWorker(deps) {
314
314
  }
315
315
  async function stop() {
316
316
  if (workerId) {
317
- await boss.offWork(workerId);
317
+ await boss.offWork(dlq, { id: workerId });
318
318
  workerId = null;
319
319
  }
320
320
  }
@@ -398,7 +398,7 @@ function createPgBossStartWorker(deps) {
398
398
  }
399
399
  async function stop() {
400
400
  if (workerId) {
401
- await boss.offWork(workerId);
401
+ await boss.offWork(queueName, { id: workerId });
402
402
  workerId = null;
403
403
  }
404
404
  }
@@ -11,9 +11,15 @@
11
11
  */
12
12
  const AI_PROVIDER_IDS = ["anthropic", "mistral"];
13
13
  const EMBEDDING_PROVIDER_IDS = ["openai", "mistral"];
14
- /** What an unset provider resolves to. */
15
- const DEFAULT_AI_PROVIDER = "anthropic";
16
- const DEFAULT_EMBEDDING_PROVIDER = "openai";
14
+ /**
15
+ * What an unset provider resolves to: the EU-established vendor, so a deployment
16
+ * that names no provider adds no third-country transfer to its annex. Choosing
17
+ * a third-country vendor is a decision the caller writes down. The embedding
18
+ * default is 1024-dimensional (`mistral-embed`); a `vector(N)` column sized for
19
+ * another model names its provider explicitly.
20
+ */
21
+ const DEFAULT_AI_PROVIDER = "mistral";
22
+ const DEFAULT_EMBEDDING_PROVIDER = "mistral";
17
23
  const AI_PROVIDERS = {
18
24
  anthropic: {
19
25
  id: "anthropic",
@@ -13,7 +13,13 @@ declare const AI_PROVIDER_IDS: readonly ['anthropic', 'mistral'];
13
13
  type AiProviderId = (typeof AI_PROVIDER_IDS)[number];
14
14
  declare const EMBEDDING_PROVIDER_IDS: readonly ['openai', 'mistral'];
15
15
  type EmbeddingProviderId = (typeof EMBEDDING_PROVIDER_IDS)[number];
16
- /** What an unset provider resolves to. */
16
+ /**
17
+ * What an unset provider resolves to: the EU-established vendor, so a deployment
18
+ * that names no provider adds no third-country transfer to its annex. Choosing
19
+ * a third-country vendor is a decision the caller writes down. The embedding
20
+ * default is 1024-dimensional (`mistral-embed`); a `vector(N)` column sized for
21
+ * another model names its provider explicitly.
22
+ */
17
23
  declare const DEFAULT_AI_PROVIDER: AiProviderId;
18
24
  declare const DEFAULT_EMBEDDING_PROVIDER: EmbeddingProviderId;
19
25
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "octaflow",
3
- "version": "0.23.0",
3
+ "version": "0.24.1",
4
4
  "description": "Durable DAG workflow engine: Zod-typed steps over Postgres + pg-boss, with an optional AI add-on (token/cost/quota). Layered single package.",
5
5
  "license": "MIT",
6
6
  "type": "module",