diff --git a/configurations/clients/sample/channels.yaml b/configurations/clients/sample/channels.yaml index c9cf327a..bde04ce9 100644 --- a/configurations/clients/sample/channels.yaml +++ b/configurations/clients/sample/channels.yaml @@ -18,10 +18,18 @@ channels: datasets, as it contains data directly provided by national statistical agencies. llm_model_config: - deployment: "gpt-4.1-2025-04-14" + deployment: "gpt-5.2-2025-12-11" + reasoningEffort: "none" + verbosity: "low" + temperature: 1 + seed: null out_of_scope: llm_model_config: - deployment: "gpt-4.1-2025-04-14" + deployment: "gpt-5.2-2025-12-11" + reasoningEffort: "none" + verbosity: "low" + temperature: 1 + seed: null use_general_topics_blacklist: true domain: "Statistics, economics and SDMX." token_usage: diff --git a/configurations/clients/sample/tools.yaml b/configurations/clients/sample/tools.yaml index d61b14ef..43125c64 100644 --- a/configurations/clients/sample/tools.yaml +++ b/configurations/clients/sample/tools.yaml @@ -1,29 +1,54 @@ _available_datasets_call_id: &available_datasets_call_id "call_EBJJeaOMKeCzm8h378ubURQN" _available_terms_tool_call_id: &availableTermsCallId "call_EBJJeaOMKeCzm8h378ubU003" -_data_query_gpt_41_models: &data-query-gpt-41-models +_data_query_gpt_5_models: &data-query-gpt-5-models datasetsSelectionModelConfig: - deployment: "gpt-4.1-2025-04-14" - temperature: 0.0 + deployment: "gpt-5.2-2025-12-11" + reasoningEffort: "none" + verbosity: "low" + temperature: 1 + seed: null dimensionsSelectionModelConfig: - deployment: "gpt-4.1-2025-04-14" - temperature: 0.0 + deployment: "gpt-5.2-2025-12-11" + reasoningEffort: "none" + verbosity: "low" + temperature: 1 + seed: null indicatorsSelectionModelConfig: - deployment: "gpt-4.1-2025-04-14" - temperature: 0.0 + deployment: "gpt-5.2-2025-12-11" + reasoningEffort: "none" + verbosity: "low" + temperature: 1 + seed: null incompleteQueriesModelConfig: - deployment: "gpt-4.1-2025-04-14" + deployment: "gpt-5.2-2025-12-11" + reasoningEffort: "none" + verbosity: "low" + temperature: 1 + seed: null groupExpanderModelConfig: - deployment: "gpt-4.1-2025-04-14" - temperature: 0.0 + deployment: "gpt-5.2-2025-12-11" + reasoningEffort: "none" + verbosity: "low" + temperature: 1 + seed: null namedEntitiesModelConfig: - deployment: "gpt-4.1-2025-04-14" - temperature: 0.0 + deployment: "gpt-5.2-2025-12-11" + reasoningEffort: "none" + verbosity: "low" + temperature: 1 + seed: null queryNormalizationModelConfig: - deployment: "gpt-4.1-2025-04-14" - temperature: 0.0 + deployment: "gpt-5.2-2025-12-11" + reasoningEffort: "none" + verbosity: "low" + temperature: 1 + seed: null timePeriodModelConfig: - deployment: "gpt-4.1-2025-04-14" - temperature: 0.0 + deployment: "gpt-5.2-2025-12-11" + reasoningEffort: "none" + verbosity: "low" + temperature: 1 + seed: null _relevancy_prompts: &relevancy_prompts systemMessage: |- You are an expert in statistical indicators. @@ -119,7 +144,7 @@ tools: namedEntitiesToRemove: ["Country/Reference area", "Counterpart area/country"] prompts: relevancyPrompts: *relevancy_prompts - llmModels: *data-query-gpt-41-models + llmModels: *data-query-gpt-5-models attachments: customTable: enabledStr: "True" diff --git a/statgpt/app/schemas/file_rags/base.py b/statgpt/app/schemas/file_rags/base.py index 50ab9374..7e113169 100644 --- a/statgpt/app/schemas/file_rags/base.py +++ b/statgpt/app/schemas/file_rags/base.py @@ -4,7 +4,7 @@ class BaseRagState(ToolMessageState): type: ToolTypes = ToolTypes.FILE_RAG - version: RAGVersion + version: RAGVersion = RAGVersion.DIAL response: str = "" # This is not needed since we have content field answered_by: str = "" diff --git a/statgpt/common/schemas/data_query_tool.py b/statgpt/common/schemas/data_query_tool.py index bdc09153..81485e87 100644 --- a/statgpt/common/schemas/data_query_tool.py +++ b/statgpt/common/schemas/data_query_tool.py @@ -1,7 +1,7 @@ from pydantic import Field, PositiveInt, TypeAdapter, field_validator from pydantic_core.core_schema import FieldValidationInfo -from statgpt.common.config import LLMModelsEnum +from statgpt.common.config import LLMModelsEnum, ReasoningEffortEnum, VerbosityEnum from statgpt.common.config.utils import replace_env from .base import BaseYamlModel, SystemUserPrompt @@ -170,11 +170,21 @@ class HybridSearchConfig(BaseYamlModel): normalize_model_config: LLMModelConfig = Field( description="LLM Model used for normalization", - default_factory=lambda: LLMModelConfig(deployment=LLMModelsEnum.GPT_4_1_MINI_2025_04_14), + default_factory=lambda: LLMModelConfig( + deployment=LLMModelsEnum.GPT_5_MINI_2025_08_07, + reasoning_effort=ReasoningEffortEnum.MINIMAL, + verbosity=VerbosityEnum.LOW, + temperature=1, + ), ) harmonize_model_config: LLMModelConfig = Field( description="LLM Model used for harmonization", - default_factory=lambda: LLMModelConfig(deployment=LLMModelsEnum.GPT_4_1_MINI_2025_04_14), + default_factory=lambda: LLMModelConfig( + deployment=LLMModelsEnum.GPT_5_MINI_2025_08_07, + reasoning_effort=ReasoningEffortEnum.MINIMAL, + verbosity=VerbosityEnum.LOW, + temperature=1, + ), ) # ~~~~~~~~~~ Search config ~~~~~~~~~~ diff --git a/statgpt/common/settings/langchain.py b/statgpt/common/settings/langchain.py index 13e08ef4..bd355979 100644 --- a/statgpt/common/settings/langchain.py +++ b/statgpt/common/settings/langchain.py @@ -2,7 +2,12 @@ from pydantic import Field from pydantic_settings import BaseSettings, SettingsConfigDict -from statgpt.common.config.llm_models import EmbeddingModelsEnum, LLMModelsEnum +from statgpt.common.config.llm_models import ( + EmbeddingModelsEnum, + LLMModelsEnum, + ReasoningEffortEnum, + VerbosityEnum, +) class LangChainSettings(BaseSettings): @@ -38,6 +43,16 @@ class LangChainSettings(BaseSettings): description="Default seed for reproducible outputs", ) + default_reasoning_effort: ReasoningEffortEnum | None = Field( + default=ReasoningEffortEnum.NONE, + description="Default reasoning effort for GPT-5 models (none/minimal/low/medium/high/xhigh)", + ) + + default_verbosity: VerbosityEnum | None = Field( + default=VerbosityEnum.LOW, + description="Default verbosity for GPT-5 models (low/medium/high). None means use model default.", + ) + # Debugging settings verbose: bool = Field(default=False, description="Enable verbose mode for LangChain") diff --git a/statgpt/common/utils/models.py b/statgpt/common/utils/models.py index 59a85d0e..60eaead1 100644 --- a/statgpt/common/utils/models.py +++ b/statgpt/common/utils/models.py @@ -32,13 +32,10 @@ def get_chat_model( params.update(model_config.model_dump(mode="json", exclude_none=True, exclude={"deployment"})) if model_config.deployment.is_gpt_41_family: - callback = BrokenResponseInterceptor(regex_pattern=r'\s{5,}') - params.setdefault('callbacks', []).append(callback) + callback = BrokenResponseInterceptor(regex_pattern=r"\s{5,}") + params.setdefault("callbacks", []).append(callback) - api_key_log = f'{api_key.get_secret_value()[:3]}*****{api_key.get_secret_value()[-2:]}' - logger.info( - f'creating langchain LLM with the following params: {params}, Api key: {api_key_log}' - ) + logger.info(f"creating langchain LLM with the following params: {params}") return AzureChatOpenAI.model_validate(params) @@ -56,8 +53,5 @@ def get_embeddings_model( max_retries=10, api_key=api_key, # since we use SecretStr, it won't be logged ) - api_key_log = f'{api_key.get_secret_value()[:3]}*****{api_key.get_secret_value()[-2:]}' - logger.info( - f'creating langchain embeddings with the following params: {params}, Api key: {api_key_log}' - ) + logger.info(f"creating langchain embeddings with the following params: {params}") return AzureOpenAIEmbeddings.model_validate(params)