Merge pull request #3943 from pipecat-ai/pk/llm-settings-updates

Minor findings from auditing LLM settings
This commit is contained in:
kompfner
2026-03-06 22:39:22 -05:00
committed by GitHub
29 changed files with 65 additions and 33 deletions

View File

@@ -76,21 +76,21 @@ class AnthropicThinkingConfig(BaseModel):
type: Type of thinking mode (currently only "enabled" or "disabled"). type: Type of thinking mode (currently only "enabled" or "disabled").
budget_tokens: Maximum number of tokens for thinking. budget_tokens: Maximum number of tokens for thinking.
With today's models, the minimum is 1024. With today's models, the minimum is 1024.
Only allowed if type is "enabled". Currently required when type is "enabled", not allowed when "disabled".
""" """
# Why `| str` here? To not break compatibility in case Anthropic adds # Why `| str` here? To not break compatibility in case Anthropic adds
# more types in the future. # more types in the future.
type: Literal["enabled", "disabled"] | str type: Literal["enabled", "disabled"] | str
# Why not enforce minimnum of 1024 here? To not break compatibility in # No client-side validation on budget_tokens — we let the server
# case Anthropic changes this requirement in the future. # enforce the rules so we stay forward-compatible if they change.
budget_tokens: int budget_tokens: Optional[int] = None
@dataclass @dataclass
class AnthropicLLMSettings(LLMSettings): class AnthropicLLMSettings(LLMSettings):
"""Settings for Anthropic LLM services. """Settings for AnthropicLLMService.
Parameters: Parameters:
enable_prompt_caching: Whether to enable prompt caching. enable_prompt_caching: Whether to enable prompt caching.

View File

@@ -72,7 +72,7 @@ except ModuleNotFoundError as e:
@dataclass @dataclass
class AWSBedrockLLMSettings(LLMSettings): class AWSBedrockLLMSettings(LLMSettings):
"""Settings for AWS Bedrock LLM services. """Settings for AWSBedrockLLMService.
Parameters: Parameters:
stop_sequences: List of strings that stop generation. stop_sequences: List of strings that stop generation.

View File

@@ -227,7 +227,7 @@ class AudioConfig(BaseModel):
@dataclass @dataclass
class AWSNovaSonicLLMSettings(LLMSettings): class AWSNovaSonicLLMSettings(LLMSettings):
"""Settings for AWS Nova Sonic LLM service. """Settings for AWSNovaSonicLLMService.
Parameters: Parameters:
voice: Voice identifier for speech synthesis. voice: Voice identifier for speech synthesis.

View File

@@ -19,7 +19,7 @@ from pipecat.services.settings import _warn_deprecated_param
@dataclass @dataclass
class AzureLLMSettings(OpenAILLMSettings): class AzureLLMSettings(OpenAILLMSettings):
"""Settings for Azure OpenAI LLM service.""" """Settings for AzureLLMService."""
pass pass
@@ -64,6 +64,8 @@ class AzureLLMService(OpenAILLMService):
_warn_deprecated_param("model", AzureLLMSettings, "model") _warn_deprecated_param("model", AzureLLMSettings, "model")
default_settings.model = model default_settings.model = model
# 3. (No step 3, as there's no params object to apply)
# 4. Apply settings delta (canonical API, always wins) # 4. Apply settings delta (canonical API, always wins)
if settings is not None: if settings is not None:
default_settings.apply_update(settings) default_settings.apply_update(settings)

View File

@@ -22,7 +22,7 @@ except ModuleNotFoundError as e:
@dataclass @dataclass
class AzureRealtimeLLMSettings(OpenAIRealtimeLLMSettings): class AzureRealtimeLLMSettings(OpenAIRealtimeLLMSettings):
"""Settings for Azure Realtime LLM service.""" """Settings for AzureRealtimeLLMService."""
pass pass

View File

@@ -19,7 +19,7 @@ from pipecat.services.settings import _warn_deprecated_param
@dataclass @dataclass
class CerebrasLLMSettings(OpenAILLMSettings): class CerebrasLLMSettings(OpenAILLMSettings):
"""Settings for Cerebras LLM service.""" """Settings for CerebrasLLMService."""
pass pass
@@ -64,6 +64,8 @@ class CerebrasLLMService(OpenAILLMService):
_warn_deprecated_param("model", CerebrasLLMSettings, "model") _warn_deprecated_param("model", CerebrasLLMSettings, "model")
default_settings.model = model default_settings.model = model
# 3. (No step 3, as there's no params object to apply)
# 4. Apply settings delta (canonical API, always wins) # 4. Apply settings delta (canonical API, always wins)
if settings is not None: if settings is not None:
default_settings.apply_update(settings) default_settings.apply_update(settings)

View File

@@ -19,7 +19,7 @@ from pipecat.services.settings import _warn_deprecated_param
@dataclass @dataclass
class DeepSeekLLMSettings(OpenAILLMSettings): class DeepSeekLLMSettings(OpenAILLMSettings):
"""Settings for DeepSeek LLM service.""" """Settings for DeepSeekLLMService."""
pass pass
@@ -64,6 +64,8 @@ class DeepSeekLLMService(OpenAILLMService):
_warn_deprecated_param("model", DeepSeekLLMSettings, "model") _warn_deprecated_param("model", DeepSeekLLMSettings, "model")
default_settings.model = model default_settings.model = model
# 3. (No step 3, as there's no params object to apply)
# 4. Apply settings delta (canonical API, always wins) # 4. Apply settings delta (canonical API, always wins)
if settings is not None: if settings is not None:
default_settings.apply_update(settings) default_settings.apply_update(settings)

View File

@@ -19,7 +19,7 @@ from pipecat.services.settings import _warn_deprecated_param
@dataclass @dataclass
class FireworksLLMSettings(OpenAILLMSettings): class FireworksLLMSettings(OpenAILLMSettings):
"""Settings for Fireworks LLM service.""" """Settings for FireworksLLMService."""
pass pass
@@ -64,6 +64,8 @@ class FireworksLLMService(OpenAILLMService):
_warn_deprecated_param("model", FireworksLLMSettings, "model") _warn_deprecated_param("model", FireworksLLMSettings, "model")
default_settings.model = model default_settings.model = model
# 3. (No step 3, as there's no params object to apply)
# 4. Apply settings delta (canonical API, always wins) # 4. Apply settings delta (canonical API, always wins)
if settings is not None: if settings is not None:
default_settings.apply_update(settings) default_settings.apply_update(settings)

View File

@@ -607,7 +607,7 @@ class InputParams(BaseModel):
@dataclass @dataclass
class GeminiLiveLLMSettings(LLMSettings): class GeminiLiveLLMSettings(LLMSettings):
"""Settings for GeminiLiveLLMService and GeminiLiveVertexLLMService. """Settings for GeminiLiveLLMService.
Parameters: Parameters:
voice: TTS voice identifier (e.g. ``"Charon"``). voice: TTS voice identifier (e.g. ``"Charon"``).

View File

@@ -44,7 +44,7 @@ except ModuleNotFoundError as e:
@dataclass @dataclass
class GeminiLiveVertexLLMSettings(GeminiLiveLLMSettings): class GeminiLiveVertexLLMSettings(GeminiLiveLLMSettings):
"""Settings for Gemini Live Vertex LLM service.""" """Settings for GeminiLiveVertexLLMService."""
pass pass

View File

@@ -714,7 +714,7 @@ class GoogleThinkingConfig(BaseModel):
@dataclass @dataclass
class GoogleLLMSettings(LLMSettings): class GoogleLLMSettings(LLMSettings):
"""Settings for Google LLM services. """Settings for GoogleLLMService.
Parameters: Parameters:
thinking: Thinking configuration. thinking: Thinking configuration.

View File

@@ -35,7 +35,7 @@ from pipecat.services.settings import _warn_deprecated_param
@dataclass @dataclass
class GoogleOpenAILLMSettings(OpenAILLMSettings): class GoogleOpenAILLMSettings(OpenAILLMSettings):
"""Settings for Google OpenAI-compatible LLM service.""" """Settings for GoogleLLMOpenAIBetaService."""
pass pass
@@ -102,6 +102,8 @@ class GoogleLLMOpenAIBetaService(OpenAILLMService):
_warn_deprecated_param("model", GoogleOpenAILLMSettings, "model") _warn_deprecated_param("model", GoogleOpenAILLMSettings, "model")
default_settings.model = model default_settings.model = model
# 3. (No step 3, as there's no params object to apply)
# 4. Apply settings delta (canonical API, always wins) # 4. Apply settings delta (canonical API, always wins)
if settings is not None: if settings is not None:
default_settings.apply_update(settings) default_settings.apply_update(settings)

View File

@@ -42,7 +42,7 @@ except ModuleNotFoundError as e:
@dataclass @dataclass
class GoogleVertexLLMSettings(GoogleLLMSettings): class GoogleVertexLLMSettings(GoogleLLMSettings):
"""Settings for Google Vertex LLM service.""" """Settings for GoogleVertexLLMService."""
pass pass

View File

@@ -72,7 +72,7 @@ class GrokContextAggregatorPair:
@dataclass @dataclass
class GrokLLMSettings(OpenAILLMSettings): class GrokLLMSettings(OpenAILLMSettings):
"""Settings for Grok LLM service.""" """Settings for GrokLLMService."""
pass pass
@@ -119,6 +119,8 @@ class GrokLLMService(OpenAILLMService):
_warn_deprecated_param("model", GrokLLMSettings, "model") _warn_deprecated_param("model", GrokLLMSettings, "model")
default_settings.model = model default_settings.model = model
# 3. (No step 3, as there's no params object to apply)
# 4. Apply settings delta (canonical API, always wins) # 4. Apply settings delta (canonical API, always wins)
if settings is not None: if settings is not None:
default_settings.apply_update(settings) default_settings.apply_update(settings)

View File

@@ -94,7 +94,7 @@ class CurrentAudioResponse:
@dataclass @dataclass
class GrokRealtimeLLMSettings(LLMSettings): class GrokRealtimeLLMSettings(LLMSettings):
"""Settings for Grok Realtime LLM services. """Settings for GrokRealtimeLLMService.
Parameters: Parameters:
session_properties: Grok Realtime session properties (voice, audio config, session_properties: Grok Realtime session properties (voice, audio config,

View File

@@ -18,7 +18,7 @@ from pipecat.services.settings import _warn_deprecated_param
@dataclass @dataclass
class GroqLLMSettings(OpenAILLMSettings): class GroqLLMSettings(OpenAILLMSettings):
"""Settings for Groq LLM service.""" """Settings for GroqLLMService."""
pass pass
@@ -63,6 +63,8 @@ class GroqLLMService(OpenAILLMService):
_warn_deprecated_param("model", GroqLLMSettings, "model") _warn_deprecated_param("model", GroqLLMSettings, "model")
default_settings.model = model default_settings.model = model
# 3. (No step 3, as there's no params object to apply)
# 4. Apply settings delta (canonical API, always wins) # 4. Apply settings delta (canonical API, always wins)
if settings is not None: if settings is not None:
default_settings.apply_update(settings) default_settings.apply_update(settings)

View File

@@ -21,7 +21,7 @@ from pipecat.services.settings import _warn_deprecated_param
@dataclass @dataclass
class MistralLLMSettings(OpenAILLMSettings): class MistralLLMSettings(OpenAILLMSettings):
"""Settings for Mistral LLM service.""" """Settings for MistralLLMService."""
pass pass
@@ -66,6 +66,8 @@ class MistralLLMService(OpenAILLMService):
_warn_deprecated_param("model", MistralLLMSettings, "model") _warn_deprecated_param("model", MistralLLMSettings, "model")
default_settings.model = model default_settings.model = model
# 3. (No step 3, as there's no params object to apply)
# 4. Apply settings delta (canonical API, always wins) # 4. Apply settings delta (canonical API, always wins)
if settings is not None: if settings is not None:
default_settings.apply_update(settings) default_settings.apply_update(settings)

View File

@@ -23,7 +23,7 @@ from pipecat.services.settings import _warn_deprecated_param
@dataclass @dataclass
class NvidiaLLMSettings(OpenAILLMSettings): class NvidiaLLMSettings(OpenAILLMSettings):
"""Settings for NVIDIA LLM service.""" """Settings for NvidiaLLMService."""
pass pass
@@ -70,6 +70,8 @@ class NvidiaLLMService(OpenAILLMService):
_warn_deprecated_param("model", NvidiaLLMSettings, "model") _warn_deprecated_param("model", NvidiaLLMSettings, "model")
default_settings.model = model default_settings.model = model
# 3. (No step 3, as there's no params object to apply)
# 4. Apply settings delta (canonical API, always wins) # 4. Apply settings delta (canonical API, always wins)
if settings is not None: if settings is not None:
default_settings.apply_update(settings) default_settings.apply_update(settings)

View File

@@ -18,7 +18,7 @@ from pipecat.services.settings import _warn_deprecated_param
@dataclass @dataclass
class OllamaLLMSettings(OpenAILLMSettings): class OllamaLLMSettings(OpenAILLMSettings):
"""Settings for Ollama LLM service.""" """Settings for OLLamaLLMService."""
pass pass
@@ -62,6 +62,8 @@ class OLLamaLLMService(OpenAILLMService):
_warn_deprecated_param("model", OllamaLLMSettings, "model") _warn_deprecated_param("model", OllamaLLMSettings, "model")
default_settings.model = model default_settings.model = model
# 3. (No step 3, as there's no params object to apply)
# 4. Apply settings delta (canonical API, always wins) # 4. Apply settings delta (canonical API, always wins)
if settings is not None: if settings is not None:
default_settings.apply_update(settings) default_settings.apply_update(settings)

View File

@@ -49,7 +49,7 @@ from pipecat.utils.tracing.service_decorators import traced_llm
@dataclass @dataclass
class OpenAILLMSettings(LLMSettings): class OpenAILLMSettings(LLMSettings):
"""Settings for OpenAI-compatible LLM services. """Settings for BaseOpenAILLMService.
Parameters: Parameters:
max_completion_tokens: Maximum completion tokens to generate. max_completion_tokens: Maximum completion tokens to generate.

View File

@@ -100,7 +100,7 @@ class CurrentAudioResponse:
@dataclass @dataclass
class OpenAIRealtimeLLMSettings(LLMSettings): class OpenAIRealtimeLLMSettings(LLMSettings):
"""Settings for OpenAI Realtime LLM services. """Settings for OpenAIRealtimeLLMService.
Parameters: Parameters:
session_properties: OpenAI Realtime session properties (modalities, session_properties: OpenAI Realtime session properties (modalities,

View File

@@ -25,7 +25,7 @@ except ModuleNotFoundError as e:
@dataclass @dataclass
class AzureRealtimeBetaLLMSettings(OpenAIRealtimeBetaLLMSettings): class AzureRealtimeBetaLLMSettings(OpenAIRealtimeBetaLLMSettings):
"""Settings for Azure Realtime Beta LLM service.""" """Settings for AzureRealtimeBetaLLMService."""
pass pass

View File

@@ -94,7 +94,7 @@ class CurrentAudioResponse:
@dataclass @dataclass
class OpenAIRealtimeBetaLLMSettings(LLMSettings): class OpenAIRealtimeBetaLLMSettings(LLMSettings):
"""Settings for OpenAI Realtime Beta LLM services.""" """Settings for OpenAIRealtimeBetaLLMService."""
pass pass

View File

@@ -30,7 +30,7 @@ except ModuleNotFoundError as e:
@dataclass @dataclass
class OpenPipeLLMSettings(OpenAILLMSettings): class OpenPipeLLMSettings(OpenAILLMSettings):
"""Settings for OpenPipe LLM service.""" """Settings for OpenPipeLLMService."""
pass pass
@@ -82,6 +82,8 @@ class OpenPipeLLMService(OpenAILLMService):
_warn_deprecated_param("model", OpenPipeLLMSettings, "model") _warn_deprecated_param("model", OpenPipeLLMSettings, "model")
default_settings.model = model default_settings.model = model
# 3. (No step 3, as there's no params object to apply)
# 4. Apply settings delta (canonical API, always wins) # 4. Apply settings delta (canonical API, always wins)
if settings is not None: if settings is not None:
default_settings.apply_update(settings) default_settings.apply_update(settings)

View File

@@ -22,7 +22,7 @@ from pipecat.services.settings import _warn_deprecated_param
@dataclass @dataclass
class OpenRouterLLMSettings(OpenAILLMSettings): class OpenRouterLLMSettings(OpenAILLMSettings):
"""Settings for OpenRouter LLM service.""" """Settings for OpenRouterLLMService."""
pass pass
@@ -68,6 +68,8 @@ class OpenRouterLLMService(OpenAILLMService):
_warn_deprecated_param("model", OpenRouterLLMSettings, "model") _warn_deprecated_param("model", OpenRouterLLMSettings, "model")
default_settings.model = model default_settings.model = model
# 3. (No step 3, as there's no params object to apply)
# 4. Apply settings delta (canonical API, always wins) # 4. Apply settings delta (canonical API, always wins)
if settings is not None: if settings is not None:
default_settings.apply_update(settings) default_settings.apply_update(settings)

View File

@@ -25,7 +25,7 @@ from pipecat.services.settings import _warn_deprecated_param
@dataclass @dataclass
class PerplexityLLMSettings(OpenAILLMSettings): class PerplexityLLMSettings(OpenAILLMSettings):
"""Settings for Perplexity LLM service.""" """Settings for PerplexityLLMService."""
pass pass
@@ -71,6 +71,8 @@ class PerplexityLLMService(OpenAILLMService):
_warn_deprecated_param("model", PerplexityLLMSettings, "model") _warn_deprecated_param("model", PerplexityLLMSettings, "model")
default_settings.model = model default_settings.model = model
# 3. (No step 3, as there's no params object to apply)
# 4. Apply settings delta (canonical API, always wins) # 4. Apply settings delta (canonical API, always wins)
if settings is not None: if settings is not None:
default_settings.apply_update(settings) default_settings.apply_update(settings)

View File

@@ -18,7 +18,7 @@ from pipecat.services.settings import _warn_deprecated_param
@dataclass @dataclass
class QwenLLMSettings(OpenAILLMSettings): class QwenLLMSettings(OpenAILLMSettings):
"""Settings for Qwen LLM service.""" """Settings for QwenLLMService."""
pass pass
@@ -63,6 +63,8 @@ class QwenLLMService(OpenAILLMService):
_warn_deprecated_param("model", QwenLLMSettings, "model") _warn_deprecated_param("model", QwenLLMSettings, "model")
default_settings.model = model default_settings.model = model
# 3. (No step 3, as there's no params object to apply)
# 4. Apply settings delta (canonical API, always wins) # 4. Apply settings delta (canonical API, always wins)
if settings is not None: if settings is not None:
default_settings.apply_update(settings) default_settings.apply_update(settings)

View File

@@ -30,7 +30,7 @@ from pipecat.utils.tracing.service_decorators import traced_llm
@dataclass @dataclass
class SambaNovaLLMSettings(OpenAILLMSettings): class SambaNovaLLMSettings(OpenAILLMSettings):
"""Settings for SambaNova LLM service.""" """Settings for SambaNovaLLMService."""
pass pass
@@ -75,6 +75,8 @@ class SambaNovaLLMService(OpenAILLMService): # type: ignore
_warn_deprecated_param("model", SambaNovaLLMSettings, "model") _warn_deprecated_param("model", SambaNovaLLMSettings, "model")
default_settings.model = model default_settings.model = model
# 3. (No step 3, as there's no params object to apply)
# 4. Apply settings delta (canonical API, always wins) # 4. Apply settings delta (canonical API, always wins)
if settings is not None: if settings is not None:
default_settings.apply_update(settings) default_settings.apply_update(settings)

View File

@@ -18,7 +18,7 @@ from pipecat.services.settings import _warn_deprecated_param
@dataclass @dataclass
class TogetherLLMSettings(OpenAILLMSettings): class TogetherLLMSettings(OpenAILLMSettings):
"""Settings for Together LLM service.""" """Settings for TogetherLLMService."""
pass pass
@@ -63,6 +63,8 @@ class TogetherLLMService(OpenAILLMService):
_warn_deprecated_param("model", TogetherLLMSettings, "model") _warn_deprecated_param("model", TogetherLLMSettings, "model")
default_settings.model = model default_settings.model = model
# 3. (No step 3, as there's no params object to apply)
# 4. Apply settings delta (canonical API, always wins) # 4. Apply settings delta (canonical API, always wins)
if settings is not None: if settings is not None:
default_settings.apply_update(settings) default_settings.apply_update(settings)