Stop creating empty conversations that clutter sidebar with 'New Chat'
- agent.new_conversation() now just resets conv_id to None; DB row is created lazily by ensure_conversation() when user sends first message - on_app_load no longer eagerly creates a conversation on page load - list_conversations filters out conversations with no messages so orphaned empty rows don't appear in the sidebar Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>cora-start
parent
603878e095
commit
d771dd5c80
|
|
@ -100,10 +100,9 @@ class Agent:
|
|||
self.db.create_conversation(self.conv_id, agent_name=self.name)
|
||||
return self.conv_id
|
||||
|
||||
def new_conversation(self) -> str:
|
||||
self.conv_id = uuid.uuid4().hex[:12]
|
||||
self.db.create_conversation(self.conv_id, agent_name=self.name)
|
||||
return self.conv_id
|
||||
def new_conversation(self):
|
||||
"""Reset conversation state. DB row is created lazily by ensure_conversation()."""
|
||||
self.conv_id = None
|
||||
|
||||
def load_conversation(self, conv_id: str) -> list[dict]:
|
||||
"""Load an existing conversation by ID. Returns message list."""
|
||||
|
|
|
|||
|
|
@ -95,20 +95,32 @@ class Database:
|
|||
return conv_id
|
||||
|
||||
def list_conversations(self, limit: int = 50, agent_name: str | None = None) -> list[dict]:
|
||||
# Only return conversations that have at least one message
|
||||
if agent_name:
|
||||
rows = self._conn.execute(
|
||||
"SELECT id, title, updated_at, agent_name FROM conversations"
|
||||
" WHERE agent_name = ? ORDER BY updated_at DESC LIMIT ?",
|
||||
"SELECT c.id, c.title, c.updated_at, c.agent_name"
|
||||
" FROM conversations c"
|
||||
" WHERE c.agent_name = ?"
|
||||
" AND EXISTS (SELECT 1 FROM messages m WHERE m.conv_id = c.id)"
|
||||
" ORDER BY c.updated_at DESC LIMIT ?",
|
||||
(agent_name, limit),
|
||||
).fetchall()
|
||||
else:
|
||||
rows = self._conn.execute(
|
||||
"SELECT id, title, updated_at, agent_name FROM conversations"
|
||||
" ORDER BY updated_at DESC LIMIT ?",
|
||||
"SELECT c.id, c.title, c.updated_at, c.agent_name"
|
||||
" FROM conversations c"
|
||||
" WHERE EXISTS (SELECT 1 FROM messages m WHERE m.conv_id = c.id)"
|
||||
" ORDER BY c.updated_at DESC LIMIT ?",
|
||||
(limit,),
|
||||
).fetchall()
|
||||
return [dict(r) for r in rows]
|
||||
|
||||
def get_conversation_title(self, conv_id: str) -> str | None:
|
||||
row = self._conn.execute(
|
||||
"SELECT title FROM conversations WHERE id = ?", (conv_id,)
|
||||
).fetchone()
|
||||
return row["title"] if row else None
|
||||
|
||||
def update_conversation_title(self, conv_id: str, title: str):
|
||||
self._conn.execute(
|
||||
"UPDATE conversations SET title = ? WHERE id = ?", (title, conv_id)
|
||||
|
|
|
|||
|
|
@ -442,9 +442,6 @@ def create_ui(
|
|||
if conv_id and agent:
|
||||
messages = agent.load_conversation(conv_id)
|
||||
chatbot_msgs = _messages_to_chatbot(messages)
|
||||
elif agent:
|
||||
agent.ensure_conversation()
|
||||
conv_id = agent.conv_id
|
||||
|
||||
convs = _refresh_conv_list(agent_name)
|
||||
new_browser = {"agent_name": agent_name, "conv_id": conv_id}
|
||||
|
|
|
|||
Loading…
Reference in New Issue