aidial_interceptors_sdk/chat_completion/element_path.py (28 lines of code) (raw):

from typing import Any, Self from aidial_sdk.pydantic_v1 import BaseModel from aidial_interceptors_sdk.chat_completion.index_mapper import IndexMapper class ChoiceContext(BaseModel): index: int stage_index_mapper: IndexMapper[int] class ElementPath(BaseModel): # Only for responses response_ctx: Any | None = None choice_ctx: ChoiceContext | None = None # Only for requests message_idx: int | None = None # Both for requests and responses stage_idx: int | None = None attachment_idx: int | None = None def with_response_ctx(self, response_ctx: Any) -> Self: return self.copy(update={"response_ctx": response_ctx}) def with_choice_ctx(self, choice_ctx: ChoiceContext) -> Self: return self.copy(update={"choice_ctx": choice_ctx}) def with_message_idx(self, message_idx: int) -> Self: return self.copy(update={"message_idx": message_idx}) def with_stage_idx(self, stage_idx: int) -> Self: return self.copy(update={"stage_idx": stage_idx}) def with_attachment_idx(self, attachment_idx: int) -> Self: return self.copy(update={"attachment_idx": attachment_idx}) @property def choice_idx(self) -> int | None: return self.choice_ctx.index if self.choice_ctx else None @property def choice_stage_index_mapper(self) -> IndexMapper[int] | None: return self.choice_ctx.stage_index_mapper if self.choice_ctx else None