Есть ли способ проксировать потоковый ответ в AWS Lambda js?Javascript

Форум по Javascript
Ответить
Anonymous
 Есть ли способ проксировать потоковый ответ в AWS Lambda js?

Сообщение Anonymous »

Я использую петлю 4 в качестве серверной среды и развертываю свои API на лямбда-выражении AWS с помощью бессерверной инфраструктуры (следуйте этому руководству: https://medium.com/@hitesh.gupta/runnin ... -v4-on-aws). -лямбда-56064a97b5c3). Я хочу создать API Bedrock и ответ модели потоковой передачи (как в GPT), но мне не удается передать ответ в потоковом режиме, поскольку он завис в режиме буферизации.
serverless.yml< /p>

Код: Выделить всё

functions:
stream:
handler: lambda.handler
timeout: 60
url:
cors: true
invokeMode: RESPONSE_STREAM
app:
handler: lambda.handler # reference the file and exported method
events: # events trigger lambda functions
- http: # this is an API Gateway HTTP event trigger
path: /
method: ANY
cors: true
- http: # all routes get proxied to the Express router
path: /{proxy+}
method: ANY
cors: true
lambda.js

Код: Выделить всё

const awsServerlessExpress = require('aws-serverless-express');
const AWS = require('aws-sdk');
const application = require('./dist');
const app = new application.StudyApplication({
rest: {
openApiSpec: {
setServersFromRequest: true,
},
},
});
const server = awsServerlessExpress.createServer(app.restServer.requestHandler);
exports.handler = async (event, context) => {
console.log('Event: ', event);

await app.boot();
return awsServerlessExpress.proxy(server, event, context, 'PROMISE').promise;
};

мой тестовый контроллер:

Код: Выделить всё

import {inject} from '@loopback/core';
import {post, Response, RestBindings} from '@loopback/rest';
import {Readable} from 'stream';
// import {inject} from '@loopback/core';
export class PromptController {
constructor() {}
@post('/prompt', {
responses: {
'200': {
description: 'Stream fixed text in chunks',
content: {
'text/event-stream': {},
},
},
},
})
async streamFixedText(
@inject(RestBindings.Http.RESPONSE) response: Response,
): Promise {
response.set('Content-Type', 'text/event-stream');
response.set('Connection', 'keep-alive');
const chunks = [
'This is the first chunk of the text.',
' Here comes the second chunk.',
' And finally, the last chunk.',
];

const readable = new Readable({
read() {
let index = 0;

const intervalId = setInterval(() => {
if (index < chunks.length) {
this.push(`data: ${chunks[index]}\n\n`);
index++;
} else {
this.push(null);
clearInterval(intervalId);
}
}, 1000);
},
});

response.on('close', () => {
readable.destroy();
});

readable.pipe(response);
}
}
Я не знаю, есть ли способ заставить это работать.
Большое спасибо, что нашли время прочитать мою проблему.ITZouzouille
пробовал использовать библиотекуstreamifyResponse, но кажется, что объект события при запросе лямбда-адреса не такой, как при прохождении через шлюз API.

Подробнее здесь: https://stackoverflow.com/questions/793 ... -lambda-js
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»