Set repetition_penalty default to 1.0 (disabled) everywhere
Change all repetition_penalty defaults from 1.1 (or 1.05/1.2 in presets) to 1.0 across the entire backend and frontend. Most models handle repetition well on their own and a non-1.0 penalty can degrade output quality, especially for code, structured output, and creative tasks. Files changed: - Backend: inference.py, llama_cpp.py, orchestrator.py, worker.py, models/inference.py (Field defaults) - Frontend: chat-settings-sheet.tsx (Creative/Precise presets), runtime-provider.tsx (auto-title generation)
This commit is contained in:
parent
b985471637
commit
20c6d9a26a
7 changed files with 19 additions and 19 deletions
|
|
@ -628,7 +628,7 @@ class InferenceBackend:
|
|||
top_k: int = 40,
|
||||
min_p: float = 0.0,
|
||||
max_new_tokens: int = 256,
|
||||
repetition_penalty: float = 1.1,
|
||||
repetition_penalty: float = 1.0,
|
||||
cancel_event = None,
|
||||
) -> Generator[str, None, None]:
|
||||
"""
|
||||
|
|
@ -658,7 +658,7 @@ class InferenceBackend:
|
|||
top_k: int = 40,
|
||||
min_p: float = 0.0,
|
||||
max_new_tokens: int = 256,
|
||||
repetition_penalty: float = 1.1,
|
||||
repetition_penalty: float = 1.0,
|
||||
cancel_event = None,
|
||||
_adapter_state = None,
|
||||
) -> Generator[str, None, None]:
|
||||
|
|
@ -1077,7 +1077,7 @@ class InferenceBackend:
|
|||
top_k: int = 40,
|
||||
min_p: float = 0.0,
|
||||
max_new_tokens: int = 256,
|
||||
repetition_penalty: float = 1.1,
|
||||
repetition_penalty: float = 1.0,
|
||||
cancel_event = None,
|
||||
_adapter_state = None,
|
||||
) -> Generator[str, None, None]:
|
||||
|
|
@ -1215,7 +1215,7 @@ class InferenceBackend:
|
|||
top_k: int = 50,
|
||||
min_p: float = 0.0,
|
||||
max_new_tokens: int = 2048,
|
||||
repetition_penalty: float = 1.1,
|
||||
repetition_penalty: float = 1.0,
|
||||
use_adapter: Optional[Union[bool, str]] = None,
|
||||
) -> Tuple[bytes, int]:
|
||||
"""
|
||||
|
|
|
|||
|
|
@ -929,7 +929,7 @@ class LlamaCppBackend:
|
|||
top_k: int = 40,
|
||||
min_p: float = 0.0,
|
||||
max_tokens: Optional[int] = None,
|
||||
repetition_penalty: float = 1.1,
|
||||
repetition_penalty: float = 1.0,
|
||||
stop: Optional[list[str]] = None,
|
||||
cancel_event: Optional[threading.Event] = None,
|
||||
) -> Generator[str, None, None]:
|
||||
|
|
|
|||
|
|
@ -395,7 +395,7 @@ class InferenceOrchestrator:
|
|||
top_k: int = 40,
|
||||
min_p: float = 0.0,
|
||||
max_new_tokens: int = 256,
|
||||
repetition_penalty: float = 1.1,
|
||||
repetition_penalty: float = 1.0,
|
||||
cancel_event = None,
|
||||
use_adapter = None,
|
||||
) -> Generator[str, None, None]:
|
||||
|
|
@ -666,7 +666,7 @@ class InferenceOrchestrator:
|
|||
top_k: int = 40,
|
||||
min_p: float = 0.0,
|
||||
max_new_tokens: int = 256,
|
||||
repetition_penalty: float = 1.1,
|
||||
repetition_penalty: float = 1.0,
|
||||
cancel_event = None,
|
||||
) -> Generator[str, None, None]:
|
||||
"""Generate response, streaming tokens from subprocess."""
|
||||
|
|
@ -712,7 +712,7 @@ class InferenceOrchestrator:
|
|||
top_k: int = 40,
|
||||
min_p: float = 0.0,
|
||||
max_new_tokens: int = 256,
|
||||
repetition_penalty: float = 1.1,
|
||||
repetition_penalty: float = 1.0,
|
||||
cancel_event = None,
|
||||
use_adapter = None,
|
||||
) -> Generator[str, None, None]:
|
||||
|
|
@ -763,7 +763,7 @@ class InferenceOrchestrator:
|
|||
top_k: int = 40,
|
||||
min_p: float = 0.0,
|
||||
max_new_tokens: int = 256,
|
||||
repetition_penalty: float = 1.1,
|
||||
repetition_penalty: float = 1.0,
|
||||
cancel_event = None,
|
||||
use_adapter = None,
|
||||
) -> Generator[str, None, None]:
|
||||
|
|
@ -862,7 +862,7 @@ class InferenceOrchestrator:
|
|||
top_k: int = 50,
|
||||
min_p: float = 0.0,
|
||||
max_new_tokens: int = 2048,
|
||||
repetition_penalty: float = 1.1,
|
||||
repetition_penalty: float = 1.0,
|
||||
use_adapter: Optional[Union[bool, str]] = None,
|
||||
) -> Tuple[bytes, int]:
|
||||
"""Generate TTS audio. Returns (wav_bytes, sample_rate).
|
||||
|
|
@ -949,7 +949,7 @@ class InferenceOrchestrator:
|
|||
top_k: int = 40,
|
||||
min_p: float = 0.0,
|
||||
max_new_tokens: int = 512,
|
||||
repetition_penalty: float = 1.1,
|
||||
repetition_penalty: float = 1.0,
|
||||
cancel_event = None,
|
||||
) -> Generator[str, None, None]:
|
||||
"""Audio input generation (e.g. Gemma 3n) — streams text tokens."""
|
||||
|
|
@ -978,7 +978,7 @@ class InferenceOrchestrator:
|
|||
top_k: int = 40,
|
||||
min_p: float = 0.0,
|
||||
max_new_tokens: int = 512,
|
||||
repetition_penalty: float = 1.1,
|
||||
repetition_penalty: float = 1.0,
|
||||
cancel_event = None,
|
||||
) -> Generator[str, None, None]:
|
||||
"""Shared inner logic for audio input generation (Whisper + ASR)."""
|
||||
|
|
|
|||
|
|
@ -276,7 +276,7 @@ def _handle_generate(
|
|||
"top_k": cmd.get("top_k", 40),
|
||||
"min_p": cmd.get("min_p", 0.0),
|
||||
"max_new_tokens": cmd.get("max_new_tokens", 256),
|
||||
"repetition_penalty": cmd.get("repetition_penalty", 1.1),
|
||||
"repetition_penalty": cmd.get("repetition_penalty", 1.0),
|
||||
"cancel_event": cancel_event,
|
||||
}
|
||||
|
||||
|
|
@ -348,7 +348,7 @@ def _handle_generate_audio(
|
|||
top_k = cmd.get("top_k", 50),
|
||||
min_p = cmd.get("min_p", 0.0),
|
||||
max_new_tokens = cmd.get("max_new_tokens", 2048),
|
||||
repetition_penalty = cmd.get("repetition_penalty", 1.1),
|
||||
repetition_penalty = cmd.get("repetition_penalty", 1.0),
|
||||
use_adapter = cmd.get("use_adapter"),
|
||||
)
|
||||
|
||||
|
|
@ -411,7 +411,7 @@ def _handle_generate_audio_input(
|
|||
top_k = cmd.get("top_k", 40),
|
||||
min_p = cmd.get("min_p", 0.0),
|
||||
max_new_tokens = cmd.get("max_new_tokens", 512),
|
||||
repetition_penalty = cmd.get("repetition_penalty", 1.1),
|
||||
repetition_penalty = cmd.get("repetition_penalty", 1.0),
|
||||
cancel_event = cancel_event,
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -91,7 +91,7 @@ class GenerateRequest(BaseModel):
|
|||
2048, ge = 1, le = 4096, description = "Maximum tokens to generate"
|
||||
)
|
||||
repetition_penalty: float = Field(
|
||||
1.1, ge = 1.0, le = 2.0, description = "Repetition penalty"
|
||||
1.0, ge = 1.0, le = 2.0, description = "Repetition penalty"
|
||||
)
|
||||
image_base64: Optional[str] = Field(
|
||||
None, description = "Base64 encoded image for vision models"
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ const BUILTIN_PRESETS: Preset[] = [
|
|||
temperature: 1.2,
|
||||
topP: 0.95,
|
||||
topK: 80,
|
||||
repetitionPenalty: 1.05,
|
||||
repetitionPenalty: 1.0,
|
||||
},
|
||||
},
|
||||
{
|
||||
|
|
@ -55,7 +55,7 @@ const BUILTIN_PRESETS: Preset[] = [
|
|||
temperature: 0.2,
|
||||
topP: 0.7,
|
||||
topK: 20,
|
||||
repetitionPenalty: 1.2,
|
||||
repetitionPenalty: 1.0,
|
||||
},
|
||||
},
|
||||
];
|
||||
|
|
|
|||
|
|
@ -215,7 +215,7 @@ async function generateTitleWithModel(payload: {
|
|||
top_p: 0.9,
|
||||
max_tokens: 24,
|
||||
top_k: 40,
|
||||
repetition_penalty: 1.05,
|
||||
repetition_penalty: 1.0,
|
||||
messages: [
|
||||
{
|
||||
role: "system",
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue