- Code:
claude_model(used in 19 files) - Environment Variable:
SUMMARY_CLAUDE_MODEL - Unused Variable:
OPENROUTER_MODEL(in main.py only, never actually used)
src/models/summary.py:256-_get_default_model()fallback:'claude-3-sonnet-20240229'src/config/settings.py:44-SummaryOptionsConfigdefault:'claude-3-sonnet-20240229'src/config/environment.py:147- env loader fallback:'claude-3-sonnet-20240229'src/config/manager.py:177- deserialization fallback:'claude-3-sonnet-20240229'src/scheduling/persistence.py:234- deserialization fallback:'claude-3-sonnet-20240229'src/webhook_service/endpoints.py:304- webhook fallback:'claude-3-sonnet-20240229'src/main.py:186- OPENROUTER_MODEL fallback:'anthropic/claude-3-sonnet-20240229'src/main.py:201- OPENROUTER_MODEL fallback:'anthropic/claude-3-sonnet-20240229'src/models/summary.py:321- BRIEF model hardcoded:'claude-3-haiku-20240307'
src/config/validation.py:201-206 has hardcoded list that doesn't include openrouter/auto
- Rename variable from
claude_modeltosummarization_model - Rename environment variable from
SUMMARY_CLAUDE_MODELtoSUMMARIZATION_MODEL - Remove unused variable
OPENROUTER_MODEL - Single source of truth for default model value:
openrouter/auto - Eliminate all hardcoded defaults - read from single constants module
- Update validation to include
openrouter/auto
File: src/config/constants.py (NEW)
"""
Configuration constants for the summarization bot.
Single source of truth for all default values.
"""
# Model Configuration
DEFAULT_SUMMARIZATION_MODEL = "openrouter/auto"
# Valid model choices
VALID_MODELS = [
"claude-3-opus-20240229",
"claude-3-sonnet-20240229",
"claude-3-haiku-20240307",
"claude-3-5-sonnet-20240620",
"openrouter/auto"
]
# Model aliases for backward compatibility
MODEL_ALIASES = {
"anthropic/claude-3-sonnet-20240229": "claude-3-sonnet-20240229",
"anthropic/claude-3-haiku-20240307": "claude-3-haiku-20240307",
"anthropic/claude-3-opus-20240229": "claude-3-opus-20240229"
}File: src/models/summary.py
Changes:
- Import from constants:
from ..config.constants import DEFAULT_SUMMARIZATION_MODEL - Update
_get_default_model():def _get_default_model() -> str: """Get default summarization model from environment or use fallback.""" return os.getenv('SUMMARIZATION_MODEL', DEFAULT_SUMMARIZATION_MODEL)
- Rename field:
claude_model→summarization_model - Update
get_model_for_length()to use constant for BRIEF model - Update
to_dict()method to include both old and new key names for backward compatibility
File: src/config/settings.py
Changes:
- Import constant
- Rename:
claude_model→summarization_model - Remove hardcoded default, use constant
- Update
to_dict()to include backward compatibility
File: src/config/environment.py
Changes:
- Import constant
- Line 147: Replace hardcoded fallback with constant
- Update parameter name:
claude_model→summarization_model
File: src/config/manager.py
Changes:
- Import constant
- Line 177: Replace hardcoded fallback with constant
- Update dict key reading: look for both
claude_model(old) andsummarization_model(new) - Store as:
summarization_model
File: src/config/validation.py
Changes:
- Import
VALID_MODELSconstant - Line 201-206: Replace hardcoded list with constant
- Update field reference:
options.claude_model→options.summarization_model
File: src/main.py
Changes:
- Line 186: Remove OPENROUTER_MODEL usage
- Line 201: Remove OPENROUTER_MODEL usage
- The
modelvariable returned by_select_llm_provider()is logged but never used - this is fine
File: src/summarization/engine.py
Changes:
- Line 314:
options.claude_model→options.summarization_model - Line 328:
options.claude_model→options.summarization_model - Line 338:
options.claude_model→options.summarization_model - Line 397:
options.claude_model→options.summarization_model
File: src/command_handlers/config.py
Changes:
- Line 152: Display
options.summarization_model - Line 347: Set
config.default_summary_options.summarization_model - Import and use
VALID_MODELSconstant for validation
File: src/webhook_service/endpoints.py
Changes:
- Import constant
- Line 304: Replace hardcoded fallback with constant
- Update parameter:
claude_model→summarization_model
File: src/scheduling/persistence.py
Changes:
- Import constant
- Line 187:
claude_model→summarization_model - Line 234: Replace hardcoded fallback with constant
- Read from dict: try
summarization_modelfirst, fallback toclaude_modelfor backward compatibility
File: src/scheduling/tasks.py
Changes:
- Line 103:
claude_model→summarization_model
File: src/summarization/cache.py
Changes:
- Line 265:
claude_model→summarization_modelin metadata
File: src/summarization/optimization.py
Changes:
- Line 284:
claude_model→summarization_model
Update all test files that reference claude_model:
tests/unit/test_config/test_settings.pytests/unit/test_summarization/test_engine.pytests/unit/test_summarization/test_cache.pytests/performance/test_load_testing.pytests/unit/test_scheduling/test_persistence.pytests/unit/test_command_handlers/test_config.py
Update documentation to instruct users:
- Rename
SUMMARY_CLAUDE_MODEL→SUMMARIZATION_MODEL - Remove
OPENROUTER_MODELif set
Backward compatibility:
- Code will check
SUMMARIZATION_MODELfirst - If not found, fall back to
SUMMARY_CLAUDE_MODELtemporarily - Log deprecation warning when old variable is used
Since guild configs and scheduled tasks are serialized with claude_model key:
- When deserializing, try
summarization_modelfirst - Fall back to
claude_modelif not found - When serializing, write both keys temporarily for rollback safety
- After migration period, write only
summarization_model
Option A: Big Bang (Recommended)
- All changes in one deployment
- Backward compatibility in deserialization
- Old configs continue to work
- New configs use new field names
Option B: Gradual Migration
- Phase 1: Add new field alongside old field
- Phase 2: Update all writes to use new field
- Phase 3: Update all reads to prefer new field
- Phase 4: Remove old field support
Recommendation: Option A - code is not heavily used in production yet, clean break is better
If issues arise:
- All deserialization has fallbacks to old field names
- Can quickly revert by restoring previous version
- Data in database remains compatible
- Unit Tests: Update all model references
- Integration Tests: Test environment variable loading
- Manual Tests:
- Create new guild config with new defaults
- Load old guild config (should still work)
- Test /config reset command
- Test summary creation with different models
src/config/constants.py
src/models/summary.pysrc/config/settings.pysrc/config/environment.pysrc/config/manager.pysrc/config/validation.pysrc/main.pysrc/summarization/engine.pysrc/command_handlers/config.pysrc/webhook_service/endpoints.pysrc/scheduling/persistence.pysrc/scheduling/tasks.pysrc/summarization/cache.pysrc/summarization/optimization.py.env.example(if exists)README.mdordocs/(update environment variable documentation)
tests/unit/test_config/test_settings.pytests/unit/test_summarization/test_engine.pytests/unit/test_summarization/test_cache.pytests/performance/test_load_testing.pytests/unit/test_scheduling/test_persistence.pytests/unit/test_command_handlers/test_config.py
Mitigation: Backward compatibility in all deserialization code
Mitigation: Fallback to old variable name with deprecation warning
Mitigation: Comprehensive test updates in same PR
Mitigation: Support both field names during read, write both during transition
- All references to
claude_modelrenamed tosummarization_model - Environment variable
SUMMARIZATION_MODELis primary - Single source of truth in
src/config/constants.py - Zero hardcoded model defaults (except in constants file)
- All tests pass
-
/config resetusesopenrouter/autoby default - Old guild configs still load correctly
- Documentation updated