@lowire/loop 0.0.10 → 0.0.11

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/lib/loop.d.ts CHANGED
@@ -19,12 +19,12 @@ export type LoopEvents = {
19
19
  onBeforeTurn?: (params: {
20
20
  conversation: types.Conversation;
21
21
  totalUsage: types.Usage;
22
- budgetTokens: number;
22
+ budgetTokens?: number;
23
23
  }) => PromiseOrValue<'continue' | 'break' | void>;
24
24
  onAfterTurn?: (params: {
25
25
  assistantMessage: types.AssistantMessage;
26
26
  totalUsage: types.Usage;
27
- budgetTokens: number;
27
+ budgetTokens?: number;
28
28
  }) => PromiseOrValue<'continue' | 'break' | void>;
29
29
  onBeforeToolCall?: (params: {
30
30
  assistantMessage: types.AssistantMessage;
package/lib/loop.js CHANGED
@@ -43,12 +43,12 @@ class Loop {
43
43
  tools: allTools,
44
44
  };
45
45
  const debug = options.debug;
46
- let budgetTokens = options.maxTokens ?? 100_000;
46
+ let budgetTokens = options.maxTokens;
47
47
  const totalUsage = { input: 0, output: 0 };
48
48
  debug?.('lowire:loop')(`Starting ${this._provider.name} loop`, task);
49
49
  const maxTurns = options.maxTurns || 100;
50
50
  for (let turns = 0; turns < maxTurns; ++turns) {
51
- if (budgetTokens <= 0)
51
+ if (options.maxTokens && budgetTokens !== undefined && budgetTokens <= 0)
52
52
  throw new Error(`Budget tokens ${options.maxTokens} exhausted`);
53
53
  debug?.('lowire:loop')(`Turn ${turns + 1} of (max ${maxTurns})`);
54
54
  const caches = options.cache ? {
@@ -68,7 +68,8 @@ class Loop {
68
68
  const intent = assistantMessage.content.filter(part => part.type === 'text').map(part => part.text).join('\n');
69
69
  totalUsage.input += usage.input;
70
70
  totalUsage.output += usage.output;
71
- budgetTokens -= usage.input + usage.output;
71
+ if (budgetTokens !== undefined)
72
+ budgetTokens -= usage.input + usage.output;
72
73
  debug?.('lowire:loop')('Usage', `input: ${usage.input}, output: ${usage.output}`);
73
74
  debug?.('lowire:loop')('Assistant', intent, JSON.stringify(assistantMessage.content, null, 2));
74
75
  const afterStatus = await options.onAfterTurn?.({ assistantMessage, totalUsage, budgetTokens });
@@ -19,7 +19,7 @@ exports.Anthropic = void 0;
19
19
  class Anthropic {
20
20
  name = 'anthropic';
21
21
  async complete(conversation, options) {
22
- const maxTokens = Math.min(options.maxTokens ?? 32768, 32768);
22
+ const maxTokens = Math.min(options.maxTokens ?? 32_768, 32_768);
23
23
  const response = await create({
24
24
  model: options.model,
25
25
  max_tokens: maxTokens,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lowire/loop",
3
- "version": "0.0.10",
3
+ "version": "0.0.11",
4
4
  "description": "Small agentic loop",
5
5
  "repository": {
6
6
  "type": "git",