Skip to content
Back to skills

Conversation State Jawad Chaudhary Hackathone 2 Todo Sp 3

ASecurity

Stateless conversation management with database-backed history, message persistence, and scalable architecture. Use when handling chat state, loading history, or building stateless APIs.

  • 666 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added June 2, 2026
ai-agentspythonapidatabase

Works with

  • api

Security analysis

A100/100

Scanned June 2, 2026

npx -y skills add majiayu000/claude-skill-registry --skill conversation-state-jawad-chaudhary-hackathone-2-todo-sp-3 --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Conversation State Jawad Chaudhary Hackathone 2 Todo Sp 3?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Conversation State Jawad Chaudhary Hackathone 2 Todo Sp 3
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/majiayu000-conversation-state-jawad-chaudhary-hackathone-2-to/badge)](https://www.skillsdirectory.com/skills/majiayu000-conversation-state-jawad-chaudhary-hackathone-2-to)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: conversation-state
description: Stateless conversation management with database-backed history, message persistence, and scalable architecture. Use when handling chat state, loading history, or building stateless APIs.
---

# Stateless Conversation State Management

## Load Conversation History
```python
async def load_conversation_history(
    session: AsyncSession,
    user_id: str,
    conversation_id: int | None
) -> tuple[Conversation, list[dict]]:
    """Load or create conversation with message history."""
    if conversation_id:
        stmt = select(Conversation).where(
            Conversation.id == conversation_id,
            Conversation.user_id == user_id
        )
        result = await session.execute(stmt)
        conversation = result.scalar_one_or_none()
        if not conversation:
            raise HTTPException(status_code=404, detail="Conversation not found")
    else:
        conversation = Conversation(user_id=user_id)
        session.add(conversation)
        await session.commit()
        await session.refresh(conversation)
    
    # Load messages
    stmt = select(Message).where(
        Message.conversation_id == conversation.id
    ).order_by(Message.created_at)
    result = await session.execute(stmt)
    db_messages = result.scalars().all()
    
    messages = [{"role": msg.role, "content": msg.content} for msg in db_messages]
    return conversation, messages
```

## Complete Stateless Flow
```python
@app.post("/api/{user_id}/chat")
async def chat(
    user_id: str,
    request: ChatRequest,
    session: AsyncSession = Depends(get_db_session),
    current_user: str = Depends(verify_jwt)
):
    # 1. Load history from DB
    conversation, messages = await load_conversation_history(
        session, user_id, request.conversation_id
    )
    
    # 2. Save user message
    user_msg = Message(
        user_id=user_id,
        conversation_id=conversation.id,
        role="user",
        content=request.message
    )
    session.add(user_msg)
    await session.commit()
    
    # 3. Add to history array
    messages.append({"role": "user", "content": request.message})
    
    # 4. Run agent
    response, tool_calls = await run_agent(messages)
    
    # 5. Save assistant response
    assistant_msg = Message(
        user_id=user_id,
        conversation_id=conversation.id,
        role="assistant",
        content=response
    )
    session.add(assistant_msg)
    await session.commit()
    
    # 6. Return (server holds NO state)
    return ChatResponse(
        conversation_id=conversation.id,
        response=response,
        tool_calls=tool_calls
    )
```

## Benefits
- Horizontal scalability (any server handles any request)
- Resilience (server restart doesn't lose conversations)
- Testability (each request independent)
- No sticky sessions needed

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.