mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
> AI Tools were used to produce this PR This PR adds `coder ai-gateway start` command that runs the AI Gateway as an independent process. - Standalone process doesn't have access to DB. Uses DRPC services under `/api/v2/ai-gateway/serve`for auth, recording and provider initialization. - It only handles LLM traffic, other endpoints (eg. `/sessions`) are only available though `coderd`. - The standalone gateway reuses applicable flags from AI Gateway deployment options. Provider-seeding and coderd-only options are excluded. - Only added to fat build, the slim build stub rejects the command. Some wiring used by this new command is added. **`NewWebsocketDialer`** - implements the standalone gateway's connection to coderd's `/api/v2/ai-gateway/serve` endpoint. It upgrades to a WebSocket, multiplexes with yamux, and wires all DRPC services. **`AIGatewayDataPlaneMiddleware`** - extracts the per-request middleware chain (concurrency limiting, rate limiting, BYOK gating) into a shared function used by both the embedded route and the standalone gateway. **`RootCmd.ResolveClientConnection`** - resolve the deployment URL and builds an HTTP transport without requiring a session token. Used in `ai-gateway start`command as it authenticates using different credential type. --------- Co-authored-by: Danny Kopping <danny@coder.com>
25 lines
498 B
Go
25 lines
498 B
Go
//go:build slim
|
|
|
|
package cli
|
|
|
|
import (
|
|
agplcli "github.com/coder/coder/v2/cli"
|
|
"github.com/coder/serpent"
|
|
)
|
|
|
|
func (r *RootCmd) aiGatewayStart() *serpent.Command {
|
|
cmd := &serpent.Command{
|
|
Use: "start",
|
|
Short: "Run a standalone AI Gateway server",
|
|
// We accept RawArgs so all commands and flags are accepted.
|
|
RawArgs: true,
|
|
Hidden: true,
|
|
Handler: func(inv *serpent.Invocation) error {
|
|
agplcli.SlimUnsupported(inv.Stderr, "ai-gateway start")
|
|
return nil
|
|
},
|
|
}
|
|
|
|
return cmd
|
|
}
|