open-index/open-npm huggingface dataset:
npm package: @inferwise/github-action
Description: GitHub Action for Inferwise — posts LLM cost diff comments on pull requests
Author: Peter Kim
Latest version: 1.0.0

# @inferwise/github-action

GitHub Action that scans your codebase for pay-as-you-go LLM API calls, posts a cost diff comment on pull requests, and enforces budget policies. Tracks per-token API costs — not flat-rate subscriptions like Cursor or Copilot.

## Usage

```yaml
name: Inferwise Cost Diff
on: [pull_request]

jobs:
  cost-diff:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      pull-requests: write
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - uses: inferwise/inferwise-action@v1
        with:
          github-token: ${{ secrets.GITHUB_TOKEN }}
```

## Inputs

| Input | Description | Required | Default |
|-------|-------------|----------|---------|
| `github-token` | GitHub token for posting PR comments and labels | Yes | `${{ github.token }}` |
| `base-ref` | Base git ref to compare against | No | PR base branch |
| `volume` | Requests/day for monthly cost projection | No | `1000` |
| `fail-on-increase` | Fail if monthly cost increases by more than this USD amount | No | — |
| `working-directory` | Directory to scan | No | `.` |

## Outputs

| Output | Description |
|--------|-------------|
| `net-monthly-delta` | Net monthly cost delta in USD (negative = savings) |
| `report` | Full cost diff report in markdown format |

## Budget Enforcement

The Action reads `inferwise.config.json` from your repo root for budget thresholds:

```json
{
  "budgets": {
    "warn": 2000,
    "block": 50000,
    "requireApproval": 10000,
    "approvers": ["platform-eng", "@infra-team"]
  }
}
```

**What happens at each threshold:**

| Threshold | Label | Action |
|-----------|-------|--------|
| `warn` | `cost-warning` (yellow) | Warning comment on PR |
| `requireApproval` | `cost-approval-required` (orange) | Requests review from `approvers` |
| `block` | `cost-blocked` (red) | Fails the check, blocks merge |

Budget thresholds are monthly cost increase in USD. The `block` default ($50,000) is deliberately high — it's an emergency brake for catastrophic changes, not routine increases.

You can also use the `fail-on-increase` input for a simpler threshold without config:

```yaml
- uses: inferwise/inferwise-action@v1
  with:
    github-token: ${{ secrets.GITHUB_TOKEN }}
    fail-on-increase: "500"
```

## Example PR Comment

```markdown
## Inferwise Cost Report

| File | Model | Change | Monthly Impact |
|------|-------|--------|----------------|
| `src/chat.ts` | claude-opus-4 -> claude-sonnet-4 | Modified | -$13,500/mo |
| `src/summarize.ts` | (new) gpt-4o | Added | +$2,400/mo |

**Net monthly impact: -$11,100/mo**
```

## Not Using GitHub?

The CLI works with any CI system. See the [main repo](https://github.com/inferwise/inferwise#ci-setup) for GitLab CI, Bitbucket Pipelines, and generic CI setup.

## License

Apache-2.0
npm package: @inferwise/pricing-db
Description: Maintained pricing database for LLM providers
Author: Peter Kim
Latest version: 1.0.0

# @inferwise/pricing-db

Maintained pricing database for LLM providers. Ships bundled JSON pricing for Anthropic, OpenAI, Google, xAI, and Perplexity models.

## Install

```bash
npm install @inferwise/pricing-db
```

## Usage

```typescript
import { getModel, calculateCost, getAllProviders } from "@inferwise/pricing-db";

const model = getModel("anthropic", "claude-sonnet-4-20250514");
const cost = calculateCost({ model, inputTokens: 1000, outputTokens: 500 });
console.log(`Cost: $${cost.toFixed(6)}`);
```

## API

### Pricing Queries

- `getAllProviders()` — List all supported providers
- `getAllModels()` — Get all models across all providers
- `getModel(provider, modelId)` — Look up a model by ID or alias
- `getProviderModels(provider)` — Get all models for a provider
- `calculateCost(params)` — Calculate USD cost for a request
- `getProviderMeta(provider)` — Get metadata (dates, source URL)
- `getPricingAgeInDays(provider)` — Days since last verification

### Capability-Based Model Selection

- `inferRequiredCapabilities(text)` — Infer required capabilities from a task description or prompt text. Returns capabilities like `"code"`, `"reasoning"`, `"general"`, `"creative"`, `"vision"`, `"search"`, `"audio"`.
- `getModelsByCapabilities(required, options?)` — Find models matching required capabilities, sorted by cost (cheapest first). Filter by provider, status, or max cost.
- `suggestAlternatives(modelId, provider, capabilities)` — Find cheaper models that match the same capabilities. Returns alternatives with savings percentage and reasoning.
- `suggestModelForTask(text, options?)` — End-to-end: infer capabilities from a task description, find the cheapest capable model, and return it with reasoning.

```typescript
import { suggestModelForTask, suggestAlternatives, inferRequiredCapabilities } from "@inferwise/pricing-db";

// Suggest the cheapest model for a task
const suggestion = suggestModelForTask("classify support tickets by category");
// → { model: gpt-4o-mini, inferredCapabilities: ["general"], reasoning: "..." }

// Find cheaper alternatives to an expensive model
const alts = suggestAlternatives("claude-opus-4-20250514", "anthropic", ["code"]);
// → [{ model: claude-sonnet-4, savingsPercent: 80, reasoning: "..." }]
```

## Pricing Data

JSON files in `providers/` are validated against `schema.json` in CI. Community contributions welcome — see [CONTRIBUTING.md](../../CONTRIBUTING.md).

## License

Apache 2.0