# hitl_call_ids

> **Function** in `langchain_azure_ai`

📖 [View in docs](https://reference.langchain.com/python/langchain-azure-ai/agents/hosting/_converters/_hitl/hitl_call_ids)

Return the ``call_id``s reserved by the HITL wire protocol.

An id is reserved when *items* carries a ``function_call`` named
:data:`HITL_FUNCTION_NAME` — the sentinel this host emits for a pending
interrupt. That sentinel and the ``function_call_output`` answering it
are transport plumbing rather than conversation content, so
:func:`~._request.items_to_messages` drops both instead of replaying
them to the model as a tool-call round trip.

This matters beyond the resume turn itself. On the turn that consumes
an interrupt the host already filters the pair through the resume
path's consumed-id set, but a client that echoes prior output items
back — the ordinary stateless Responses pattern — keeps re-sending the
sentinel on every later turn, when nothing is pending and no
consumed-id set exists.

Only the ``function_call`` side carries the discriminating name. A
``function_call_output`` arriving without it cannot be recognised
here, but an unpaired one is already dropped as an orphan
``ToolMessage``.

## Signature

```python
hitl_call_ids(
    items: Sequence[Any],
) -> frozenset[str]
```

## Parameters

| Name | Type | Required | Description |
|------|------|----------|-------------|
| `items` | `Sequence[Any]` | Yes | Resolved input items from the request and/or history. |

## Returns

`frozenset[str]`

The reserved ``call_id``s, empty when the stream carries none.

---

[View source on GitHub](https://github.com/langchain-ai/langchain-azure/blob/7a6a664d617264df8dcb12fcfb1bacc09f21d504/libs/azure-ai/langchain_azure_ai/agents/hosting/_converters/_hitl.py#L265)