104 lines
4.1 KiB
Python
104 lines
4.1 KiB
Python
"""
|
|
Episode profiles service layer using API.
|
|
"""
|
|
|
|
from typing import List
|
|
|
|
from loguru import logger
|
|
|
|
from api.client import api_client
|
|
from open_notebook.domain.podcast import EpisodeProfile
|
|
|
|
|
|
class EpisodeProfilesService:
|
|
"""Service layer for episode profiles operations using API."""
|
|
|
|
def __init__(self):
|
|
logger.info("Using API for episode profiles operations")
|
|
|
|
def get_all_episode_profiles(self) -> List[EpisodeProfile]:
|
|
"""Get all episode profiles."""
|
|
profiles_data = api_client.get_episode_profiles()
|
|
# Convert API response to EpisodeProfile objects
|
|
profiles = []
|
|
for profile_data in profiles_data:
|
|
profile = EpisodeProfile(
|
|
name=profile_data["name"],
|
|
description=profile_data.get("description", ""),
|
|
speaker_config=profile_data["speaker_config"],
|
|
outline_provider=profile_data["outline_provider"],
|
|
outline_model=profile_data["outline_model"],
|
|
transcript_provider=profile_data["transcript_provider"],
|
|
transcript_model=profile_data["transcript_model"],
|
|
default_briefing=profile_data["default_briefing"],
|
|
num_segments=profile_data["num_segments"]
|
|
)
|
|
profile.id = profile_data["id"]
|
|
profiles.append(profile)
|
|
return profiles
|
|
|
|
def get_episode_profile(self, profile_name: str) -> EpisodeProfile:
|
|
"""Get a specific episode profile by name."""
|
|
profile_response = api_client.get_episode_profile(profile_name)
|
|
profile_data = profile_response if isinstance(profile_response, dict) else profile_response[0]
|
|
profile = EpisodeProfile(
|
|
name=profile_data["name"],
|
|
description=profile_data.get("description", ""),
|
|
speaker_config=profile_data["speaker_config"],
|
|
outline_provider=profile_data["outline_provider"],
|
|
outline_model=profile_data["outline_model"],
|
|
transcript_provider=profile_data["transcript_provider"],
|
|
transcript_model=profile_data["transcript_model"],
|
|
default_briefing=profile_data["default_briefing"],
|
|
num_segments=profile_data["num_segments"]
|
|
)
|
|
profile.id = profile_data["id"]
|
|
return profile
|
|
|
|
def create_episode_profile(
|
|
self,
|
|
name: str,
|
|
description: str = "",
|
|
speaker_config: str = "",
|
|
outline_provider: str = "",
|
|
outline_model: str = "",
|
|
transcript_provider: str = "",
|
|
transcript_model: str = "",
|
|
default_briefing: str = "",
|
|
num_segments: int = 5,
|
|
) -> EpisodeProfile:
|
|
"""Create a new episode profile."""
|
|
profile_response = api_client.create_episode_profile(
|
|
name=name,
|
|
description=description,
|
|
speaker_config=speaker_config,
|
|
outline_provider=outline_provider,
|
|
outline_model=outline_model,
|
|
transcript_provider=transcript_provider,
|
|
transcript_model=transcript_model,
|
|
default_briefing=default_briefing,
|
|
num_segments=num_segments,
|
|
)
|
|
profile_data = profile_response if isinstance(profile_response, dict) else profile_response[0]
|
|
profile = EpisodeProfile(
|
|
name=profile_data["name"],
|
|
description=profile_data.get("description", ""),
|
|
speaker_config=profile_data["speaker_config"],
|
|
outline_provider=profile_data["outline_provider"],
|
|
outline_model=profile_data["outline_model"],
|
|
transcript_provider=profile_data["transcript_provider"],
|
|
transcript_model=profile_data["transcript_model"],
|
|
default_briefing=profile_data["default_briefing"],
|
|
num_segments=profile_data["num_segments"]
|
|
)
|
|
profile.id = profile_data["id"]
|
|
return profile
|
|
|
|
def delete_episode_profile(self, profile_id: str) -> bool:
|
|
"""Delete an episode profile."""
|
|
api_client.delete_episode_profile(profile_id)
|
|
return True
|
|
|
|
|
|
# Global service instance
|
|
episode_profiles_service = EpisodeProfilesService() |