From 3099748668d3089ac5e2a55ea5467dc57264835d Mon Sep 17 00:00:00 2001 From: yangdx Date: Tue, 5 Aug 2025 01:50:09 +0800 Subject: [PATCH] Add temperature fallback for Ollama LLM binding - Implement OLLAMA_LLM_TEMPERATURE env var - Fallback to global TEMPERATURE if unset - Remove redundant OllamaLLMOptions logic - Update env.example with new setting --- env.example | 2 ++ lightrag/api/config.py | 11 +++++++++ lightrag/llm/binding_options.py | 40 ++------------------------------- 3 files changed, 15 insertions(+), 38 deletions(-) diff --git a/env.example b/env.example index b926bc38..6d5b40b0 100644 --- a/env.example +++ b/env.example @@ -127,6 +127,8 @@ TIMEOUT=240 OLLAMA_LLM_NUM_CTX=32768 ### Stop sequences for Ollama LLM # OLLAMA_LLM_STOP='["", "Assistant:", "\n\n"]' +### If OLLAMA_LLM_TEMPERATURE is not specified, the system will default to the value defined by TEMPERATURE +# OLLAMA_LLM_TEMPERATURE=0.85 ### see also env.ollama-binding-options.example for fine tuning ollama ### Optional for Azure diff --git a/lightrag/api/config.py b/lightrag/api/config.py index e657405c..8e9266a3 100644 --- a/lightrag/api/config.py +++ b/lightrag/api/config.py @@ -300,6 +300,17 @@ def parse_args() -> argparse.Namespace: # Inject LLM temperature configuration args.temperature = get_env_value("TEMPERATURE", DEFAULT_TEMPERATURE, float) + # Handle Ollama LLM temperature fallback when llm-binding is ollama + if args.llm_binding == "ollama": + # Check if OLLAMA_LLM_TEMPERATURE is set, if not fallback to global TEMPERATURE + ollama_llm_temp = get_env_value("OLLAMA_LLM_TEMPERATURE", None) + if ollama_llm_temp is None: + # Fallback to global TEMPERATURE value + args.ollama_llm_temperature = args.temperature + else: + # Use the explicitly set OLLAMA_LLM_TEMPERATURE + args.ollama_llm_temperature = float(ollama_llm_temp) + # Select Document loading tool (DOCLING, DEFAULT) args.document_loading_engine = get_env_value("DOCUMENT_LOADING_ENGINE", "DEFAULT") diff --git a/lightrag/llm/binding_options.py b/lightrag/llm/binding_options.py index 5bde88a1..27272e62 100644 --- a/lightrag/llm/binding_options.py +++ b/lightrag/llm/binding_options.py @@ -8,11 +8,10 @@ bindings and integrations. from argparse import ArgumentParser, Namespace import argparse import json -import os -from dataclasses import asdict, dataclass, field, MISSING +from dataclasses import asdict, dataclass, field from typing import Any, ClassVar, List -from lightrag.utils import get_env_value, logger +from lightrag.utils import get_env_value from lightrag.constants import DEFAULT_TEMPERATURE @@ -437,44 +436,9 @@ class OllamaEmbeddingOptions(_OllamaOptionsMixin, BindingOptions): class OllamaLLMOptions(_OllamaOptionsMixin, BindingOptions): """Options for Ollama LLM with specialized configuration for LLM tasks.""" - # Override temperature field to track if it was explicitly set - temperature: float = field(default_factory=lambda: MISSING) - # mandatory name of binding _binding_name: ClassVar[str] = "ollama_llm" - def __post_init__(self): - """Handle temperature parameter with correct priority logic""" - # If temperature was not explicitly set, apply priority logic - if self.temperature is MISSING: - # Check OLLAMA_LLM_TEMPERATURE first (highest priority for env vars) - ollama_temp = os.getenv("OLLAMA_LLM_TEMPERATURE") - if ollama_temp is not None: - try: - self.temperature = float(ollama_temp) - logger.debug(f"Using OLLAMA_LLM_TEMPERATURE: {self.temperature}") - return - except (ValueError, TypeError): - logger.warning( - f"Invalid OLLAMA_LLM_TEMPERATURE value: {ollama_temp}" - ) - - # Check TEMPERATURE as fallback - general_temp = os.getenv("TEMPERATURE") - if general_temp is not None: - try: - self.temperature = float(general_temp) - logger.debug( - f"Using TEMPERATURE environment variable: {self.temperature}" - ) - return - except (ValueError, TypeError): - logger.warning(f"Invalid TEMPERATURE value: {general_temp}") - - # Use default value - self.temperature = DEFAULT_TEMPERATURE - logger.debug(f"Using default temperature: {self.temperature}") - # ============================================================================= # Additional LLM Provider Bindings