小编Wen*_*ell的帖子

如何在 Vapor Swift 中传输数据?

我正在使用 Vapor Swift 构建一个开放 AI 聊天流后端。它使用 MacPaw 的OpenAI包装器连接到 Open AI API 。但我不确定如何使用 SSE 将结果流式传输到客户端,而不是作为单个响应。

我当前的代码如下所示:

    func postChatStreamHandler(_ req: Request) throws -> EventLoopFuture<Response> {
        let openAI = OpenAI(configuration: configuration)
        let promise = req.eventLoop.makePromise(of: Data.self)
        let query = ChatQuery(model: .gpt4, messages: messages)
        openAI.chatsStream(query: query) { partialResult in
            switch partialResult {
            case .success(let result):
                if let detla = result.choices.first?.delta,
                   let data = try? JSONEncoder().encode(result) {
                    promise.succeed(data)
                }
            case .failure(let error):
                ...
            }
        } completion: { error in
            ...
        }
        return promise.futureResult.map …
Run Code Online (Sandbox Code Playgroud)

server-sent-events swift vapor openai-api

5
推荐指数
1
解决办法
287
查看次数

Vapor Fluent 如何向现有表添加新的必填字段键

我有一个使用 Vapor Fluent PostgreSQL 构建的已部署后端。

现在我需要new_field 向数据库中具有架构名称的表添加一个新的必需字段键schema_name 。我创建了一个新的迁移:

struct AddNewFieldToSchema: Migration {
    func prepare(on database: Database) -> EventLoopFuture<Void> {
        database.schema("schema_name")
            .field("new_field", .string, .required)
            .update()
    }
    
    func revert(on database: Database) -> EventLoopFuture<Void> {
        database.schema("schema_name")
            .deleteField("new_field")
            .update()
    }
}
Run Code Online (Sandbox Code Playgroud)

但运行后,它给我错误:

Fatal error: Error raised at top level: server: column "new_field" of relation "schema_name" contains null values (ATRewriteTable)
Run Code Online (Sandbox Code Playgroud)

我猜测这是因为使用旧数据模型创建的现有数据没有 的值new_field,因为如果数据库为空,这个新迁移运行正常。

我该如何解决这个问题?谢谢。

postgresql fluent swift vapor

2
推荐指数
1
解决办法
742
查看次数