AICentral 0.19.2-pullrequest0138-0004

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

releasenotes.md