Wino.Mail.AI.OpenAI
0.1.0-alpha.37
See the version list below for details.
dotnet add package Wino.Mail.AI.OpenAI --version 0.1.0-alpha.37
NuGet\Install-Package Wino.Mail.AI.OpenAI -Version 0.1.0-alpha.37
<PackageReference Include="Wino.Mail.AI.OpenAI" Version="0.1.0-alpha.37" />
<PackageVersion Include="Wino.Mail.AI.OpenAI" Version="0.1.0-alpha.37" />
<PackageReference Include="Wino.Mail.AI.OpenAI" />
paket add Wino.Mail.AI.OpenAI --version 0.1.0-alpha.37
#r "nuget: Wino.Mail.AI.OpenAI, 0.1.0-alpha.37"
#:package Wino.Mail.AI.OpenAI@0.1.0-alpha.37
#addin nuget:?package=Wino.Mail.AI.OpenAI&version=0.1.0-alpha.37&prerelease
#tool nuget:?package=Wino.Mail.AI.OpenAI&version=0.1.0-alpha.37&prerelease
Wino Mail AI
Mail-intelligence infrastructure shared by Wino Mail and Wino Mail API.
The solution separates four concerns:
- provider-neutral mail, artifact and metering contracts;
- deterministic HTML sanitization, visible-text extraction and content hashing;
- OpenAI structured generation, the current implementation of the summarization stage;
- the TypeSafe Jev adapter, the current implementation of the classification stage.
Processing is classification first, summarization second. Classification answers a fixed set of typed questions for every selected message — one Noul per smart label, one Noul for briefing inclusion, one Score for urgency and one Choice for the single action the recipient would take. Summarization writes a headline and a one-line summary, and only for the messages classification included in the briefing.
Urgency is a Score rather than a Choice because its levels are ordered: the answer is a
position that can land between two levels, so the cut points stay tunable in code. Every raw
probability behind a classification is kept in MailClassificationSignals, which is what lets
a threshold be retuned by re-reading stored results instead of reclassifying a mailbox.
The two stages are named for what they do, not for the models behind them. TypeSafe's Jev
implements classification today and OpenAI implements summarization; either can be replaced
without changing MailClassificationArtifact or MailSummaryArtifact.
Jev returns typed, calibrated answers and never generates free-form text. It also reads
dates as text rather than ordered quantities and cannot count or do arithmetic, so no caller
may ask it for dates, totals or multi-hop conclusions. Keep that work in application code:
JevMailClassifier projects a message's age as words such as "4 days ago" precisely because
the ordering is done here rather than asked for.
Its accuracy degrades when unrelated context is present, so JevMailClassifier projects a
deliberately tight state.
Question wording and thresholds are supplied by the caller and belong in server configuration. Calibrating a threshold must never require a contract change.
The packages are published publicly on nuget.org. The workflow requires the repository
NUGET_API_KEY secret and verifies every package after publication.
docs/architecture.md describes the pipeline these packages compose, including the identity
and freshness rules and the configuration boundary.
Build
dotnet restore Wino.Mail.AI.slnx
dotnet build Wino.Mail.AI.slnx --no-restore
dotnet test Wino.Mail.AI.slnx --no-build
Tests that call a paid provider are skipped unless WINO_AI_LIVE_TESTS=1 and
WINO_AI_OPENAI_TEST_KEY are both set, so a normal run costs nothing.
No NuGet credentials belong in source control. Configure NUGET_API_KEY as a GitHub Actions
repository secret before dispatching the public publication workflow.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Microsoft.Extensions.Http (>= 10.0.10)
- Wino.Mail.AI.Abstractions (>= 0.1.0-alpha.37)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.1.0-alpha.38 | 0 | 9/20/2026 |
| 0.1.0-alpha.37 | 0 | 9/20/2026 |
| 0.1.0-alpha.36 | 0 | 9/20/2026 |
| 0.1.0-alpha.35 | 36 | 9/19/2026 |
| 0.1.0-alpha.34 | 60 | 9/9/2026 |
| 0.1.0-alpha.33 | 67 | 9/3/2026 |
| 0.1.0-alpha.32 | 80 | 8/17/2026 |
| 0.1.0-alpha.29 | 76 | 8/15/2026 |
| 0.1.0-alpha.23 | 73 | 8/13/2026 |
| 0.1.0-alpha.22 | 67 | 8/13/2026 |
| 0.1.0-alpha.21 | 61 | 8/12/2026 |
| 0.1.0-alpha.20 | 86 | 8/12/2026 |
| 0.1.0-alpha.19 | 74 | 8/12/2026 |
| 0.1.0-alpha.18 | 71 | 8/12/2026 |
| 0.1.0-alpha.17 | 72 | 8/12/2026 |
| 0.1.0-alpha.15 | 71 | 8/12/2026 |
| 0.1.0-alpha.11 | 71 | 8/9/2026 |
| 0.1.0-alpha.10 | 64 | 8/9/2026 |
| 0.1.0-alpha.9 | 71 | 8/9/2026 |
| 0.1.0-alpha.8 | 74 | 8/6/2026 |