AI-powered text summarization for .NET using GPT-4, Claude, Llama and 400+ models. Summarize articles, documents, legal texts, research papers, meeting notes, and more. Supports multiple summary styles (bullet points, executive, abstract), custom lengths, key point extraction, and batch processing. Perfect for content curation, document processing, and automated reporting.
$ dotnet add package ForeverTools.SummarizeAI-powered text summarization for .NET using GPT-4, Claude, Llama and 400+ AI models. Summarize articles, documents, legal texts, research papers, meeting notes, and more.
This package uses the AI/ML API which provides access to 400+ AI models including GPT-4, Claude, Llama, and more.
dotnet add package ForeverTools.Summarize
using ForeverTools.Summarize;
// Create client with your API key
var client = new SummarizeClient("your-api-key");
// Simple summarization
var summary = await client.SummarizeAsync(longArticle);
// TL;DR - very brief
var tldr = await client.TldrAsync(longArticle);
// Bullet points
var bullets = await client.BulletPointsAsync(longArticle);
// Executive summary (for business docs)
var executive = await client.ExecutiveSummaryAsync(businessReport);
// Set AIML_API_KEY or SUMMARIZE_API_KEY environment variable
var client = SummarizeClient.FromEnvironment();
// Paragraph (default) - flowing text summary
var paragraph = await client.SummarizeAsync(text, SummaryStyle.Paragraph);
// Bullet points - easy to scan
var bullets = await client.SummarizeAsync(text, SummaryStyle.BulletPoints);
// Numbered list
var numbered = await client.SummarizeAsync(text, SummaryStyle.NumberedList);
// Executive summary - business style
var executive = await client.SummarizeAsync(text, SummaryStyle.Executive);
// Academic abstract
var abstract_ = await client.SummarizeAsync(text, SummaryStyle.Abstract);
// TL;DR - extremely brief
var tldr = await client.SummarizeAsync(text, SummaryStyle.TLDR);
// Structured - with sections
var structured = await client.SummarizeAsync(text, SummaryStyle.Structured);
// Headline - single sentence
var headline = await client.HeadlineAsync(text);
// Q&A format
var qa = await client.SummarizeAsync(text, SummaryStyle.QAndA);
// Very short - 1-2 sentences
var veryShort = await client.SummarizeAsync(text, SummaryStyle.Paragraph, SummaryLength.VeryShort);
// Short - 2-3 sentences
var short_ = await client.SummarizeAsync(text, SummaryStyle.Paragraph, SummaryLength.Short);
// Medium - 1 paragraph (default)
var medium = await client.SummarizeAsync(text, SummaryStyle.Paragraph, SummaryLength.Medium);
// Long - 2-3 paragraphs
var long_ = await client.SummarizeAsync(text, SummaryStyle.Paragraph, SummaryLength.Long);
// Detailed - comprehensive
var detailed = await client.SummarizeAsync(text, SummaryStyle.Paragraph, SummaryLength.Detailed);
// Custom word count
var custom = await client.SummarizeWithDetailsAsync(new SummaryRequest
{
Text = text,
Length = SummaryLength.Custom,
CustomWordCount = 150
});
// Extract key points
var keyPoints = await client.ExtractKeyPointsAsync(article, maxPoints: 10);
foreach (var point in keyPoints)
{
Console.WriteLine($"- {point}");
}
// With themes detection
var result = await client.ExtractKeyPointsWithDetailsAsync(article);
Console.WriteLine("Key Points:");
foreach (var point in result.KeyPoints)
{
Console.WriteLine($"- {point}");
}
Console.WriteLine("\nThemes:");
foreach (var theme in result.Themes ?? Array.Empty<string>())
{
Console.WriteLine($"- {theme}");
}
var meetingNotes = @"
Team meeting - Dec 15, 2025
- John will complete the API integration by Friday
- Sarah needs to review the security audit - HIGH PRIORITY
- Mike to schedule client demo for next week
- Budget review due by end of month
";
var result = await client.ExtractActionItemsAsync(meetingNotes);
foreach (var item in result.ActionItems)
{
Console.WriteLine($"- {item.Description}");
Console.WriteLine($" Assignee: {item.Assignee ?? "Unassigned"}");
Console.WriteLine($" Due: {item.DueDate ?? "Not specified"}");
Console.WriteLine($" Priority: {item.Priority}");
}
var legalSummary = await client.SummarizeLegalAsync(contract);
// Preserves legal terminology and key clauses
var meetingSummary = await client.SummarizeMeetingAsync(notes);
// Includes decisions, action items, and key points
var abstract_ = await client.AbstractAsync(researchPaper);
// Academic abstract style with background, methods, results, conclusions
var articles = new[] { article1, article2, article3 };
var results = await client.SummarizeBatchAsync(articles);
Console.WriteLine($"Summarized: {results.SuccessCount} / {results.TotalCount}");
Console.WriteLine($"Total original words: {results.TotalOriginalWords}");
Console.WriteLine($"Total summary words: {results.TotalSummaryWords}");
foreach (var result in results.Results)
{
Console.WriteLine($"Summary ({result.SummaryWordCount} words, {result.ReductionPercentage}% reduction):");
Console.WriteLine(result.Summary);
}
var documents = new[] { doc1, doc2, doc3 };
var comparison = await client.CompareAndSummarizeAsync(documents);
Console.WriteLine("Combined Summary:");
Console.WriteLine(comparison.CombinedSummary);
Console.WriteLine("\nCommon Themes:");
foreach (var theme in comparison.CommonThemes)
{
Console.WriteLine($"- {theme}");
}
Console.WriteLine("\nKey Differences:");
foreach (var diff in comparison.KeyDifferences)
{
Console.WriteLine($"- {diff}");
}
var result = await client.SummarizeWithDetailsAsync(new SummaryRequest
{
Text = longDocument,
Style = SummaryStyle.Structured,
Length = SummaryLength.Long,
Domain = ContentDomain.Legal,
Model = SummarizeModels.Claude35Sonnet,
TargetAudience = "Senior executives",
FocusAreas = new[] { "financial implications", "risk factors" },
ExtractKeyPoints = true,
ExtractStatistics = true,
PreserveQuotes = true,
OutputLanguage = "Spanish"
});
Console.WriteLine($"Summary ({result.ReductionPercentage}% reduction):");
Console.WriteLine(result.Summary);
if (result.KeyPoints != null)
{
Console.WriteLine("\nKey Points:");
foreach (var point in result.KeyPoints)
{
Console.WriteLine($"- {point}");
}
}
var summary = await client.SummarizeWithFocusAsync(
article,
focusAreas: new[] { "technology trends", "market impact" });
// Simplify for non-experts
var simpleSummary = await client.SummarizeForAudienceAsync(
technicalDoc,
"non-technical stakeholders");
// Detailed for experts
var expertSummary = await client.SummarizeForAudienceAsync(
technicalDoc,
"software architects");
// Use Claude for nuanced summarization
var options = new SummarizeOptions
{
ApiKey = "your-api-key",
DefaultModel = SummarizeModels.Claude35Sonnet
};
var client = new SummarizeClient(options);
// Or specify per-request
var request = new SummaryRequest
{
Text = longDocument,
Model = SummarizeModels.Gpt4o
};
Available models include:
SummarizeModels.Gpt4o - Best quality (default)SummarizeModels.Gpt4oMini - Fast and affordableSummarizeModels.Claude35Sonnet - Excellent for long documentsSummarizeModels.Claude3Opus - Highest quality Claude modelSummarizeModels.Gemini15Pro - Great for research papersSummarizeModels.Llama3170B - Open source option// In Program.cs
builder.Services.AddForeverToolsSummarize("your-api-key");
// Or with configuration
builder.Services.AddForeverToolsSummarize(options =>
{
options.ApiKey = "your-api-key";
options.DefaultModel = SummarizeModels.Gpt4oMini;
options.DefaultStyle = SummaryStyle.BulletPoints;
options.DefaultLength = SummaryLength.Medium;
});
// appsettings.json
{
"Summarize": {
"ApiKey": "your-api-key",
"DefaultModel": "gpt-4o",
"DefaultStyle": "Paragraph",
"DefaultLength": "Medium"
}
}
builder.Services.AddForeverToolsSummarize(builder.Configuration);
public class ContentService
{
private readonly SummarizeClient _summarizer;
public ContentService(SummarizeClient summarizer)
{
_summarizer = summarizer;
}
public async Task<string> GetArticleSummaryAsync(string articleUrl)
{
var content = await FetchArticleContent(articleUrl);
return await _summarizer.SummarizeAsync(content);
}
}
The package supports specialized summarization for different content types:
| Domain | Best For |
|---|---|
General | Auto-detect (default) |
News | News articles |
Academic | Research papers |
Legal | Contracts, legal documents |
Technical | Documentation |
Business | Reports, memos |
Medical | Healthcare content |
Financial | Financial reports |
Meeting | Meeting notes |
Book | Long-form content |
Email | Email threads |
Social | Social media |
try
{
var summary = await client.SummarizeAsync(text);
}
catch (ArgumentException ex)
{
Console.WriteLine($"Invalid input: {ex.Message}");
}
catch (HttpRequestException ex)
{
Console.WriteLine($"API error: {ex.Message}");
}
SummarizeBatchAsync for multiple documentsSummarizeClient and reuse itMIT License - see LICENSE file for details.