Merge pull request #430 from CREDO23/feat/chat-pannel

[Feature] Add the chat panel
This commit is contained in:
Rohan Verma 2025-11-11 17:04:39 -08:00 committed by GitHub
commit 0835a192a2
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
38 changed files with 1219 additions and 72 deletions

View file

@ -199,6 +199,7 @@ async def read_chats(
Chat.initial_connectors,
Chat.search_space_id,
Chat.created_at,
Chat.state_version,
)
.join(SearchSpace)
.filter(SearchSpace.user_id == user.id)
@ -261,7 +262,10 @@ async def update_chat(
db_chat = await read_chat(chat_id, session, user)
update_data = chat_update.model_dump(exclude_unset=True)
for key, value in update_data.items():
if key == "messages":
db_chat.state_version = len(update_data["messages"])
setattr(db_chat, key, value)
await session.commit()
await session.refresh(db_chat)
return db_chat

View file

@ -155,7 +155,11 @@ async def delete_podcast(
async def generate_chat_podcast_with_new_session(
chat_id: int, search_space_id: int, podcast_title: str, user_id: int
chat_id: int,
search_space_id: int,
user_id: int,
podcast_title: str | None = None,
user_prompt: str | None = None,
):
"""Create a new session and process chat podcast generation."""
from app.db import async_session_maker
@ -163,7 +167,7 @@ async def generate_chat_podcast_with_new_session(
async with async_session_maker() as session:
try:
await generate_chat_podcast(
session, chat_id, search_space_id, podcast_title, user_id
session, chat_id, search_space_id, user_id, podcast_title, user_prompt
)
except Exception as e:
import logging
@ -211,7 +215,11 @@ async def generate_podcast(
# Add Celery tasks for each chat ID
for chat_id in valid_chat_ids:
generate_chat_podcast_task.delay(
chat_id, request.search_space_id, request.podcast_title, user.id
chat_id,
request.search_space_id,
user.id,
request.podcast_title,
request.user_prompt,
)
return {
@ -287,3 +295,27 @@ async def stream_podcast(
raise HTTPException(
status_code=500, detail=f"Error streaming podcast: {e!s}"
) from e
@router.get("/podcasts/by-chat/{chat_id}", response_model=PodcastRead | None)
async def get_podcast_by_chat_id(
chat_id: int,
session: AsyncSession = Depends(get_async_session),
user: User = Depends(current_active_user),
):
try:
# Get the podcast and check if user has access
result = await session.execute(
select(Podcast)
.join(SearchSpace)
.filter(Podcast.chat_id == chat_id, SearchSpace.user_id == user.id)
)
podcast = result.scalars().first()
return podcast
except HTTPException as he:
raise he
except Exception as e:
raise HTTPException(
status_code=500, detail=f"Error fetching podcast: {e!s}"
) from e