AICentral 0.18.4-pullrequest0133-0008

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

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

releasenotes.md