using System.Net.Http.Headers;
namespace AnchorCli.Providers;
///
/// Token extractor for Groq responses.
///
internal sealed class GroqTokenExtractor : ITokenExtractor
{
public string ProviderName => "Groq";
public (int inputTokens, int outputTokens)? ExtractTokens(HttpResponseHeaders headers, string? responseBody)
{
// Groq provides x-groq-tokens header (format: "n;,n;")
if (headers.TryGetValues("x-groq-tokens", out var values))
{
var tokenStr = values.FirstOrDefault();
if (!string.IsNullOrEmpty(tokenStr))
{
// Parse format: "n;123,n;45" where first is prompt, second is completion
var parts = tokenStr.Split(',');
if (parts.Length >= 2)
{
var inputPart = parts[0].Trim();
var outputPart = parts[1].Trim();
// Extract numbers after "n;"
if (inputPart.StartsWith("n;") && outputPart.StartsWith("n;"))
{
if (int.TryParse(inputPart[2..], out var input) &&
int.TryParse(outputPart[2..], out var output))
{
return (input, output);
}
}
}
}
}
// Fallback: try parsing from response body
if (!string.IsNullOrEmpty(responseBody))
{
// TODO: Parse usage from JSON body if headers aren't available
}
return null;
}
public int? ExtractLatency(HttpResponseHeaders headers)
{
if (headers.TryGetValues("x-groq-response-time", out var values))
{
if (int.TryParse(values.FirstOrDefault(), out var latency))
{
return latency;
}
}
return null;
}
}