AICentral 0.16.23

dotnet add package AICentral --version 0.16.23
NuGet\Install-Package AICentral -Version 0.16.23
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.16.23" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add AICentral --version 0.16.23
#r "nuget: AICentral, 0.16.23"
#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.
// Install AICentral as a Cake Addin
#addin nuget:?package=AICentral&version=0.16.23

// Install AICentral as a Cake Tool
#tool nuget:?package=AICentral&version=0.16.23

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. 
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.16.23 37 6/12/2024
0.16.23-pullrequest0118-0005 29 6/12/2024
0.16.23-pullrequest0118-0004 30 6/12/2024
0.16.23-pullrequest0118-0003 31 6/12/2024
0.16.23-pullrequest0118-0002 28 6/12/2024
0.16.21 72 5/29/2024
0.16.21-pullrequest0114-0002 39 5/29/2024
0.16.20 39 5/28/2024
0.16.20-pullrequest0112-0002 33 5/28/2024
0.16.19 44 5/13/2024
0.16.19-pullrequest0110-0004 40 5/13/2024
0.16.19-pullrequest0110-0003 36 5/13/2024
0.16.17 63 4/22/2024
0.16.17-pullrequest0108-0005 45 4/19/2024
0.16.17-pullrequest0108-0004 36 4/19/2024
0.16.17-pullrequest0108-0003 38 4/19/2024
0.16.16 61 4/16/2024
0.16.16-pullrequest0107-0003 49 4/16/2024
0.16.15 51 4/16/2024
0.16.15-pullrequest0106-0004 35 4/16/2024
0.16.15-pullrequest0106-0003 40 4/16/2024
0.16.15-pullrequest0106-0002 47 4/16/2024
0.16.14 113 4/16/2024
0.16.13 63 3/23/2024
0.16.13-pullrequest0103-0003 61 3/23/2024
0.16.12 54 3/23/2024
0.16.12-pullrequest0102-0006 50 3/22/2024
0.16.11 53 3/21/2024
0.16.11-pullrequest0101-0004 42 3/21/2024
0.16.11-pullrequest0101-0003 40 3/21/2024
0.16.11-pullrequest0101-0002 42 3/21/2024
0.16.9 60 3/16/2024
0.16.9-pullrequest0098-0008 47 3/16/2024
0.16.9-pullrequest0098-0007 48 3/16/2024
0.16.8 77 3/15/2024
0.16.8-pullrequest0097-0002 46 3/15/2024
0.16.7 52 3/10/2024
0.16.7-pullrequest0095-0002 56 3/10/2024
0.16.6 135 3/9/2024
0.16.6-pullrequest0094-0003 46 3/9/2024
0.16.6-pullrequest0094-0002 44 3/9/2024
0.16.2 60 3/5/2024
0.16.2-pullrequest0089-0009 44 3/5/2024
0.16.1 59 3/3/2024
0.16.1-pullrequest0088-0003 42 3/2/2024
0.16.1-pullrequest0088-0002 39 3/2/2024
0.16.0 106 2/28/2024
0.16.0-pullrequest0087-0010 41 2/28/2024
0.16.0-pullrequest0087-0009 43 2/28/2024
0.16.0-pullrequest0087-0007 50 2/28/2024
0.16.0-pullrequest0087-0006 45 2/28/2024
0.16.0-pullrequest0087-0005 38 2/28/2024
0.16.0-pullrequest0087-0004 46 2/28/2024
0.16.0-pullrequest0087-0003 43 2/28/2024
0.15.2 48 2/26/2024
0.15.2-pullrequest0086-0007 42 2/26/2024
0.15.2-pullrequest0086-0006 34 2/26/2024
0.15.1 54 2/23/2024
0.15.1-pullrequest0085-0006 42 2/23/2024
0.15.0 53 2/22/2024
0.15.0-pullrequest0084-0004 42 2/22/2024
0.15.0-pullrequest0084-0003 64 2/22/2024
0.14.1-pullrequest0084-0002 51 2/22/2024
0.14.0 65 2/21/2024
0.14.0-pullrequest0083-0011 60 2/8/2024
0.14.0-pullrequest0083-0010 42 2/8/2024
0.14.0-pullrequest0083-0009 43 2/8/2024
0.13.7 72 2/8/2024
0.13.7-pullrequest0082-0002 52 2/8/2024
0.13.6-pullrequest0081-0006 42 2/8/2024
0.13.5 51 2/7/2024
0.13.5-pullrequest0080-0002 44 2/7/2024
0.13.4 50 2/7/2024
0.13.4-pullrequest0079-0003 41 2/7/2024
0.13.1 59 2/1/2024
0.13.1-pullrequest0076-0003 47 2/1/2024
0.13.1-pullrequest0076-0002 49 2/1/2024
0.13.0 77 2/1/2024
0.13.0-pullrequest0075-0005 44 2/1/2024
0.13.0-pullrequest0075-0004 42 2/1/2024
0.12.2-pullrequest0075-0003 45 2/1/2024
0.12.1 52 2/1/2024
0.12.1-pullrequest0074-0002 46 2/1/2024
0.12.0 53 2/1/2024
0.12.0-pullrequest0073-0002 44 2/1/2024
0.11.0 53 1/31/2024
0.11.0-pullrequest0072-0011 49 1/31/2024
0.11.0-pullrequest0072-0010 45 1/31/2024
0.11.0-pullrequest0072-0008 43 1/31/2024
0.10.0 54 1/31/2024
0.10.0-pullrequest0070-0005 42 1/29/2024
0.10.0-pullrequest0070-0004 40 1/29/2024
0.9.1-pullrequest0069-0001 46 1/29/2024
0.9.0 52 1/29/2024
0.9.0-pullrequest0069-0002 43 1/29/2024
0.8.7-pullrequest0068-0001 47 1/29/2024
0.8.6 54 1/29/2024
0.8.4 71 1/19/2024
0.8.4-pullrequest0066-0009 46 1/19/2024
0.8.4-pullrequest0066-0008 40 1/19/2024
0.8.4-pullrequest0066-0007 41 1/19/2024
0.8.4-pullrequest0066-0005 40 1/19/2024
0.8.4-pullrequest0066-0004 44 1/19/2024
0.8.4-pullrequest0066-0003 38 1/19/2024
0.8.3 46 1/19/2024
0.8.3-pullrequest0065-0003 45 1/19/2024
0.8.3-pullrequest0065-0002 44 1/19/2024
0.8.1 51 1/19/2024
0.8.1-pullrequest0063-0013 44 1/19/2024
0.8.1-pullrequest0063-0011 45 1/19/2024
0.7.16-pullrequest0063-0010 46 1/19/2024
0.7.15 57 1/18/2024
0.7.15-pullrequest0062-0002 43 1/18/2024
0.7.12 66 1/16/2024
0.7.12-pullrequest0059-0006 52 1/16/2024
0.7.10 60 1/15/2024
0.7.10-pullrequest0059-0007 47 1/16/2024
0.7.10-pullrequest0058-0004 42 1/15/2024
0.7.10-pullrequest0057-0002 48 1/15/2024
0.7.9 58 1/15/2024
0.7.9-pullrequest0057-0003 43 1/15/2024
0.7.7 56 1/15/2024
0.7.7-pullrequest0056-0003 51 1/15/2024
0.7.4 60 1/15/2024
0.7.4-pullrequest0055-0012 51 1/15/2024
0.7.4-pullrequest0055-0011 49 1/15/2024
0.7.4-pullrequest0055-0010 55 1/15/2024
0.7.4-pullrequest0055-0009 46 1/15/2024
0.7.4-pullrequest0055-0008 48 1/15/2024
0.7.4-pullrequest0055-0007 53 1/15/2024
0.7.4-pullrequest0054-0005 50 1/15/2024
0.7.4-pullrequest0053-0004 48 1/15/2024
0.7.4-pullrequest0052-0002 43 1/15/2024
0.7.2 53 1/15/2024
0.7.2-pullrequest0051-0013 53 1/15/2024
0.7.2-pullrequest0050-0010 44 1/15/2024
0.7.1 66 1/13/2024
0.7.0 64 1/13/2024
0.7.0-pullrequest0046-0079 55 1/13/2024
0.6.12 80 1/3/2024
0.6.12-pullrequest0045-0018 49 1/13/2024
0.6.12-pullrequest0042-0010 53 1/12/2024
0.6.12-pullrequest0041-0007 51 1/12/2024
0.6.12-pullrequest0039-0002 56 1/3/2024
0.6.10 81 12/22/2023
0.6.10-pullrequest0038-0007 62 1/2/2024
0.6.10-pullrequest0038-0006 57 1/2/2024
0.6.10-pullrequest0038-0005 57 1/2/2024
0.6.8 72 12/21/2023
0.6.6 71 12/18/2023
0.6.6-pullrequest0035-0007 62 12/21/2023
0.6.6-pullrequest0035-0006 63 12/21/2023
0.6.6-pullrequest0035-0005 58 12/21/2023
0.6.3 69 12/18/2023
0.6.3-pullrequest0034-0018 62 12/18/2023
0.6.1 58 12/15/2023
0.6.1-pullrequest0029-0008 58 12/15/2023
0.6.1-pullrequest0028-0006 64 12/15/2023
0.6.1-pullrequest0027-0004 42 12/15/2023
0.5.3 71 12/11/2023
0.5.3-pullrequest0025-0049 66 12/14/2023
0.5.3-pullrequest0025-0047 63 12/14/2023
0.5.3-pullrequest0025-0043 55 12/13/2023
0.5.3-pullrequest0022-0038 53 12/13/2023
0.5.1 67 12/7/2023
0.5.0 75 12/6/2023
0.4.3 80 12/4/2023
0.4.2 71 12/4/2023
0.4.1 79 12/4/2023
0.3.10 89 11/22/2023
0.3.10-pullrequest0022-0008 60 11/27/2023
0.3.10-pullrequest0021-0005 65 11/22/2023
0.3.9 67 11/20/2023
0.3.8 73 11/9/2023
0.3.8-pullrequest0020-0005 55 11/9/2023
0.3.6 65 11/9/2023
0.3.5 71 11/9/2023
0.3.4 66 11/8/2023
0.3.3 61 11/8/2023
0.3.1 68 11/8/2023
0.3.1-pullrequest0018-0004 57 11/8/2023
0.2.1 103 11/2/2023
0.2.1-pullrequest0017-0050 66 11/8/2023
0.2.1-pullrequest0016-0048 64 11/8/2023
0.2.1-pullrequest0015-0045 59 11/8/2023
0.2.1-pullrequest0014-0035 62 11/7/2023
0.2.1-pullrequest0013-0033 61 11/7/2023
0.2.1-pullrequest0012-0031 64 11/7/2023
0.2.1-pullrequest0011-0024 63 11/6/2023
0.2.1-pullrequest0010-0015 73 11/2/2023
0.2.1-pullrequest0009-0011 67 11/2/2023
0.2.1-pullrequest0008-0009 67 11/2/2023
0.2.1-pullrequest0007-0007 72 11/2/2023
0.2.1-pullrequest0006-0005 67 11/2/2023
0.2.1-pullrequest0005-0001 62 11/2/2023
0.1.0 89 10/27/2023
0.1.0-pullrequest0004-0024 62 11/1/2023
0.1.0-pullrequest0003-0022 65 11/1/2023
0.1.0-pullrequest0002-0019 64 11/1/2023
0.1.0-pullrequest0001-0017 66 11/1/2023
0.1.0-pullrequest0001-0010 68 10/30/2023

releasenotes.md