semblance/backend
michael 96b9bfeedd Add LLM-generated one-line summaries for focus groups in list view
- Create focus_group_summary_service.py to generate concise summaries
- Add prompt template for summary generation
- Integrate summary generation after discussion guide creation
- Display summary under focus group title in list view with fallback to description

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-04 08:51:28 -06:00
..
__pycache__ major refactor of entire application - migrate sync -> async including pymongo -> motor, flask -> quart, google-generativeai -> google-genai 2025-08-27 15:20:56 -05:00
app Add LLM-generated one-line summaries for focus groups in list view 2025-12-04 08:51:28 -06:00
prompts Add LLM-generated one-line summaries for focus groups in list view 2025-12-04 08:51:28 -06:00
scripts initial commit 2025-08-04 09:07:59 -05:00
tests initial commit 2025-08-04 09:07:59 -05:00
uploads/focus-group-68af42ff19ed40daa02b0392 major refactor of entire application - migrate sync -> async including pymongo -> motor, flask -> quart, google-generativeai -> google-genai 2025-08-27 15:20:56 -05:00
.DS_Store made long actions cancellable (like persona generation, etc.), increased variety of persona generation with prompt changes and temperature variable, reduced length of key theme quotes, bug fixes 2025-09-10 16:24:05 -05:00
.env added drag and drop for reordering questions/activities in discussion guide edit mode 2025-08-26 09:52:24 -05:00
.env.example initial commit 2025-08-04 09:07:59 -05:00
hypercorn_config.py initial commit 2025-08-04 09:07:59 -05:00
logging_config.py bug fixes related to websockets implementation 2025-08-11 09:33:09 -05:00
migrate_legacy_folders.py truncated long folder names so the buttons are still visible, migrated legacy folders to new format 2025-09-11 10:40:01 -05:00
MIGRATION_README.md truncated long folder names so the buttons are still visible, migrated legacy folders to new format 2025-09-11 10:40:01 -05:00
README.md initial commit 2025-08-04 09:07:59 -05:00
requirements.txt graceful handling of expired JWT token 2025-09-03 13:15:00 -05:00
run.py major refactor of entire application - migrate sync -> async including pymongo -> motor, flask -> quart, google-generativeai -> google-genai 2025-08-27 15:20:56 -05:00
test_asset.txt fixed folders again, bug fixes for gpt-5, adjusted response length calculation, cosmetic UI changes, other bug fixes 2025-08-09 10:08:45 -05:00
test_image.png fixed folders again, bug fixes for gpt-5, adjusted response length calculation, cosmetic UI changes, other bug fixes 2025-08-09 10:08:45 -05:00
test_websocket_cross_process.py converted message polling to websockets 2025-08-10 18:08:34 -05:00

Semblance Synthetic Society Backend

This is the Python backend for the Semblance Synthetic Society project. It provides API endpoints for authentication, personas, and focus groups.

Setup

  1. Make sure you have Python 3.8+ installed
  2. Create a virtual environment:
    cd backend
    python -m venv venv
    
  3. Activate the virtual environment:
    • On macOS/Linux:
      source venv/bin/activate
      
    • On Windows:
      venv\Scripts\activate
      
  4. Install dependencies:
    pip install -r requirements.txt
    

Running the Backend

python run.py

The server will start on http://localhost:5000

API Endpoints

Authentication

  • POST /api/auth/login - Login with username and password
  • POST /api/auth/register - Register a new user
  • GET /api/auth/me - Get current user profile

Personas

  • GET /api/personas - Get personas for current user
  • GET /api/personas/all - Get all personas
  • GET /api/personas/:id - Get persona by ID
  • POST /api/personas - Create a new persona
  • PUT /api/personas/:id - Update a persona
  • DELETE /api/personas/:id - Delete a persona
  • POST /api/personas/batch - Create multiple personas

Focus Groups

  • GET /api/focus-groups - Get focus groups for current user
  • GET /api/focus-groups/all - Get all focus groups
  • GET /api/focus-groups/:id - Get focus group by ID
  • POST /api/focus-groups - Create a new focus group
  • PUT /api/focus-groups/:id - Update a focus group
  • DELETE /api/focus-groups/:id - Delete a focus group
  • POST /api/focus-groups/:id/participants - Add participant to focus group
  • DELETE /api/focus-groups/:id/participants/:personaId - Remove participant from focus group
  • GET /api/focus-groups/:id/messages - Get messages for a focus group
  • POST /api/focus-groups/:id/messages - Add a message to a focus group

AI Personas

  • POST /api/ai-personas/generate - Generate a synthetic persona using AI
  • POST /api/ai-personas/generate-and-save - Generate and save a synthetic persona
  • POST /api/ai-personas/batch-generate - Generate multiple synthetic personas
  • POST /api/ai-personas/batch-generate-and-save - Generate and save multiple synthetic personas

Focus Group AI

  • POST /api/focus-group-ai/generate-response - Generate an AI response from a persona in a focus group discussion

AI Response Generation Example

Request Body:

{
  "focus_group_id": "focus_group_id",
  "persona_id": "persona_id",
  "current_topic": "What do you think about this product?",
  "temperature": 0.7  // Optional, controls randomness (0.0 to 1.0)
}

Response:

{
  "message": "Response generated successfully",
  "response": "I find the product quite interesting. As someone who values efficiency, I appreciate the intuitive interface and how it streamlines my workflow. However, I'm concerned about the price point, which seems high compared to similar options on the market.",
  "message_id": "message_id"
}

How AI Response Generation Works

The system generates realistic persona responses by:

  1. Using the persona's demographic details, personality traits, goals, and frustrations
  2. Including the full discussion guide text
  3. Taking up to 50 most recent conversation messages for context
  4. Processing the current topic/question
  5. Generating a response in the persona's authentic voice

The current_topic parameter can be any text: a moderator question, a specific prompt, or a summary of discussion points. The AI will respond as if the persona is directly addressing this topic.

Default User

A default user with the following credentials is automatically created:

  • Username: user
  • Password: pass
  • Role: admin