✨ 新增对 Kimi、DeepSeek、OpenRouter 的支持并升级版本至 0.1.2
This commit is contained in:
@@ -190,115 +190,8 @@ impl ContentGenerator {
|
||||
}
|
||||
}
|
||||
|
||||
/// Batch generator for multiple operations
|
||||
pub struct BatchGenerator {
|
||||
generator: ContentGenerator,
|
||||
}
|
||||
|
||||
impl BatchGenerator {
|
||||
/// Create new batch generator
|
||||
pub async fn new(config: &LlmConfig) -> Result<Self> {
|
||||
let generator = ContentGenerator::new(config).await?;
|
||||
Ok(Self { generator })
|
||||
}
|
||||
|
||||
/// Generate commits for multiple repositories
|
||||
pub async fn generate_commits_batch<'a>(
|
||||
&self,
|
||||
repos: &[&'a GitRepo],
|
||||
format: CommitFormat,
|
||||
) -> Vec<(&'a str, Result<GeneratedCommit>)> {
|
||||
let mut results = vec![];
|
||||
|
||||
for repo in repos {
|
||||
let result = self.generator.generate_commit_from_repo(repo, format).await;
|
||||
results.push((repo.path().to_str().unwrap_or("unknown"), result));
|
||||
}
|
||||
|
||||
results
|
||||
}
|
||||
|
||||
/// Generate changelog for multiple versions
|
||||
pub async fn generate_changelog_batch(
|
||||
&self,
|
||||
repo: &GitRepo,
|
||||
versions: &[String],
|
||||
) -> Vec<(String, Result<String>)> {
|
||||
let mut results = vec![];
|
||||
|
||||
// Get all tags
|
||||
let tags = repo.get_tags().unwrap_or_default();
|
||||
|
||||
for (i, version) in versions.iter().enumerate() {
|
||||
let from_tag = if i + 1 < tags.len() {
|
||||
tags.get(i + 1).map(|t| t.name.as_str())
|
||||
} else {
|
||||
None
|
||||
};
|
||||
|
||||
let result = self.generator.generate_changelog_from_repo(repo, version, from_tag).await;
|
||||
results.push((version.clone(), result));
|
||||
}
|
||||
|
||||
results
|
||||
}
|
||||
}
|
||||
|
||||
/// Generator options
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct GeneratorOptions {
|
||||
pub auto_commit: bool,
|
||||
pub auto_push: bool,
|
||||
pub interactive: bool,
|
||||
pub dry_run: bool,
|
||||
}
|
||||
|
||||
impl Default for GeneratorOptions {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
auto_commit: false,
|
||||
auto_push: false,
|
||||
interactive: true,
|
||||
dry_run: false,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Generate with options
|
||||
pub async fn generate_with_options(
|
||||
repo: &GitRepo,
|
||||
config: &LlmConfig,
|
||||
format: CommitFormat,
|
||||
options: GeneratorOptions,
|
||||
) -> Result<Option<GeneratedCommit>> {
|
||||
let generator = ContentGenerator::new(config).await?;
|
||||
|
||||
let generated = if options.interactive {
|
||||
generator.generate_commit_interactive(repo, format).await?
|
||||
} else {
|
||||
generator.generate_commit_from_repo(repo, format).await?
|
||||
};
|
||||
|
||||
if options.dry_run {
|
||||
println!("{}", generated.to_conventional());
|
||||
return Ok(Some(generated));
|
||||
}
|
||||
|
||||
if options.auto_commit {
|
||||
let message = generated.to_conventional();
|
||||
repo.commit(&message, false)?;
|
||||
|
||||
if options.auto_push {
|
||||
repo.push("origin", "HEAD")?;
|
||||
}
|
||||
}
|
||||
|
||||
Ok(Some(generated))
|
||||
}
|
||||
|
||||
/// Fallback generators when LLM is not available
|
||||
pub mod fallback {
|
||||
use super::*;
|
||||
use crate::git::commit::create_date_commit_message;
|
||||
|
||||
/// Generate simple commit message without LLM
|
||||
|
||||
Reference in New Issue
Block a user