- 删除已弃用的 compositor_client.go - 删除激光合成微服务代码 - 添加 gateway 合成控制器和测试文件 - 添加 Dify prompt 补丁脚本 Co-Authored-By: Claude <noreply@anthropic.com>
90 lines
3.0 KiB
Go
90 lines
3.0 KiB
Go
// 一次性测试程序:打 /api/v1/laser/generate 验证 OpenAI 路径
|
|
// 用法:JWT_SECRET=xxx go run cmd/laser_test/main.go
|
|
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"fmt"
|
|
"io"
|
|
"net/http"
|
|
"os"
|
|
"time"
|
|
|
|
"github.com/golang-jwt/jwt/v5"
|
|
)
|
|
|
|
type Claims struct {
|
|
UserID int64 `json:"user_id"`
|
|
StarID int64 `json:"star_id"`
|
|
UpdatedAt int64 `json:"updated_at"`
|
|
jwt.RegisteredClaims
|
|
}
|
|
|
|
func main() {
|
|
jwtSecret := []byte(os.Getenv("JWT_SECRET"))
|
|
if len(jwtSecret) == 0 {
|
|
fmt.Println("FATAL: JWT_SECRET not set")
|
|
os.Exit(1)
|
|
}
|
|
|
|
now := time.Now()
|
|
claims := Claims{
|
|
UserID: 1001,
|
|
StarID: 2002,
|
|
UpdatedAt: now.Unix(),
|
|
RegisteredClaims: jwt.RegisteredClaims{
|
|
IssuedAt: jwt.NewNumericDate(now),
|
|
ExpiresAt: jwt.NewNumericDate(now.Add(1 * time.Hour)),
|
|
},
|
|
}
|
|
tok := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
|
|
tokenStr, err := tok.SignedString(jwtSecret)
|
|
if err != nil {
|
|
fmt.Println("FATAL sign:", err)
|
|
os.Exit(1)
|
|
}
|
|
fmt.Println("[1] JWT generated, len=", len(tokenStr))
|
|
|
|
// 用一个 OpenAI 能访问的公网图片作 cutout
|
|
body := map[string]interface{}{
|
|
"cutout_url": "https://www.gstatic.com/webp/gallery3/1.png",
|
|
"preset_codes": []string{"dream", "classic", "holoFull", "ice", "sunset"},
|
|
"render_configs": []map[string]interface{}{
|
|
{"preset_id": "dream", "bg_prompt": "holographic laser card, dream style, pink, bokeh, iridescent", "overlay_prompt": "", "grating_config": map[string]interface{}{"angle": 15}},
|
|
{"preset_id": "classic", "bg_prompt": "holographic laser card, classic style, gold, premium, museum", "overlay_prompt": "", "grating_config": map[string]interface{}{"angle": 20}},
|
|
{"preset_id": "holoFull", "bg_prompt": "holographic laser card, cyberpunk, neon, magenta, grid", "overlay_prompt": "", "grating_config": map[string]interface{}{"angle": 25}},
|
|
{"preset_id": "ice", "bg_prompt": "holographic laser card, ice blue, frosted, chrome", "overlay_prompt": "", "grating_config": map[string]interface{}{"angle": 30}},
|
|
{"preset_id": "sunset", "bg_prompt": "holographic laser card, warm orange sunset, silhouette", "overlay_prompt": "", "grating_config": map[string]interface{}{"angle": 35}},
|
|
},
|
|
"user_prompt": "",
|
|
}
|
|
bodyBytes, _ := json.Marshal(body)
|
|
|
|
url := "http://localhost:8080/api/v1/laser/generate"
|
|
req, _ := http.NewRequest("POST", url, bytes.NewReader(bodyBytes))
|
|
req.Header.Set("Authorization", "Bearer "+tokenStr)
|
|
req.Header.Set("Content-Type", "application/json")
|
|
|
|
cli := &http.Client{Timeout: 300 * time.Second}
|
|
fmt.Println("[2] POST", url, "timeout=300s")
|
|
t0 := time.Now()
|
|
resp, err := cli.Do(req)
|
|
if err != nil {
|
|
fmt.Println("FATAL request:", err)
|
|
os.Exit(1)
|
|
}
|
|
defer resp.Body.Close()
|
|
|
|
respBody, _ := io.ReadAll(resp.Body)
|
|
elapsed := time.Since(t0)
|
|
fmt.Printf("[3] HTTP %d (elapsed: %v)\n", resp.StatusCode, elapsed.Round(time.Second))
|
|
|
|
preview := string(respBody)
|
|
if len(preview) > 3000 {
|
|
preview = preview[:3000] + "...(truncated)"
|
|
}
|
|
fmt.Println("[4] Response body:")
|
|
fmt.Println(preview)
|
|
}
|