feat: add v2 generate text endpoint (#34371)

This commit is contained in:
Kit Langton 2026-06-28 22:43:58 -04:00 committed by GitHub
commit 595c6bd4a7
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
12 changed files with 462 additions and 233 deletions

View file

@ -1,6 +1,7 @@
import { Context } from "effect"
import { HttpApi, HttpApiGroup, HttpApiMiddleware, OpenApi } from "effect/unstable/httpapi"
import { SchemaErrorMiddleware } from "./middleware/schema-error"
import { GenerateGroup } from "./groups/generate"
import { MessageGroup } from "./groups/message"
import { ModelGroup } from "./groups/model"
import { ProviderGroup } from "./groups/provider"
@ -41,6 +42,7 @@ const makeApiFromGroup = <
.add(makeSessionGroup(sessionLocationMiddleware))
.add(MessageGroup.middleware(sessionLocationMiddleware))
.add(ModelGroup.middleware(locationMiddleware))
.add(GenerateGroup.middleware(locationMiddleware))
.add(ProviderGroup.middleware(locationMiddleware))
.add(IntegrationGroup.middleware(locationMiddleware))
.add(CredentialGroup.middleware(locationMiddleware))

View file

@ -0,0 +1,35 @@
import { Model } from "@opencode-ai/schema/model"
import { Schema } from "effect"
import { HttpApiEndpoint, HttpApiGroup, OpenApi } from "effect/unstable/httpapi"
import { InvalidRequestError, ServiceUnavailableError } from "../errors"
import { LocationQuery, locationQueryOpenApi } from "./location"
export const GenerateGroup = HttpApiGroup.make("server.generate")
.add(
HttpApiEndpoint.post("generate.text", "/api/generate", {
query: LocationQuery,
payload: Schema.Struct({
prompt: Schema.String,
model: Model.Ref.pipe(Schema.optional),
}),
success: Schema.Struct({
data: Schema.Struct({ text: Schema.String }),
}).annotate({ identifier: "GenerateTextResponse" }),
error: [InvalidRequestError, ServiceUnavailableError],
})
.annotateMerge(locationQueryOpenApi)
.annotateMerge(
OpenApi.annotations({
identifier: "v2.generate.text",
summary: "Generate text",
description:
"Run one stateless model generation at the requested location and return the assistant text. Uses the location's default model when none is specified.",
}),
),
)
.annotateMerge(
OpenApi.annotations({
title: "generate",
description: "Experimental one-shot generation routes.",
}),
)