Codex first iteration
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
package openrouter
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"io"
|
||||
"net/http"
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
||||
type roundTripFunc func(*http.Request) (*http.Response, error)
|
||||
|
||||
func (f roundTripFunc) RoundTrip(r *http.Request) (*http.Response, error) { return f(r) }
|
||||
func response(status int, contentType, body string) *http.Response {
|
||||
return &http.Response{StatusCode: status, Header: http.Header{"Content-Type": []string{contentType}}, Body: io.NopCloser(strings.NewReader(body))}
|
||||
}
|
||||
|
||||
func TestPromptMultimodalRequest(t *testing.T) {
|
||||
var body map[string]any
|
||||
httpClient := &http.Client{Transport: roundTripFunc(func(r *http.Request) (*http.Response, error) {
|
||||
if r.URL.Path != "/chat/completions" {
|
||||
t.Errorf("path %s", r.URL.Path)
|
||||
}
|
||||
if r.Header.Get("Authorization") != "Bearer secret" {
|
||||
t.Error("missing auth")
|
||||
}
|
||||
if err := json.NewDecoder(r.Body).Decode(&body); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
return response(200, "application/json", `{"choices":[{"message":{"content":"{\"video_prompt\":\"gentle motion\"}"}}]}`), nil
|
||||
})}
|
||||
c := Client{BaseURL: "https://openrouter.test", APIKey: "secret", HTTP: httpClient}
|
||||
got, err := c.Prompt(context.Background(), "model", "student text", "data:image/png;base64,abc", "system")
|
||||
if err != nil || got != "gentle motion" {
|
||||
t.Fatalf("got %q %v", got, err)
|
||||
}
|
||||
encoded, _ := json.Marshal(body)
|
||||
for _, want := range []string{"student text", "data:image/png;base64,abc", "json_schema"} {
|
||||
if !strings.Contains(string(encoded), want) {
|
||||
t.Errorf("request missing %q", want)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestVideoFlow(t *testing.T) {
|
||||
httpClient := &http.Client{Transport: roundTripFunc(func(r *http.Request) (*http.Response, error) {
|
||||
switch {
|
||||
case r.Method == http.MethodPost && r.URL.Path == "/videos":
|
||||
return response(202, "application/json", `{"id":"job1","status":"pending"}`), nil
|
||||
case r.URL.Path == "/videos/job1":
|
||||
return response(200, "application/json", `{"id":"job1","status":"completed"}`), nil
|
||||
case r.URL.Path == "/videos/job1/content":
|
||||
return response(200, "video/mp4", "video"), nil
|
||||
default:
|
||||
return response(404, "text/plain", "missing"), nil
|
||||
}
|
||||
})}
|
||||
c := Client{BaseURL: "https://openrouter.test", APIKey: "x", HTTP: httpClient}
|
||||
job, err := c.Submit(context.Background(), VideoRequest{Model: "m"})
|
||||
if err != nil || job.ID != "job1" {
|
||||
t.Fatal(job, err)
|
||||
}
|
||||
job, err = c.Poll(context.Background(), job.ID)
|
||||
if err != nil || job.Status != "completed" {
|
||||
t.Fatal(job, err)
|
||||
}
|
||||
resp, err := c.Content(context.Background(), job.ID)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
resp.Body.Close()
|
||||
}
|
||||
Reference in New Issue
Block a user