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

// Install AICentral as a Cake Tool
#tool nuget:?package=AICentral&version=0.16.19-pullrequest0110-0004&prerelease                

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. 
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.1 21 1/14/2025
0.21.1-pullrequest0153-0003 20 1/14/2025
0.21.0 188 12/9/2024
0.21.0-pullrequest0152-0005 47 12/9/2024
0.21.0-pullrequest0152-0004 48 12/9/2024
0.21.0-pullrequest0152-0003 49 12/9/2024
0.21.0-pullrequest0152-0002 47 12/9/2024
0.20.7 212 11/26/2024
0.20.7-pullrequest0151-0002 54 11/26/2024
0.20.6 348 11/1/2024
0.20.6-pullrequest0150-0003 48 11/1/2024
0.20.5 157 9/30/2024
0.20.5-pullrequest0148-0004 63 9/30/2024
0.20.5-pullrequest0148-0003 56 9/30/2024
0.20.5-pullrequest0148-0002 68 9/30/2024
0.20.3 104 9/5/2024
0.20.3-pullrequest0146-0005 54 9/5/2024
0.20.3-pullrequest0146-0004 56 9/5/2024
0.20.2 70 9/4/2024
0.20.2-pullrequest0145-0004 48 9/4/2024
0.20.0 92 8/17/2024
0.20.0-pullrequest0143-0013 71 8/17/2024
0.20.0-pullrequest0143-0012 71 8/17/2024
0.20.0-pullrequest0143-0011 73 8/17/2024
0.20.0-pullrequest0143-0010 69 8/17/2024
0.20.0-pullrequest0143-0009 69 8/17/2024
0.19.6-pullrequest0143-0008 78 8/17/2024
0.19.5 63 8/7/2024
0.19.5-pullrequest0141-0002 52 8/7/2024
0.19.4 65 8/1/2024
0.19.4-pullrequest0140-0003 52 8/1/2024
0.19.4-pullrequest0139-0001 53 7/29/2024
0.19.3 62 7/29/2024
0.19.2 65 7/29/2024
0.19.2-pullrequest0138-0004 52 7/29/2024
0.19.1 61 7/29/2024
0.19.1-pullrequest0137-0003 53 7/29/2024
0.19.0 55 7/29/2024
0.19.0-pullrequest0136-0014 48 7/29/2024
0.19.0-pullrequest0136-0013 49 7/29/2024
0.19.0-pullrequest0136-0012 140 7/29/2024
0.19.0-pullrequest0136-0011 52 7/29/2024
0.19.0-pullrequest0136-0010 55 7/29/2024
0.19.0-pullrequest0136-0009 66 7/27/2024
0.19.0-pullrequest0136-0008 57 7/27/2024
0.19.0-pullrequest0136-0007 58 7/27/2024
0.18.6 76 7/15/2024
0.18.6-pullrequest0135-0002 54 7/15/2024
0.18.5 62 7/15/2024
0.18.5-pullrequest0134-0003 50 7/15/2024
0.18.4 65 7/15/2024
0.18.4-pullrequest0133-0009 57 7/15/2024
0.18.4-pullrequest0133-0008 53 7/15/2024
0.18.4-pullrequest0133-0007 54 7/15/2024
0.18.3 69 7/12/2024
0.18.3-pullrequest0132-0005 55 7/12/2024
0.18.2 62 7/12/2024
0.18.2-pullrequest0131-0003 59 7/11/2024
0.18.2-pullrequest0130-0003 56 7/11/2024
0.18.1 65 7/10/2024
0.18.1-pullrequest0129-0007 52 7/10/2024
0.18.0 99 7/10/2024
0.18.0-pullrequest0125-0014 52 7/10/2024
0.18.0-pullrequest0125-0013 60 7/10/2024
0.18.0-pullrequest0125-0012 50 7/10/2024
0.18.0-pullrequest0125-0011 50 7/10/2024
0.18.0-pullrequest0125-0010 51 7/10/2024
0.18.0-pullrequest0125-0009 63 7/10/2024
0.17.2-pullrequest0125-0008 53 7/10/2024
0.17.2-pullrequest0125-0007 59 7/10/2024
0.17.2-pullrequest0125-0006 55 7/10/2024
0.17.2-pullrequest0125-0005 57 7/10/2024
0.17.2-pullrequest0125-0004 59 7/10/2024
0.17.2-pullrequest0125-0003 55 7/9/2024
0.17.1 64 7/9/2024
0.17.1-pullrequest0124-0005 57 7/9/2024
0.17.0 68 7/8/2024
0.17.0-pullrequest0123-0024 47 7/8/2024
0.17.0-pullrequest0123-0023 48 7/8/2024
0.17.0-pullrequest0123-0021 63 7/8/2024
0.17.0-pullrequest0123-0019 54 7/8/2024
0.17.0-pullrequest0123-0018 44 7/8/2024
0.17.0-pullrequest0123-0017 57 7/8/2024
0.17.0-pullrequest0123-0015 53 7/8/2024
0.17.0-pullrequest0123-0014 49 7/8/2024
0.17.0-pullrequest0123-0013 54 7/8/2024
0.17.0-pullrequest0123-0012 49 7/8/2024
0.17.0-pullrequest0123-0011 56 7/8/2024
0.17.0-pullrequest0123-0009 58 7/6/2024
0.17.0-pullrequest0123-0008 53 7/6/2024
0.17.0-pullrequest0123-0007 91 7/6/2024
0.16.23 71 6/12/2024
0.16.23-pullrequest0118-0005 63 6/12/2024
0.16.23-pullrequest0118-0004 56 6/12/2024
0.16.23-pullrequest0118-0003 57 6/12/2024
0.16.23-pullrequest0118-0002 56 6/12/2024
0.16.21 124 5/29/2024
0.16.21-pullrequest0114-0002 61 5/29/2024
0.16.20 70 5/28/2024
0.16.20-pullrequest0112-0002 55 5/28/2024
0.16.19 76 5/13/2024
0.16.19-pullrequest0110-0004 68 5/13/2024
0.16.19-pullrequest0110-0003 58 5/13/2024
0.16.17 93 4/22/2024
0.16.17-pullrequest0108-0005 71 4/19/2024
0.16.17-pullrequest0108-0004 64 4/19/2024
0.16.17-pullrequest0108-0003 62 4/19/2024
0.16.16 83 4/16/2024
0.16.16-pullrequest0107-0003 77 4/16/2024
0.16.15 80 4/16/2024
0.16.15-pullrequest0106-0004 63 4/16/2024
0.16.15-pullrequest0106-0003 61 4/16/2024
0.16.15-pullrequest0106-0002 72 4/16/2024
0.16.14 141 4/16/2024
0.16.13 94 3/23/2024
0.16.13-pullrequest0103-0003 80 3/23/2024
0.16.12 79 3/23/2024
0.16.12-pullrequest0102-0006 69 3/22/2024
0.16.11 78 3/21/2024
0.16.11-pullrequest0101-0004 61 3/21/2024
0.16.11-pullrequest0101-0003 67 3/21/2024
0.16.11-pullrequest0101-0002 61 3/21/2024
0.16.9 83 3/16/2024
0.16.9-pullrequest0098-0008 65 3/16/2024
0.16.9-pullrequest0098-0007 67 3/16/2024
0.16.8 104 3/15/2024
0.16.8-pullrequest0097-0002 65 3/15/2024
0.16.7 80 3/10/2024
0.16.7-pullrequest0095-0002 75 3/10/2024
0.16.6 163 3/9/2024
0.16.6-pullrequest0094-0003 66 3/9/2024
0.16.6-pullrequest0094-0002 63 3/9/2024
0.16.2 91 3/5/2024
0.16.2-pullrequest0089-0009 72 3/5/2024
0.16.1 86 3/3/2024
0.16.1-pullrequest0088-0003 61 3/2/2024
0.16.1-pullrequest0088-0002 57 3/2/2024
0.16.0 131 2/28/2024
0.16.0-pullrequest0087-0010 60 2/28/2024
0.16.0-pullrequest0087-0009 64 2/28/2024
0.16.0-pullrequest0087-0007 73 2/28/2024
0.16.0-pullrequest0087-0006 64 2/28/2024
0.16.0-pullrequest0087-0005 59 2/28/2024
0.16.0-pullrequest0087-0004 69 2/28/2024
0.16.0-pullrequest0087-0003 62 2/28/2024
0.15.2 74 2/26/2024
0.15.2-pullrequest0086-0007 60 2/26/2024
0.15.2-pullrequest0086-0006 52 2/26/2024
0.15.1 79 2/23/2024
0.15.1-pullrequest0085-0006 59 2/23/2024
0.15.0 77 2/22/2024
0.15.0-pullrequest0084-0004 61 2/22/2024
0.15.0-pullrequest0084-0003 89 2/22/2024
0.14.1-pullrequest0084-0002 74 2/22/2024
0.14.0 93 2/21/2024
0.14.0-pullrequest0083-0011 87 2/8/2024
0.14.0-pullrequest0083-0010 68 2/8/2024
0.14.0-pullrequest0083-0009 66 2/8/2024
0.13.7 101 2/8/2024
0.13.7-pullrequest0082-0002 78 2/8/2024
0.13.6-pullrequest0081-0006 68 2/8/2024
0.13.5 97 2/7/2024
0.13.5-pullrequest0080-0002 71 2/7/2024
0.13.4 76 2/7/2024
0.13.4-pullrequest0079-0003 64 2/7/2024
0.13.1 88 2/1/2024
0.13.1-pullrequest0076-0003 71 2/1/2024
0.13.1-pullrequest0076-0002 71 2/1/2024
0.13.0 102 2/1/2024
0.13.0-pullrequest0075-0005 69 2/1/2024
0.13.0-pullrequest0075-0004 63 2/1/2024
0.12.2-pullrequest0075-0003 64 2/1/2024
0.12.1 80 2/1/2024
0.12.1-pullrequest0074-0002 66 2/1/2024
0.12.0 76 2/1/2024
0.12.0-pullrequest0073-0002 64 2/1/2024
0.11.0 78 1/31/2024
0.11.0-pullrequest0072-0011 68 1/31/2024
0.11.0-pullrequest0072-0010 65 1/31/2024
0.11.0-pullrequest0072-0008 62 1/31/2024
0.10.0 79 1/31/2024
0.10.0-pullrequest0070-0005 71 1/29/2024
0.10.0-pullrequest0070-0004 67 1/29/2024
0.9.1-pullrequest0069-0001 66 1/29/2024
0.9.0 77 1/29/2024
0.9.0-pullrequest0069-0002 63 1/29/2024
0.8.7-pullrequest0068-0001 67 1/29/2024
0.8.6 80 1/29/2024
0.8.4 97 1/19/2024
0.8.4-pullrequest0066-0009 66 1/19/2024
0.8.4-pullrequest0066-0008 59 1/19/2024
0.8.4-pullrequest0066-0007 66 1/19/2024
0.8.4-pullrequest0066-0005 62 1/19/2024
0.8.4-pullrequest0066-0004 68 1/19/2024
0.8.4-pullrequest0066-0003 62 1/19/2024
0.8.3 76 1/19/2024
0.8.3-pullrequest0065-0003 64 1/19/2024
0.8.3-pullrequest0065-0002 64 1/19/2024
0.8.1 76 1/19/2024
0.8.1-pullrequest0063-0013 64 1/19/2024
0.8.1-pullrequest0063-0011 67 1/19/2024
0.7.16-pullrequest0063-0010 66 1/19/2024
0.7.15 85 1/18/2024
0.7.15-pullrequest0062-0002 69 1/18/2024
0.7.12 92 1/16/2024
0.7.12-pullrequest0059-0006 72 1/16/2024
0.7.10 86 1/15/2024
0.7.10-pullrequest0059-0007 67 1/16/2024
0.7.10-pullrequest0058-0004 61 1/15/2024
0.7.10-pullrequest0057-0002 68 1/15/2024
0.7.9 85 1/15/2024
0.7.9-pullrequest0057-0003 63 1/15/2024
0.7.7 82 1/15/2024
0.7.7-pullrequest0056-0003 78 1/15/2024
0.7.4 85 1/15/2024
0.7.4-pullrequest0055-0012 71 1/15/2024
0.7.4-pullrequest0055-0011 70 1/15/2024
0.7.4-pullrequest0055-0010 76 1/15/2024
0.7.4-pullrequest0055-0009 68 1/15/2024
0.7.4-pullrequest0055-0008 69 1/15/2024
0.7.4-pullrequest0055-0007 71 1/15/2024
0.7.4-pullrequest0054-0005 71 1/15/2024
0.7.4-pullrequest0053-0004 82 1/15/2024
0.7.4-pullrequest0052-0002 61 1/15/2024
0.7.2 80 1/15/2024
0.7.2-pullrequest0051-0013 72 1/15/2024
0.7.2-pullrequest0050-0010 63 1/15/2024
0.7.1 91 1/13/2024
0.7.0 89 1/13/2024
0.7.0-pullrequest0046-0079 82 1/13/2024
0.6.12 105 1/3/2024
0.6.12-pullrequest0045-0018 68 1/13/2024
0.6.12-pullrequest0042-0010 72 1/12/2024
0.6.12-pullrequest0041-0007 70 1/12/2024
0.6.12-pullrequest0039-0002 73 1/3/2024
0.6.10 103 12/22/2023
0.6.10-pullrequest0038-0007 87 1/2/2024
0.6.10-pullrequest0038-0006 75 1/2/2024
0.6.10-pullrequest0038-0005 76 1/2/2024
0.6.8 97 12/21/2023
0.6.6 92 12/18/2023
0.6.6-pullrequest0035-0007 81 12/21/2023
0.6.6-pullrequest0035-0006 82 12/21/2023
0.6.6-pullrequest0035-0005 77 12/21/2023
0.6.3 91 12/18/2023
0.6.3-pullrequest0034-0018 81 12/18/2023
0.6.1 83 12/15/2023
0.6.1-pullrequest0029-0008 79 12/15/2023
0.6.1-pullrequest0028-0006 85 12/15/2023
0.6.1-pullrequest0027-0004 64 12/15/2023
0.5.3 93 12/11/2023
0.5.3-pullrequest0025-0049 85 12/14/2023
0.5.3-pullrequest0025-0047 82 12/14/2023
0.5.3-pullrequest0025-0043 76 12/13/2023
0.5.3-pullrequest0022-0038 77 12/13/2023
0.5.1 89 12/7/2023
0.5.0 97 12/6/2023
0.4.3 102 12/4/2023
0.4.2 92 12/4/2023
0.4.1 101 12/4/2023
0.3.10 110 11/22/2023
0.3.10-pullrequest0022-0008 79 11/27/2023
0.3.10-pullrequest0021-0005 82 11/22/2023
0.3.9 88 11/20/2023
0.3.8 99 11/9/2023
0.3.8-pullrequest0020-0005 76 11/9/2023
0.3.6 89 11/9/2023
0.3.5 97 11/9/2023
0.3.4 90 11/8/2023
0.3.3 91 11/8/2023
0.3.1 94 11/8/2023
0.3.1-pullrequest0018-0004 83 11/8/2023
0.2.1 129 11/2/2023
0.2.1-pullrequest0017-0050 91 11/8/2023
0.2.1-pullrequest0016-0048 87 11/8/2023
0.2.1-pullrequest0015-0045 83 11/8/2023
0.2.1-pullrequest0014-0035 92 11/7/2023
0.2.1-pullrequest0013-0033 84 11/7/2023
0.2.1-pullrequest0012-0031 88 11/7/2023
0.2.1-pullrequest0011-0024 87 11/6/2023
0.2.1-pullrequest0010-0015 98 11/2/2023
0.2.1-pullrequest0009-0011 89 11/2/2023
0.2.1-pullrequest0008-0009 90 11/2/2023
0.2.1-pullrequest0007-0007 97 11/2/2023
0.2.1-pullrequest0006-0005 91 11/2/2023
0.2.1-pullrequest0005-0001 84 11/2/2023
0.1.0 117 10/27/2023
0.1.0-pullrequest0004-0024 91 11/1/2023
0.1.0-pullrequest0003-0022 92 11/1/2023
0.1.0-pullrequest0002-0019 90 11/1/2023
0.1.0-pullrequest0001-0017 93 11/1/2023
0.1.0-pullrequest0001-0010 95 10/30/2023

releasenotes.md