AICentral 0.18.0-pullrequest0125-0013

This is a prerelease version of AICentral.
There is a newer version of this package available.
See the version list below for details.
dotnet add package AICentral --version 0.18.0-pullrequest0125-0013
                    
NuGet\Install-Package AICentral -Version 0.18.0-pullrequest0125-0013
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="AICentral" Version="0.18.0-pullrequest0125-0013" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="AICentral" Version="0.18.0-pullrequest0125-0013" />
                    
Directory.Packages.props
<PackageReference Include="AICentral" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add AICentral --version 0.18.0-pullrequest0125-0013
                    
#r "nuget: AICentral, 0.18.0-pullrequest0125-0013"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package AICentral@0.18.0-pullrequest0125-0013
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=AICentral&version=0.18.0-pullrequest0125-0013&prerelease
                    
Install as a Cake Addin
#tool nuget:?package=AICentral&version=0.18.0-pullrequest0125-0013&prerelease
                    
Install as a Cake Tool

AI Central

AI Central gives you control over your AI services.

  • Lightweight out-the-box token logging using Open Telemetry
  • Intelligent Routing
  • Custom consumer OAuth2 authorisation
  • Fallback AI service
  • Round Robin AI services
  • Lowest Latency AI service
  • Circuit breakers, and backoff-retry over downstream AI services
  • Request based and Token based rate limiting
  • Prompt and usage logging
    • Works for streaming endpoints as-well as non streaming
  • Additional Open Telemetry Metrics and Traces

Configuration

See docs on Github for more details.

Minimal

This sample produces a AI-Central proxy that

  • Listens on a hostname of your choosing
  • Proxies directly through to a back-end Open AI server
  • Can be accessed using standard SDKs
  • Outputs open-telemetry metrics to capture usage information
{
  "AICentral": {
    "Endpoints": [
      {
        "Type": "AzureOpenAIEndpoint",
        "Name": "openai-1",
        "Properties": {
          "LanguageEndpoint": "https://<my-ai>.openai.azure.com",
          "AuthenticationType": "ApiKey",
          "ApiKey": "<key>"
        }
      }
    ],
    "EndpointSelectors": [
      {
        "Type": "SingleEndpoint",
        "Name": "default",
        "Properties": {
          "Endpoint": "openai-1"
        }
      }
    ],
    "AuthProviders": [
      {
        "Type": "ApiKey",
        "Name": "apikey",
        "Properties": {
          "Clients": [
            {
              "ClientName": "Consumer-1",
              "Key1": "<random-key>",
              "Key2": "<random-key>"
            }
          ]
        }
      }
    ],
    "Pipelines": [
      {
        "Name": "OpenAIPipeline",
        "Host": "mypipeline.mydomain.com",
        "EndpointSelector": "default",
        "AuthProvider": "apikey",
        "OpenTelemetryConfig": {
          "AddClientNameTag": true,
          "Transmit": true
        }
      }
    ]
  }
}

Full example

This pipeline will:

  • Present an Azure Open AI, and an Open AI downstream as a single upstream endpoint
    • maps the incoming deployment Name "GPT35Turbo0613" to the downstream Azure Open AI deployment "MyGptModel"
    • maps incoming Azure Open AI deployments to Open AI models
  • Present it as an Azure Open AI style endpoint
  • Protect the front-end by requiring an AAD token issued for your own AAD application
  • Put a local Asp.Net core rate-limiting policy over the endpoint
  • Emit Open Telemetry to be picked up by your OTel collector
  • Add rich logging to Azure monitor
    • Logs quota, client caller information (IP and identity name), and in this case the Prompt but not the response.
  • Publish the client-name as a tag in Open Telemetry
{
  "AICentral": {
    "Endpoints": [
      {
        "Type": "AzureOpenAIEndpoint",
        "Name": "openai-priority",
        "Properties": {
          "LanguageEndpoint": "https://<my-ai>.openai.azure.com",
          "AuthenticationType": "Entra|EntraPassThrough|ApiKey",
          "MaxConcurrency": 10,
          "ModelMappings": {
            "Gpt35Turbo0613": "MyGptModel"
          }
        }
      },
      {
        "Type": "OpenAIEndpoint",
        "Name": "openai-fallback",
        "Properties": {
          "LanguageEndpoint": "https://api.openai.com",
          "ModelMappings": {
            "Gpt35Turbo0613": "gpt-3.5-turbo",
            "Ada002Embedding": "text-embedding-ada-002"
          },
          "ApiKey": "<my-api-key>",
          "Organization": "<optional-organisation>"
        }
      }
    ],
    "AuthProviders": [
      {
        "Type": "Entra",
        "Name": "simple-aad",
        "Properties": {
          "Entra": {
            "ClientId": "<my-client-id>",
            "TenantId": "<my-tenant-id>",
            "Instance": "https://login.microsoftonline.com/",
            "Audience": "<custom-audience>"
          }
        }
      }
    ],
    "EndpointSelectors": [
      {
        "Type": "Prioritised",
        "Name": "my-endpoint-selector",
        "Properties": {
          "PriorityEndpoints": ["openai-1"],
          "FallbackEndpoints": ["openai-fallback"]
        }
      }
    ],
    "GenericSteps": [
      {
        "Type": "AspNetCoreFixedWindowRateLimiting",
        "Name": "token-rate-limiter",
        "Properties": {
          "LimitType": "PerConsumer|PerAICentralEndpoint",
          "MetricType": "Tokens",
          "Options": {
            "Window": "00:01:00",
            "PermitLimit": 1000
          }
        }
      },
      {
        "Type": "AspNetCoreFixedWindowRateLimiting",
        "Name": "window-rate-limiter",
        "Properties": {
          "LimitType": "PerConsumer|PerAICentralEndpoint",
          "MetricType": "Requests",
          "Options": {
            "Window": "00:00:10",
            "PermitLimit": 100
          }
        }
      },
      {
        "Type": "AzureMonitorLogger",
        "Name": "azure-monitor-logger",
        "Properties": {
          "WorkspaceId": "<workspace-id>",
          "Key": "<key>",
          "LogPrompt": true,
          "LogResponse": false,
          "LogClient": true
        }
      },
      {
        "Type": "BulkHead",
        "Name": "bulk-head",
        "Properties": {
          "MaxConcurrency": 20
        }
      }
    ],
    "Pipelines": [
      {
        "Name": "MyPipeline",
        "Host": "prioritypipeline.mydomain.com",
        "EndpointSelector": "my-endpoint-selector",
        "AuthProvider": "simple-aad",
        "Steps": [
          "window-rate-limiter",
          "bulk-head",
          "azure-monitor-logger"
        ],
        "OpenTelemetryConfig": {
          "AddClientNameTag": true,
          "Transmit": true
        }
      }
    ]
  }
}

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

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.21.6 1,506 9/9/2025
0.21.6-pullrequest0161-0009 140 9/9/2025
0.21.6-pullrequest0161-0006 132 9/9/2025
0.21.6-pullrequest0161-0005 146 9/9/2025
0.21.6-pullrequest0161-0004 141 9/9/2025
0.21.5 143 7/18/2025
0.21.4 2,746 2/21/2025
0.21.4-pullrequest0155-0003 97 2/21/2025
0.21.3 124 2/21/2025
0.21.3-pullrequest0155-0002 90 1/30/2025
0.21.1 648 1/14/2025
0.21.1-pullrequest0153-0003 79 1/14/2025
0.21.0 409 12/9/2024
0.21.0-pullrequest0152-0005 101 12/9/2024
0.21.0-pullrequest0152-0004 94 12/9/2024
0.21.0-pullrequest0152-0003 85 12/9/2024
0.21.0-pullrequest0152-0002 99 12/9/2024
0.20.7 276 11/26/2024
0.20.7-pullrequest0151-0002 92 11/26/2024
0.20.6 404 11/1/2024
0.20.6-pullrequest0150-0003 86 11/1/2024
0.20.5 387 9/30/2024
0.20.5-pullrequest0148-0004 102 9/30/2024
0.20.5-pullrequest0148-0003 96 9/30/2024
0.20.5-pullrequest0148-0002 116 9/30/2024
0.20.3 167 9/5/2024
0.20.3-pullrequest0146-0005 86 9/5/2024
0.20.3-pullrequest0146-0004 88 9/5/2024
0.20.2 120 9/4/2024
0.20.2-pullrequest0145-0004 91 9/4/2024
0.20.0 152 8/17/2024
0.20.0-pullrequest0143-0013 100 8/17/2024
0.20.0-pullrequest0143-0012 105 8/17/2024
0.20.0-pullrequest0143-0011 100 8/17/2024
0.20.0-pullrequest0143-0010 106 8/17/2024
0.20.0-pullrequest0143-0009 100 8/17/2024
0.19.6-pullrequest0143-0008 114 8/17/2024
0.19.5 115 8/7/2024
0.19.5-pullrequest0141-0002 82 8/7/2024
0.19.4 120 8/1/2024
0.19.4-pullrequest0140-0003 90 8/1/2024
0.19.4-pullrequest0139-0001 88 7/29/2024
0.19.3 115 7/29/2024
0.19.2 140 7/29/2024
0.19.2-pullrequest0138-0004 87 7/29/2024
0.19.1 116 7/29/2024
0.19.1-pullrequest0137-0003 89 7/29/2024
0.19.0 118 7/29/2024
0.19.0-pullrequest0136-0014 78 7/29/2024
0.19.0-pullrequest0136-0013 81 7/29/2024
0.19.0-pullrequest0136-0012 170 7/29/2024
0.19.0-pullrequest0136-0011 91 7/29/2024
0.19.0-pullrequest0136-0010 84 7/29/2024
0.19.0-pullrequest0136-0009 90 7/27/2024
0.19.0-pullrequest0136-0008 92 7/27/2024
0.19.0-pullrequest0136-0007 93 7/27/2024
0.18.6 135 7/15/2024
0.18.6-pullrequest0135-0002 89 7/15/2024
0.18.5 114 7/15/2024
0.18.5-pullrequest0134-0003 87 7/15/2024
0.18.4 119 7/15/2024
0.18.4-pullrequest0133-0009 85 7/15/2024
0.18.4-pullrequest0133-0008 91 7/15/2024
0.18.4-pullrequest0133-0007 93 7/15/2024
0.18.3 130 7/12/2024
0.18.3-pullrequest0132-0005 89 7/12/2024
0.18.2 118 7/12/2024
0.18.2-pullrequest0131-0003 90 7/11/2024
0.18.2-pullrequest0130-0003 88 7/11/2024
0.18.1 118 7/10/2024
0.18.1-pullrequest0129-0007 84 7/10/2024
0.18.0 167 7/10/2024
0.18.0-pullrequest0125-0014 86 7/10/2024
0.18.0-pullrequest0125-0013 96 7/10/2024
0.18.0-pullrequest0125-0012 87 7/10/2024
0.18.0-pullrequest0125-0011 87 7/10/2024
0.18.0-pullrequest0125-0010 87 7/10/2024
0.18.0-pullrequest0125-0009 98 7/10/2024
0.17.2-pullrequest0125-0008 89 7/10/2024
0.17.2-pullrequest0125-0007 95 7/10/2024
0.17.2-pullrequest0125-0006 85 7/10/2024
0.17.2-pullrequest0125-0005 89 7/10/2024
0.17.2-pullrequest0125-0004 95 7/10/2024
0.17.2-pullrequest0125-0003 89 7/9/2024
0.17.1 119 7/9/2024
0.17.1-pullrequest0124-0005 97 7/9/2024
0.17.0 122 7/8/2024
0.17.0-pullrequest0123-0024 77 7/8/2024
0.17.0-pullrequest0123-0023 85 7/8/2024
0.17.0-pullrequest0123-0021 97 7/8/2024
0.17.0-pullrequest0123-0019 84 7/8/2024
0.17.0-pullrequest0123-0018 74 7/8/2024
0.17.0-pullrequest0123-0017 87 7/8/2024
0.17.0-pullrequest0123-0015 85 7/8/2024
0.17.0-pullrequest0123-0014 82 7/8/2024
0.17.0-pullrequest0123-0013 86 7/8/2024
0.17.0-pullrequest0123-0012 87 7/8/2024
0.17.0-pullrequest0123-0011 89 7/8/2024
0.17.0-pullrequest0123-0009 95 7/6/2024
0.17.0-pullrequest0123-0008 84 7/6/2024
0.17.0-pullrequest0123-0007 121 7/6/2024
0.16.23 133 6/12/2024
0.16.23-pullrequest0118-0005 92 6/12/2024
0.16.23-pullrequest0118-0004 85 6/12/2024
0.16.23-pullrequest0118-0003 89 6/12/2024
0.16.23-pullrequest0118-0002 87 6/12/2024
0.16.21 179 5/29/2024
0.16.21-pullrequest0114-0002 91 5/29/2024
0.16.20 127 5/28/2024
0.16.20-pullrequest0112-0002 89 5/28/2024
0.16.19 126 5/13/2024
0.16.19-pullrequest0110-0004 103 5/13/2024
0.16.19-pullrequest0110-0003 90 5/13/2024
0.16.17 148 4/22/2024
0.16.17-pullrequest0108-0005 108 4/19/2024
0.16.17-pullrequest0108-0004 102 4/19/2024
0.16.17-pullrequest0108-0003 96 4/19/2024
0.16.16 137 4/16/2024
0.16.16-pullrequest0107-0003 106 4/16/2024
0.16.15 141 4/16/2024
0.16.15-pullrequest0106-0004 94 4/16/2024
0.16.15-pullrequest0106-0003 83 4/16/2024
0.16.15-pullrequest0106-0002 100 4/16/2024
0.16.14 199 4/16/2024
0.16.13 144 3/23/2024
0.16.13-pullrequest0103-0003 115 3/23/2024
0.16.12 138 3/23/2024
0.16.12-pullrequest0102-0006 107 3/22/2024
0.16.11 132 3/21/2024
0.16.11-pullrequest0101-0004 93 3/21/2024
0.16.11-pullrequest0101-0003 103 3/21/2024
0.16.11-pullrequest0101-0002 104 3/21/2024
0.16.9 142 3/16/2024
0.16.9-pullrequest0098-0008 102 3/16/2024
0.16.9-pullrequest0098-0007 99 3/16/2024
0.16.8 160 3/15/2024
0.16.8-pullrequest0097-0002 92 3/15/2024
0.16.7 139 3/10/2024
0.16.7-pullrequest0095-0002 113 3/10/2024
0.16.6 220 3/9/2024
0.16.6-pullrequest0094-0003 99 3/9/2024
0.16.6-pullrequest0094-0002 93 3/9/2024
0.16.2 144 3/5/2024
0.16.2-pullrequest0089-0009 99 3/5/2024
0.16.1 143 3/3/2024
0.16.1-pullrequest0088-0003 97 3/2/2024
0.16.1-pullrequest0088-0002 84 3/2/2024
0.16.0 191 2/28/2024
0.16.0-pullrequest0087-0010 92 2/28/2024
0.16.0-pullrequest0087-0009 97 2/28/2024
0.16.0-pullrequest0087-0007 108 2/28/2024
0.16.0-pullrequest0087-0006 99 2/28/2024
0.16.0-pullrequest0087-0005 91 2/28/2024
0.16.0-pullrequest0087-0004 98 2/28/2024
0.16.0-pullrequest0087-0003 98 2/28/2024
0.15.2 132 2/26/2024
0.15.2-pullrequest0086-0007 97 2/26/2024
0.15.2-pullrequest0086-0006 89 2/26/2024
0.15.1 140 2/23/2024
0.15.1-pullrequest0085-0006 95 2/23/2024
0.15.0 136 2/22/2024
0.15.0-pullrequest0084-0004 97 2/22/2024
0.15.0-pullrequest0084-0003 136 2/22/2024
0.14.1-pullrequest0084-0002 116 2/22/2024
0.14.0 151 2/21/2024
0.14.0-pullrequest0083-0011 111 2/8/2024
0.14.0-pullrequest0083-0010 93 2/8/2024
0.14.0-pullrequest0083-0009 96 2/8/2024
0.13.7 153 2/8/2024
0.13.7-pullrequest0082-0002 106 2/8/2024
0.13.6-pullrequest0081-0006 98 2/8/2024
0.13.5 159 2/7/2024
0.13.5-pullrequest0080-0002 99 2/7/2024
0.13.4 126 2/7/2024
0.13.4-pullrequest0079-0003 95 2/7/2024
0.13.1 133 2/1/2024
0.13.1-pullrequest0076-0003 99 2/1/2024
0.13.1-pullrequest0076-0002 104 2/1/2024
0.13.0 156 2/1/2024
0.13.0-pullrequest0075-0005 100 2/1/2024
0.13.0-pullrequest0075-0004 101 2/1/2024
0.12.2-pullrequest0075-0003 103 2/1/2024
0.12.1 131 2/1/2024
0.12.1-pullrequest0074-0002 105 2/1/2024
0.12.0 134 2/1/2024
0.12.0-pullrequest0073-0002 95 2/1/2024
0.11.0 137 1/31/2024
0.11.0-pullrequest0072-0011 107 1/31/2024
0.11.0-pullrequest0072-0010 93 1/31/2024
0.11.0-pullrequest0072-0008 89 1/31/2024
0.10.0 133 1/31/2024
0.10.0-pullrequest0070-0005 109 1/29/2024
0.10.0-pullrequest0070-0004 100 1/29/2024
0.9.1-pullrequest0069-0001 87 1/29/2024
0.9.0 130 1/29/2024
0.9.0-pullrequest0069-0002 91 1/29/2024
0.8.7-pullrequest0068-0001 98 1/29/2024
0.8.6 138 1/29/2024
0.8.4 148 1/19/2024
0.8.4-pullrequest0066-0009 89 1/19/2024
0.8.4-pullrequest0066-0008 93 1/19/2024
0.8.4-pullrequest0066-0007 99 1/19/2024
0.8.4-pullrequest0066-0005 86 1/19/2024
0.8.4-pullrequest0066-0004 95 1/19/2024
0.8.4-pullrequest0066-0003 94 1/19/2024
0.8.3 129 1/19/2024
0.8.3-pullrequest0065-0003 98 1/19/2024
0.8.3-pullrequest0065-0002 94 1/19/2024
0.8.1 123 1/19/2024
0.8.1-pullrequest0063-0013 97 1/19/2024
0.8.1-pullrequest0063-0011 95 1/19/2024
0.7.16-pullrequest0063-0010 98 1/19/2024
0.7.15 135 1/18/2024
0.7.15-pullrequest0062-0002 96 1/18/2024
0.7.12 139 1/16/2024
0.7.12-pullrequest0059-0006 99 1/16/2024
0.7.10 136 1/15/2024
0.7.10-pullrequest0059-0007 91 1/16/2024
0.7.10-pullrequest0058-0004 98 1/15/2024
0.7.10-pullrequest0057-0002 96 1/15/2024
0.7.9 143 1/15/2024
0.7.9-pullrequest0057-0003 90 1/15/2024
0.7.7 131 1/15/2024
0.7.7-pullrequest0056-0003 109 1/15/2024
0.7.4 140 1/15/2024
0.7.4-pullrequest0055-0012 99 1/15/2024
0.7.4-pullrequest0055-0011 105 1/15/2024
0.7.4-pullrequest0055-0010 103 1/15/2024
0.7.4-pullrequest0055-0009 103 1/15/2024
0.7.4-pullrequest0055-0008 98 1/15/2024
0.7.4-pullrequest0055-0007 108 1/15/2024
0.7.4-pullrequest0054-0005 100 1/15/2024
0.7.4-pullrequest0053-0004 109 1/15/2024
0.7.4-pullrequest0052-0002 86 1/15/2024
0.7.2 129 1/15/2024
0.7.2-pullrequest0051-0013 100 1/15/2024
0.7.2-pullrequest0050-0010 97 1/15/2024
0.7.1 147 1/13/2024
0.7.0 138 1/13/2024
0.7.0-pullrequest0046-0079 110 1/13/2024
0.6.12 161 1/3/2024
0.6.12-pullrequest0045-0018 91 1/13/2024
0.6.12-pullrequest0042-0010 106 1/12/2024
0.6.12-pullrequest0041-0007 104 1/12/2024
0.6.12-pullrequest0039-0002 109 1/3/2024
0.6.10 153 12/22/2023
0.6.10-pullrequest0038-0007 122 1/2/2024
0.6.10-pullrequest0038-0006 111 1/2/2024
0.6.10-pullrequest0038-0005 110 1/2/2024
0.6.8 156 12/21/2023
0.6.6 142 12/18/2023
0.6.6-pullrequest0035-0007 112 12/21/2023
0.6.6-pullrequest0035-0006 112 12/21/2023
0.6.6-pullrequest0035-0005 108 12/21/2023
0.6.3 151 12/18/2023
0.6.3-pullrequest0034-0018 112 12/18/2023
0.6.1 138 12/15/2023
0.6.1-pullrequest0029-0008 111 12/15/2023
0.6.1-pullrequest0028-0006 115 12/15/2023
0.6.1-pullrequest0027-0004 98 12/15/2023
0.5.3 148 12/11/2023
0.5.3-pullrequest0025-0049 116 12/14/2023
0.5.3-pullrequest0025-0047 113 12/14/2023
0.5.3-pullrequest0025-0043 116 12/13/2023
0.5.3-pullrequest0022-0038 111 12/13/2023
0.5.1 119 12/7/2023
0.5.0 128 12/6/2023
0.4.3 135 12/4/2023
0.4.2 127 12/4/2023
0.4.1 135 12/4/2023
0.3.10 139 11/22/2023
0.3.10-pullrequest0022-0008 106 11/27/2023
0.3.10-pullrequest0021-0005 109 11/22/2023
0.3.9 123 11/20/2023
0.3.8 132 11/9/2023
0.3.8-pullrequest0020-0005 104 11/9/2023
0.3.6 128 11/9/2023
0.3.5 130 11/9/2023
0.3.4 122 11/8/2023
0.3.3 124 11/8/2023
0.3.1 125 11/8/2023
0.3.1-pullrequest0018-0004 118 11/8/2023
0.2.1 165 11/2/2023
0.2.1-pullrequest0017-0050 128 11/8/2023
0.2.1-pullrequest0016-0048 127 11/8/2023
0.2.1-pullrequest0015-0045 121 11/8/2023
0.2.1-pullrequest0014-0035 130 11/7/2023
0.2.1-pullrequest0013-0033 118 11/7/2023
0.2.1-pullrequest0012-0031 120 11/7/2023
0.2.1-pullrequest0011-0024 119 11/6/2023
0.2.1-pullrequest0010-0015 135 11/2/2023
0.2.1-pullrequest0009-0011 124 11/2/2023
0.2.1-pullrequest0008-0009 128 11/2/2023
0.2.1-pullrequest0007-0007 139 11/2/2023
0.2.1-pullrequest0006-0005 120 11/2/2023
0.2.1-pullrequest0005-0001 120 11/2/2023
0.1.0 157 10/27/2023
0.1.0-pullrequest0004-0024 131 11/1/2023
0.1.0-pullrequest0003-0022 132 11/1/2023
0.1.0-pullrequest0002-0019 121 11/1/2023
0.1.0-pullrequest0001-0017 129 11/1/2023
0.1.0-pullrequest0001-0010 130 10/30/2023

releasenotes.md