summaryrefslogtreecommitdiff
path: root/models/openrouter_test.go
blob: dd38d2314debf2f565b06afb067d56b84cca1ad1 (plain)
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
package models

import (
	"encoding/json"
	"os"
	"path/filepath"
	"testing"
)

func TestORModelsListModels(t *testing.T) {
	t.Run("unit test with hardcoded data", func(t *testing.T) {
		jsonData := `{
			"data": [
				{
					"id": "model/free",
					"pricing": {
						"prompt": "0",
						"completion": "0"
					}
				},
				{
					"id": "model/paid",
					"pricing": {
						"prompt": "0.001",
						"completion": "0.002"
					}
				},
				{
					"id": "model/request-zero",
					"pricing": {
						"prompt": "0",
						"completion": "0",
						"request": "0"
					}
				},
				{
					"id": "model/request-nonzero",
					"pricing": {
						"prompt": "0",
						"completion": "0",
						"request": "0.5"
					}
				}
			]
		}`
		var models ORModels
		if err := json.Unmarshal([]byte(jsonData), &models); err != nil {
			t.Fatalf("failed to unmarshal test data: %v", err)
		}
		freeModels := models.ListModels(true)
		if len(freeModels) != 2 {
			t.Errorf("expected 2 free models, got %d: %v", len(freeModels), freeModels)
		}
		expectedFree := map[string]bool{"model/free": true, "model/request-zero": true}
		for _, id := range freeModels {
			if !expectedFree[id] {
				t.Errorf("unexpected free model ID: %s", id)
			}
		}
		allModels := models.ListModels(false)
		if len(allModels) != 4 {
			t.Errorf("expected 4 total models, got %d", len(allModels))
		}
	})

	t.Run("integration with or_models.json", func(t *testing.T) {
		// Attempt to load the real data file from the project root
		path := filepath.Join("..", "or_models.json")
		data, err := os.ReadFile(path)
		if err != nil {
			t.Skip("or_models.json not found, skipping integration test")
		}
		var models ORModels
		if err := json.Unmarshal(data, &models); err != nil {
			t.Fatalf("failed to unmarshal %s: %v", path, err)
		}
		freeModels := models.ListModels(true)
		if len(freeModels) == 0 {
			t.Error("expected at least one free model, got none")
		}
		allModels := models.ListModels(false)
		if len(allModels) == 0 {
			t.Error("expected at least one model")
		}
		// Ensure free models are subset of all models
		freeSet := make(map[string]bool)
		for _, id := range freeModels {
			freeSet[id] = true
		}
		for _, id := range freeModels {
			if !freeSet[id] {
				t.Errorf("free model %s not found in all models", id)
			}
		}
		t.Logf("found %d free models out of %d total models", len(freeModels), len(allModels))
	})
}