AICentral 0.17.0-pullrequest0123-0013

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-0013                
NuGet\Install-Package AICentral -Version 0.17.0-pullrequest0123-0013                
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-0013" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add AICentral --version 0.17.0-pullrequest0123-0013                
#r "nuget: AICentral, 0.17.0-pullrequest0123-0013"                
#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.17.0-pullrequest0123-0013&prerelease

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

releasenotes.md