AICentral 0.17.0-pullrequest0123-0008

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

releasenotes.md