sniff-cli 0.1.1

An exhaustive LLM-backed slop finder for codebases
Documentation
pub(super) fn token_count_for_text(text: &str) -> usize {
    (text.len() as f64 / 4.0).ceil() as usize
}

pub(super) fn openai_usage(
    data: &serde_json::Value,
    prompt: &str,
    content: &str,
) -> (usize, usize) {
    let usage = data.get("usage");
    let in_t = usage
        .and_then(|u| u.get("prompt_tokens"))
        .and_then(|v| v.as_u64())
        .map(|v| v as usize)
        .unwrap_or_else(|| token_count_for_text(prompt));
    let out_t = usage
        .and_then(|u| u.get("completion_tokens"))
        .and_then(|v| v.as_u64())
        .map(|v| v as usize)
        .unwrap_or_else(|| token_count_for_text(content));
    (in_t, out_t)
}

pub(super) fn anthropic_usage(
    data: &serde_json::Value,
    prompt: &str,
    content: &str,
) -> (usize, usize) {
    let usage = data.get("usage");
    let in_t = usage
        .and_then(|u| u.get("input_tokens"))
        .and_then(|v| v.as_u64())
        .map(|v| v as usize)
        .unwrap_or_else(|| token_count_for_text(prompt));
    let out_t = usage
        .and_then(|u| u.get("output_tokens"))
        .and_then(|v| v.as_u64())
        .map(|v| v as usize)
        .unwrap_or_else(|| token_count_for_text(content));
    (in_t, out_t)
}