diff --git a/assistant/assistant.py b/assistant/assistant.py index 8d1657c..e3bebf4 100644 --- a/assistant/assistant.py +++ b/assistant/assistant.py @@ -49,6 +49,7 @@ class Assistant(commands.Cog): system_prompt="You are a helpful assistant.", question_mode=False, max_tokens=None, + reasoning_effort=None, ) self.config.register_global(api_key=None) self.history: dict[int, list[dict]] = {} @@ -134,6 +135,7 @@ class Assistant(commands.Cog): temperature = await self.config.guild(guild).temperature() system_prompt = await self.config.guild(guild).system_prompt() max_tokens = await self.config.guild(guild).max_tokens() + reasoning_effort = await self.config.guild(guild).reasoning_effort() key = (guild.id, channel_id) if key not in self.history: @@ -147,12 +149,14 @@ class Assistant(commands.Cog): "model": model, "messages": messages, "temperature": temperature, - "reasoning_effort": "none", } if max_tokens: payload["max_tokens"] = max_tokens + if reasoning_effort: + payload["reasoning_effort"] = reasoning_effort + try: async with self.session.post( f"{self.BASE_URL}/chat/completions", @@ -353,6 +357,23 @@ class Assistant(commands.Cog): await self.config.guild(ctx.guild).max_tokens.set(tokens) await ctx.send(f"Max response length set to **{tokens}** tokens.") + @assistant.command(name="reasoning") + async def assistant_reasoning(self, ctx: commands.Context, level: str = None): + """Set reasoning effort level. Omit to clear (model default). + + Levels: none, minimal, low, medium, high + Not all models support all levels. Use 'none' to disable thinking. + """ + valid_levels = ("none", "minimal", "low", "medium", "high") + if level is None: + await self.config.guild(ctx.guild).reasoning_effort.set(None) + await ctx.send("Reasoning effort cleared (model default — thinking enabled).") + elif level.lower() not in valid_levels: + await ctx.send(f"Invalid level. Choose from: {', '.join(valid_levels)}") + else: + await self.config.guild(ctx.guild).reasoning_effort.set(level.lower()) + await ctx.send(f"Reasoning effort set to **{level.lower()}**.") + @assistant.command(name="system") async def assistant_system(self, ctx: commands.Context, *, prompt: str): """Set the system prompt.""" @@ -385,6 +406,7 @@ class Assistant(commands.Cog): sys_prompt = await cfg.system_prompt() q_mode = await cfg.question_mode() max_tokens = await cfg.max_tokens() + reasoning_effort = await cfg.reasoning_effort() has_key = await self.config.api_key() is not None channel_str = f"<#{chat_channel}>" if chat_channel else "None" @@ -397,6 +419,7 @@ class Assistant(commands.Cog): embed.add_field(name="Temperature", value=str(temp), inline=True) embed.add_field(name="Question Mode", value=str(q_mode), inline=True) embed.add_field(name="Max Tokens", value=str(max_tokens) if max_tokens else "Unlimited", inline=True) + embed.add_field(name="Reasoning", value=reasoning_effort if reasoning_effort else "Default (on)", inline=True) embed.add_field(name="System Prompt", value=sys_prompt[:200], inline=False) await ctx.send(embed=embed)