@threaded/ai 1.0.30 → 2.0.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.
Files changed (112) hide show
  1. package/README.md +240 -0
  2. package/dist/approval.d.ts +18 -0
  3. package/dist/approval.d.ts.map +1 -0
  4. package/dist/approval.js +35 -0
  5. package/dist/approval.js.map +1 -0
  6. package/dist/composition/compose.d.ts +3 -0
  7. package/dist/composition/compose.d.ts.map +1 -0
  8. package/dist/composition/compose.js +38 -0
  9. package/dist/composition/compose.js.map +1 -0
  10. package/dist/composition/model.d.ts +9 -0
  11. package/dist/composition/model.d.ts.map +1 -0
  12. package/dist/composition/model.js +192 -0
  13. package/dist/composition/model.js.map +1 -0
  14. package/dist/composition/retry.d.ts +6 -0
  15. package/dist/composition/retry.d.ts.map +1 -0
  16. package/dist/composition/retry.js +18 -0
  17. package/dist/composition/retry.js.map +1 -0
  18. package/dist/composition/scope.d.ts +3 -0
  19. package/dist/composition/scope.d.ts.map +1 -0
  20. package/dist/composition/scope.js +83 -0
  21. package/dist/composition/scope.js.map +1 -0
  22. package/dist/composition/tap.d.ts +3 -0
  23. package/dist/composition/tap.d.ts.map +1 -0
  24. package/dist/composition/tap.js +7 -0
  25. package/dist/composition/tap.js.map +1 -0
  26. package/dist/composition/when.d.ts +3 -0
  27. package/dist/composition/when.d.ts.map +1 -0
  28. package/dist/composition/when.js +9 -0
  29. package/dist/composition/when.js.map +1 -0
  30. package/dist/embed.d.ts +17 -0
  31. package/dist/embed.d.ts.map +1 -0
  32. package/dist/embed.js +81 -0
  33. package/dist/embed.js.map +1 -0
  34. package/dist/examples.d.ts +2 -0
  35. package/dist/examples.d.ts.map +1 -0
  36. package/dist/examples.js +6 -0
  37. package/dist/examples.js.map +1 -0
  38. package/dist/helpers.d.ts +17 -0
  39. package/dist/helpers.d.ts.map +1 -0
  40. package/dist/helpers.js +104 -0
  41. package/dist/helpers.js.map +1 -0
  42. package/dist/image-model-schema.d.ts +19 -0
  43. package/dist/image-model-schema.d.ts.map +1 -0
  44. package/dist/image-model-schema.js +103 -0
  45. package/dist/image-model-schema.js.map +1 -0
  46. package/dist/image.d.ts +3 -0
  47. package/dist/image.d.ts.map +1 -0
  48. package/dist/image.js +121 -0
  49. package/dist/image.js.map +1 -0
  50. package/dist/index.d.ts +18 -352
  51. package/dist/index.d.ts.map +1 -0
  52. package/dist/index.js +17 -2073
  53. package/dist/index.js.map +1 -1
  54. package/dist/mcp.d.ts +21 -0
  55. package/dist/mcp.d.ts.map +1 -0
  56. package/dist/mcp.js +84 -0
  57. package/dist/mcp.js.map +1 -0
  58. package/dist/providers/anthropic.d.ts +3 -0
  59. package/dist/providers/anthropic.d.ts.map +1 -0
  60. package/dist/providers/anthropic.js +226 -0
  61. package/dist/providers/anthropic.js.map +1 -0
  62. package/dist/providers/google.d.ts +3 -0
  63. package/dist/providers/google.d.ts.map +1 -0
  64. package/dist/providers/google.js +244 -0
  65. package/dist/providers/google.js.map +1 -0
  66. package/dist/providers/huggingface.d.ts +3 -0
  67. package/dist/providers/huggingface.d.ts.map +1 -0
  68. package/dist/providers/huggingface.js +59 -0
  69. package/dist/providers/huggingface.js.map +1 -0
  70. package/dist/providers/index.d.ts +3 -0
  71. package/dist/providers/index.d.ts.map +1 -0
  72. package/dist/providers/index.js +28 -0
  73. package/dist/providers/index.js.map +1 -0
  74. package/dist/providers/local.d.ts +3 -0
  75. package/dist/providers/local.d.ts.map +1 -0
  76. package/dist/providers/local.js +152 -0
  77. package/dist/providers/local.js.map +1 -0
  78. package/dist/providers/openai.d.ts +3 -0
  79. package/dist/providers/openai.d.ts.map +1 -0
  80. package/dist/providers/openai.js +166 -0
  81. package/dist/providers/openai.js.map +1 -0
  82. package/dist/providers/xai.d.ts +3 -0
  83. package/dist/providers/xai.d.ts.map +1 -0
  84. package/dist/providers/xai.js +161 -0
  85. package/dist/providers/xai.js.map +1 -0
  86. package/dist/schema.d.ts +7 -0
  87. package/dist/schema.d.ts.map +1 -0
  88. package/dist/schema.js +44 -0
  89. package/dist/schema.js.map +1 -0
  90. package/dist/thread.d.ts +25 -0
  91. package/dist/thread.d.ts.map +1 -0
  92. package/dist/thread.js +87 -0
  93. package/dist/thread.js.map +1 -0
  94. package/dist/types.d.ts +193 -0
  95. package/dist/types.d.ts.map +1 -0
  96. package/dist/types.js +8 -0
  97. package/dist/types.js.map +1 -0
  98. package/dist/utils/rateLimited.d.ts +27 -0
  99. package/dist/utils/rateLimited.d.ts.map +1 -0
  100. package/dist/utils/rateLimited.js +74 -0
  101. package/dist/utils/rateLimited.js.map +1 -0
  102. package/dist/utils.d.ts +8 -0
  103. package/dist/utils.d.ts.map +1 -0
  104. package/dist/utils.js +78 -0
  105. package/dist/utils.js.map +1 -0
  106. package/package.json +34 -12
  107. package/.claude/settings.local.json +0 -15
  108. package/.lore +0 -65
  109. package/dist/index.cjs +0 -2149
  110. package/dist/index.cjs.map +0 -1
  111. package/dist/index.d.cts +0 -352
  112. package/tsconfig.json +0 -29
@@ -0,0 +1,83 @@
1
+ import { compose } from "./compose";
2
+ import { Inherit, } from "../types";
3
+ import { toolConfigToToolDefinition } from "../utils";
4
+ const scopeContext = (config, ctx) => {
5
+ const inherit = config.inherit ?? Inherit.Conversation;
6
+ let scopedCtx = {
7
+ history: [],
8
+ tools: [],
9
+ toolExecutors: {},
10
+ toolLimits: {},
11
+ toolCallCounts: {},
12
+ };
13
+ // inheritance
14
+ if (inherit & Inherit.Conversation) {
15
+ scopedCtx.history = ctx.history;
16
+ scopedCtx.lastResponse = ctx.lastResponse;
17
+ scopedCtx.lastRequest = ctx.lastRequest;
18
+ }
19
+ if (inherit & Inherit.Tools) {
20
+ scopedCtx.tools = [...(ctx.tools || [])];
21
+ scopedCtx.toolExecutors = { ...(ctx.toolExecutors || {}) };
22
+ scopedCtx.toolLimits = { ...(ctx.toolLimits || {}) };
23
+ scopedCtx.toolCallCounts = { ...(ctx.toolCallCounts || {}) };
24
+ scopedCtx.toolConfig = ctx.toolConfig ? { ...ctx.toolConfig } : undefined;
25
+ }
26
+ scopedCtx.stream = ctx.stream;
27
+ scopedCtx.abortSignal = ctx.abortSignal;
28
+ scopedCtx.usage = ctx.usage;
29
+ if (config.tools) {
30
+ const toolDefinitions = config.tools.map(toolConfigToToolDefinition);
31
+ const toolExecutors = config.tools.reduce((acc, tool) => {
32
+ acc[tool.name] = tool.execute;
33
+ return acc;
34
+ }, {});
35
+ const toolLimits = config.tools.reduce((acc, tool) => {
36
+ if (tool._maxCalls) {
37
+ acc[tool.name] = tool._maxCalls;
38
+ }
39
+ return acc;
40
+ }, {});
41
+ scopedCtx.tools = toolDefinitions;
42
+ scopedCtx.toolExecutors = toolExecutors;
43
+ scopedCtx.toolLimits = toolLimits;
44
+ }
45
+ if (config.toolConfig) {
46
+ scopedCtx.toolConfig = { ...config.toolConfig };
47
+ }
48
+ if (config.system) {
49
+ const [first, ...rest] = scopedCtx.history;
50
+ if (first?.role === "system") {
51
+ scopedCtx.history = [{ role: "system", content: config.system }, ...rest];
52
+ }
53
+ else {
54
+ scopedCtx.history = [{ role: "system", content: config.system }, ...scopedCtx.history];
55
+ }
56
+ }
57
+ if (config.stream) {
58
+ scopedCtx.stream = config.stream;
59
+ }
60
+ return scopedCtx;
61
+ };
62
+ export const scope = (config, ...steps) => {
63
+ return async (ctx) => {
64
+ let scopedCtx = scopeContext(config, ctx);
65
+ if (config.until) {
66
+ do {
67
+ scopedCtx = await compose(...steps)(scopedCtx);
68
+ } while (!config.until(scopedCtx));
69
+ }
70
+ else {
71
+ scopedCtx = await compose(...steps)(scopedCtx);
72
+ }
73
+ return {
74
+ ...ctx,
75
+ history: config.silent ? ctx.history : scopedCtx.history,
76
+ lastResponse: config.silent ? ctx.lastResponse : scopedCtx.lastResponse,
77
+ lastRequest: config.silent ? ctx.lastRequest : scopedCtx.lastRequest,
78
+ stopReason: config.silent ? ctx.stopReason : scopedCtx.stopReason,
79
+ usage: scopedCtx.usage,
80
+ };
81
+ };
82
+ };
83
+ //# sourceMappingURL=scope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope.js","sourceRoot":"","sources":["../../src/composition/scope.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { ConversationContext, StepFunction } from "../types";
2
+ export declare const tap: (fn: (ctx: ConversationContext) => Promise<void> | void) => StepFunction;
3
+ //# sourceMappingURL=tap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tap.d.ts","sourceRoot":"","sources":["../../src/composition/tap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7D,eAAO,MAAM,GAAG,GACd,IAAI,CAAC,GAAG,EAAE,mBAAmB,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,KACrD,YAKF,CAAC"}
@@ -0,0 +1,7 @@
1
+ export const tap = (fn) => {
2
+ return async (ctx) => {
3
+ await fn(ctx);
4
+ return ctx;
5
+ };
6
+ };
7
+ //# sourceMappingURL=tap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tap.js","sourceRoot":"","sources":["../../src/composition/tap.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,GAAG,GAAG,CACjB,EAAsD,EACxC,EAAE;IAChB,OAAO,KAAK,EAAE,GAAwB,EAAgC,EAAE;QACtE,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC;QACd,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { ConversationContext, StepFunction } from "../types";
2
+ export declare const when: (condition: (ctx: ConversationContext) => boolean, action: StepFunction) => StepFunction;
3
+ //# sourceMappingURL=when.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"when.d.ts","sourceRoot":"","sources":["../../src/composition/when.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7D,eAAO,MAAM,IAAI,GACf,WAAW,CAAC,GAAG,EAAE,mBAAmB,KAAK,OAAO,EAChD,QAAQ,YAAY,KACnB,YAOF,CAAC"}
@@ -0,0 +1,9 @@
1
+ export const when = (condition, action) => {
2
+ return async (ctx) => {
3
+ if (condition(ctx)) {
4
+ return await action(ctx);
5
+ }
6
+ return ctx;
7
+ };
8
+ };
9
+ //# sourceMappingURL=when.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"when.js","sourceRoot":"","sources":["../../src/composition/when.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,IAAI,GAAG,CAClB,SAAgD,EAChD,MAAoB,EACN,EAAE;IAChB,OAAO,KAAK,EAAE,GAAwB,EAAgC,EAAE;QACtE,IAAI,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;YACnB,OAAO,MAAM,MAAM,CAAC,GAAG,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,17 @@
1
+ export declare const cosineSimilarity: (a: number[], b: number[]) => number;
2
+ /**
3
+ * generates embeddings for text using openai or huggingface models
4
+ *
5
+ * openai models use the prefix "openai/" (e.g., "openai/text-embedding-3-small")
6
+ * all other models use huggingface transformers
7
+ *
8
+ * accepts a single string or an array of strings for batch embedding
9
+ *
10
+ * @example
11
+ * const vector = await embed("openai/text-embedding-3-small", "hello world");
12
+ * const vectors = await embed("openai/text-embedding-3-small", ["hello", "world"]);
13
+ */
14
+ export declare const embed: (model: string, text: string | string[], config?: {
15
+ dimensions?: number;
16
+ }) => Promise<number[] | number[][]>;
17
+ //# sourceMappingURL=embed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embed.d.ts","sourceRoot":"","sources":["../src/embed.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,gBAAgB,GAAI,GAAG,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,KAAG,MAQ3D,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,KAAK,GAChB,OAAO,MAAM,EACb,MAAM,MAAM,GAAG,MAAM,EAAE,EACvB,SAAS;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,KAC/B,OAAO,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,EAAE,CAuE/B,CAAC"}
package/dist/embed.js ADDED
@@ -0,0 +1,81 @@
1
+ import { getKey } from "./utils";
2
+ const modelCache = new Map();
3
+ export const cosineSimilarity = (a, b) => {
4
+ let dot = 0, magA = 0, magB = 0;
5
+ for (let i = 0; i < a.length; i++) {
6
+ dot += a[i] * b[i];
7
+ magA += a[i] * a[i];
8
+ magB += b[i] * b[i];
9
+ }
10
+ return dot / (Math.sqrt(magA) * Math.sqrt(magB));
11
+ };
12
+ /**
13
+ * generates embeddings for text using openai or huggingface models
14
+ *
15
+ * openai models use the prefix "openai/" (e.g., "openai/text-embedding-3-small")
16
+ * all other models use huggingface transformers
17
+ *
18
+ * accepts a single string or an array of strings for batch embedding
19
+ *
20
+ * @example
21
+ * const vector = await embed("openai/text-embedding-3-small", "hello world");
22
+ * const vectors = await embed("openai/text-embedding-3-small", ["hello", "world"]);
23
+ */
24
+ export const embed = async (model, text, config) => {
25
+ const isBatch = Array.isArray(text);
26
+ if (model.startsWith("openai/")) {
27
+ const modelName = model.replace("openai/", "");
28
+ const apiKey = getKey("openai") || process.env.OPENAI_API_KEY;
29
+ if (!apiKey) {
30
+ throw new Error("OpenAI API key not found");
31
+ }
32
+ const body = {
33
+ model: modelName,
34
+ input: text,
35
+ };
36
+ if (config?.dimensions) {
37
+ body.dimensions = config.dimensions;
38
+ }
39
+ const response = await fetch("https://api.openai.com/v1/embeddings", {
40
+ method: "POST",
41
+ headers: {
42
+ "Content-Type": "application/json",
43
+ Authorization: `Bearer ${apiKey}`,
44
+ },
45
+ body: JSON.stringify(body),
46
+ });
47
+ if (!response.ok) {
48
+ const error = await response.text();
49
+ throw new Error(`OpenAI API error: ${error}`);
50
+ }
51
+ const data = (await response.json());
52
+ if (isBatch) {
53
+ return data.data.map((d) => d.embedding);
54
+ }
55
+ return data.data[0].embedding;
56
+ }
57
+ try {
58
+ const { pipeline } = await import("@huggingface/transformers");
59
+ if (!modelCache.has(model)) {
60
+ const extractor = await pipeline("feature-extraction", model, {
61
+ dtype: "fp32",
62
+ });
63
+ modelCache.set(model, extractor);
64
+ }
65
+ const extractor = modelCache.get(model);
66
+ if (isBatch) {
67
+ const results = [];
68
+ for (const t of text) {
69
+ const result = await extractor(t, { pooling: "mean", normalize: true });
70
+ results.push(Array.from(result.data));
71
+ }
72
+ return results;
73
+ }
74
+ const result = await extractor(text, { pooling: "mean", normalize: true });
75
+ return Array.from(result.data);
76
+ }
77
+ catch (error) {
78
+ throw new Error(`huggingface transformers failed to load. install system dependencies or use openai models instead. original error: ${error.message}`);
79
+ }
80
+ };
81
+ //# sourceMappingURL=embed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embed.js","sourceRoot":"","sources":["../src/embed.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=examples.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"examples.d.ts","sourceRoot":"","sources":["../src/examples.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ import { compose } from "./composition/compose";
2
+ import { model } from "./composition/model";
3
+ import { scope } from "./composition/scope";
4
+ import { appendToLastRequest, everyNMessages, noToolsCalled } from "./helpers";
5
+ const workflow = compose(everyNMessages(30, appendToLastRequest("stay focused")), scope({ tools: [], until: noToolsCalled() }, model({ model: "openai/gpt-4" })), scope({ tools: [], until: noToolsCalled() }, model({ model: "anthropic/sonnet" })));
6
+ //# sourceMappingURL=examples.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"examples.js","sourceRoot":"","sources":["../src/examples.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE/E,MAAM,QAAQ,GAAG,OAAO,CACtB,cAAc,CAAC,EAAE,EAAE,mBAAmB,CAAC,cAAc,CAAC,CAAC,EACvD,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC,EAC9E,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC,CAAC,CACnF,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { ConversationContext, StepFunction } from "./types";
2
+ /**
3
+ * scope({ until: noToolsCalled() })
4
+ */
5
+ export declare const noToolsCalled: () => (ctx: ConversationContext) => boolean;
6
+ export declare const everyNMessages: (n: number, step: StepFunction) => StepFunction;
7
+ export declare const everyNTokens: (n: number, step: StepFunction) => StepFunction;
8
+ export declare const appendToLastRequest: (content: string) => StepFunction;
9
+ /**
10
+ * toolNotUsedInNTurns({ toolName: "search_web", times: 10 }, appendToLastRequest("consider using web search..."))
11
+ */
12
+ export declare const toolNotUsedInNTurns: ({ toolName, times }: {
13
+ toolName: string;
14
+ times: number;
15
+ }, step: StepFunction) => StepFunction;
16
+ export declare const toolWasCalled: (name: string) => (ctx: ConversationContext) => boolean;
17
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAG5D;;GAEG;AACH,eAAO,MAAM,aAAa,SAEvB,KAAK,mBAAmB,KAAG,OAI3B,CAAC;AAEJ,eAAO,MAAM,cAAc,GAAI,GAAG,MAAM,EAAE,MAAM,YAAY,KAAG,YAW9D,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,GAAG,MAAM,EAAE,MAAM,YAAY,KAAG,YAoB5D,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,SAAS,MAAM,KAAG,YAuBrD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAC9B,qBAAqB;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EACxD,MAAM,YAAY,KACjB,YAsBF,CAAC;AAsCF,eAAO,MAAM,aAAa,GACvB,MAAM,MAAM,MACZ,KAAK,mBAAmB,KAAG,OAK3B,CAAC"}
@@ -0,0 +1,104 @@
1
+ import { when } from "./composition/when";
2
+ /**
3
+ * scope({ until: noToolsCalled() })
4
+ */
5
+ export const noToolsCalled = () => (ctx) => {
6
+ return (!ctx.lastResponse?.tool_calls || ctx.lastResponse.tool_calls.length === 0);
7
+ };
8
+ export const everyNMessages = (n, step) => {
9
+ let lastTriggeredAt = 0;
10
+ return when((ctx) => Math.floor(ctx.history.length / n) > Math.floor(lastTriggeredAt / n), async (ctx) => {
11
+ lastTriggeredAt = ctx.history.length;
12
+ return await step(ctx);
13
+ });
14
+ };
15
+ export const everyNTokens = (n, step) => {
16
+ let lastTriggeredAt = 0;
17
+ return when((ctx) => {
18
+ const totalTokens = ctx.history.reduce((acc, msg) => acc + Math.ceil(msg.content.length / 4), 0);
19
+ return Math.floor(totalTokens / n) > Math.floor(lastTriggeredAt / n);
20
+ }, async (ctx) => {
21
+ const totalTokens = ctx.history.reduce((acc, msg) => acc + Math.ceil(msg.content.length / 4), 0);
22
+ lastTriggeredAt = totalTokens;
23
+ return await step(ctx);
24
+ });
25
+ };
26
+ export const appendToLastRequest = (content) => {
27
+ return async (ctx) => {
28
+ let lastUserIndex = -1;
29
+ for (let i = ctx.history.length - 1; i >= 0; i--) {
30
+ if (ctx.history[i].role === "user") {
31
+ lastUserIndex = i;
32
+ break;
33
+ }
34
+ }
35
+ if (lastUserIndex === -1)
36
+ return ctx;
37
+ const newHistory = [...ctx.history];
38
+ newHistory[lastUserIndex] = {
39
+ ...newHistory[lastUserIndex],
40
+ content: newHistory[lastUserIndex].content + content,
41
+ };
42
+ return {
43
+ ...ctx,
44
+ history: newHistory,
45
+ };
46
+ };
47
+ };
48
+ /**
49
+ * toolNotUsedInNTurns({ toolName: "search_web", times: 10 }, appendToLastRequest("consider using web search..."))
50
+ */
51
+ export const toolNotUsedInNTurns = ({ toolName, times }, step) => {
52
+ let turnsSinceLastUsed = 0;
53
+ let lastProcessedTurn = -1;
54
+ return when((ctx) => {
55
+ const currentTurn = getCurrentTurn(ctx);
56
+ // only check once per turn
57
+ if (currentTurn === lastProcessedTurn)
58
+ return false;
59
+ lastProcessedTurn = currentTurn;
60
+ // check if tool was used in this turn
61
+ const toolUsedInTurn = wasToolUsedInCurrentTurn(ctx, toolName);
62
+ if (toolUsedInTurn) {
63
+ turnsSinceLastUsed = 0;
64
+ return false;
65
+ }
66
+ else {
67
+ turnsSinceLastUsed++;
68
+ return turnsSinceLastUsed >= times;
69
+ }
70
+ }, step);
71
+ };
72
+ const getCurrentTurn = (ctx) => {
73
+ let turns = 0;
74
+ for (const msg of ctx.history) {
75
+ if (msg.role === "user")
76
+ turns++;
77
+ }
78
+ return turns;
79
+ };
80
+ const wasToolUsedInCurrentTurn = (ctx, toolName) => {
81
+ // find the last user message and check all messages after it for tool usage
82
+ let lastUserIndex = -1;
83
+ for (let i = ctx.history.length - 1; i >= 0; i--) {
84
+ if (ctx.history[i].role === "user") {
85
+ lastUserIndex = i;
86
+ break;
87
+ }
88
+ }
89
+ if (lastUserIndex === -1)
90
+ return false;
91
+ // check messages after last user message for tool calls
92
+ for (let i = lastUserIndex + 1; i < ctx.history.length; i++) {
93
+ const msg = ctx.history[i];
94
+ if (msg.role === "assistant" && ctx.lastResponse?.tool_calls) {
95
+ return ctx.lastResponse.tool_calls.some((call) => call.function.name === toolName);
96
+ }
97
+ }
98
+ return false;
99
+ };
100
+ export const toolWasCalled = (name) => (ctx) => {
101
+ return (!!ctx.lastResponse?.tool_calls &&
102
+ ctx.lastResponse.tool_calls.some((call) => call.function.name === name));
103
+ };
104
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ export interface ConfigOption {
2
+ values: string[];
3
+ default: string;
4
+ description: string;
5
+ }
6
+ export interface ModelConfig {
7
+ [option: string]: ConfigOption;
8
+ }
9
+ export interface ProviderModels {
10
+ [model: string]: ModelConfig;
11
+ }
12
+ export interface ImageModelSchema {
13
+ [provider: string]: ProviderModels;
14
+ }
15
+ export declare const IMAGE_MODEL_SCHEMA: ImageModelSchema;
16
+ export declare const IMAGE_EDIT_MODEL_SCHEMA: ImageModelSchema;
17
+ export declare function getModelConfig(provider: string, model: string): ModelConfig | null;
18
+ export declare function getDefaultConfig(provider: string, model: string): Record<string, string>;
19
+ //# sourceMappingURL=image-model-schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-model-schema.d.ts","sourceRoot":"","sources":["../src/image-model-schema.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CAAC;CAChC;AAED,MAAM,WAAW,cAAc;IAC7B,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAAC;CAC9B;AAED,MAAM,WAAW,gBAAgB;IAC/B,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,CAAC;CACpC;AAED,eAAO,MAAM,kBAAkB,EAAE,gBAgEhC,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,gBAuBrC,CAAC;AAEF,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAElF;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQxF"}
@@ -0,0 +1,103 @@
1
+ export const IMAGE_MODEL_SCHEMA = {
2
+ openai: {
3
+ "dall-e-3": {
4
+ size: {
5
+ values: ["1024x1024", "1024x1792", "1792x1024"],
6
+ default: "1024x1024",
7
+ description: "Image dimensions",
8
+ },
9
+ quality: {
10
+ values: ["standard", "hd"],
11
+ default: "standard",
12
+ description: "Image quality level",
13
+ },
14
+ style: {
15
+ values: ["vivid", "natural"],
16
+ default: "vivid",
17
+ description: "Image style",
18
+ },
19
+ },
20
+ "gpt-image-1.5": {
21
+ size: {
22
+ values: ["1024x1024", "1536x1024", "1024x1536", "auto"],
23
+ default: "auto",
24
+ description: "Image dimensions",
25
+ },
26
+ quality: {
27
+ values: ["low", "medium", "high", "auto"],
28
+ default: "auto",
29
+ description: "Image quality level",
30
+ },
31
+ background: {
32
+ values: ["transparent", "opaque", "auto"],
33
+ default: "auto",
34
+ description: "Background type",
35
+ },
36
+ moderation: {
37
+ values: ["auto", "low"],
38
+ default: "auto",
39
+ description: "Content moderation level",
40
+ },
41
+ },
42
+ },
43
+ google: {
44
+ "gemini-2.5-flash-image": {
45
+ aspectRatio: {
46
+ values: ["1:1", "3:4", "4:3", "9:16", "16:9"],
47
+ default: "1:1",
48
+ description: "Image aspect ratio",
49
+ },
50
+ },
51
+ "gemini-3-pro-image-preview": {
52
+ aspectRatio: {
53
+ values: ["1:1", "3:4", "4:3", "9:16", "16:9"],
54
+ default: "1:1",
55
+ description: "Image aspect ratio",
56
+ },
57
+ imageSize: {
58
+ values: ["1K", "2K"],
59
+ default: "1K",
60
+ description: "Output image size",
61
+ },
62
+ },
63
+ },
64
+ xai: {},
65
+ };
66
+ export const IMAGE_EDIT_MODEL_SCHEMA = {
67
+ openai: {
68
+ "gpt-image-1.5": {
69
+ size: {
70
+ values: ["1024x1024", "1536x1024", "1024x1536", "auto"],
71
+ default: "auto",
72
+ description: "Output image size",
73
+ },
74
+ quality: {
75
+ values: ["low", "medium", "high", "auto"],
76
+ default: "auto",
77
+ description: "Image quality level",
78
+ },
79
+ background: {
80
+ values: ["transparent", "opaque", "auto"],
81
+ default: "auto",
82
+ description: "Background type",
83
+ },
84
+ },
85
+ },
86
+ google: {
87
+ "gemini-3-pro-image-preview": {},
88
+ },
89
+ };
90
+ export function getModelConfig(provider, model) {
91
+ return IMAGE_MODEL_SCHEMA[provider]?.[model] || null;
92
+ }
93
+ export function getDefaultConfig(provider, model) {
94
+ const schema = getModelConfig(provider, model);
95
+ if (!schema)
96
+ return {};
97
+ const defaults = {};
98
+ for (const [key, option] of Object.entries(schema)) {
99
+ defaults[key] = option.default;
100
+ }
101
+ return defaults;
102
+ }
103
+ //# sourceMappingURL=image-model-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-model-schema.js","sourceRoot":"","sources":["../src/image-model-schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { ImageConfig, ImageResult } from "./types";
2
+ export declare const generateImage: (model: string, prompt: string, config?: ImageConfig) => Promise<ImageResult>;
3
+ //# sourceMappingURL=image.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image.d.ts","sourceRoot":"","sources":["../src/image.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AA+HnD,eAAO,MAAM,aAAa,GACxB,OAAO,MAAM,EACb,QAAQ,MAAM,EACd,SAAS,WAAW,KACnB,OAAO,CAAC,WAAW,CA8BrB,CAAC"}