Model & Compute Platform — overview¶
Target
This page describes intended behaviour or structure. No implementation is claimed unless a section is explicitly marked Current implementation or Evidence.
The Model & Compute Platform is the only path from any Factory component to a model. Agents, workflows and Knowledge name profiles; the platform resolves them to evaluated deployments under policy, invokes providers through adapters with streaming, structured outputs and tool calls, and writes a receipt for every call. Model-serving compute is a separate abstraction with its own registry and placement. The platform was added by the design plan (D22) to make the packet's gateway, capability registry, router and compute plane first-class rather than a corner of the Agent Mesh.
| Platform | PF-03 Model & Compute Platform (Model & Compute) |
| Bounded contexts | BC-07, BC-41 |
| Services | 7 (1 hosts, 3 modules, 3 external, 0 later) — 3 modelled |
| Gateways | GW-04 |
| Status | target |
Purpose¶
- Replaceable models, owned intelligence. Clients depend on logical profiles (
code-fast,code-agent,reasoning-high,structured,vision,long-context,embedding,reranker,pii-local); providers and revisions change behind them. - Evidence over names. A deployment becomes routable only after the capability suite scores it against the quality-gate thresholds (D32) and a Platform admin approves it with its license metadata.
- Policy before provider. Privacy class, region and tenant policy filter candidates before cost and latency score them; fallback is explicit and off by default.
- Every call accounted. The receipt names the actual deployment, the policy decision, the usage status (reported, estimated, unknown) and the cost estimate; Usage Accounting settles it.
- Compute is not a model. Pools carry accelerators, boundary, region, price and warm state; placement never relaxes a privacy or region requirement for a cheaper pool.
Bounded contexts and services¶
| Context | Owns | Services (granularity) |
|---|---|---|
| BC-07 Model Access | Profiles (read model of Published assets), deployments with capability evidence, route plans, invocation receipts | ModelRouterService (module); ModelPolicyService merged; provider adapters are libraries, not services (OpenAIIntegrationService, AzureOpenAIIntegrationService, OllamaIntegrationService external-canonical) |
| BC-41 Compute Pools & Placement | Pools, model cache, placement decisions | ComputePoolService (module) |
| Host | Protocols, adapters, credentials, composition | ModelGatewayHost (standalone) |
| Service | Context | Granularity | Status |
|---|---|---|---|
| AzureOpenAIIntegrationService | BC-07 | external / canonical | unmodelled |
| ComputePoolService | BC-41 | module of host | target |
| ModelGatewayHost | BC-07 | standalone host | target |
| ModelPolicyService | BC-07 | module of host | unmodelled |
| ModelRouterService | BC-07 | module of host | target |
| OllamaIntegrationService | BC-07 | external / canonical | unmodelled |
| OpenAIIntegrationService | BC-07 | external / canonical | unmodelled |
Role in the Factory¶
flowchart LR
Mesh["Agent Mesh<br/>attempts"] -- "Invoke, ResolveRoutePlan" --> MC["Model & Compute<br/>ModelGatewayHost"]
KM["Knowledge & Memory"] -- "Embed, Rerank" --> MC
Clients["In-tenant clients<br/>OpenAI- and Anthropic-compatible protocols via GW-01"] --> MC
MC -- "decisions, credentials" --> Gov["Governance"]
MC -- "RecordUsage" --> CP["Control Plane<br/>Usage Accounting"]
MC -- "profiles as Published assets" --> CP
MC -- "capability evidence" --> Obs["Observability<br/>evaluation"]
MC --> Prov["Providers: Anthropic, Azure OpenAI, OpenAI, Azure AI Inference, Ollama, self-hosted pools"]
The routing flow (original handoff §71)¶
flowchart TB
P["Requested profile<br/>code-agent-strong"] --> Rq["Requirements<br/>coding strong, tools strict, 64K reliable context, tenant private"]
Rq --> C["Candidates<br/>local model A, cloud GPU model B, provider model C"]
C --> F["Policy filters<br/>privacy class, region, tenant policy"]
F --> S["Capability scores<br/>evidence from the evaluation suite"]
S --> CL["Cost and latency"]
CL --> D["Decision: route plan pinned for the run"]
D --> I["Invoke with receipt"]
I -. "failure, equivalent fallback only" .-> I
Component view¶
flowchart LR
subgraph P["Model & Compute Platform"]
ModelGatewayHost["ModelGatewayHost"]
end
GW_04{"GW-04 Model gateway"} --> P
P --> SecretBrokerService["SecretBrokerService"]
P --> RuntimeEnvironmentService["RuntimeEnvironmentService"]
P --> CostUsageService["CostUsageService"]
P --> ext_model_providers["ext-model-providers"]
P --> GovernanceHost["GovernanceHost"]
P --> ControlPlaneApi["ControlPlaneApi"]
P --> ext_identity_platform["ext-identity-platform"]
P --> PolicyEngineService["PolicyEngineService"]
P --> AgentRegistryService["AgentRegistryService"]
P --> QualityScoreService["QualityScoreService"]
P --> ArtifactService["ArtifactService"]
Built from the ConnectSoft estate¶
| Component | Use here | Status |
|---|---|---|
ConnectSoft.Extensions.AI (keyed IChatClient, embeddings) |
provider adapters | extend (Anthropic adapter to add, D16) |
| Microservice template (BaseTemplate) | ModelGatewayHost |
exists |
| MessagingModel Orleans adapter | outbox and inbox | exists |
| Observability libraries | GenAI spans and metrics | exists |
ConnectSoft.Extensions.RateLimiting |
per-tenant and per-profile limits at the gateway | exists |
Evaluation (Microsoft.Extensions.AI.Evaluation via BC-22) |
capability evidence | extend |
Modernization (2 to 3 year horizon)¶
- AI gateway patterns: routing, caching, prompt caching, fallback and cost receipts as one pipeline rather than per-agent code.
- OpenTelemetry GenAI conventions on every invocation span.
- Structured outputs and tool-call reliability as measured capabilities, not assumptions.
- Compute scheduler that provisions pools on demand (later), keeping privacy and region as hard constraints.
Current implementation¶
Adapters exist for OpenAI, Azure OpenAI, Ollama and Azure AI Inference; the agents framework resolves them by key with a missing-key fallback that is not provider failover. No profile, registry, router, receipt, pool or Anthropic adapter exists (providers and profiles).
Final-state summary¶
One gateway host, two modules, five provider families behind evaluated profiles, a receipt for every call, pools described independently of models. Models are swapped under the profiles; the Factory's evidence, receipts and policies stay.
Related¶
- Workflows · UI surfaces · Security · Observability · Deployment · Later capabilities
- Design pages: model gateway · capability registry and router · providers and profiles · compute pools · model profiles catalog
- Catalogs: bounded contexts · microservices · APIs · events · aggregate roots · data model · storage · workers