@serii84/vertex-partner-provider 1.0.26 → 1.0.29

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 (2) hide show
  1. package/index.js +31 -6
  2. package/package.json +1 -1
package/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Vertex Partner Provider for OpenCode
3
- * v1.0.26 - Don't forward [DONE] signal
3
+ * v1.0.29 - Remove delta from finish chunks entirely
4
4
  */
5
5
 
6
6
  const fs = require('fs');
@@ -56,12 +56,13 @@ function cleanResponse(parsed) {
56
56
  || choice.finish_reason.stop_reason
57
57
  || 'stop';
58
58
  } else {
59
- cleanChoice.finish_reason = choice.finish_reason;
59
+ cleanChoice.finish_reason = String(choice.finish_reason);
60
60
  }
61
61
  }
62
62
 
63
63
  // Clean up delta - remove null values and non-standard fields
64
- if (choice.delta) {
64
+ // Don't include delta on finish chunks at all
65
+ if (choice.delta && !choice.finish_reason) {
65
66
  const cleanDelta = {};
66
67
  if (choice.delta.role) cleanDelta.role = choice.delta.role;
67
68
  if (choice.delta.content) cleanDelta.content = choice.delta.content;
@@ -69,6 +70,7 @@ function cleanResponse(parsed) {
69
70
  if (choice.delta.tool_calls) cleanDelta.tool_calls = choice.delta.tool_calls;
70
71
  cleanChoice.delta = cleanDelta;
71
72
  }
73
+ // Note: intentionally NOT including delta on finish chunks
72
74
 
73
75
  if (choice.message) {
74
76
  const cleanMessage = { role: choice.message.role };
@@ -94,10 +96,13 @@ function cleanResponse(parsed) {
94
96
  }
95
97
 
96
98
  function transformStream(response) {
99
+ // Log response headers for debugging
100
+ debugLog('Response headers:', Object.fromEntries(response.headers.entries()));
101
+
97
102
  const reader = response.body.getReader();
98
103
  const decoder = new TextDecoder();
99
104
  const encoder = new TextEncoder();
100
-
105
+
101
106
  let buffer = '';
102
107
 
103
108
  const transformedStream = new ReadableStream({
@@ -106,6 +111,26 @@ function transformStream(response) {
106
111
  const { done, value } = await reader.read();
107
112
 
108
113
  if (done) {
114
+ // Process any remaining data in buffer
115
+ if (buffer.trim()) {
116
+ debugLog('Processing remaining buffer:', buffer);
117
+ if (buffer.startsWith('data: ')) {
118
+ const data = buffer.slice(6).trim();
119
+ if (data === '[DONE]') {
120
+ controller.enqueue(encoder.encode('data: [DONE]\n\n'));
121
+ } else if (data) {
122
+ try {
123
+ const parsed = JSON.parse(data);
124
+ const cleaned = cleanResponse(parsed);
125
+ if (cleaned.choices && cleaned.choices.length > 0) {
126
+ controller.enqueue(encoder.encode('data: ' + JSON.stringify(cleaned) + '\n\n'));
127
+ }
128
+ } catch (e) {
129
+ debugLog('Final buffer parse error:', e.message);
130
+ }
131
+ }
132
+ }
133
+ }
109
134
  controller.close();
110
135
  return;
111
136
  }
@@ -123,8 +148,8 @@ function transformStream(response) {
123
148
  const data = message.slice(6);
124
149
 
125
150
  if (data === '[DONE]') {
126
- debugLog('Received [DONE], not forwarding');
127
- // Don't forward [DONE] - just let the stream end naturally
151
+ debugLog('Forwarding [DONE]');
152
+ controller.enqueue(encoder.encode('data: [DONE]\n\n'));
128
153
  continue;
129
154
  }
130
155
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@serii84/vertex-partner-provider",
3
- "version": "1.0.26",
3
+ "version": "1.0.29",
4
4
  "description": "Vertex AI partner models (GLM, Kimi, DeepSeek) for OpenCode",
5
5
  "main": "index.js",
6
6
  "scripts": {