Nagesh Muralidhar
Initial commit of PodCraft application
fd52f31
from pydantic import BaseModel, Field
from typing import Optional, List, Dict, Union, Any
from datetime import datetime
class UserCreate(BaseModel):
username: str
password: str
class UserLogin(BaseModel):
username: str
password: str
class Token(BaseModel):
access_token: str
token_type: str
class UserUpdate(BaseModel):
password: str
class UserResponse(BaseModel):
username: str
class AgentCreate(BaseModel):
name: str
voice_id: str
voice_name: str
voice_description: str
speed: float
pitch: float
volume: float
output_format: str
personality: str = None # Optional field for agent personality
class AgentResponse(BaseModel):
agent_id: str
name: str
voice_id: str
voice_name: str
voice_description: str
speed: float
pitch: float
volume: float
output_format: str
user_id: str
personality: str = None # Optional field for agent personality
class PodcastRequest(BaseModel):
topic: str
believer_voice_id: str
skeptic_voice_id: str
class ConversationBlock(BaseModel):
name: str
input: str
silence_before: int
voice_id: str
emotion: str
model: str
speed: float
duration: int
class PodcastResponse(BaseModel):
podcast_id: str
audio_url: Optional[str]
topic: str
error: Optional[str]
# Models for structured debate transcript and insights
class TranscriptEntry(BaseModel):
agentId: str
agentName: str
turn: int
content: str
class InsightsData(BaseModel):
topic: str
research: str
transcript: List[TranscriptEntry]
keyInsights: List[str]
conclusion: str
# New Workflow Models
class WorkflowCreate(BaseModel):
name: str
description: str
nodes: List[Dict]
edges: List[Dict]
insights: Optional[Union[InsightsData, str]] = None
class WorkflowResponse(BaseModel):
id: str
name: str
description: str
nodes: List[Dict]
edges: List[Dict]
insights: Optional[Union[InsightsData, str]] = None
user_id: str
created_at: Optional[str]
updated_at: Optional[str]
class TextPodcastRequest(BaseModel):
text: str
voice_id: str = "alloy"
emotion: str = "neutral"
speed: float = 1.0
title: Optional[str] = None
class TextPodcastResponse(BaseModel):
audio_url: str
duration: Optional[float]
status: str
error: Optional[str]
updated_at: Optional[str]