Client SDKs
Go SDK
The github.com/promptfloe/go-sdk module — context-aware, channel-based event streams, no cgo. Go 1.21+.
#Install
bash
go get github.com/promptfloe/go-sdk/promptfloe#Basic usage
main.go
package main
import (
"context"
"fmt"
"log"
"os"
"github.com/promptfloe/go-sdk/promptfloe"
)
func main() {
c := promptfloe.NewClient(os.Getenv("PROMPTFLOE_API_KEY"))
app, err := c.Apps.Generate(context.Background(), &promptfloe.GenerateAppRequest{
Prompt: "A pricing page for a CRM SaaS",
})
if err != nil { log.Fatal(err) }
fmt.Println(app.PreviewURL)
}#Streaming with channels
go
ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second)
defer cancel()
events, err := c.Apps.GenerateStream(ctx, &promptfloe.GenerateAppRequest{
Prompt: "landing page",
})
if err != nil { log.Fatal(err) }
for ev := range events {
switch e := ev.(type) {
case *promptfloe.PlanEvent:
fmt.Println("plan:", e.Summary)
case *promptfloe.FileEvent:
fmt.Println("file:", e.Path)
case *promptfloe.ReadyEvent:
fmt.Println("ready:", e.PreviewURL)
case *promptfloe.ErrorEvent:
log.Fatal(e.Message)
}
}#Error handling
go
var apiErr *promptfloe.APIError
var rateErr *promptfloe.RateLimitError
if _, err := c.Apps.Generate(ctx, req); err != nil {
switch {
case errors.As(err, &rateErr):
time.Sleep(rateErr.RetryAfter)
case errors.As(err, &apiErr):
log.Printf("%s: %s (request %s)", apiErr.Code, apiErr.Message, apiErr.RequestID)
default:
log.Fatal(err)
}
}#Custom HTTP client
Pass a custom http.Client via options for retries, telemetry, or proxy support:
go
c := promptfloe.NewClient(
apiKey,
promptfloe.WithHTTPClient(&http.Client{Timeout: 60 * time.Second}),
promptfloe.WithBaseURL("https://api.promptfloe.com"),
)#Where to go next
PromptFloe developer docs