Skip to content

adds FPT AI Factory as provider - #3735

Open
littlebeanhp wants to merge 4 commits into
anomalyco:devfrom
littlebeanhp:add-fpt-ai-factory-provider
Open

adds FPT AI Factory as provider#3735
littlebeanhp wants to merge 4 commits into
anomalyco:devfrom
littlebeanhp:add-fpt-ai-factory-provider

Conversation

@littlebeanhp

@littlebeanhp littlebeanhp commented Jul 25, 2026

Copy link
Copy Markdown

Adds FPT AI Factory as an OpenAI-compatible provider (https://mkp-api.fptcloud.com/v1), serving 8 LLM/VLM models on NVIDIA GB300 nodes. Claude and GPT models are coming in an upcoming release.

Sources

All values are captured from FPT's live first-party catalog endpoint (public, no auth): GET https://mkp-api.fptcloud.com/v1/models.

  • Model IDsdata[].id (exact-cased, e.g. gpt-oss-120b, DeepSeek-V4-Flash).
  • [cost]data[].pricing.promptinput, data[].pricing.completionoutput (per-token USD ×10⁶ = per-1M).
  • [limit].contextdata[].top_provider.context_length (the cap FPT actually serves; several are lower than the lab base, e.g. Llama-3.3-70B 128k→32k, DeepSeek-V4-Flash 1M→200k).
  • [limit].output — FPT reports top_provider.max_completion_tokens == context_length for every model, which is a gateway "no separate output cap" signal rather than a real max-output. Following peer relays (tinfoil, aki-io, nearai), output is left to inherit the lab base_model's true max-output rather than copy the context window. Overrides are kept only where FPT genuinely differs: GLM-5.2 (128k output, below the 1M context and below base) and DeepSeek-V4-Flash (output bounded by its 200k FPT context).

Provider metadata: API keys at https://marketplace.fptcloud.com/ · docs at https://ai-docs.fptcloud.com/.

Reasoning options

reasoning_options = [] is intentional and evidence-backed: FPT's data[].supported_parameters for every served model is exactly ["temperature","top_p","max_tokens","tools","tool_choice","response_format","stream"] — it exposes no reasoning, reasoning_effort, thinking, or budget_tokens parameter. The gateway forwards no caller-facing reasoning control, so [] is affirmative (not "untested default").

Changes since first review

  • Removed GLM-5.1 — FPT's live catalog no longer lists it (only GLM-5.2 is served).
  • Corrected limit.output on the 6 models that had copied the context window; they now inherit the lab base max-output.
  • Provider logo.svg is a square (viewBox ~1:1) icon mark using currentColor, no fixed size or hardcoded colors.

Validated with bun run validate.

@github-actions

Copy link
Copy Markdown
Contributor

Action items

  • [critical] [violation] providers/fpt-ai-factory/provider.toml:1 - Check: New providers must ship a compliant providers/<id>/logo.svg. Why: This PR adds provider fpt-ai-factory with no logo.svg. Missing logos are a hard merge blocker. Action: Add providers/fpt-ai-factory/logo.svg using currentColor, no fixed size or hardcoded colors, preferably a square viewBox.
  • [medium] [possible mistake] providers/fpt-ai-factory/models/gpt-oss-120b.toml:10 - Check: limit.output should be the provider max completion tokens, not a copy of context. Why: Eight of nine models set output equal to context (e.g. gpt-oss 128_000, gemma 262_000, Qwen 262_144, Llama 32_000), while base metadata uses much smaller outputs (32_768, 65_536, 4_096). That pattern usually means max-output was filled with the context window. Action: Verify each model’s max output from FPT docs/API and correct limit.output (and any wrong limit.context) accordingly.
  • [low] [possible mistake] providers/fpt-ai-factory/models/DeepSeek-V4-Flash.toml:5 - Check: Data-changing PRs should cite first-party pricing/limit sources. Why: All nine models introduce costs and limit overrides with no PR-body mapping to FPT pricing or model docs, so the figures cannot be reviewed. Action: Add direct FPT pricing/docs links in the PR body and state which cost and limit fields each source supports.

@github-actions

Copy link
Copy Markdown
Contributor

Action items

  • [medium] [possible mistake] providers/fpt-ai-factory/logo.svg:1 - Check: New-provider logo should work as a small square mark (currentColor, no fixed size/hardcoded color; prefer square viewBox). Why: The SVG is a full “FPT AI FACTORY” wordmark with viewBox="0 0 1536.61 222.32" (~7:1). The site renders provider logos in a 1rem × 1rem box, so this will scale down to a thin unreadable smear. Action: Replace with the icon/mark only and a square viewBox (e.g. cropped around the left glyph), still using currentColor and no fixed width/height or hardcoded colors.
  • [low] [possible mistake] providers/fpt-ai-factory/models/DeepSeek-V4-Flash.toml:5 - Check: Data-changing PRs should cite first-party pricing/docs/API sources mapped to claims. Why: All nine models introduce provider-specific cost and limit values (several set output equal to context, and several diverge sharply from the linked base_model limits, e.g. Qwen/Gemma/gpt-oss max output), but the PR body only describes the provider and validation—no pricing page, model catalog, or API reference. Action: Add PR-body citations (what each URL supports) for model IDs, USD pricing, and context/output limits; adjust any values that the sources do not support.

@littlebeanhp
littlebeanhp force-pushed the add-fpt-ai-factory-provider branch from 8992189 to 2cb5baf Compare July 25, 2026 04:54
@github-actions

Copy link
Copy Markdown
Contributor

Action items

  • [medium] [possible mistake] providers/fpt-ai-factory/models/gpt-oss-120b.toml:9 - Check: Provider-specific limit values should reflect this provider’s real context/max-output caps, not placeholders. Why: Nearly every model sets limit.output equal to limit.context, often far above the inherited base max output (e.g. openai/gpt-oss-120b 32_768→128_000; google/gemma-4-31b-it 32_768→262_000; meta/llama-3.3-70b-instruct 4_096→32_000; alibaba/qwen3.6-27b 65_536→262_144). Several also shrink context without evidence (DeepSeek-V4-Flash 1M→200k, Llama-3.3-70B-Instruct 128k→32k, GLM-5.1 200k→128k). That pattern usually means guessed caps rather than documented FPT limits. Action: Verify each model’s context and max output against FPT model/API docs; correct the values, or remove [limit] overrides so accurate base limits are inherited where FPT does not differ.
  • [low] [possible mistake] providers/fpt-ai-factory/provider.toml:1 - Check: Data-changing PRs should cite first-party sources mapped to claims. Why: The PR introduces a full provider catalog (all costs plus custom limits) with only a generic docs homepage and no PR-body citations that state what supports each price or limit. Those values cannot be reviewed from the diff alone. Action: Add PR citations (pricing page, model list, or API reference) and note which claim each URL supports—costs and any non-inherited limits at minimum.

@github-actions

github-actions Bot commented Aug 3, 2026

Copy link
Copy Markdown
Contributor

Action items

  • [high] [violation] providers/fpt-ai-factory/models/DeepSeek-V4-Flash.toml:2 - Check: On multi-model relays, reasoning_options = [] means affirmative no caller control, not uncertainty; baseline is lab + same-surface peers. Why: FPT is an OpenAI-compatible multi-lab gateway. DeepSeek first-party uses toggle + effort high/max, and established relays expose controls. The PR only cites the models catalog for pricing/limits, so empty options look like an untested default. Action: Replace [] with lab/peer-aligned options (typically toggle + ["high","max"] with a leading wire comment), or keep [] only with host docs/live proof that FPT exposes no reasoning control.
  • [high] [violation] providers/fpt-ai-factory/models/GLM-5.1.toml:2 - Check: Relay reasoning_options must follow lab/peer controls for the model. Why: Lab/first-party Zhipu/Z.ai entries use toggle for GLM-5.1; empty options on this relay are not justified by the PR evidence. Action: Set reasoning_options to match the host (baseline toggle + leading wire comment), or document that FPT has no on/off control.
  • [high] [violation] providers/fpt-ai-factory/models/GLM-5.2.toml:2 - Check: Relay reasoning baseline for GLM-5.2. Why: Zhipu/Z.ai first-party use effort high/max (not empty). Action: Author that effort set if FPT accepts reasoning_effort, or prove no control before keeping [].
  • [high] [violation] providers/fpt-ai-factory/models/Qwen3.6-27B.toml:2 - Check: Relay reasoning baseline for Qwen3.6-27B. Why: Alibaba first-party uses toggle + budget_tokens; OpenRouter peer uses toggle. Empty options conflict with that baseline unless FPT truly has no control. Action: Prefer peer-aligned toggle (add budget_tokens only if this host has a real thinking budget field); do not leave [] from uncertainty.
  • [high] [violation] providers/fpt-ai-factory/models/gemma-4-26B-A4B-it.toml:2 - Check: Relay reasoning baseline for Gemma 4 IT. Why: Google first-party and peers (e.g. OpenRouter) use toggle for these reasoners. Action: Set toggle with a leading wire comment if FPT forwards on/off, or evidence no control before []. Apply the same fix to gemma-4-31B-it.toml.
  • [high] [violation] providers/fpt-ai-factory/models/gpt-oss-120b.toml:2 - Check: Relay reasoning baseline for GPT-OSS. Why: Established same-surface peers (OpenRouter, Groq, etc.) use effort low/medium/high for gpt-oss-120b/20b; empty options are not the peer baseline. Action: Set reasoning_options = [{ type = "effort", values = ["low", "medium", "high"] }] if FPT accepts reasoning_effort, or prove no control. Apply the same fix to gpt-oss-20b.toml.

- Remove GLM-5.1 (not served by FPT's live /v1/models catalog; only GLM-5.2 is)
- Inherit real base-model max-output instead of copying context into limit.output
  (FPT reports max_completion_tokens == context_length as a no-cap signal),
  matching peer relays (tinfoil, aki-io, nearai)
- Keep limits where FPT genuinely differs (DeepSeek-V4-Flash 200k ctx, GLM-5.2 128k out)
- reasoning_options = [] retained: FPT's supported_parameters expose no reasoning/effort control

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
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.

1 participant