Skip to content

feat(provider): add built-in LLMTR gateway provider - #10

Open
knowhycodata wants to merge 3 commits into
s0ld13rr:mainfrom
knowhycodata:feat/llmtr-provider
Open

feat(provider): add built-in LLMTR gateway provider#10
knowhycodata wants to merge 3 commits into
s0ld13rr:mainfrom
knowhycodata:feat/llmtr-provider

Conversation

@knowhycodata

@knowhycodata knowhycodata commented Aug 21, 2026

Copy link
Copy Markdown

Closes #9

What

Adds LLMTR — a Turkey-hosted, OpenAI-compatible AI gateway (200+ models, global + Turkey-hosted with data-residency guarantee) — as a built-in provider. It plugs in like the other gateway providers (openrouter/nvidia/zenmux): an @ai-sdk/openai-compatible provider at https://llmtr.com/v1 whose bearer key is resolved from a new llmtr integration.

Changes

  • packages/core/src/plugin/provider/llmtr.ts — new provider plugin:
    • Injects the llmtr provider into the catalog (@ai-sdk/openai-compatible, url https://llmtr.com/v1, branding headers).
    • Registers an llmtr integration with API-key + env (LLMTR_API_KEY) auth methods.
    • Discovers the model catalog live from the public /v1/models endpoint (OpenRouter-style schema): converts per-token pricing → per-1M cost, maps modalities, tool support (supported_parameters), and context/output limits.
    • Best-effort, forked fetch (never blocks registration) with a curated offline seed of Turkey-hosted flagship models.
    • LLMTR_BASE_URL overrides the endpoint; LLMTR_SKIP_REMOTE_MODELS=1 disables the live fetch (used by the test).
  • packages/core/src/plugin/provider.ts — register LLMTRPlugin in ProviderPlugins.
  • packages/core/test/plugin/provider-llmtr.test.ts — hermetic tests: registration, provider api/headers, integration key+env methods, seed model pricing conversion & tool detection.
  • README.md — LLMTR configuration section.

Usage

pentestcode auth login    # pick "LLMTR", paste API key   (or export LLMTR_API_KEY=...)
{ "provider": { "llmtr": { "model": "openai/gpt-5.5" } } }

Verification

  • tsgo --noEmit (core) — clean.
  • bun test test/plugin/217 pass / 0 fail (incl. 4 new).

knowhycodata and others added 3 commits August 21, 2026 18:10
LLMTR (https://llmtr.com) is a Turkey-hosted, OpenAI-compatible AI gateway
fronting 200+ models (global providers + Turkey-hosted models with a
data-residency guarantee) behind a single endpoint.

- New `llmtr` provider plugin injects an `@ai-sdk/openai-compatible` provider
  into the catalog (url https://llmtr.com/v1), mirroring the openrouter/nvidia/
  zenmux gateway pattern. Bearer key resolves from the `llmtr` integration.
- Registers an `llmtr` integration with API-key + env (`LLMTR_API_KEY`) auth.
- Discovers the model catalog live from the public `/v1/models` endpoint
  (OpenRouter-style schema), converting per-token pricing to per-1M cost and
  mapping modalities/tool support/limits. Curated offline seed of Turkey-hosted
  flagships keeps the provider usable without network. `LLMTR_BASE_URL` overrides
  the endpoint; `LLMTR_SKIP_REMOTE_MODELS=1` disables the live fetch.
- Adds hermetic test coverage and a README section.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
LLMTR models (gemma-4, qwen3, muse-glimmer) expose thinking as an on/off
toggle (`reasoning: true`, or a `:think` model-id suffix), not OpenAI-style
graded reasoning_effort. An active effort variant — or one carried over from
another model — sent `reasoning_effort` and LLMTR rejected the whole request.

Rewrite the outgoing request body for the LLMTR provider so any graded
reasoning_effort becomes `reasoning: true` (an explicit off/none/minimal/
disabled keeps thinking off, and an existing reasoning flag is preserved),
matching what LLMTR accepts. Add rewriteLLMTRReasoningBody plus unit tests.
Seed the GLM 5.x family (5.3, 5.2, 5.1, 5) and the DeepSeek family (V4 Pro,
V4 Flash, Chat, R1) — strong tool-use / reasoning models better suited to
security work than the existing Turkey-hosted seeds. Metadata comes from the
live LLMTR catalog; the forked live fetch still wins on id collisions so
pricing stays current.

These upstreams expose different thinking controls, so make the reasoning
normalization per-model instead of blanket: classify each model as
effort/boolean/none from its advertised parameters (in a dependency-free
module to avoid a plugin-registry import cycle), and only rewrite an outgoing
reasoning_effort for on/off ("boolean") or no-reasoning ("none") models.
Graded-effort models (GLM 5.2/5.3, proxied OpenAI, ...) keep their native
reasoning_effort untouched. Add classifier and seed-catalog tests.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add built-in LLMTR (Turkey-hosted, OpenAI-compatible) gateway provider

1 participant