| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- package minimax
- import (
- "encoding/json"
- "net/http"
- "net/http/httptest"
- "strings"
- "testing"
- "time"
- "github.com/QuantumNous/new-api/dto"
- relaycommon "github.com/QuantumNous/new-api/relay/common"
- relayconstant "github.com/QuantumNous/new-api/relay/constant"
- "github.com/gin-gonic/gin"
- )
- func TestGetRequestURLForImageGeneration(t *testing.T) {
- t.Parallel()
- info := &relaycommon.RelayInfo{
- RelayMode: relayconstant.RelayModeImagesGenerations,
- ChannelMeta: &relaycommon.ChannelMeta{
- ChannelBaseUrl: "https://api.minimax.chat",
- },
- }
- got, err := GetRequestURL(info)
- if err != nil {
- t.Fatalf("GetRequestURL returned error: %v", err)
- }
- want := "https://api.minimax.chat/v1/image_generation"
- if got != want {
- t.Fatalf("GetRequestURL() = %q, want %q", got, want)
- }
- }
- func TestConvertImageRequest(t *testing.T) {
- t.Parallel()
- adaptor := &Adaptor{}
- info := &relaycommon.RelayInfo{
- RelayMode: relayconstant.RelayModeImagesGenerations,
- OriginModelName: "image-01",
- }
- request := dto.ImageRequest{
- Model: "image-01",
- Prompt: "a red fox in snowfall",
- Size: "1536x1024",
- ResponseFormat: "url",
- N: uintPtr(2),
- }
- got, err := adaptor.ConvertImageRequest(gin.CreateTestContextOnly(httptest.NewRecorder(), gin.New()), info, request)
- if err != nil {
- t.Fatalf("ConvertImageRequest returned error: %v", err)
- }
- body, err := json.Marshal(got)
- if err != nil {
- t.Fatalf("json.Marshal returned error: %v", err)
- }
- var payload map[string]any
- if err := json.Unmarshal(body, &payload); err != nil {
- t.Fatalf("json.Unmarshal returned error: %v", err)
- }
- if payload["model"] != "image-01" {
- t.Fatalf("model = %#v, want %q", payload["model"], "image-01")
- }
- if payload["prompt"] != request.Prompt {
- t.Fatalf("prompt = %#v, want %q", payload["prompt"], request.Prompt)
- }
- if payload["n"] != float64(2) {
- t.Fatalf("n = %#v, want 2", payload["n"])
- }
- if payload["aspect_ratio"] != "3:2" {
- t.Fatalf("aspect_ratio = %#v, want %q", payload["aspect_ratio"], "3:2")
- }
- if payload["response_format"] != "url" {
- t.Fatalf("response_format = %#v, want %q", payload["response_format"], "url")
- }
- }
- func TestDoResponseForImageGeneration(t *testing.T) {
- t.Parallel()
- gin.SetMode(gin.TestMode)
- recorder := httptest.NewRecorder()
- c, _ := gin.CreateTestContext(recorder)
- info := &relaycommon.RelayInfo{
- RelayMode: relayconstant.RelayModeImagesGenerations,
- StartTime: time.Unix(1700000000, 0),
- }
- resp := &http.Response{
- StatusCode: http.StatusOK,
- Header: make(http.Header),
- Body: httptest.NewRecorder().Result().Body,
- }
- resp.Body = ioNopCloser(`{"data":{"image_urls":["https://example.com/minimax.png"]}}`)
- adaptor := &Adaptor{}
- usage, err := adaptor.DoResponse(c, resp, info)
- if err != nil {
- t.Fatalf("DoResponse returned error: %v", err)
- }
- if usage == nil {
- t.Fatalf("DoResponse returned nil usage")
- }
- body := recorder.Body.String()
- if !strings.Contains(body, `"url":"https://example.com/minimax.png"`) {
- t.Fatalf("response body = %s, want OpenAI image response with image URL", body)
- }
- if strings.Contains(body, `"image_urls"`) {
- t.Fatalf("response body = %s, should not expose raw MiniMax image_urls payload", body)
- }
- }
- type nopReadCloser struct {
- *strings.Reader
- }
- func (n nopReadCloser) Close() error {
- return nil
- }
- func ioNopCloser(body string) nopReadCloser {
- return nopReadCloser{Reader: strings.NewReader(body)}
- }
- func uintPtr(v uint) *uint {
- return &v
- }
|