-
Notifications
You must be signed in to change notification settings - Fork 459
Expand file tree
/
Copy pathcapabilities_test.go
More file actions
144 lines (116 loc) · 4.18 KB
/
Copy pathcapabilities_test.go
File metadata and controls
144 lines (116 loc) · 4.18 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
package latest
import (
"testing"
"github.com/goccy/go-yaml"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestModelConfigCapabilitiesYAMLRoundTrip(t *testing.T) {
t.Parallel()
const in = `provider: ollama
model: llava
capabilities:
image: true
pdf: false
`
var f FlexibleModelConfig
require.NoError(t, yaml.Unmarshal([]byte(in), &f))
require.NotNil(t, f.Capabilities, "capabilities should be parsed")
assert.True(t, f.Capabilities.Image)
assert.False(t, f.Capabilities.PDF)
// A model carrying a capabilities override must not collapse to the
// "provider/model" shorthand on marshal, or the override would be lost.
assert.False(t, f.isShorthandOnly(), "capabilities override must defeat shorthand marshalling")
out, err := yaml.Marshal(f)
require.NoError(t, err)
var rt FlexibleModelConfig
require.NoError(t, yaml.Unmarshal(out, &rt))
require.NotNil(t, rt.Capabilities, "capabilities should survive a marshal round-trip; got:\n%s", out)
assert.True(t, rt.Capabilities.Image)
assert.False(t, rt.Capabilities.PDF)
}
func TestModelConfigCapabilitiesAudioVideoYAMLRoundTrip(t *testing.T) {
t.Parallel()
const in = `provider: vision-proxy
model: gemini-2.5-pro
capabilities:
image: true
pdf: true
audio: true
video: true
`
var f FlexibleModelConfig
require.NoError(t, yaml.Unmarshal([]byte(in), &f))
require.NotNil(t, f.Capabilities, "capabilities should be parsed")
assert.True(t, f.Capabilities.Audio)
assert.True(t, f.Capabilities.Video)
out, err := yaml.Marshal(f)
require.NoError(t, err)
var rt FlexibleModelConfig
require.NoError(t, yaml.Unmarshal(out, &rt))
require.NotNil(t, rt.Capabilities, "capabilities should survive a marshal round-trip; got:\n%s", out)
assert.True(t, rt.Capabilities.Audio)
assert.True(t, rt.Capabilities.Video)
}
// TestModelConfigCapabilitiesAudioVideoOmittedDefaultsFalse pins that, within
// a present capabilities block, omitted audio/video resolve to false rather
// than falling back to models.dev: any non-nil block is authoritative.
func TestModelConfigCapabilitiesAudioVideoOmittedDefaultsFalse(t *testing.T) {
t.Parallel()
const in = `provider: ollama
model: llava
capabilities:
image: true
pdf: false
`
var f FlexibleModelConfig
require.NoError(t, yaml.Unmarshal([]byte(in), &f))
require.NotNil(t, f.Capabilities)
assert.False(t, f.Capabilities.Audio)
assert.False(t, f.Capabilities.Video)
}
func TestModelConfigShorthandOnlyWithoutCapabilities(t *testing.T) {
t.Parallel()
const in = `provider: openai
model: gpt-4o
`
var f FlexibleModelConfig
require.NoError(t, yaml.Unmarshal([]byte(in), &f))
assert.Nil(t, f.Capabilities)
assert.True(t, f.isShorthandOnly(), "a bare provider/model must still marshal as shorthand")
}
func TestModelConfigBypassModelsGatewayYAMLRoundTrip(t *testing.T) {
t.Parallel()
const in = `provider: anthropic
model: claude-sonnet-4-5
bypass_models_gateway: true
`
var f FlexibleModelConfig
require.NoError(t, yaml.Unmarshal([]byte(in), &f))
assert.True(t, f.BypassModelsGateway, "bypass_models_gateway should be parsed")
// A model carrying only the bypass flag (plus provider/model) must not
// collapse to the shorthand on marshal, or the flag would be lost.
assert.False(t, f.isShorthandOnly(), "bypass_models_gateway must defeat shorthand marshalling")
out, err := yaml.Marshal(f)
require.NoError(t, err)
var rt FlexibleModelConfig
require.NoError(t, yaml.Unmarshal(out, &rt))
assert.True(t, rt.BypassModelsGateway, "bypass_models_gateway should survive a marshal round-trip; got:\n%s", out)
}
func TestModelConfigCloneCopiesCapabilities(t *testing.T) {
t.Parallel()
orig := &ModelConfig{
Provider: "my-proxy",
Model: "gpt-4o",
Capabilities: &CapabilitiesConfig{Image: true, PDF: true, Audio: true, Video: true},
}
clone := orig.Clone()
require.NotNil(t, clone.Capabilities)
assert.True(t, clone.Capabilities.Image)
assert.True(t, clone.Capabilities.PDF)
assert.True(t, clone.Capabilities.Audio)
assert.True(t, clone.Capabilities.Video)
// Mutating the clone must not affect the original (deep copy).
clone.Capabilities.Image = false
assert.True(t, orig.Capabilities.Image, "clone must not share the Capabilities pointer with the original")
}