schema.ts

 1import { Type, type Static } from "@sinclair/typebox";
 2
 3const CustomModelSchema = Type.Object({
 4  provider: Type.String(),
 5  api: Type.String(),
 6  base_url: Type.String(),
 7  id: Type.String(),
 8  name: Type.String(),
 9  reasoning: Type.Boolean(),
10  input: Type.Array(Type.Union([Type.Literal("text"), Type.Literal("image")])),
11  cost: Type.Object({
12    input: Type.Number(),
13    output: Type.Number(),
14    cache_read: Type.Optional(Type.Number()),
15    cache_write: Type.Optional(Type.Number()),
16  }),
17  context_window: Type.Number(),
18  max_tokens: Type.Number(),
19  headers: Type.Optional(Type.Record(Type.String(), Type.String())),
20  compat: Type.Optional(
21    Type.Object({
22      supports_store: Type.Optional(Type.Boolean()),
23      supports_developer_role: Type.Optional(Type.Boolean()),
24      supports_reasoning_effort: Type.Optional(Type.Boolean()),
25      supports_usage_in_streaming: Type.Optional(Type.Boolean()),
26      max_tokens_field: Type.Optional(Type.Union([Type.Literal("max_tokens"), Type.Literal("max_completion_tokens")])),
27      requires_tool_result_name: Type.Optional(Type.Boolean()),
28      requires_assistant_after_tool_result: Type.Optional(Type.Boolean()),
29      requires_thinking_as_text: Type.Optional(Type.Boolean()),
30      requires_mistral_tool_ids: Type.Optional(Type.Boolean()),
31      thinking_format: Type.Optional(Type.Union([Type.Literal("openai"), Type.Literal("zai")])),
32    })
33  ),
34});
35
36const ConfigSchema = Type.Object({
37  defaults: Type.Object({
38    model: Type.String(),
39    cleanup: Type.Boolean(),
40    kagi_session_token: Type.Optional(Type.String()),
41    tabstack_api_key: Type.Optional(Type.String()),
42  }),
43  web: Type.Object({
44    model: Type.Optional(Type.String()),
45    system_prompt_path: Type.Optional(Type.String()),
46    kagi_session_token: Type.Optional(Type.String()),
47    tabstack_api_key: Type.Optional(Type.String()),
48  }),
49  repo: Type.Object({
50    model: Type.Optional(Type.String()),
51    system_prompt_path: Type.Optional(Type.String()),
52    default_depth: Type.Optional(Type.Number({ minimum: 1 })),
53    blob_limit: Type.Optional(Type.String()),
54  }),
55  custom_models: Type.Optional(Type.Record(Type.String(), CustomModelSchema)),
56});
57
58export type RumiloConfig = Static<typeof ConfigSchema>;
59export type CustomModelConfig = Static<typeof CustomModelSchema>;