Source code for mllm_shap.backends.lmstudio.chat
"""Convert conversation snapshots to LM Studio chat contexts.
@domain backends
@see [[knowledge/architecture/backends]]
@tested-by [[tests/backends/test_lmstudio_chat.py]]
"""
from typing import Any
from ...domain.conversation import ConversationSnapshot
from ...domain.enums import Role
from .._chat import message_chat_text
[docs]
def snapshot_to_chat(snapshot: ConversationSnapshot, chat_factory: Any) -> Any:
"""Build an LM Studio chat object from ``snapshot`` turns."""
chat: Any | None = None
for turn in snapshot.turns:
for message in turn.messages:
text = message_chat_text(message)
match message.role:
case Role.SYSTEM:
if chat is None:
chat = chat_factory(text)
else:
chat.add_system_prompt(text)
case Role.USER:
if chat is None:
chat = chat_factory()
chat.add_user_message(text)
case Role.ASSISTANT:
if chat is None:
chat = chat_factory()
chat.add_assistant_response(text)
case _ as unsupported:
msg = (
f"unsupported message role for LM Studio chat: {unsupported!r}"
)
raise ValueError(msg)
if chat is None:
chat = chat_factory()
return chat