Skip to content

Commit 9e5f935

Browse files
committed
config fallback model
1 parent a8b5586 commit 9e5f935

6 files changed

Lines changed: 43 additions & 11 deletions

File tree

README.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,8 @@ codewiki config set \
4949
--api-key YOUR_API_KEY \
5050
--base-url https://api.anthropic.com \
5151
--main-model claude-sonnet-4 \
52-
--cluster-model claude-sonnet-4
52+
--cluster-model claude-sonnet-4 \
53+
--fallback-model glm-4p5
5354
```
5455

5556
### 3. Generate Documentation
@@ -101,7 +102,8 @@ codewiki config set \
101102
--api-key <your-api-key> \
102103
--base-url <provider-url> \
103104
--main-model <model-name> \
104-
--cluster-model <model-name>
105+
--cluster-model <model-name> \
106+
--fallback-model <model-name>
105107

106108
# Show current configuration
107109
codewiki config show

codewiki/cli/adapters/doc_generator.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,8 @@ def generate(self) -> DocumentationJob:
135135
llm_base_url=self.config.get('base_url'),
136136
llm_api_key=self.config.get('api_key'),
137137
main_model=self.config.get('main_model'),
138-
cluster_model=self.config.get('cluster_model')
138+
cluster_model=self.config.get('cluster_model'),
139+
fallback_model=self.config.get('fallback_model')
139140
)
140141

141142
# Run backend documentation generation

codewiki/cli/commands/config.py

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -50,11 +50,17 @@ def config_group():
5050
type=str,
5151
help="Model for module clustering (recommend top-tier)"
5252
)
53+
@click.option(
54+
"--fallback-model",
55+
type=str,
56+
help="Fallback model for documentation generation"
57+
)
5358
def config_set(
5459
api_key: Optional[str],
5560
base_url: Optional[str],
5661
main_model: Optional[str],
57-
cluster_model: Optional[str]
62+
cluster_model: Optional[str],
63+
fallback_model: Optional[str]
5864
):
5965
"""
6066
Set configuration values for CodeWiki.
@@ -69,15 +75,15 @@ def config_set(
6975
\b
7076
# Set all configuration
7177
$ codewiki config set --api-key sk-abc123 --base-url https://api.anthropic.com \\
72-
--main-model claude-sonnet-4 --cluster-model claude-sonnet-4
78+
--main-model claude-sonnet-4 --cluster-model claude-sonnet-4 --fallback-model glm-4p5
7379
7480
\b
7581
# Update only API key
7682
$ codewiki config set --api-key sk-new-key
7783
"""
7884
try:
7985
# Check if at least one option is provided
80-
if not any([api_key, base_url, main_model, cluster_model]):
86+
if not any([api_key, base_url, main_model, cluster_model, fallback_model]):
8187
click.echo("No options provided. Use --help for usage information.")
8288
sys.exit(EXIT_CONFIG_ERROR)
8389

@@ -96,6 +102,9 @@ def config_set(
96102
if cluster_model:
97103
validated_data['cluster_model'] = validate_model_name(cluster_model)
98104

105+
if fallback_model:
106+
validated_data['fallback_model'] = validate_model_name(fallback_model)
107+
99108
# Create config manager and save
100109
manager = ConfigManager()
101110
manager.load() # Load existing config if present
@@ -104,7 +113,8 @@ def config_set(
104113
api_key=validated_data.get('api_key'),
105114
base_url=validated_data.get('base_url'),
106115
main_model=validated_data.get('main_model'),
107-
cluster_model=validated_data.get('cluster_model')
116+
cluster_model=validated_data.get('cluster_model'),
117+
fallback_model=validated_data.get('fallback_model')
108118
)
109119

110120
# Display success messages
@@ -138,6 +148,9 @@ def config_set(
138148
" Recommended models: claude-opus, claude-sonnet-4, gpt-4, gpt-4-turbo"
139149
)
140150

151+
if fallback_model:
152+
click.secho(f"✓ Fallback model: {fallback_model}", fg="green")
153+
141154
click.echo("\n" + click.style("Configuration updated successfully.", fg="green", bold=True))
142155

143156
except ConfigurationError as e:
@@ -177,7 +190,7 @@ def config_show(output_json: bool):
177190
click.secho("\n✗ Configuration not found.", fg="red", err=True)
178191
click.echo("\nPlease run 'codewiki config set' to configure your API credentials:")
179192
click.echo(" codewiki config set --api-key <key> --base-url <url> \\")
180-
click.echo(" --main-model <model> --cluster-model <model>")
193+
click.echo(" --main-model <model> --cluster-model <model> --fallback-model <model>")
181194
click.echo("\nFor more help: codewiki config set --help")
182195
sys.exit(EXIT_CONFIG_ERROR)
183196

@@ -192,6 +205,7 @@ def config_show(output_json: bool):
192205
"base_url": config.base_url if config else "",
193206
"main_model": config.main_model if config else "",
194207
"cluster_model": config.cluster_model if config else "",
208+
"fallback_model": config.fallback_model if config else "glm-4p5",
195209
"default_output": config.default_output if config else "docs",
196210
"config_file": str(manager.config_file_path)
197211
}
@@ -216,6 +230,7 @@ def config_show(output_json: bool):
216230
click.echo(f" Base URL: {config.base_url or 'Not set'}")
217231
click.echo(f" Main Model: {config.main_model or 'Not set'}")
218232
click.echo(f" Cluster Model: {config.cluster_model or 'Not set'}")
233+
click.echo(f" Fallback Model: {config.fallback_model or 'Not set'}")
219234
else:
220235
click.secho(" Not configured", fg="yellow")
221236

@@ -339,8 +354,9 @@ def config_validate(quick: bool, verbose: bool):
339354
click.echo("[4/5] Checking model configuration...")
340355
click.echo(f" Main model: {config.main_model}")
341356
click.echo(f" Cluster model: {config.cluster_model}")
357+
click.echo(f" Fallback model: {config.fallback_model}")
342358

343-
if not config.main_model or not config.cluster_model:
359+
if not config.main_model or not config.cluster_model or not config.fallback_model:
344360
click.secho("✗ Models not configured", fg="red")
345361
sys.exit(EXIT_CONFIG_ERROR)
346362

@@ -349,6 +365,7 @@ def config_validate(quick: bool, verbose: bool):
349365
else:
350366
click.secho(f"✓ Main model configured: {config.main_model}", fg="green")
351367
click.secho(f"✓ Cluster model configured: {config.cluster_model}", fg="green")
368+
click.secho(f"✓ Fallback model configured: {config.fallback_model}", fg="green")
352369

353370
# Warn about non-top-tier cluster model
354371
if not is_top_tier_model(config.cluster_model):

codewiki/cli/commands/generate.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,7 @@ def generate_command(
201201
config={
202202
'main_model': config.main_model,
203203
'cluster_model': config.cluster_model,
204+
'fallback_model': config.fallback_model,
204205
'base_url': config.base_url,
205206
'api_key': api_key,
206207
},

codewiki/cli/config_manager.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ def save(
8787
base_url: Optional[str] = None,
8888
main_model: Optional[str] = None,
8989
cluster_model: Optional[str] = None,
90+
fallback_model: Optional[str] = None,
9091
default_output: Optional[str] = None
9192
):
9293
"""
@@ -97,6 +98,7 @@ def save(
9798
base_url: LLM API base URL
9899
main_model: Primary model
99100
cluster_model: Clustering model
101+
fallback_model: Fallback model
100102
default_output: Default output directory
101103
"""
102104
# Ensure config directory exists
@@ -114,6 +116,7 @@ def save(
114116
base_url="",
115117
main_model="",
116118
cluster_model="",
119+
fallback_model="glm-4p5",
117120
default_output="docs"
118121
)
119122

@@ -124,6 +127,8 @@ def save(
124127
self._config.main_model = main_model
125128
if cluster_model is not None:
126129
self._config.cluster_model = cluster_model
130+
if fallback_model is not None:
131+
self._config.fallback_model = fallback_model
127132
if default_output is not None:
128133
self._config.default_output = default_output
129134

codewiki/cli/models/config.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,13 @@ class Configuration:
2626
base_url: LLM API base URL
2727
main_model: Primary model for documentation generation
2828
cluster_model: Model for module clustering
29+
fallback_model: Fallback model for documentation generation
2930
default_output: Default output directory
3031
"""
3132
base_url: str
3233
main_model: str
3334
cluster_model: str
35+
fallback_model: str = "glm-4p5"
3436
default_output: str = "docs"
3537

3638
def validate(self):
@@ -43,6 +45,7 @@ def validate(self):
4345
validate_url(self.base_url)
4446
validate_model_name(self.main_model)
4547
validate_model_name(self.cluster_model)
48+
validate_model_name(self.fallback_model)
4649

4750
def to_dict(self) -> dict:
4851
"""Convert to dictionary."""
@@ -63,6 +66,7 @@ def from_dict(cls, data: dict) -> 'Configuration':
6366
base_url=data.get('base_url', ''),
6467
main_model=data.get('main_model', ''),
6568
cluster_model=data.get('cluster_model', ''),
69+
fallback_model=data.get('fallback_model', 'glm-4p5'),
6670
default_output=data.get('default_output', 'docs'),
6771
)
6872

@@ -71,7 +75,8 @@ def is_complete(self) -> bool:
7175
return bool(
7276
self.base_url and
7377
self.main_model and
74-
self.cluster_model
78+
self.cluster_model and
79+
self.fallback_model
7580
)
7681

7782
def to_backend_config(self, repo_path: str, output_dir: str, api_key: str):
@@ -97,6 +102,7 @@ def to_backend_config(self, repo_path: str, output_dir: str, api_key: str):
97102
llm_base_url=self.base_url,
98103
llm_api_key=api_key,
99104
main_model=self.main_model,
100-
cluster_model=self.cluster_model
105+
cluster_model=self.cluster_model,
106+
fallback_model=self.fallback_model
101107
)
102108

0 commit comments

Comments
 (0)