fix(vault,conversations): the envelope diff drops query blocks and frontmatter, history hands the envelope apart from the user's words
This commit is contained in:
1 parent
1d1285de46
commit
65564d8541
5 files changed
+139
-10
No files matched your search
@@ -19,6 +19,7 @@ from beaver_gateway.backends.transcript import (
|
||||
)
|
||||
from beaver_gateway.conversations.kinds import KINDS, Kind
|
||||
from beaver_gateway.conversations.state import State, iso
|
||||
from beaver_gateway.conversations.texts import split_service
|
||||
from beaver_gateway.frontends.markdown.history import load_messages
|
||||
from beaver_gateway.storage.models import (
|
||||
Conversation,
|
||||
@@ -482,9 +483,31 @@ class Rows(State):
|
||||
return await load_messages(
|
||||
session, conversation_id=cast("int", conv.id)
|
||||
)
|
||||
return messages_from_entries(
|
||||
cast("Any", await self.entries(conv)), with_ts=True
|
||||
messages = messages_from_entries(
|
||||
cast("Any", await self.entries(conv)), stamped=True
|
||||
)
|
||||
return [self._unwrapped(message) for message in messages]
|
||||
|
||||
def _unwrapped(self, message: dict[str, Any]) -> dict[str, Any]:
|
||||
if message["role"] != "user":
|
||||
return message
|
||||
content = message["content"]
|
||||
if isinstance(content, str):
|
||||
text, service = split_service(content, self._texts)
|
||||
return (
|
||||
message
|
||||
if service is None
|
||||
else {**message, "content": text, "service": service}
|
||||
)
|
||||
for index, block in enumerate(content):
|
||||
if block.get("type") != "text":
|
||||
continue
|
||||
text, service = split_service(str(block.get("text") or ""), self._texts)
|
||||
if service is not None:
|
||||
blocks = [*content]
|
||||
blocks[index] = {**block, "text": text}
|
||||
return {**message, "content": blocks, "service": service}
|
||||
return message
|
||||
|
||||
async def entries(self, conv: Conversation, *, subpath: str = "") -> list[Any]:
|
||||
if conv.session_id is None:
|
||||
|
||||
Reference in new issue
Block a user