File size: 2,097 Bytes
ad51766
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
62
63
64
65
66
67
68
69
"""Unit tests for tools.parse_functions_json / build_tools_list."""

import json

from tools import build_tools_list, parse_functions_json


def test_parse_empty_inputs():
    assert parse_functions_json(None) == []
    assert parse_functions_json("") == []
    assert parse_functions_json("   ") == []


def test_parse_invalid_json():
    assert parse_functions_json("not json") == []


def test_parse_dict_normalized_to_list():
    payload = {"name": "ping", "parameters": {"type": "object"}}
    result = parse_functions_json(json.dumps(payload))
    assert len(result) == 1
    assert result[0]["name"] == "ping"


def test_parse_typed_function_format():
    payload = [{
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "weather",
            "parameters": {"type": "object", "properties": {}},
        },
    }]
    result = parse_functions_json(json.dumps(payload))
    assert result == [payload[0]["function"]]


def test_parse_skips_invalid_entries():
    payload = [
        {"type": "function", "function": {}},      # missing name
        {"name": "good", "parameters": {}},         # ok
        "string-not-object",                         # not a dict
    ]
    result = parse_functions_json(json.dumps(payload))
    assert [fn["name"] for fn in result] == ["good"]


def test_build_tools_list_returns_none_when_empty():
    assert build_tools_list("") is None
    assert build_tools_list("[]") is None


def test_build_tools_list_wraps_in_function_envelope():
    payload = [{"name": "ping", "parameters": {"type": "object"}}]
    tools = build_tools_list(json.dumps(payload))
    assert tools is not None
    assert tools[0]["type"] == "function"
    assert tools[0]["function"]["name"] == "ping"


def test_build_tools_list_parses_string_parameters():
    payload = [{
        "name": "ping",
        "parameters": json.dumps({"type": "object", "properties": {}}),
    }]
    tools = build_tools_list(json.dumps(payload))
    assert tools is not None
    assert tools[0]["function"]["parameters"]["type"] == "object"