octaflow 0.18.0 → 0.19.0
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/ai/index.js
CHANGED
|
@@ -1,5 +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
|
-
import { a as
|
|
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, i as DEFAULT_EMBEDDING_PROVIDER, n as AI_PROVIDER_IDS, o as EMBEDDING_PROVIDER_IDS, r as DEFAULT_AI_PROVIDER, s as embeddingDimensionsFor, t as AI_PROVIDERS } from "../provider-registry-DcRDsjtT.js";
|
|
3
4
|
import { wrapEmbeddingModel, wrapLanguageModel } from "ai";
|
|
4
5
|
//#region src/ai/instrumented-model.ts
|
|
5
6
|
function createUsageAccumulator() {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { r as createRefusalAwareModel } from "../../refusal-BsL2HPDb.js";
|
|
2
|
+
import { a as EMBEDDING_PROVIDERS, t as AI_PROVIDERS } from "../../provider-registry-DcRDsjtT.js";
|
|
2
3
|
//#region src/ai/providers/index.ts
|
|
3
4
|
const LLM_LOADERS = {
|
|
4
5
|
anthropic: async (apiKey, baseURL) => {
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { a as AiProviderMeta, c as DEFAULT_AI_PROVIDER, d as EMBEDDING_PROVIDER_IDS, f as EmbeddingProviderId, i as AiProviderId, l as DEFAULT_EMBEDDING_PROVIDER, m as embeddingDimensionsFor, n as AI_PROVIDER_IDS, o as AiProviderModelOption, p as EmbeddingProviderMeta, r as AiProcessingRegion, s as AiVendorResidency, t as AI_PROVIDERS, u as EMBEDDING_PROVIDERS } from "../provider-registry-bXGOmyeh.js";
|
|
2
|
+
export { AI_PROVIDERS, AI_PROVIDER_IDS, AiProcessingRegion, AiProviderId, AiProviderMeta, AiProviderModelOption, AiVendorResidency, DEFAULT_AI_PROVIDER, DEFAULT_EMBEDDING_PROVIDER, EMBEDDING_PROVIDERS, EMBEDDING_PROVIDER_IDS, EmbeddingProviderId, EmbeddingProviderMeta, embeddingDimensionsFor };
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { a as EMBEDDING_PROVIDERS, i as DEFAULT_EMBEDDING_PROVIDER, n as AI_PROVIDER_IDS, o as EMBEDDING_PROVIDER_IDS, r as DEFAULT_AI_PROVIDER, s as embeddingDimensionsFor, t as AI_PROVIDERS } from "../provider-registry-DcRDsjtT.js";
|
|
2
|
+
export { AI_PROVIDERS, AI_PROVIDER_IDS, DEFAULT_AI_PROVIDER, DEFAULT_EMBEDDING_PROVIDER, EMBEDDING_PROVIDERS, EMBEDDING_PROVIDER_IDS, embeddingDimensionsFor };
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
//#region src/ai/provider-registry.ts
|
|
2
|
+
/**
|
|
3
|
+
* The provider registry — pure metadata about the vendors a BYOK deployment
|
|
4
|
+
* can point at: ids, default and cheap models, where a key is created, and
|
|
5
|
+
* **where the vendor processes what you send it**. Dependency-free, so a
|
|
6
|
+
* browser bundle (a provider/model picker, a residency badge) can import it;
|
|
7
|
+
* the SDK factories that need `@ai-sdk/*` live in `octaflow/ai/providers`.
|
|
8
|
+
*
|
|
9
|
+
* Adding a provider: an id here with its metadata, a factory in
|
|
10
|
+
* `providers/`, and pricing rows in `cost.ts`.
|
|
11
|
+
*/
|
|
12
|
+
const AI_PROVIDER_IDS = ["anthropic", "mistral"];
|
|
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";
|
|
17
|
+
const AI_PROVIDERS = {
|
|
18
|
+
anthropic: {
|
|
19
|
+
id: "anthropic",
|
|
20
|
+
label: "Anthropic",
|
|
21
|
+
residency: {
|
|
22
|
+
region: "third-country",
|
|
23
|
+
legalName: "Anthropic PBC",
|
|
24
|
+
country: "US"
|
|
25
|
+
},
|
|
26
|
+
defaultModel: "claude-sonnet-5",
|
|
27
|
+
classifierModel: "claude-haiku-4-5",
|
|
28
|
+
testModel: "claude-haiku-4-5",
|
|
29
|
+
keyPrefix: "sk-ant-",
|
|
30
|
+
consoleKeyUrl: "https://console.anthropic.com/settings/keys",
|
|
31
|
+
modelOptions: [
|
|
32
|
+
{
|
|
33
|
+
label: "Claude Opus 5",
|
|
34
|
+
value: "claude-opus-5"
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
label: "Claude Opus 4.8",
|
|
38
|
+
value: "claude-opus-4-8"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
label: "Claude Sonnet 5",
|
|
42
|
+
value: "claude-sonnet-5"
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
label: "Claude Haiku 4.5",
|
|
46
|
+
value: "claude-haiku-4-5"
|
|
47
|
+
}
|
|
48
|
+
]
|
|
49
|
+
},
|
|
50
|
+
mistral: {
|
|
51
|
+
id: "mistral",
|
|
52
|
+
label: "Mistral",
|
|
53
|
+
residency: {
|
|
54
|
+
region: "eu",
|
|
55
|
+
legalName: "Mistral AI SAS",
|
|
56
|
+
country: "FR"
|
|
57
|
+
},
|
|
58
|
+
defaultModel: "mistral-medium-latest",
|
|
59
|
+
classifierModel: "mistral-small-latest",
|
|
60
|
+
testModel: "mistral-small-latest",
|
|
61
|
+
keyPrefix: null,
|
|
62
|
+
consoleKeyUrl: "https://console.mistral.ai/api-keys",
|
|
63
|
+
modelOptions: [
|
|
64
|
+
{
|
|
65
|
+
label: "Mistral Medium 3.5",
|
|
66
|
+
value: "mistral-medium-latest"
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
label: "Mistral Large 3",
|
|
70
|
+
value: "mistral-large-latest"
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
label: "Mistral Small 4",
|
|
74
|
+
value: "mistral-small-latest"
|
|
75
|
+
}
|
|
76
|
+
]
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
const EMBEDDING_PROVIDERS = {
|
|
80
|
+
openai: {
|
|
81
|
+
id: "openai",
|
|
82
|
+
label: "OpenAI",
|
|
83
|
+
residency: {
|
|
84
|
+
region: "third-country",
|
|
85
|
+
legalName: "OpenAI, L.L.C.",
|
|
86
|
+
country: "US"
|
|
87
|
+
},
|
|
88
|
+
defaultModel: "text-embedding-3-small",
|
|
89
|
+
consoleKeyUrl: "https://platform.openai.com/api-keys",
|
|
90
|
+
dimensionsByModel: {
|
|
91
|
+
"text-embedding-3-small": 1536,
|
|
92
|
+
"text-embedding-3-large": 3072
|
|
93
|
+
}
|
|
94
|
+
},
|
|
95
|
+
mistral: {
|
|
96
|
+
id: "mistral",
|
|
97
|
+
label: "Mistral",
|
|
98
|
+
residency: {
|
|
99
|
+
region: "eu",
|
|
100
|
+
legalName: "Mistral AI SAS",
|
|
101
|
+
country: "FR"
|
|
102
|
+
},
|
|
103
|
+
defaultModel: "mistral-embed",
|
|
104
|
+
consoleKeyUrl: "https://console.mistral.ai/api-keys",
|
|
105
|
+
dimensionsByModel: { "mistral-embed": 1024 }
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
/**
|
|
109
|
+
* Vector dimensions for an embedding model id. Unknown ids fall back to
|
|
110
|
+
* `fallback` (default 1536, the common OpenAI-compatible dimension) so
|
|
111
|
+
* free-form model ids keep a working column.
|
|
112
|
+
*/
|
|
113
|
+
function embeddingDimensionsFor(modelId, fallback = 1536) {
|
|
114
|
+
for (const meta of Object.values(EMBEDDING_PROVIDERS)) {
|
|
115
|
+
const dims = meta.dimensionsByModel[modelId];
|
|
116
|
+
if (dims !== void 0) return dims;
|
|
117
|
+
}
|
|
118
|
+
return fallback;
|
|
119
|
+
}
|
|
120
|
+
//#endregion
|
|
121
|
+
export { EMBEDDING_PROVIDERS as a, DEFAULT_EMBEDDING_PROVIDER as i, AI_PROVIDER_IDS as n, EMBEDDING_PROVIDER_IDS as o, DEFAULT_AI_PROVIDER as r, embeddingDimensionsFor as s, AI_PROVIDERS as t };
|
|
@@ -101,124 +101,4 @@ function createRefusalAwareModel(model) {
|
|
|
101
101
|
});
|
|
102
102
|
}
|
|
103
103
|
//#endregion
|
|
104
|
-
|
|
105
|
-
/**
|
|
106
|
-
* The provider registry — pure metadata about the vendors a BYOK deployment
|
|
107
|
-
* can point at: ids, default and cheap models, where a key is created, and
|
|
108
|
-
* **where the vendor processes what you send it**. Dependency-free, so a
|
|
109
|
-
* browser bundle (a provider/model picker, a residency badge) can import it;
|
|
110
|
-
* the SDK factories that need `@ai-sdk/*` live in `octaflow/ai/providers`.
|
|
111
|
-
*
|
|
112
|
-
* Adding a provider: an id here with its metadata, a factory in
|
|
113
|
-
* `providers/`, and pricing rows in `cost.ts`.
|
|
114
|
-
*/
|
|
115
|
-
const AI_PROVIDER_IDS = ["anthropic", "mistral"];
|
|
116
|
-
const EMBEDDING_PROVIDER_IDS = ["openai", "mistral"];
|
|
117
|
-
/** What an unset provider resolves to. */
|
|
118
|
-
const DEFAULT_AI_PROVIDER = "anthropic";
|
|
119
|
-
const DEFAULT_EMBEDDING_PROVIDER = "openai";
|
|
120
|
-
const AI_PROVIDERS = {
|
|
121
|
-
anthropic: {
|
|
122
|
-
id: "anthropic",
|
|
123
|
-
label: "Anthropic",
|
|
124
|
-
residency: {
|
|
125
|
-
region: "third-country",
|
|
126
|
-
legalName: "Anthropic PBC",
|
|
127
|
-
country: "US"
|
|
128
|
-
},
|
|
129
|
-
defaultModel: "claude-sonnet-5",
|
|
130
|
-
classifierModel: "claude-haiku-4-5",
|
|
131
|
-
testModel: "claude-haiku-4-5",
|
|
132
|
-
keyPrefix: "sk-ant-",
|
|
133
|
-
consoleKeyUrl: "https://console.anthropic.com/settings/keys",
|
|
134
|
-
modelOptions: [
|
|
135
|
-
{
|
|
136
|
-
label: "Claude Opus 5",
|
|
137
|
-
value: "claude-opus-5"
|
|
138
|
-
},
|
|
139
|
-
{
|
|
140
|
-
label: "Claude Opus 4.8",
|
|
141
|
-
value: "claude-opus-4-8"
|
|
142
|
-
},
|
|
143
|
-
{
|
|
144
|
-
label: "Claude Sonnet 5",
|
|
145
|
-
value: "claude-sonnet-5"
|
|
146
|
-
},
|
|
147
|
-
{
|
|
148
|
-
label: "Claude Haiku 4.5",
|
|
149
|
-
value: "claude-haiku-4-5"
|
|
150
|
-
}
|
|
151
|
-
]
|
|
152
|
-
},
|
|
153
|
-
mistral: {
|
|
154
|
-
id: "mistral",
|
|
155
|
-
label: "Mistral",
|
|
156
|
-
residency: {
|
|
157
|
-
region: "eu",
|
|
158
|
-
legalName: "Mistral AI SAS",
|
|
159
|
-
country: "FR"
|
|
160
|
-
},
|
|
161
|
-
defaultModel: "mistral-medium-latest",
|
|
162
|
-
classifierModel: "mistral-small-latest",
|
|
163
|
-
testModel: "mistral-small-latest",
|
|
164
|
-
keyPrefix: null,
|
|
165
|
-
consoleKeyUrl: "https://console.mistral.ai/api-keys",
|
|
166
|
-
modelOptions: [
|
|
167
|
-
{
|
|
168
|
-
label: "Mistral Medium 3.5",
|
|
169
|
-
value: "mistral-medium-latest"
|
|
170
|
-
},
|
|
171
|
-
{
|
|
172
|
-
label: "Mistral Large 3",
|
|
173
|
-
value: "mistral-large-latest"
|
|
174
|
-
},
|
|
175
|
-
{
|
|
176
|
-
label: "Mistral Small 4",
|
|
177
|
-
value: "mistral-small-latest"
|
|
178
|
-
}
|
|
179
|
-
]
|
|
180
|
-
}
|
|
181
|
-
};
|
|
182
|
-
const EMBEDDING_PROVIDERS = {
|
|
183
|
-
openai: {
|
|
184
|
-
id: "openai",
|
|
185
|
-
label: "OpenAI",
|
|
186
|
-
residency: {
|
|
187
|
-
region: "third-country",
|
|
188
|
-
legalName: "OpenAI, L.L.C.",
|
|
189
|
-
country: "US"
|
|
190
|
-
},
|
|
191
|
-
defaultModel: "text-embedding-3-small",
|
|
192
|
-
consoleKeyUrl: "https://platform.openai.com/api-keys",
|
|
193
|
-
dimensionsByModel: {
|
|
194
|
-
"text-embedding-3-small": 1536,
|
|
195
|
-
"text-embedding-3-large": 3072
|
|
196
|
-
}
|
|
197
|
-
},
|
|
198
|
-
mistral: {
|
|
199
|
-
id: "mistral",
|
|
200
|
-
label: "Mistral",
|
|
201
|
-
residency: {
|
|
202
|
-
region: "eu",
|
|
203
|
-
legalName: "Mistral AI SAS",
|
|
204
|
-
country: "FR"
|
|
205
|
-
},
|
|
206
|
-
defaultModel: "mistral-embed",
|
|
207
|
-
consoleKeyUrl: "https://console.mistral.ai/api-keys",
|
|
208
|
-
dimensionsByModel: { "mistral-embed": 1024 }
|
|
209
|
-
}
|
|
210
|
-
};
|
|
211
|
-
/**
|
|
212
|
-
* Vector dimensions for an embedding model id. Unknown ids fall back to
|
|
213
|
-
* `fallback` (default 1536, the common OpenAI-compatible dimension) so
|
|
214
|
-
* free-form model ids keep a working column.
|
|
215
|
-
*/
|
|
216
|
-
function embeddingDimensionsFor(modelId, fallback = 1536) {
|
|
217
|
-
for (const meta of Object.values(EMBEDDING_PROVIDERS)) {
|
|
218
|
-
const dims = meta.dimensionsByModel[modelId];
|
|
219
|
-
if (dims !== void 0) return dims;
|
|
220
|
-
}
|
|
221
|
-
return fallback;
|
|
222
|
-
}
|
|
223
|
-
//#endregion
|
|
224
|
-
export { EMBEDDING_PROVIDERS as a, AiRefusalError as c, isAiRefusalError as d, readRefusalDetails as f, DEFAULT_EMBEDDING_PROVIDER as i, REFUSAL_FINISH_REASON as l, AI_PROVIDER_IDS as n, EMBEDDING_PROVIDER_IDS as o, DEFAULT_AI_PROVIDER as r, embeddingDimensionsFor as s, AI_PROVIDERS as t, createRefusalAwareModel as u };
|
|
104
|
+
export { readRefusalDetails as a, isAiRefusalError as i, REFUSAL_FINISH_REASON as n, createRefusalAwareModel as r, AiRefusalError as t };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "octaflow",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.19.0",
|
|
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",
|
|
@@ -29,6 +29,11 @@
|
|
|
29
29
|
"types": "./dist/ai/providers/index.d.ts",
|
|
30
30
|
"import": "./dist/ai/providers/index.js",
|
|
31
31
|
"default": "./dist/ai/providers/index.js"
|
|
32
|
+
},
|
|
33
|
+
"./ai/registry": {
|
|
34
|
+
"types": "./dist/ai/registry.d.ts",
|
|
35
|
+
"import": "./dist/ai/registry.js",
|
|
36
|
+
"default": "./dist/ai/registry.js"
|
|
32
37
|
}
|
|
33
38
|
},
|
|
34
39
|
"engines": {
|