okami.mom/albedo

git clone https://git.nkp.pet/okami.mom/albedo

nekomimi.petgleam 1.19: reformat constants, require 1.19, build it in nix until nixpkgs-unstable has it5f9679f

main
8.7 KiB220 linesraw
1//// Authenticated fixed endpoints cannot use the E2E loopback provider. Scripted
2//// HTTP responses and real files catch refresh ordering, retention, and failures.
3
4import albedo/harness/extensions/codex/catalog
5import gleam/bit_array
6import gleam/dynamic/decode
7import gleam/json
8import gleam/list
9import gleam/option.{None, Some}
10import gleam/string
11
12@external(erlang, "albedo_codex_catalog_test_support", "temporary_home")
13fn temporary_home() -> String
14
15@external(erlang, "albedo_codex_catalog_test_support", "cleanup")
16fn cleanup(home: String) -> Nil
17
18@external(erlang, "albedo_codex_catalog_test_support", "seed")
19fn seed(home: String, text: String) -> Nil
20
21@external(erlang, "albedo_codex_catalog_test_support", "read")
22fn read(home: String) -> BitArray
23
24@external(erlang, "albedo_codex_catalog_test_support", "block_cache")
25fn block_cache(home: String) -> Nil
26
27@external(erlang, "albedo_codex_catalog_test_support", "permissions")
28fn permissions(home: String) -> Int
29
30@external(erlang, "albedo_codex_catalog_test_support", "script")
31fn script(responses: List(Result(catalog.Response, Nil))) -> Nil
32
33@external(erlang, "albedo_codex_catalog_test_support", "get")
34fn get(
35  url: String,
36  headers: List(#(String, String)),
37) -> Result(catalog.Response, Nil)
38
39@external(erlang, "albedo_codex_catalog_test_support", "calls")
40fn calls() -> List(#(String, List(#(String, String))))
41
42fn response(status: Int, body: String) -> Result(catalog.Response, Nil) {
43  Ok(catalog.Response(status, [#("etag", "one")], bit_array.from_string(body)))
44}
45
46const upstream =
47  "{\"models\":[{\"slug\":\"reasoner\",\"display_name\":\"Reasoner\",\"context_window\":200000,\"max_context_window\":400000,\"input_modalities\":[\"text\",false,\"image\"],\"supported_reasoning_levels\":[{\"effort\":\"high\"},{\"effort\":4},{\"effort\":\"low\"}],\"priority\":7},{\"slug\":\"\"},{\"slug\":false},{\"slug\":\"reasoner\",\"display_name\":\"\",\"context_window\":-4,\"max_context_window\":\"wrong\",\"input_modalities\":{},\"visibility\":null,\"priority\":\"wrong\"}]}"
48
49pub fn upstream_rows_keep_valid_duplicates_and_independent_facts_test() -> Bool {
50  let assert Ok(rows) =
51    json.parse(upstream, {
52      use rows <- decode.field("models", decode.list(decode.dynamic))
53      decode.success(rows)
54    })
55  let assert [first, duplicate] = catalog.normalize(rows)
56  let assert Some(200_000) = first.context
57  let assert Some(400_000) = first.max_context
58  let assert ["text", "image"] = first.input
59  let assert ["high", "low"] = first.efforts
60  let assert 7 = first.priority
61  let assert "reasoner" = duplicate.name
62  let assert None = duplicate.context
63  let assert None = duplicate.max_context
64  let assert [] = duplicate.input
65  let assert False = duplicate.visible
66}
67
68pub fn refresh_orders_version_freshness_and_conditional_requests_test() -> Nil {
69  let home = temporary_home()
70  script([response(200, "{\"version\":\"1.2.3\"}"), response(200, upstream)])
71  let assert Ok(Nil) =
72    catalog.refresh_at(home, "access", "account", 1000, 10_000, get)
73  let assert ["reasoner"] = catalog.listed(home)
74  let assert Some(info) = catalog.lookup(home, "endpoint", "reasoner")
75  let assert Some(200_000) = info.context_tokens
76  let assert 384 = permissions(home)
77  let before = read(home)
78  script([])
79  let assert Ok(Nil) =
80    catalog.refresh_at(home, "access", "account", 1000, 10_001, get)
81  let assert [] = calls()
82  let assert True = read(home) == before
83  script([response(200, "{\"version\":\"1.2.3\"}"), response(304, "")])
84  let assert Ok(Nil) =
85    catalog.refresh_at(home, "access", "account", 0, 10_002, get)
86  let assert [_, #(_, headers)] = calls()
87  let assert True = list.contains(headers, #("if-none-match", "one"))
88  let assert ["reasoner"] = catalog.listed(home)
89  script([response(200, "{\"version\":\"2.0.0\"}"), response(304, "")])
90  let assert Ok(Nil) =
91    catalog.refresh_at(home, "access", "account", 1000, 11_002, get)
92  let assert [_, #(url, headers)] = calls()
93  let assert True = string.ends_with(url, "client_version=2.0.0")
94  let assert False =
95    list.any(headers, fn(header) { header.0 == "if-none-match" })
96  cleanup(home)
97}
98
99pub fn untouched_malformed_accounts_survive_and_presentation_stays_strict_test() -> Nil {
100  let home = temporary_home()
101  seed(
102    home,
103    "{\"accounts\":{\"broken\":{\"models\":[{\"slug\":42}]},\"account\":{\"models\":[{\"slug\":\"old\"}]}}}",
104  )
105  script([response(200, "{\"version\":\"1.2.3\"}"), response(200, upstream)])
106  let assert Ok(Nil) =
107    catalog.refresh_at(home, "access", "account", 0, 10_000, get)
108  let assert [] = catalog.listed(home)
109  let assert Ok([42]) =
110    json.parse_bits(
111      read(home),
112      decode.at(
113        ["accounts", "broken", "models"],
114        decode.list({
115          use slug <- decode.field("slug", decode.int)
116          decode.success(slug)
117        }),
118      ),
119    )
120  cleanup(home)
121}
122
123pub fn failed_models_save_version_but_preserve_models_and_error_precedence_test() -> Nil {
124  let home = temporary_home()
125  seed(
126    home,
127    "{\"accounts\":{\"account\":{\"models\":[{\"slug\":\"old\"}],\"clientVersion\":\"1.0.0\",\"etag\":\"old-tag\"}},\"clientVersion\":\"1.0.0\"}",
128  )
129  script([response(200, "{\"version\":\"2.0.0\"}"), response(503, "")])
130  let assert Error("Codex model list returned HTTP 503") =
131    catalog.refresh_at(home, "access", "account", 0, 10_000, get)
132  let assert ["old"] = catalog.listed(home)
133  let assert Ok("2.0.0") =
134    json.parse_bits(read(home), decode.at(["clientVersion"], decode.string))
135  script([Error(Nil), response(304, "")])
136  let assert Ok(Nil) =
137    catalog.refresh_at(home, "access", "account", 0, 10_001, get)
138  let assert [_, #(url, _)] = calls()
139  let assert True = string.ends_with(url, "client_version=2.0.0")
140  script([response(200, "{\"version\":\"3.0.0\"}"), response(200, "{")])
141  let assert Error("Codex model list is not valid") =
142    catalog.refresh_at(home, "access", "account", 0, 10_002, get)
143  let assert ["old"] = catalog.listed(home)
144  let assert Ok("3.0.0") =
145    json.parse_bits(read(home), decode.at(["clientVersion"], decode.string))
146  cleanup(home)
147  let blocked = temporary_home()
148  block_cache(blocked)
149  script([Error(Nil), response(200, upstream)])
150  let assert Error("Codex model cache could not be written") =
151    catalog.refresh_at(blocked, "access", "account", 0, 10_000, get)
152  let assert [_, #(url, _)] = calls()
153  let assert True = string.ends_with(url, "client_version=0.157.1")
154  script([Error(Nil), Error(Nil)])
155  let assert Error("Codex model list request failed") =
156    catalog.refresh_at(blocked, "access", "account", 0, 10_000, get)
157  cleanup(blocked)
158}
159
160pub fn version_check_precedes_fresh_entry_and_same_version_returns_without_write_test() -> Nil {
161  let home = temporary_home()
162  seed(
163    home,
164    "{\"clientVersion\":\"1.0.0\",\"versionCheckedAt\":1000,\"accounts\":{\"account\":{\"fetchedAt\":1999,\"clientVersion\":\"1.0.0\",\"etag\":\"old\",\"models\":[{\"slug\":\"old\"}]}}}",
165  )
166  let before = read(home)
167  script([response(200, "{\"version\":\"1.0.0\"}")])
168  let assert Ok(Nil) =
169    catalog.refresh_at(home, "access", "account", 1000, 2000, get)
170  let assert [_] = calls()
171  let assert True = before == read(home)
172  script([
173    response(200, "{\"version\":\"2.0.0\"}"),
174    response(200, "{\"models\":[]}"),
175  ])
176  let assert Ok(Nil) =
177    catalog.refresh_at(home, "access", "account", 1000, 2000, get)
178  let assert [_, #(_, headers)] = calls()
179  let assert False = list.contains(headers, #("if-none-match", "old"))
180  let assert [] = catalog.listed(home)
181  cleanup(home)
182}
183
184pub fn not_modified_retains_models_and_updates_metadata_before_replacement_test() -> Nil {
185  let home = temporary_home()
186  seed(
187    home,
188    "{\"clientVersion\":\"1.0.0\",\"versionCheckedAt\":1000,\"accounts\":{\"account\":{\"fetchedAt\":1000,\"clientVersion\":\"1.0.0\",\"etag\":\"old\",\"models\":[{\"slug\":\"hidden\",\"visible\":false}]}}}",
189  )
190  script([response(200, "{\"version\":\"1.0.0\"}"), response(304, "")])
191  let assert Ok(Nil) =
192    catalog.refresh_at(home, "access", "account", 0, 2000, get)
193  let assert Ok(2000) =
194    json.parse_bits(
195      read(home),
196      decode.at(["accounts", "account", "fetchedAt"], decode.int),
197    )
198  let assert Ok("1.0.0") =
199    json.parse_bits(
200      read(home),
201      decode.at(["accounts", "account", "clientVersion"], decode.string),
202    )
203  let assert [] = catalog.listed(home)
204  let assert Some(info) = catalog.lookup(home, "endpoint", "hidden")
205  let assert "hidden" = info.model
206  script([response(200, "{\"version\":\"2.0.0\"}"), response(200, upstream)])
207  let assert Ok(Nil) =
208    catalog.refresh_at(home, "access", "account", 0, 2001, get)
209  let assert Ok(2001) =
210    json.parse_bits(
211      read(home),
212      decode.at(["accounts", "account", "fetchedAt"], decode.int),
213    )
214  let assert Ok("2.0.0") =
215    json.parse_bits(
216      read(home),
217      decode.at(["accounts", "account", "clientVersion"], decode.string),
218    )
219  cleanup(home)
220}