File size: 2,056 Bytes
a1bab2d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
"""Kilo.ai model-catalog interpretation."""

from collections.abc import Mapping, Sequence
from typing import Any

from free_claude_code.application.model_metadata import ProviderModelInfo
from free_claude_code.providers.model_listing import (
    extract_tool_capable_model_infos,
    model_list_items,
)


def extract_kilo_model_infos(
    payload: Any, *, provider_name: str
) -> frozenset[ProviderModelInfo]:
    """Return chat/tool Kilo models with their advertised reasoning support."""
    tool_models = extract_tool_capable_model_infos(
        payload,
        provider_name=provider_name,
    )
    excluded_ids = {
        model_id
        for item in model_list_items(payload, provider_name=provider_name)
        if (model_id := _model_id(item)) is not None
        and (_produces_images(item) or _requires_responses_api(item))
    }
    return frozenset(info for info in tool_models if info.model_id not in excluded_ids)


def _produces_images(item: Any) -> bool:
    architecture = _field(item, "architecture")
    modalities = _string_values(_field(architecture, "output_modalities"))
    return modalities is not None and "image" in modalities


def _requires_responses_api(item: Any) -> bool:
    opencode = _field(item, "opencode")
    provider = _field(opencode, "ai_sdk_provider")
    return isinstance(provider, str) and provider.casefold() == "openai"


def _model_id(item: Any) -> str | None:
    value = _field(item, "id")
    return value if isinstance(value, str) and value.strip() else None


def _string_values(value: Any) -> set[str] | None:
    if not isinstance(value, Sequence) or isinstance(value, str | bytes | bytearray):
        return None
    return {item.casefold() for item in value if isinstance(item, str)}


def _field(item: Any, name: str) -> Any:
    if isinstance(item, Mapping):
        return item.get(name)
    value = getattr(item, name, None)
    if value is not None:
        return value
    extra = getattr(item, "model_extra", None)
    return extra.get(name) if isinstance(extra, Mapping) else None