Add network transport selector
This commit is contained in:
parent
341f4c5929
commit
a527f35a8b
3 changed files with 74 additions and 1 deletions
|
|
@ -21,7 +21,7 @@ job-interview answer for why it belongs in the body of the machine.
|
|||
| Camera ingest strategies | `Mimir.Runtime` + native workers | Diagnostic metadata, managed native wrapper, native SPSC ring, and shared-GPU-texture ingest shapes. | `src/Mimir.Runtime/Synchronization/MimirCameraIngestConfiguration.cs` |
|
||||
| Reservoir strategies | `Mimir.Runtime` + native reservoir + Fensalir | Managed rolling buffers, native shared-edge rings, and derived GPU temporal field storage. | `src/Mimir.Runtime/Synchronization/MimirReservoirConfiguration.cs` |
|
||||
| Distributed witnesses | `Mimir.Runtime` + CultMesh | Raven, phone, microcontroller, and remote camera rig configurations for compact timing/path state. | `src/Mimir.Runtime/Synchronization/MimirDistributedWitnessConfiguration.cs` |
|
||||
| Network transports | `Mimir.Runtime` + CultMesh | Typed timing state, debug windows, SRT bridge media, and experimental browser transport policy. | `src/Mimir.Runtime/Synchronization/MimirNetworkTransportConfiguration.cs` |
|
||||
| Network transports | `Mimir.Runtime` + CultMesh | Typed timing state, debug windows, SRT bridge media, and experimental browser transport policy plus constraint-based selection. | `src/Mimir.Runtime/Synchronization/MimirNetworkTransportConfiguration.cs`, `src/Mimir.Runtime/Synchronization/MimirNetworkTransportSelector.cs` |
|
||||
| Authority policy | `Mimir.Runtime` | Trust decisions for Starfire loopback, Raven evidence, phone candidates, diagnostic media, and unknown nodes. | `src/Mimir.Runtime/Synchronization/MimirAuthorityPolicyConfiguration.cs`, `src/Mimir.Runtime/Synchronization/MimirAuthorityPolicyEvaluator.cs` |
|
||||
| Audio field configurations | `Mimir.Runtime` | Six-mic, source-based, ambisonic, and hybrid evidence field shapes. | `src/Mimir.Runtime/Synchronization/MimirAudioFieldConfiguration.cs` |
|
||||
| Visual fusion configurations | `Mimir.Runtime` + Fensalir | Sensor roles and fusion modes from cadence proof through full hybrid evidence. | `src/Mimir.Runtime/Synchronization/MimirVisualFusionConfiguration.cs` |
|
||||
|
|
|
|||
|
|
@ -962,6 +962,15 @@ static int RunPerfectMachineProfileSmoke()
|
|||
"raven-scarlett-witness",
|
||||
new HashSet<string>(["known-node", "matching-codebook", "clock-fit-confidence", "response-profile"], StringComparer.Ordinal),
|
||||
new HashSet<string>(StringComparer.Ordinal)));
|
||||
var transport = new MimirNetworkTransportSelector().Select(new MimirNetworkTransportRequest(
|
||||
MimirNetworkPayloadKind.TypedTimingState,
|
||||
RequiresClockInfluence: true,
|
||||
AllowsRawMedia: false,
|
||||
MaximumLatencyMilliseconds: 25.0,
|
||||
new HashSet<string>(
|
||||
["mimir.bioacoustic_codebook_state", "mimir.bioacoustic_decoder_state", "mimir.acoustic_path_state"],
|
||||
StringComparer.Ordinal),
|
||||
new HashSet<string>(StringComparer.Ordinal)));
|
||||
|
||||
Console.WriteLine(
|
||||
$"perfect-machine-profile-smoke profiles={profiles.Count} calibrationPlans={calibrationPlans.Count} audioFields={audioFields.Count} visualFields={visualFields.Count} computePlans={computePlans.Count} assemblyPlans={assemblyPlans.Count} captureProfiles={captureProfiles.Count} publications={publications.Count} languageProfiles={languageProfiles.Count} pathLearning={pathLearningProfiles.Count} localization={localizationProfiles.Count} benchmarkPanels={benchmarkPanels.Count} actuatorStrategies={actuatorStrategies.Count} cameraIngest={cameraIngestStrategies.Count} reservoirs={reservoirStrategies.Count} distributedWitnesses={distributedWitnesses.Count} networkTransports={networkTransports.Count} authorityPolicies={authorityPolicies.Count} modules={moduleCatalog.Count}");
|
||||
|
|
@ -977,6 +986,8 @@ static int RunPerfectMachineProfileSmoke()
|
|||
$"perfect-machine-localization candidates={localizationGrid.Count} best=({localization?.PositionMeters.X ?? float.NaN:0.000},{localization?.PositionMeters.Y ?? float.NaN:0.000},{localization?.PositionMeters.Z ?? float.NaN:0.000}) score={localization?.Score ?? 0.0:0.000}");
|
||||
Console.WriteLine(
|
||||
$"perfect-machine-authority appliesTo=raven-scarlett-witness decision={authority.Decision} rule={authority.RuleId}");
|
||||
Console.WriteLine(
|
||||
$"perfect-machine-transport payload=TypedTimingState status={transport.Status} selected={transport.Transport?.Id ?? "none"}");
|
||||
|
||||
return profiles.Count >= 6 &&
|
||||
calibrationPlans.Count >= 3 &&
|
||||
|
|
@ -1004,6 +1015,7 @@ static int RunPerfectMachineProfileSmoke()
|
|||
acousticFrame.HasInput &&
|
||||
localization is { Score: > 0.90 } &&
|
||||
authority.Decision == MimirAuthorityDecision.TrustedEvidence &&
|
||||
transport.Transport?.Id == MimirNetworkTransportConfigurations.CultMeshTimingState.Id &&
|
||||
clock is { AnchorCount: >= 4, Confidence: > 0.70 }
|
||||
? 0
|
||||
: 1;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,61 @@
|
|||
namespace Mimir.Runtime.Synchronization;
|
||||
|
||||
public sealed record MimirNetworkTransportRequest(
|
||||
MimirNetworkPayloadKind PayloadKind,
|
||||
bool RequiresClockInfluence,
|
||||
bool AllowsRawMedia,
|
||||
double MaximumLatencyMilliseconds,
|
||||
IReadOnlySet<string> AvailableDocuments,
|
||||
IReadOnlySet<string> Conditions);
|
||||
|
||||
public sealed record MimirNetworkTransportSelection(
|
||||
MimirNetworkTransportConfiguration? Transport,
|
||||
string Status,
|
||||
string Notes);
|
||||
|
||||
public sealed class MimirNetworkTransportSelector(
|
||||
IReadOnlyList<MimirNetworkTransportConfiguration>? transports = null)
|
||||
{
|
||||
private readonly IReadOnlyList<MimirNetworkTransportConfiguration> transports =
|
||||
transports ?? MimirNetworkTransportConfigurations.BuiltIn;
|
||||
|
||||
public MimirNetworkTransportSelection Select(MimirNetworkTransportRequest request)
|
||||
{
|
||||
foreach (var transport in transports.OrderBy(transport => transport.TargetLatencyMilliseconds))
|
||||
{
|
||||
if (transport.PayloadKind != request.PayloadKind)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (request.RequiresClockInfluence && !transport.MayAffectClock)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!request.AllowsRawMedia && transport.CarriesRawMedia)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (transport.TargetLatencyMilliseconds > request.MaximumLatencyMilliseconds)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (transport.RequiredDocuments.Any(required => !request.AvailableDocuments.Contains(required)))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (transport.RejectionConditions.Any(condition => request.Conditions.Contains(condition)))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
return new MimirNetworkTransportSelection(transport, "selected", transport.Notes);
|
||||
}
|
||||
|
||||
return new MimirNetworkTransportSelection(null, "no-match", "No configured transport satisfies payload, authority, latency, document, and condition constraints.");
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue