Apps on Azure Blog
6 MIN READ
Calculating Chargebacks for Business Units/Projects Utilizing a Shared Azure OpenAI Instance
# API Management service-specific details
$apimServiceName = "apim-hello-world"
$resourceGroupName = "myResourceGroup"
# Create logger
$context = New-AzApiManagementContext -ResourceGroupName $resourceGroupName -ServiceName $apimServiceName
New-AzApiManagementLogger -Context $context -LoggerId "OpenAiChargeBackLogger" -Name "ApimEventHub" -ConnectionString "Endpoint=sb://<EventHubsNamespace>.servicebus.windows.net/;SharedAccessKeyName=<KeyName>;SharedAccessKey=<key>" -Description "Event hub logger with connection string"
<outbound>
<choose>
<when condition="@(context.Response.StatusCode == 200)">
<log-to-eventhub logger-id="TokenUsageLogger">@{
var responseBody = context.Response.Body?.As<JObject>(true);
return new JObject(
new JProperty("Timestamp", DateTime.UtcNow.ToString()),
new JProperty("ApiOperation", responseBody["object"].ToString()),
new JProperty("AppKey", context.Request.Headers.GetValueOrDefault("Ocp-Apim-Subscription-Key",string.Empty)),
new JProperty("PromptTokens", responseBody["usage"]["prompt_tokens"].ToString()),
new JProperty("CompletionTokens", responseBody["usage"]["completion_tokens"].ToString()),
new JProperty("TotalTokens", responseBody["usage"]["total_tokens"].ToString())
).ToString();
}</log-to-eventhub>
</when>
</choose>
<base />
</outbound>
[Function("TokenUsageFunction")]
public async Task Run([EventHubTrigger("%EventHubName%", Connection = "EventHubConnection")] string[] openAiTokenResponse)
{
//Eventhub Messages arrive as an array
foreach (var tokenData in openAiTokenResponse)
{
try
{
_logger.LogInformation($"Azure OpenAI Tokens Data Received: {tokenData}");
var OpenAiToken = JsonSerializer.Deserialize<OpenAiToken>(tokenData);
if (OpenAiToken == null)
{
_logger.LogError($"Invalid OpenAi Api Token Response Received. Skipping.");
continue;
}
_telemetryClient.TrackEvent("Azure OpenAI Tokens", OpenAiToken.ToDictionary());
}
catch (Exception e)
{
_logger.LogError($"Error occured when processing TokenData: {tokenData}", e.Message);
}
}
}
customEvents
| where name contains "Azure OpenAI Tokens"
| extend tokenData = parse_json(customDimensions)
| where tokenData.AppKey contains "your-client-key"
| project
Timestamp = tokenData.Timestamp,
Stream = tokenData.Stream,
ApiOperation = tokenData.ApiOperation,
PromptTokens = tokenData.PromptTokens,
CompletionTokens = tokenData.CompletionTokens,
TotalTokens = tokenData.TotalTokens
- .
Updated Feb 15, 2024
Version 11.0Apps on Azure Blog
Follow this blog board to get notified when there's new activity
