okami.mom/albedo

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

Aly Raffaufrefactor(tests): share fixtures and move workspace checks to E2Eeaef427

main
2.5 KiB79 linesraw
1//// Replay must retain foreign fields and reject protocol or image mismatches.
2//// Direct inputs cover invalid metadata that daemon admission rejects first.
3
4import albedo/openai_api as openai
5import albedo/openai_api/request
6import albedo/openai_api/types
7import gleam/dynamic/decode
8import gleam/json
9import gleam/list
10import gleam/result
11import gleam/string
12import gleam/string_tree
13
14fn body(protocol: types.Protocol, request: types.Request) -> String {
15  let assert Ok(body) = request.encode(protocol, request)
16  string_tree.to_string(body)
17}
18
19pub fn replay_preserves_unknown_fields_and_refuses_other_protocol_test() -> Result(
20  string_tree.StringTree,
21  types.Error,
22) {
23  let assert Ok(item) =
24    json.parse(
25      "{\"type\":\"reasoning\",\"encrypted_content\":\"opaque\",\"future\":{\"x\":1}}",
26      types.replay_decoder(types.Responses),
27    )
28  let request = openai.request("model", [types.Replay(item)])
29  let encoded = body(types.Responses, request)
30  assert json.parse(
31      encoded,
32      decode.at(["input"], decode.list(decode.at(["future", "x"], decode.int))),
33    )
34    == Ok([1])
35  let assert Error(types.InvalidRequest(_)) =
36    request.encode(types.ChatCompletions, request)
37}
38
39pub fn validates_image_metadata_bounds_test() -> Result(
40  types.Image,
41  types.Error,
42) {
43  let assert Error(types.InvalidRequest(_)) =
44    types.image("image/gif", "aGVsbG8=", 2, 3, 5)
45  let assert Error(types.InvalidRequest(_)) =
46    types.image("image/png", "aGVsbG8=", 10_000, 5000, 5)
47  let assert Error(types.InvalidRequest(_)) =
48    types.image("image/png", "aGVsbG8=", 2, 3, types.max_image_bytes + 1)
49}
50
51// Persisting a valid image must not reinterpret its padded base64 length as
52// the decoded file length. Stored payloads remain lazy during validation.
53pub fn inline_and_stored_images_have_the_same_size_contract_test() -> Nil {
54  list.each(
55    [
56      types.max_image_bytes - 1,
57      types.max_image_bytes,
58      types.max_image_bytes + 1,
59    ],
60    fn(bytes) {
61      let encoded_size = 4 * { { bytes + 2 } / 3 }
62      let data = string.repeat("A", encoded_size)
63      let inline = types.image("image/png", data, 2, 3, bytes)
64      let stored =
65        types.stored_image(
66          "image/png",
67          "hash",
68          encoded_size,
69          fn() { panic as "metadata validation read a stored payload" },
70          2,
71          3,
72          bytes,
73        )
74      assert result.map(inline, types.image_meta)
75        == result.map(stored, types.image_meta)
76      assert result.is_ok(inline) == { bytes <= types.max_image_bytes }
77    },
78  )
79}