"""Task configuration and registry for Audify prompt system."""
from dataclasses import dataclass, field
from typing import Optional
[docs]
@dataclass
class TaskConfig:
"""Configuration for a specific audio transformation task."""
name: str
prompt: str
requires_llm: bool = True
llm_params: dict = field(default_factory=dict)
output_structure: str = "single" # "single", "episodes", "chapters"
[docs]
def get_llm_params(self, **overrides) -> dict:
"""Get LLM parameters with optional overrides."""
params = dict(self.llm_params)
params.update(overrides)
return params
[docs]
class TaskRegistry:
"""Registry of available audio transformation tasks."""
_tasks: dict[str, TaskConfig] = {}
[docs]
@classmethod
def register(cls, config: TaskConfig) -> None:
"""Register a new task configuration.
Args:
config: The TaskConfig to register.
"""
cls._tasks[config.name] = config
[docs]
@classmethod
def get(cls, name: str) -> Optional[TaskConfig]:
"""Get a task configuration by name.
Args:
name: Task name to retrieve.
Returns:
The TaskConfig if found, None otherwise.
"""
return cls._tasks.get(name)
[docs]
@classmethod
def list_tasks(cls) -> list[str]:
"""List all registered task names.
Returns:
Sorted list of registered task names.
"""
return sorted(cls._tasks.keys())
[docs]
@classmethod
def get_all(cls) -> dict[str, TaskConfig]:
"""Get all registered task configurations.
Returns:
Dictionary of all registered tasks.
"""
return dict(cls._tasks)
@classmethod
def _reset(cls) -> None:
"""Reset the registry (for testing).
Clears all registered tasks from the registry.
"""
cls._tasks = {}
def _register_builtin_tasks() -> None:
"""Register all built-in tasks."""
from audify.prompts.manager import PromptManager
manager = PromptManager()
TaskRegistry.register(
TaskConfig(
name="direct",
prompt="",
requires_llm=False,
output_structure="single",
)
)
TaskRegistry.register(
TaskConfig(
name="audiobook",
prompt=manager.get_builtin_prompt("audiobook"),
requires_llm=True,
llm_params={
"temperature": 0.8,
"top_p": 0.9,
"repeat_penalty": 1.05,
"seed": 428798,
"top_k": 60,
"num_predict": 4096,
"num_ctx": 8 * 4096,
},
output_structure="single",
)
)
TaskRegistry.register(
TaskConfig(
name="podcast",
prompt=manager.get_builtin_prompt("podcast"),
requires_llm=True,
llm_params={
"temperature": 0.9,
"top_p": 0.95,
"repeat_penalty": 1.05,
"num_predict": 4096,
"num_ctx": 8 * 4096,
},
output_structure="single",
)
)
TaskRegistry.register(
TaskConfig(
name="summary",
prompt=manager.get_builtin_prompt("summary"),
requires_llm=True,
llm_params={
"temperature": 0.7,
"top_p": 0.9,
"num_predict": 4096,
"num_ctx": 8 * 4096,
},
output_structure="single",
)
)
TaskRegistry.register(
TaskConfig(
name="meditation",
prompt=manager.get_builtin_prompt("meditation"),
requires_llm=True,
llm_params={
"temperature": 0.7,
"top_p": 0.9,
"num_predict": 4096,
"num_ctx": 8 * 4096,
},
output_structure="single",
)
)
TaskRegistry.register(
TaskConfig(
name="lecture",
prompt=manager.get_builtin_prompt("lecture"),
requires_llm=True,
llm_params={
"temperature": 0.8,
"top_p": 0.9,
"num_predict": 4096,
"num_ctx": 8 * 4096,
},
output_structure="single",
)
)
# Register built-in tasks on module import
_register_builtin_tasks()