okami.mom/albedo

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

Aly Raffaufrefactor(gleam): clean up code and enforce focused lint checksb585313

main
2.8 KiB72 linesraw
1//// Anthropic's authenticated endpoint cannot use the E2E loopback provider.
2//// These fixtures catch forgiving upstream parsing and cache compatibility bugs.
3
4import albedo/harness/extensions/claude/catalog
5import gleam/dynamic
6import gleam/dynamic/decode
7import gleam/json
8import gleam/option.{None, Some}
9import gleeunit/should
10
11fn upstream() -> List(dynamic.Dynamic) {
12  let assert Ok(rows) =
13    json.parse(
14      "[
15      {\"id\":\"claude-fixture\",\"max_input_tokens\":200000,\"max_tokens\":64000,
16       \"capabilities\":{\"image_input\":{\"supported\":true},\"effort\":{
17         \"supported\":true,\"zeta\":{\"supported\":true},\"high\":{\"supported\":true},
18         \"minimal\":{\"supported\":true},\"alpha\":{\"supported\":true},
19         \"xhigh\":{\"supported\":true},\"medium\":{\"supported\":true},
20         \"max\":{\"supported\":true},\"low\":{\"supported\":true},
21         \"disabled\":{\"supported\":false},\"malformed\":{\"supported\":\"true\"}}}},
22      {\"id\":\"\"},{\"id\":7},null,
23      {\"id\":\"claude-fixture\",\"max_input_tokens\":-1,\"max_tokens\":\"100\",
24       \"capabilities\":{\"image_input\":true,\"effort\":{\"supported\":false,\"high\":{\"supported\":true}}}},
25      {\"id\":\"claude-last\",\"max_input_tokens\":1.5,\"capabilities\":[]}
26    ]",
27      decode.list(decode.dynamic),
28    )
29  rows
30}
31
32pub fn upstream_normalization_keeps_valid_order_duplicates_and_typed_facts_test() -> Nil {
33  catalog.normalize(upstream())
34  |> should.equal([
35    catalog.Model("claude-fixture", Some(200_000), Some(64_000), True, [
36      "minimal", "low", "medium", "high", "xhigh", "max", "alpha", "zeta",
37    ]),
38    catalog.Model("claude-fixture", None, None, False, []),
39    catalog.Model("claude-last", None, None, False, []),
40  ])
41}
42
43pub fn normalized_upstream_saves_a_readable_private_cache_test() -> Nil {
44  let home = temporary_home()
45  let models = catalog.normalize(upstream())
46  catalog.save(home, models) |> should.equal(Ok(Nil))
47  catalog.models(home) |> should.equal(models)
48  cache_permissions(home) |> should.equal(0o600)
49  catalog.save(home, []) |> should.equal(Ok(Nil))
50  catalog.models(home) |> should.equal([])
51  cleanup(home)
52}
53
54pub fn cache_write_failure_keeps_the_existing_error_test() -> Nil {
55  let home = temporary_home()
56  block_cache(home)
57  catalog.save(home, catalog.normalize(upstream()))
58  |> should.equal(Error("could not save the Claude model list"))
59  cleanup(home)
60}
61
62@external(erlang, "albedo_claude_catalog_test_support", "temporary_home")
63fn temporary_home() -> String
64
65@external(erlang, "albedo_claude_catalog_test_support", "cache_permissions")
66fn cache_permissions(home: String) -> Int
67
68@external(erlang, "albedo_claude_catalog_test_support", "block_cache")
69fn block_cache(home: String) -> Nil
70
71@external(erlang, "albedo_claude_catalog_test_support", "cleanup")
72fn cleanup(home: String) -> Nil