Skip to content

Request building

RequestData dataclass

Data class for request data.

Attributes:

Name Type Description
url str

The URL of the request.

request_elements int

The number of request elements.

headers Optional[Dict[str, str]]

The headers of the request.

parameters Optional[Dict[str, Union[str, List[str]]]]

The parameters of the request.

data Optional[Union[str, bytes]]

The data of the request.

payload Optional[Dict[str, Any]]

The payload of the request.

image_scaling_factors List[Optional[float]]

The scaling factors of the images.

Source code in inference_sdk/http/utils/request_building.py
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
@dataclass(frozen=True)
class RequestData:
    """Data class for request data.

    Attributes:
        url: The URL of the request.
        request_elements: The number of request elements.
        headers: The headers of the request.
        parameters: The parameters of the request.
        data: The data of the request.
        payload: The payload of the request.
        image_scaling_factors: The scaling factors of the images.
    """

    url: str
    request_elements: int
    headers: Optional[Dict[str, str]]
    parameters: Optional[Dict[str, Union[str, List[str]]]]
    data: Optional[Union[str, bytes]]
    payload: Optional[Dict[str, Any]]
    image_scaling_factors: List[Optional[float]]

assembly_request_data(url, batch_inference_inputs, headers, parameters, payload, image_placement)

Assemble request data.

Parameters:

Name Type Description Default
url str

The URL of the request.

required
batch_inference_inputs List[Tuple[str, Optional[float]]]

The batch inference inputs.

required
headers Optional[Dict[str, str]]

The headers of the request.

required
parameters Optional[Dict[str, Union[str, List[str]]]]

The parameters of the request.

required
payload Optional[Dict[str, Any]]

The payload of the request.

required
image_placement ImagePlacement

The image placement.

required

Returns:

Type Description
RequestData

The request data.

Source code in inference_sdk/http/utils/request_building.py
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
def assembly_request_data(
    url: str,
    batch_inference_inputs: List[Tuple[str, Optional[float]]],
    headers: Optional[Dict[str, str]],
    parameters: Optional[Dict[str, Union[str, List[str]]]],
    payload: Optional[Dict[str, Any]],
    image_placement: ImagePlacement,
) -> RequestData:
    """Assemble request data.

    Args:
        url: The URL of the request.
        batch_inference_inputs: The batch inference inputs.
        headers: The headers of the request.
        parameters: The parameters of the request.
        payload: The payload of the request.
        image_placement: The image placement.

    Returns:
        The request data.
    """
    data = None
    if image_placement is ImagePlacement.DATA and len(batch_inference_inputs) != 1:
        raise ValueError("Only single image can be placed in request `data`")
    if image_placement is ImagePlacement.JSON and payload is None:
        payload = {}
    if image_placement is ImagePlacement.JSON:
        payload = deepcopy(payload)
        payload = inject_images_into_payload(
            payload=payload,
            encoded_images=batch_inference_inputs,
        )
    elif image_placement is ImagePlacement.DATA:
        data = batch_inference_inputs[0][0]
    else:
        raise NotImplemented(
            f"Not implemented request building method for {image_placement}"
        )
    scaling_factors = [e[1] for e in batch_inference_inputs]
    return RequestData(
        url=url,
        request_elements=len(batch_inference_inputs),
        headers=headers,
        parameters=parameters,
        data=data,
        payload=payload,
        image_scaling_factors=scaling_factors,
    )

prepare_requests_data(url, encoded_inference_inputs, headers, parameters, payload, max_batch_size, image_placement)

Prepare requests data.

Parameters:

Name Type Description Default
url str

The URL of the request.

required
encoded_inference_inputs List[Tuple[str, Optional[float]]]

The encoded inference inputs.

required
headers Optional[Dict[str, str]]

The headers of the request.

required
parameters Optional[Dict[str, Union[str, List[str]]]]

The parameters of the request.

required
payload Optional[Dict[str, Any]]

The payload of the request.

required
max_batch_size int

The maximum batch size.

required
image_placement ImagePlacement

The image placement.

required

Returns:

Type Description
List[RequestData]

The list of request data.

Source code in inference_sdk/http/utils/request_building.py
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
70
71
72
73
74
75
76
77
78
def prepare_requests_data(
    url: str,
    encoded_inference_inputs: List[Tuple[str, Optional[float]]],
    headers: Optional[Dict[str, str]],
    parameters: Optional[Dict[str, Union[str, List[str]]]],
    payload: Optional[Dict[str, Any]],
    max_batch_size: int,
    image_placement: ImagePlacement,
) -> List[RequestData]:
    """Prepare requests data.

    Args:
        url: The URL of the request.
        encoded_inference_inputs: The encoded inference inputs.
        headers: The headers of the request.
        parameters: The parameters of the request.
        payload: The payload of the request.
        max_batch_size: The maximum batch size.
        image_placement: The image placement.

    Returns:
        The list of request data.
    """
    batches = list(
        make_batches(
            iterable=encoded_inference_inputs,
            batch_size=max_batch_size,
        )
    )
    requests_data = []
    for batch_inference_inputs in batches:
        request_data = assembly_request_data(
            url=url,
            batch_inference_inputs=batch_inference_inputs,
            headers=headers,
            parameters=parameters,
            payload=payload,
            image_placement=image_placement,
        )
        requests_data.append(request_data)
    return requests_data