All notable changes to SDialog will be documented here.
- sdialog.agents:
- New
@final_response_tooldecorator to return tool output directly as the final agent response (bypassing post-tool LLM synthesis for non-empty outputs). - Example:
from sdialog.agents import Agent, final_response_tool @final_response_tool def get_table(callsign: str) -> str: return "| Timestamp | Transcription |\n|---|---|\n| ... | ... |" agent = Agent(tools=[get_table])
- New
- sdialog.evaluation:
KDEDistanceEvaluatornow supports multiple values per dialog.- Improved placeholder handling in STAR response generation.
- Implemented Laplace smoothing in dialog log-likelihood computation.
- sdialog.audio:
- Voice cloning support in voice databases.
- New TTS classes:
Qwen3TTS,Qwen3TTSVoiceClone, andBaseVoiceCloneTTS. - Persona-based dynamic voice generation and customizable voice descriptions.
- Improved speaker name / role mapping for voice assignment.
- sdialog.audio:
Dialog.to_audio()supports output path as positional argument.- Audio pipeline now supports more flexible voice assignment.
- Qwen3-TTS voice cloning set as default dynamic voice creation path.
- sdialog.agents:
- Restored orchestration behavior when agent is served.
- sdialog.audio:
- Fixed speaker-role mapping and case-sensitivity edge cases.
- Fixed optional audio path handling in
Dialog.to_audio(). - Fixed label assignment and default
keep_duplicatehandling.
- sdialog.evaluation:
- Fixed division-by-zero /
log(0)edge cases in divergence computations. - Added jitter handling for KL/CS divergence when variance is zero.
- Fixed fallback behavior for unknown edges in flow score computation.
- Fixed division-by-zero /
- sdialog.evaluation:
- New readability and conversational metrics.
- New scoring classes for individual linguistic features.
- Added
Dialog.from_folder()to load dialogs from directories. - Added
ToolSequenceValidatorfor validating tool usage order in dialogs.
- sdialog.evaluation:
- Enhanced plotting support with customizable titles and labels.
- sdialog.interpretability:
- Improved top-k visualization and steering defaults.
- sdialog.agents:
- Improved tool invocation error handling.
- sdialog:
- Updated dialog prompt formatting.
- sdialog.agents:
- Improved progress bar behavior during dialog generation.
- sdialog.audio:
- Updated dependencies and dscaper integration behavior.
- Added clearer Kokoro TTS installation instructions.
- sdialog.audio:
- Fixed dscaper timeline generation bug and test updates around deleted directories.
- Updated audio tutorials and README installation instructions (including sox/ffmpeg and setup guidance).
- sdialog.audio: New audio generation module to transform text dialogs into audio conversations
Dialog.to_audio(): Convert any text dialog to audio with a single method call- Text-to-Speech (TTS): Support for multiple TTS engines including Kokoro and Hugging Face models
- Voice databases: Automatic or manual voice assignment from Hugging Face, local storage, or on-the-fly generation based on persona attributes (age, gender, language)
- Acoustic simulation: Realistic room acoustics simulation with ray tracing technology for spatial audio
- Microphone simulation: Professional microphone impulse responses from brands like Shure, Sennheiser, and Sony
- Room generation: Define and generate diverse room types with customizable properties (dimensions, wall materials, furniture placement)
- Multiple formats: Export to WAV, MP3, or FLAC with custom sampling rates
- Background/foreground effects: Add environmental sounds and acoustic variations
- 7 comprehensive tutorials covering audio generation, acoustic simulation, rooms, voice databases, and impulse responses
- sdialog.interpretability:
- Support for inspecting layer and component inputs with
Inspector(target="model.layers.15", inspect_input=True) - Support for inspecting and steering input tokens (tokens given as input, not only generated ones), e.g.,
inspector.input[i][j].actwhereiis turn index andjis input token index
- Support for inspecting layer and component inputs with
- sdialog.config:
- Support for Anthropic backend (#100)
- Support for Azure OpenAI backend (#100)
- sdialog.agents: Agent memory reset when no prompt system and no persona is given
- sdialog.server:
- New module to serve agents via an Ollama/OpenAI-compatible REST API (works with UIs like Open WebUI) (#92)
- sdialog:
Dialog.from_huggingface()to load/download dialogues directly from Hugging Face datasets (#59)
- sdialog.evaluation:
- LLM judge methods now accept additional user-defined template arguments (e.g., like
documentin this example) (#86)
- LLM judge methods now accept additional user-defined template arguments (e.g., like
- sdialog.agents:
- Improved
Agentinitialization so agents can act as a proxy for external conversational systems (#90, fa1d8f3)
- Improved
- sdialog.evaluation:
- Corrected Flesch Reading Ease and Gunning Fog score calculations (d1d4260)
- sdialog:
Context: new class class to explicitly model the common/shared context of conversations (#73)Dialog: merge functionality - Added option to merge consecutive turns of the same speaker when loading a dialog (#77)Dialog: built-in string support - Added support to built-in str functions forDialogclass (#83)
- sdialog.agents: Added new
sdialog.agentsmodule and movedAgentclass inside (#81)Agent: thinking capabilities - Agents can now handle internal thinking processes (#95)Agent: tools support - Added tools capabilities to Agents (e.g. RAG or any other function) (#84)- New tutorial for agents with tools and thoughts.
- sdialog.generators:
ContextGenerator: new class added to explicitly model the common/shared context of conversations (#73)Paraphraser: new class class to paraphrase dialogues (#76)
- sdialog.evaluation:
LinguisticFeatureScore: new class added to compute Flesch reading ease, Gunning fog, Hesitation rate, and/or Mean turn length (#63)
- sdialog.personas:
CustomerandSupportAgent: new personas added for customer service dialogues (#85)Persona: Added static method to get the list of all attributes inPersonaclass (#79)
- sdialog: Improved metadata handling (#66)
- sdialog.interpretability: Improved and simplified the way inspection targets are defined in
interpretabilitysubmodule (#78) - sdialog.evaluation.base:
LLMJudgeYesNoOutput: Renamed attributeyestopositive(#86)LLMJudgeScoreOutput: Renamed attributefeedbacktoreason(#86)
- sdialog.generators: Fixed potential bug in
PersonaDialogGeneratorclass (#67)
- sdialog.agents: Added
base_modelattribute toAgentto direclty access the LLM's underlying model for mechanistic interpretability (#74) - sdialog.config: Added
clear_cache()method to config (#75)
- API Documentation: Refactored/cleaned all components and added docstrings with examples (#82, #88)
- Updated all tutorials to work with new code and added "Open in Colab" badges
- Completed API documentation for initial official release (#87)
- Automatic generation of
llm.txtfrom API documentation (24f6ee6)
- Multi-backend support (Hugging Face, Ollama, OpenAI, AWS)
- Enhanced persona generation (beyond initial
PersonaDialogGenerator) - Interpretability module (
sdialog.interpretability): inspectors, steerers, hooks, intruders - Evaluation module (
sdialog.evaluation): metrics, LLM-as-a-judge scoring, evaluators, dataset comparators
- Standardized / improved dialog format
-
500 commits since 0.0.2 (post-JSALT 2025 consolidation)
- Audio module (
sdialog.audio) integration - Documentation updates
languageattribute toPersonaclassPersonaDialogGeneratortogeneratorsmodule to support persona-based dialogue generatin with single LLM:from sdialog.generators import PersonaDialogGenerator dialog_generator = PersonaDialogGenerator( model=MODEL_NAME, persona_a=bob_persona, persona_b=alice_persona, ) dialog_generator.generate().print()
- Python 2 and 3 compatibility problem with scikit-learn (using version 0.20.1 from now on)
- PyPi: setup.py:
long_description_content_typeset to'text/markdown'
(initial release)