open-notebook/api/episode_profiles_service.py

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()