Conversation
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Repository: juspay/neurolink/.coderabbit.yaml Review profile: CHILL Plan: Advanced Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
✅ Single Commit Policy - COMPLIANTStatus: Policy requirements met • 1 commit • Valid format • Ready for merge 📊 View validation details📝 Commit Details
✅ Validation Results
🤖 Automated validation by NeuroLink Single Commit Enforcement |
Documentation Validation Results🚀 Documentation validation passed!
📦 Build artifact uploaded successfully. Ready for deployment preview. Commit: |
Tara-ag
left a comment
There was a problem hiding this comment.
FriendliAI catalog onboarding review — 3 inline findings (2 MAJOR, 1 MINOR) on src/lib/providers/catalog/friendli.json; overall sound work (capability flags probed on the wire, honest negatives, routing case added to the alias suite, codegen regenerated, public API extended additively).
Review — NEEDS_WORK (data-quality follow-ups, not structural)Solid, well-evidenced onboarding: every capability flag is wire-probed on the default model, the tools+schema exclusivity is correctly handled by the generic Findings
Verified clean
Graph-based impactChanged files map to zero modified functions/classes; the single affected flow is the catalog E2E suite's Once the |
Tara-ag
left a comment
There was a problem hiding this comment.
FriendliAI catalog onboarding review — NEEDS_WORK: 3 inline findings (2 MAJOR, 1 MINOR) on src/lib/providers/catalog/friendli.json. Overall sound (capability flags probed on wire, honest negatives, routing case added, codegen regenerated, public API extended additively), but the addedInPR placeholder and the output-token ceiling need correcting before merge.
ef91238 to
257e073
Compare
Review — APPROVE (recurring: all three prior NEEDS_WORK findings are resolved)The prior review (Tara-ag) raised three data-quality findings. All three are fixed in the current branch head Prior findings → status
Fresh findings this passNone at CRITICAL/MAJOR. The remaining items are observations, not blockers.
Verified clean this pass
Ready to merge. What was checked and found cleanSchema (zod) conformance, codegen drift (none, 16 providers), live-matrix wiring, error-rule semantics in |
Tara-ag
left a comment
There was a problem hiding this comment.
APPROVE — recurring review. All three prior NEEDS_WORK findings (addedInPR placeholder, 1M output-token ceiling, broad 404 pattern) are resolved in 257e0737…. Additive-only SDK surface keeps backward compatibility intact; codegen regenerated; error-rule narrowing locked in by a regression test. Verified clean; no new findings of blocker severity.
257e073 to
4bccb4d
Compare
Tara-ag
left a comment
There was a problem hiding this comment.
APPROVE — recurring review, re-confirmed on the current head 4bccb4da…. All three prior NEEDS_WORK findings (addedInPR placeholder, 1M output-token ceiling, broad 404 pattern) remain resolved; the tools+schema exclusivity is handled by the generic retry (no quirk), the SDK surface is extended additively (Rule 5), codegen is consistent, and the error-rule narrowing is locked in by a regression test. Verified clean; no findings of blocker severity.
Live acceptance run — SDK and CLI, real vendorThe body's "Numbers are read, not estimated" section describes live probes; this is the output. Run from this PR's worktree at head The stream leg failed on the first attempt and I am not going to present that as a pass. It was an upstream 429, so I re-ran the stream leg alone rather than assume: Transient vendor rate limiting, not a defect in this integration — but worth recording, because a nightly sweep against Friendli should expect it. The error is classified correctly ( All four surfaces pass: |
4bccb4d to
b1215cc
Compare
Review — APPROVE (recurring pass, 2026-09-12)Recurring review of the current head Prior findings → status (all resolved)
Verified clean this pass
Findings this passNone at CRITICAL/MAJOR/MINOR worth an inline comment. The knowledge-graph Ready to merge. |
b1215cc to
fb203df
Compare
c9fb8c9 to
6c2595e
Compare
fb203df to
5374c68
Compare
9c2f0c5 to
ca731b0
Compare
5374c68 to
80f2af9
Compare
ca731b0 to
d7d0816
Compare
80f2af9 to
91ea950
Compare
d7d0816 to
1f1297a
Compare
Adds src/lib/providers/catalog/friendli.json and regenerates the catalog codegen outputs. Every capability flag is backed by a live wire probe against https://api.friendli.ai/serverless/v1, not by vendor documentation. Probed on zai-org/GLM-5.3 (the declared default, and the only roster id capability-probed end to end): tools real tool_call, finish_reason=tool_calls toolsWithStreaming 9 tool_calls deltas mid-SSE streaming 200, 62 events, terminal [DONE] structuredOutput json_object 200 structuredOutputWithTools FALSE - HTTP 422, "the 'response_format' field cannot be set when tools are specified" vision FALSE - HTTP 422, "does not support image/video" array message content accepted, so no messageContentFormat quirk The tools-plus-schema rejection is a genuine vendor exclusivity of the same class NeuroLink already handles for Groq. Friendli's 422 body matches isToolsSchemaConflictError()'s response_format-near-tool pattern, so the existing generic retry covers it and no provider-specific quirk was added. The first probe run is deliberately not the source of these flags: a 2s cadence tripped Friendli's rate limit, 12 of 16 cases returned 429, and the probe reports any non-200 as a capability rejection - it would have declared array content unsupported, which is false. The flags come from a re-run paced at 25s plus targeted single-call re-probes. Context window, output ceiling and pricing are read from the authenticated roster response (context_length 1048576, max_completion_tokens 1048576, per-token pricing scaled to per-MTok), not estimated. The other six roster ids are verified to exist by id only and say so in their descriptions rather than carrying invented numbers. FRIENDLI_API_KEY is wired into the nightly live matrix, and the catalog alias suite gains a friendli routing case (41 -> 42 cases). The break-one-assertion ritual was run on that case: deliberately broken it reports a failure and exits non-zero, restored it passes. Rebased onto the corrected feat/novita-catalog tip (d7d0816) after that branch's own rebuild. Only this PR's hand-written files were reapplied (friendli.json, the live-matrix workflow entry, and the catalog alias test case) and every derived file was regenerated fresh via codegen:catalog and docs:api rather than hand-merged, so there is nothing to hand-resolve. Source diff against the new base: 3 files, +231, and zero deletions.
91ea950 to
1dac727
Compare
Summary
Onboards FriendliAI as a tier-2 catalog provider: one new
src/lib/providers/catalog/friendli.jsonplus the regenerated codegen outputs.Every capability flag is backed by a live wire probe, not by vendor documentation. Probed on
zai-org/GLM-5.3, the declared default and the only roster id capability-probed end to end:tools: truetool_call,finish_reason=tool_callstoolsWithStreaming: truetool_callsdeltas mid-SSEstreaming: true[DONE]structuredOutput: truejson_object200structuredOutputWithTools: **false**response_formatfield cannot be set when tools are specified"messageContentFormatquirkThe first probe run is deliberately not the source of these flags
A 2-second cadence tripped Friendli's rate limit and 12 of 16 cases returned 429. The probe reports any non-200 as a capability rejection, so taken at face value that run would have declared array content unsupported — which is false. The flags come from a re-run paced at 25s plus targeted single-call re-probes. Friendli's limits are tight enough that any future live check needs 20s+ pacing and retry.
Tools + schema exclusivity
The 422 is a genuine vendor exclusivity of the same class NeuroLink already handles for Groq. Friendli's error body matches
isToolsSchemaConflictError()'s response_format-near-tool pattern, so the existing generic retry covers it — no provider-specific quirk code was added, only the honeststructuredOutputWithTools: false.Numbers are read, not estimated
Context window and pricing come from the authenticated roster response (
context_length1048576, per-token pricing scaled to per-MTok). The other six roster ids are verified to exist by id only, and their descriptions say exactly that rather than carrying invented figures.Correction (2026-09-11): this paragraph previously said the output ceiling also came from the roster response, citing
max_completion_tokens1048576. That is not what ships.friendli.jsonsetsmaxOutputTokens/defaultMaxOutputTokensto 131072, taken from the vendor's model documentation page, and the model description in that file already explains why: the roster reportsmax_completion_tokensequal to the full context window, which is not the per-request output cap. The JSON was right; this sentence described the wrong source for it.Proof
Live, from
dist, with ≥20s pacing and zero 429s:generate— real usage (input 4229, output 3)stream— 42 chunkstool-call—get_timeinvoked with{tz: "Asia/Tokyo"}, one execution record with a duration, and the model's answer built from the tool's resultpnpm run checkpnpm run lintpnpm run buildtest:providers-mockedtest:provider-structuretest:openai-compat-catalogverify:provider-onboardingFRIENDLI_API_KEYis wired into the nightly live matrix.