mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-03-10 22:21:22 -07:00
Fixes 'input.on' is not a function error in Gemini CLI (#19691)
This commit is contained in:
committed by
GitHub
parent
cdf157e52a
commit
7cf4c05c66
@@ -408,6 +408,48 @@ describe('CodeAssistServer', () => {
|
||||
expect(results[1].candidates?.[0].content?.parts?.[0].text).toBe(' World');
|
||||
});
|
||||
|
||||
it('should handle Web ReadableStream in generateContentStream', async () => {
|
||||
const { server, mockRequest } = createTestServer();
|
||||
|
||||
// Create a mock Web ReadableStream
|
||||
const mockWebStream = new ReadableStream({
|
||||
start(controller) {
|
||||
const mockResponseData = {
|
||||
response: {
|
||||
candidates: [{ content: { parts: [{ text: 'Hello Web' }] } }],
|
||||
},
|
||||
};
|
||||
controller.enqueue(
|
||||
new TextEncoder().encode(
|
||||
'data: ' + JSON.stringify(mockResponseData) + '\n\n',
|
||||
),
|
||||
);
|
||||
controller.close();
|
||||
},
|
||||
});
|
||||
|
||||
mockRequest.mockResolvedValue({ data: mockWebStream });
|
||||
|
||||
const stream = await server.generateContentStream(
|
||||
{
|
||||
model: 'test-model',
|
||||
contents: [{ role: 'user', parts: [{ text: 'request' }] }],
|
||||
},
|
||||
'user-prompt-id',
|
||||
LlmRole.MAIN,
|
||||
);
|
||||
|
||||
const results = [];
|
||||
for await (const res of stream) {
|
||||
results.push(res);
|
||||
}
|
||||
|
||||
expect(results).toHaveLength(1);
|
||||
expect(results[0].candidates?.[0].content?.parts?.[0].text).toBe(
|
||||
'Hello Web',
|
||||
);
|
||||
});
|
||||
|
||||
it('should ignore malformed SSE data', async () => {
|
||||
const { server, mockRequest } = createTestServer();
|
||||
|
||||
|
||||
@@ -36,6 +36,7 @@ import type {
|
||||
GenerateContentResponse,
|
||||
} from '@google/genai';
|
||||
import * as readline from 'node:readline';
|
||||
import { Readable } from 'node:stream';
|
||||
import type { ContentGenerator } from '../core/contentGenerator.js';
|
||||
import { UserTierId } from './types.js';
|
||||
import type {
|
||||
@@ -341,7 +342,7 @@ export class CodeAssistServer implements ContentGenerator {
|
||||
req: object,
|
||||
signal?: AbortSignal,
|
||||
): Promise<AsyncGenerator<T>> {
|
||||
const res = await this.client.request({
|
||||
const res = await this.client.request<AsyncIterable<unknown>>({
|
||||
url: this.getMethodUrl(method),
|
||||
method: 'POST',
|
||||
params: {
|
||||
@@ -358,8 +359,7 @@ export class CodeAssistServer implements ContentGenerator {
|
||||
|
||||
return (async function* (): AsyncGenerator<T> {
|
||||
const rl = readline.createInterface({
|
||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
|
||||
input: res.data as NodeJS.ReadableStream,
|
||||
input: Readable.from(res.data),
|
||||
crlfDelay: Infinity, // Recognizes '\r\n' and '\n' as line breaks
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user