AICentral 0.19.2

There is a newer version of this package available.
See the version list below for details.
dotnet add package AICentral --version 0.19.2                
NuGet\Install-Package AICentral -Version 0.19.2                
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" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add AICentral --version 0.19.2                
#r "nuget: AICentral, 0.19.2"                
#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.19.2

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

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

releasenotes.md