@opencode-ai/ai 0.0.0-dev-18215 → 0.0.0-dev-18218

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.
@@ -349,13 +349,22 @@ const lowerMessages = Effect.fn("OpenAIChat.lowerMessages")(function* (request,
349
349
  ]
350
350
  : [{ role: "system", content: ProviderShared.joinText(request.system) }];
351
351
  const messages = [...system];
352
+ const requireAssistantAfterTool = request.model.compatibility?.requireAssistantAfterTool ??
353
+ ["mistral", "devstral", "codestral", "pixtral", "mixtral"].some((family) => request.model.id.toLowerCase().includes(family));
354
+ const bridgeTools = () => {
355
+ if (requireAssistantAfterTool && messages.at(-1)?.role === "tool")
356
+ messages.push({ role: "assistant", content: "Done." });
357
+ };
352
358
  const pendingImages = [];
353
359
  const flushImages = () => {
354
360
  if (pendingImages.length === 0)
355
361
  return;
362
+ bridgeTools();
356
363
  messages.push({ role: "user", content: pendingImages.splice(0) });
357
364
  };
358
365
  for (const message of request.messages) {
366
+ if (message.role === "user")
367
+ bridgeTools();
359
368
  if (message.role === "system") {
360
369
  const part = yield* ProviderShared.wrappedSystemUpdate("OpenAI Chat", message);
361
370
  if (pendingImages.length > 0) {
@@ -396,6 +405,8 @@ const lowerMessages = Effect.fn("OpenAIChat.lowerMessages")(function* (request,
396
405
  : { role: "user", content: part.text });
397
406
  continue;
398
407
  }
408
+ if (message.role === "assistant" && message.content.every((part) => part.type === "text" && part.text.trim() === ""))
409
+ continue;
399
410
  if (message.role === "tool") {
400
411
  const lowered = yield* lowerToolMessages(message, options);
401
412
  messages.push(...lowered.messages);
@@ -74,6 +74,7 @@ declare const LanguageModelCompatibility_base: Schema.Class<LanguageModelCompati
74
74
  readonly reasoningField: Schema.optional<Schema.String>;
75
75
  readonly maxTokensField: Schema.optional<Schema.Literals<readonly ["max_completion_tokens", "max_tokens"]>>;
76
76
  readonly requireFinishReason: Schema.optional<Schema.Boolean>;
77
+ readonly requireAssistantAfterTool: Schema.optional<Schema.Boolean>;
77
78
  readonly supportsStore: Schema.optional<Schema.Boolean>;
78
79
  readonly supportsUsageInStreaming: Schema.optional<Schema.Boolean>;
79
80
  readonly supportsStrictMode: Schema.optional<Schema.Boolean>;
@@ -101,6 +101,7 @@ export class LanguageModelCompatibility extends Schema.Class("LLM.LanguageModelC
101
101
  reasoningField: Schema.optional(Schema.String),
102
102
  maxTokensField: Schema.optional(LanguageModelMaxTokensFieldCompatibility),
103
103
  requireFinishReason: Schema.optional(Schema.Boolean),
104
+ requireAssistantAfterTool: Schema.optional(Schema.Boolean),
104
105
  supportsStore: Schema.optional(Schema.Boolean),
105
106
  supportsUsageInStreaming: Schema.optional(Schema.Boolean),
106
107
  supportsStrictMode: Schema.optional(Schema.Boolean),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package.json",
3
- "version": "0.0.0-dev-18215",
3
+ "version": "0.0.0-dev-18218",
4
4
  "name": "@opencode-ai/ai",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -30,7 +30,7 @@
30
30
  "devDependencies": {
31
31
  "@clack/prompts": "1.0.0-alpha.1",
32
32
  "@effect/platform-node": "4.0.0-rc.111",
33
- "@opencode-ai/http-recorder": "0.0.0-dev-18215",
33
+ "@opencode-ai/http-recorder": "0.0.0-dev-18218",
34
34
  "@tsconfig/bun": "1.0.9",
35
35
  "@types/bun": "1.3.13",
36
36
  "@typescript/native-preview": "7.0.0-dev.20251207.1",
@@ -39,7 +39,7 @@
39
39
  "dependencies": {
40
40
  "@smithy/eventstream-codec": "4.2.14",
41
41
  "@smithy/util-utf8": "4.2.2",
42
- "@opencode-ai/schema": "0.0.0-dev-18215",
42
+ "@opencode-ai/schema": "0.0.0-dev-18218",
43
43
  "aws4fetch": "1.0.20",
44
44
  "effect": "4.0.0-rc.111",
45
45
  "google-auth-library": "10.5.0"