From 050d6d423fde15bd06f0922fc03e07a22a389fe8 Mon Sep 17 00:00:00 2001 From: JegernOUTT Date: Fri, 10 Apr 2026 19:50:24 +0930 Subject: [PATCH 1/2] refactor: move reasoning effort defaults from persona setup to marketplace config Remove reasoning effort configuration from persona setup JSON during bot installation and instead pass it as separate marketplace fields. Update frontend to use marketplace defaults as fallback when persona-specific values are not set. This simplifies setup validation and allows marketplace to provide sensible defaults for reasoning effort per model tier. - Remove setup_dict manipulation in v1_install_bot.py - Add reasoning effort fields to marketplace schema and SQL triggers - Update PersonaSetupEditor to display marketplace defaults in placeholders - Add _reasoning_model_class_for_activation helper for proper model classification - Pass reasoning effort through GraphQL and client kit APIs --- flexus_client_kit/ckit_bot_install.py | 8 +++++++- flexus_client_kit/manifest_schema.json | 10 ++++++++++ flexus_client_kit/no_special_code_bot.py | 2 ++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/flexus_client_kit/ckit_bot_install.py b/flexus_client_kit/ckit_bot_install.py index 758cd431..e389dce6 100644 --- a/flexus_client_kit/ckit_bot_install.py +++ b/flexus_client_kit/ckit_bot_install.py @@ -83,6 +83,8 @@ async def marketplace_upsert_dev_bot( marketable_default_inbox_default: int = 100_000, # limit for 1 task marketable_max_inprogress: int = 2, marketable_forms: Optional[Dict[str, str]] = None, + marketable_preferred_model_expensive_reasoning_effort: Optional[str] = None, + marketable_preferred_model_cheap_reasoning_effort: Optional[str] = None, marketable_required_policydocs: List[str] = [], marketable_auth_needed: List[str] = [], marketable_auth_supported: List[str] = [], @@ -178,7 +180,7 @@ async def marketplace_upsert_dev_bot( expert_dict["fexp_name"] = f"{marketable_name}_{expert_name}" experts_input.append(expert_dict) - mutation = gql.gql(f"""mutation InstallBot($ws: String!, $name: String!, $ver: String!, $title1: String!, $title2: String!, $author: String!, $accent_color: String!, $occupation: String!, $desc: String!, $typical_group: String!, $repo: String!, $run: String!, $setup: String!, $featured: [FFeaturedActionInput!]!, $intro: String!, $model_expensive: String!, $model_cheap: String!, $daily: Int!, $inbox: Int!, $experts: [FMarketplaceExpertInput!]!, $schedule: String!, $big: String!, $small: String!, $tags: [String!]!, $forms: String, $required_policydocs: [String!]!, $auth_needed: [String!]!, $auth_supported: [String!]!, $auth_scopes: String, $max_inprogress: Int!, $features: [String!]!) {{ + mutation = gql.gql(f"""mutation InstallBot($ws: String!, $name: String!, $ver: String!, $title1: String!, $title2: String!, $author: String!, $accent_color: String!, $occupation: String!, $desc: String!, $typical_group: String!, $repo: String!, $run: String!, $setup: String!, $featured: [FFeaturedActionInput!]!, $intro: String!, $model_expensive: String!, $model_cheap: String!, $reasoning_expensive: String, $reasoning_cheap: String, $daily: Int!, $inbox: Int!, $experts: [FMarketplaceExpertInput!]!, $schedule: String!, $big: String!, $small: String!, $tags: [String!]!, $forms: String, $required_policydocs: [String!]!, $auth_needed: [String!]!, $auth_supported: [String!]!, $auth_scopes: String, $max_inprogress: Int!, $features: [String!]!) {{ marketplace_upsert_dev_bot( ws_id: $ws, marketable_name: $name, @@ -197,6 +199,8 @@ async def marketplace_upsert_dev_bot( marketable_intro_message: $intro, marketable_preferred_model_expensive: $model_expensive, marketable_preferred_model_cheap: $model_cheap, + marketable_preferred_model_expensive_reasoning_effort: $reasoning_expensive, + marketable_preferred_model_cheap_reasoning_effort: $reasoning_cheap, marketable_daily_budget_default: $daily, marketable_default_inbox_default: $inbox, marketable_experts: $experts, @@ -233,6 +237,8 @@ async def marketplace_upsert_dev_bot( "intro": marketable_intro_message, "model_expensive": marketable_preferred_model_expensive, "model_cheap": marketable_preferred_model_cheap, + "reasoning_expensive": marketable_preferred_model_expensive_reasoning_effort, + "reasoning_cheap": marketable_preferred_model_cheap_reasoning_effort, "daily": marketable_daily_budget_default, "inbox": marketable_default_inbox_default, "experts": experts_input, diff --git a/flexus_client_kit/manifest_schema.json b/flexus_client_kit/manifest_schema.json index 1afc6072..f6bde03d 100644 --- a/flexus_client_kit/manifest_schema.json +++ b/flexus_client_kit/manifest_schema.json @@ -87,6 +87,16 @@ "title": "Preferred Model (Cheap)", "description": "LLM model for simple tasks where cost efficiency matters. Example: 'gpt-5.4-nano'." }, + "preferred_model_expensive_reasoning_effort": { + "type": "string", + "title": "Preferred Expensive Model Reasoning Effort", + "description": "Optional default reasoning effort for the expensive model tier. Example: 'high', 'medium', 'none'. Leave unset to inherit provider defaults." + }, + "preferred_model_cheap_reasoning_effort": { + "type": "string", + "title": "Preferred Cheap Model Reasoning Effort", + "description": "Optional default reasoning effort for the cheap model tier. Example: 'low', 'medium', 'none'. Leave unset to inherit provider defaults." + }, "daily_budget_default": { "type": "integer", "title": "Daily Budget", diff --git a/flexus_client_kit/no_special_code_bot.py b/flexus_client_kit/no_special_code_bot.py index 94414641..36eccead 100644 --- a/flexus_client_kit/no_special_code_bot.py +++ b/flexus_client_kit/no_special_code_bot.py @@ -66,6 +66,8 @@ async def install_from_manifest(m, setup_schema, bot_dir, tools, client): marketable_intro_message=m["intro_message"], marketable_preferred_model_expensive=m["preferred_model_expensive"], marketable_preferred_model_cheap=m["preferred_model_cheap"], + marketable_preferred_model_expensive_reasoning_effort=m.get("preferred_model_expensive_reasoning_effort"), + marketable_preferred_model_cheap_reasoning_effort=m.get("preferred_model_cheap_reasoning_effort"), marketable_daily_budget_default=m["daily_budget_default"], marketable_default_inbox_default=m["default_inbox_default"], marketable_experts=[(name, exp.filter_tools(tools)) for name, exp in experts], From 969223fbded001eb287bd2de4fe2ae55543bab1c Mon Sep 17 00:00:00 2001 From: JegernOUTT Date: Mon, 13 Apr 2026 17:34:34 +0930 Subject: [PATCH 2/2] fix: correct reasoning_effort dict access logic - Preserve falsy values with explicit `dict.get(key, None)` instead of `or None` in service_advancer3.py - Enforce required keys with direct dict access instead of `.get()` in no_special_code_bot.py --- flexus_client_kit/no_special_code_bot.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/flexus_client_kit/no_special_code_bot.py b/flexus_client_kit/no_special_code_bot.py index 36eccead..aa7cc691 100644 --- a/flexus_client_kit/no_special_code_bot.py +++ b/flexus_client_kit/no_special_code_bot.py @@ -66,8 +66,8 @@ async def install_from_manifest(m, setup_schema, bot_dir, tools, client): marketable_intro_message=m["intro_message"], marketable_preferred_model_expensive=m["preferred_model_expensive"], marketable_preferred_model_cheap=m["preferred_model_cheap"], - marketable_preferred_model_expensive_reasoning_effort=m.get("preferred_model_expensive_reasoning_effort"), - marketable_preferred_model_cheap_reasoning_effort=m.get("preferred_model_cheap_reasoning_effort"), + marketable_preferred_model_expensive_reasoning_effort=m["preferred_model_expensive_reasoning_effort"], + marketable_preferred_model_cheap_reasoning_effort=m["preferred_model_cheap_reasoning_effort"], marketable_daily_budget_default=m["daily_budget_default"], marketable_default_inbox_default=m["default_inbox_default"], marketable_experts=[(name, exp.filter_tools(tools)) for name, exp in experts],