@juspay/neurolink 13.4.8 → 13.4.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +2 -3
- package/docs-site/static/search-index.json +79 -79
- package/package.json +1 -1
|
@@ -965,7 +965,7 @@
|
|
|
965
965
|
{"objectID":"923ebd577e631768d0f77100cec9a4bc96ba595b27b97203f0fea84025726f59","title":"Contribution to Changelog","url":"/docs/community/changelog#contribution-to-changelog","content":"Found a bug or want to contribute? Here's how:\nReport Issues: GitHub Issues\nSubmit PRs: Contributing Guide\nDiscuss Features: GitHub Discussions\n\nAll contributions are automatically included in the changelog via our automated release process using semantic-release.","hierarchy":{"lvl0":"Community","lvl1":"Changelog","lvl2":"Contribution to Changelog","lvl3":""}},
|
|
966
966
|
{"objectID":"45a2bbe1e9f8410018490525cbe717674c5276e04cd26a1e90607943a6ee3462","title":"Historical Releases","url":"/docs/community/changelog#historical-releases","content":"For a complete history of all releases including detailed commit information, see:\n\nComplete CHANGELOG.md","hierarchy":{"lvl0":"Community","lvl1":"Changelog","lvl2":"Historical Releases","lvl3":""}},
|
|
967
967
|
{"objectID":"68d4399466b114a3628e88efe593a1506d0b406785ff6b27ae99e2493ca9c401","title":"Related Documentation","url":"/docs/community/changelog#related-documentation","content":"Installation Guide - Install the latest version\nQuick Start - Get up and running quickly\nMigration Guides - Upgrade from older versions\nBreaking Changes - Detailed breaking changes documentation is planned for a future release\n\nLast Updated: February 28, 2026\nCurrent Version: v9.14.0","hierarchy":{"lvl0":"Community","lvl1":"Changelog","lvl2":"Related Documentation","lvl3":""}},
|
|
968
|
-
{"objectID":"d8062a4693d3416edc0e9c88f92c9e53bddb3b6202eb49fcfe18fa651f8b1b00","title":"Contributor Covenant Code of Conduct","url":"/docs/community/code-of-conduct","content":"Contributor Covenant Code of Conduct\n\nOur Pledge\n\nWe as members, contributors, and leaders pledge to make participation in our\ncommunity a harassment-free experience for everyone, regardless of age, body\nsize, visible or invisible disability, ethnicity, sex characteristics, gender\nidentity and expression, level of experience, education, socio-economic status,\nnationality, personal appearance, race, religion, or sexual identity\nand orientation.\n\nWe pledge to act and interact in ways that contribute to an open, welcoming,\ndiverse, inclusive, and healthy community.\n\nOur Standards\n\nExamples of behavior that contributes to a positive environment for our\ncommunity include:\nDemonstrating empathy and kindness toward other people\nBeing respectful of differing opinions, viewpoints, and experiences\nGiving and gracefully accepting constructive feedback\nAccepting responsibility and apologizing to those affected by our mistakes,\n and learning from the experience\nFocusing on what is best not just for us as individuals, but for the\n overall community\n\nExamples of unacceptable behavior include:\nThe use of sexualized language or imagery, and sexual attention or\n advances of any kind\nTrolling, insulting or derogatory comments, and personal or political attacks\nPublic or private harassment\nPublishing others' private information, such as a physical or email\n address, without their explicit permission\nOther conduct which could reasonably be considered inappropriate in a\n professional setting\n\nEnforcement Responsibilities\n\nProject maintainers are responsible for clarifying and enforcing our standards of\nacceptable behavior and will take appropriate and fair corrective action in\nresponse to any behavior that they deem inappropriate, threatening, offensive,\nor harmful.\n\nProject maintainers have the right and responsibility to remove, edit, or reject\ncomments, commits, code, wiki edits, issues, and other contributions that are\nnot aligned to this Code of Conduct, and will communicate reasons for moderation\ndecisions when appropriate.\n\nScope\n\nThis Code of Conduct applies within all community spaces, and also applies when\nan individual is officially representing the community in public spaces.\nExamples of representing our community include using an official e-mail address,\nposting via an official social media account, or acting as an appointed\nrepresentative at an online or offline event.\n\nEnforcement\n\nInstances of abusive, harassing, or otherwise unacceptable behavior may be\nreported to the project team at support@juspay.in.\nAll complaints will be reviewed and investigated promptly and fairly.\n\nAll project maintainers are obligated to respect the privacy and security of the\nreporter of any incident.\n\nEnforcement Guidelines\n\nProject maintainers will follow these Community Impact Guidelines in determining\nthe consequences for any action they deem in violation of this Code of Conduct:\nCorrection\n\nCommunity Impact: Use of inappropriate language or other behavior deemed\nunprofessional or unwelcome in the community.\n\nConsequence: A private, written warning from project maintainers, providing\nclarity around the nature of the violation and an explanation of why the\nbehavior was inappropriate. A public apology may be requested.\nWarning\n\nCommunity Impact: A violation through a single incident or series\nof actions.\n\nConsequence: A warning with consequences for continued behavior. No\ninteraction with the people involved, including unsolicited interaction with\nthose enforcing the Code of Conduct, for a specified period of time. This\nincludes avoiding interactions in community spaces as well as external channels\nlike social media. Violating these terms may lead to a temporary or\npermanent ban.\nTemporary Ban\n\nCommunity Impact: A serious violation of community standards, including\nsustained inappropriate behavior.\n\nConsequence: A temporary ban from any sort of interaction or public\ncommunication with the community for a specified period of time. No public or\nprivate interaction with the people involved, including unsolicited interaction\nwith those enforcing the Code of Conduct, is allowed during this period.\nViolating these terms may lead to a permanent ban.\nPermanent Ban\n\nCommunity Impact: Demonstrating a pattern of violation of community\nstandards, including sustained inappropriate behavior, harassment of an\nindividual, or aggression toward or disparagement of classes of individuals.\n\nConsequence: A permanent ban from any sort of public interaction within\nthe community.\n\nAttribution\n\nThis Code of Conduct is adapted from the [Contributor Covenant][homepage],\nversion 2.0, available at\nhttps://www.contributor-covenant.org/version/2/0/
|
|
968
|
+
{"objectID":"d8062a4693d3416edc0e9c88f92c9e53bddb3b6202eb49fcfe18fa651f8b1b00","title":"Contributor Covenant Code of Conduct","url":"/docs/community/code-of-conduct","content":"Contributor Covenant Code of Conduct\n\nOur Pledge\n\nWe as members, contributors, and leaders pledge to make participation in our\ncommunity a harassment-free experience for everyone, regardless of age, body\nsize, visible or invisible disability, ethnicity, sex characteristics, gender\nidentity and expression, level of experience, education, socio-economic status,\nnationality, personal appearance, race, religion, or sexual identity\nand orientation.\n\nWe pledge to act and interact in ways that contribute to an open, welcoming,\ndiverse, inclusive, and healthy community.\n\nOur Standards\n\nExamples of behavior that contributes to a positive environment for our\ncommunity include:\nDemonstrating empathy and kindness toward other people\nBeing respectful of differing opinions, viewpoints, and experiences\nGiving and gracefully accepting constructive feedback\nAccepting responsibility and apologizing to those affected by our mistakes,\n and learning from the experience\nFocusing on what is best not just for us as individuals, but for the\n overall community\n\nExamples of unacceptable behavior include:\nThe use of sexualized language or imagery, and sexual attention or\n advances of any kind\nTrolling, insulting or derogatory comments, and personal or political attacks\nPublic or private harassment\nPublishing others' private information, such as a physical or email\n address, without their explicit permission\nOther conduct which could reasonably be considered inappropriate in a\n professional setting\n\nEnforcement Responsibilities\n\nProject maintainers are responsible for clarifying and enforcing our standards of\nacceptable behavior and will take appropriate and fair corrective action in\nresponse to any behavior that they deem inappropriate, threatening, offensive,\nor harmful.\n\nProject maintainers have the right and responsibility to remove, edit, or reject\ncomments, commits, code, wiki edits, issues, and other contributions that are\nnot aligned to this Code of Conduct, and will communicate reasons for moderation\ndecisions when appropriate.\n\nScope\n\nThis Code of Conduct applies within all community spaces, and also applies when\nan individual is officially representing the community in public spaces.\nExamples of representing our community include using an official e-mail address,\nposting via an official social media account, or acting as an appointed\nrepresentative at an online or offline event.\n\nEnforcement\n\nInstances of abusive, harassing, or otherwise unacceptable behavior may be\nreported to the project team at support@juspay.in.\nAll complaints will be reviewed and investigated promptly and fairly.\n\nAll project maintainers are obligated to respect the privacy and security of the\nreporter of any incident.\n\nEnforcement Guidelines\n\nProject maintainers will follow these Community Impact Guidelines in determining\nthe consequences for any action they deem in violation of this Code of Conduct:\nCorrection\n\nCommunity Impact: Use of inappropriate language or other behavior deemed\nunprofessional or unwelcome in the community.\n\nConsequence: A private, written warning from project maintainers, providing\nclarity around the nature of the violation and an explanation of why the\nbehavior was inappropriate. A public apology may be requested.\nWarning\n\nCommunity Impact: A violation through a single incident or series\nof actions.\n\nConsequence: A warning with consequences for continued behavior. No\ninteraction with the people involved, including unsolicited interaction with\nthose enforcing the Code of Conduct, for a specified period of time. This\nincludes avoiding interactions in community spaces as well as external channels\nlike social media. Violating these terms may lead to a temporary or\npermanent ban.\nTemporary Ban\n\nCommunity Impact: A serious violation of community standards, including\nsustained inappropriate behavior.\n\nConsequence: A temporary ban from any sort of interaction or public\ncommunication with the community for a specified period of time. No public or\nprivate interaction with the people involved, including unsolicited interaction\nwith those enforcing the Code of Conduct, is allowed during this period.\nViolating these terms may lead to a permanent ban.\nPermanent Ban\n\nCommunity Impact: Demonstrating a pattern of violation of community\nstandards, including sustained inappropriate behavior, harassment of an\nindividual, or aggression toward or disparagement of classes of individuals.\n\nConsequence: A permanent ban from any sort of public interaction within\nthe community.\n\nAttribution\n\nThis Code of Conduct is adapted from the [Contributor Covenant][homepage],\nversion 2.0, available at\nhttps://www.contributor-covenant.org/version/2/0/code_of_conduct.html.\n\nCommunity Impact Guidelines were inspired by Mozilla's code of conduct\nenforcement ladder.\n\n[homepage]: https://www.contributor-covenant.org\n\nFor answers to common questions about this code of conduct, see the FAQ at\nhttps://www.contributor-covenant.org/faq. Translations are available at\nhttps","hierarchy":{"lvl0":"Community","lvl1":"Contributor Covenant Code of Conduct","lvl2":"","lvl3":""}},
|
|
969
969
|
{"objectID":"7cb50259bf99de43fef298990559b4ea7259fdec26a1e0a1d506b53ad323d577","title":"Our Pledge","url":"/docs/community/code-of-conduct#our-pledge","content":"We as members, contributors, and leaders pledge to make participation in our\ncommunity a harassment-free experience for everyone, regardless of age, body\nsize, visible or invisible disability, ethnicity, sex characteristics, gender\nidentity and expression, level of experience, education, socio-economic status,\nnationality, personal appearance, race, religion, or sexual identity\nand orientation.\n\nWe pledge to act and interact in ways that contribute to an open, welcoming,\ndiverse, inclusive, and healthy community.","hierarchy":{"lvl0":"Community","lvl1":"Contributor Covenant Code of Conduct","lvl2":"Our Pledge","lvl3":""}},
|
|
970
970
|
{"objectID":"579e74e98d390b706021c0d954cd2ed2675443622e00611827d6171d089e5424","title":"Our Standards","url":"/docs/community/code-of-conduct#our-standards","content":"Examples of behavior that contributes to a positive environment for our\ncommunity include:\nDemonstrating empathy and kindness toward other people\nBeing respectful of differing opinions, viewpoints, and experiences\nGiving and gracefully accepting constructive feedback\nAccepting responsibility and apologizing to those affected by our mistakes,\n and learning from the experience\nFocusing on what is best not just for us as individuals, but for the\n overall community\n\nExamples of unacceptable behavior include:\nThe use of sexualized language or imagery, and sexual attention or\n advances of any kind\nTrolling, insulting or derogatory comments, and personal or political attacks\nPublic or private harassment\nPublishing others' private information, such as a physical or email\n address, without their explicit permission\nOther conduct which could reasonably be considered inappropriate in a\n professional setting","hierarchy":{"lvl0":"Community","lvl1":"Contributor Covenant Code of Conduct","lvl2":"Our Standards","lvl3":""}},
|
|
971
971
|
{"objectID":"0bd1982a85b793b0fcc70dc6bdb2879d1d79fd0c21b6561d74f2c3b577ab3c84","title":"Enforcement Responsibilities","url":"/docs/community/code-of-conduct#enforcement-responsibilities","content":"Project maintainers are responsible for clarifying and enforcing our standards of\nacceptable behavior and will take appropriate and fair corrective action in\nresponse to any behavior that they deem inappropriate, threatening, offensive,\nor harmful.\n\nProject maintainers have the right and responsibility to remove, edit, or reject\ncomments, commits, code, wiki edits, issues, and other contributions that are\nnot aligned to this Code of Conduct, and will communicate reasons for moderation\ndecisions when appropriate.","hierarchy":{"lvl0":"Community","lvl1":"Contributor Covenant Code of Conduct","lvl2":"Enforcement Responsibilities","lvl3":""}},
|
|
@@ -976,7 +976,7 @@
|
|
|
976
976
|
{"objectID":"d1af1022f9272568f228b456f1c37df0db5e4c5f3cded0d8590cb4ee6691ff39","title":"2. Warning","url":"/docs/community/code-of-conduct#2-warning","content":"Community Impact: A violation through a single incident or series\nof actions.\n\nConsequence: A warning with consequences for continued behavior. No\ninteraction with the people involved, including unsolicited interaction with\nthose enforcing the Code of Conduct, for a specified period of time. This\nincludes avoiding interactions in community spaces as well as external channels\nlike social media. Violating these terms may lead to a temporary or\npermanent ban.","hierarchy":{"lvl0":"Community","lvl1":"Contributor Covenant Code of Conduct","lvl2":"2. Warning","lvl3":""}},
|
|
977
977
|
{"objectID":"06f5df2cdfb856a21ec330064592c68d0d71c4126190de9c2c2780a8e1c2a2a3","title":"3. Temporary Ban","url":"/docs/community/code-of-conduct#3-temporary-ban","content":"Community Impact: A serious violation of community standards, including\nsustained inappropriate behavior.\n\nConsequence: A temporary ban from any sort of interaction or public\ncommunication with the community for a specified period of time. No public or\nprivate interaction with the people involved, including unsolicited interaction\nwith those enforcing the Code of Conduct, is allowed during this period.\nViolating these terms may lead to a permanent ban.","hierarchy":{"lvl0":"Community","lvl1":"Contributor Covenant Code of Conduct","lvl2":"3. Temporary Ban","lvl3":""}},
|
|
978
978
|
{"objectID":"dd2444cb2763295df9ec833a07c84817879e44015a71e57383070932c87cfc59","title":"4. Permanent Ban","url":"/docs/community/code-of-conduct#4-permanent-ban","content":"Community Impact: Demonstrating a pattern of violation of community\nstandards, including sustained inappropriate behavior, harassment of an\nindividual, or aggression toward or disparagement of classes of individuals.\n\nConsequence: A permanent ban from any sort of public interaction within\nthe community.","hierarchy":{"lvl0":"Community","lvl1":"Contributor Covenant Code of Conduct","lvl2":"4. Permanent Ban","lvl3":""}},
|
|
979
|
-
{"objectID":"199e8cb0bad0c34236be774d5557d9ad5cc7450820f092c1dcd4568838728bbd","title":"Attribution","url":"/docs/community/code-of-conduct#attribution","content":"This Code of Conduct is adapted from the [Contributor Covenant][homepage],\nversion 2.0, available at\nhttps://www.contributor-covenant.org/version/2/0/
|
|
979
|
+
{"objectID":"199e8cb0bad0c34236be774d5557d9ad5cc7450820f092c1dcd4568838728bbd","title":"Attribution","url":"/docs/community/code-of-conduct#attribution","content":"This Code of Conduct is adapted from the [Contributor Covenant][homepage],\nversion 2.0, available at\nhttps://www.contributor-covenant.org/version/2/0/code_of_conduct.html.\n\nCommunity Impact Guidelines were inspired by Mozilla's code of conduct\nenforcement ladder.\n\n[homepage]: https://www.contributor-covenant.org\n\nFor answers to common questions about this code of conduct, see the FAQ at\nhttps://www.contributor-covenant.org/faq. Translations are available at\nhttps://www.contributor-covenant.org/translations.","hierarchy":{"lvl0":"Community","lvl1":"Contributor Covenant Code of Conduct","lvl2":"Attribution","lvl3":""}},
|
|
980
980
|
{"objectID":"4d0f19155a615ac38f3b8f9af7ed5f22300529852b7e020d8d86aee192e61842","title":"🤝 Contributing to NeuroLink","url":"/docs/community/contributing","content":"🤝 Contributing to NeuroLink\n\nThank you for your interest in contributing to NeuroLink! We welcome contributions from the community and are excited to work with you.\n\n📋 Table of Contents\nCode of Conduct\nHow to Contribute\nDevelopment Setup\nProject Structure\nCoding Standards\nTesting Guidelines\nPull Request Process\nDocumentation\nCommunity\n\nCode of Conduct\n\nPlease read and follow our Code of Conduct. We are committed to providing a welcoming and inclusive environment for all contributors.\n\nHow to Contribute\n\nReporting Issues\nCheck existing issues - Before creating a new issue, check if it already exists\nUse issue templates - Use the appropriate template for bugs, features, or questions\nProvide details - Include reproduction steps, environment details, and expected behavior\n\nSuggesting Features\nOpen a discussion - Start with a GitHub Discussion to gather feedback\nExplain the use case - Help us understand why this feature would be valuable\nConsider alternatives - What workarounds exist today?\n\nContributing Code\nFork the repository - Create your own fork of the project\nCreate a feature branch - git checkout -b feature/your-feature-name\nMake your changes - Follow our coding standards\nWrite tests - Ensure your changes are tested\nSubmit a pull request - Follow our PR template\n\nDevelopment Setup\n\nPrerequisites\nNode.js 18+ and pnpm 9+\nGit\nAt least one AI provider API key (OpenAI, Google AI, etc.)\n\nLocal Development\n\nRunning Examples\n\nProject Structure\n\nKey Components\nBaseProvider - Abstract base class all providers inherit from\nProviderRegistry - Central registry for provider management\nCompatibilityFactory - Handles provider creation and compatibility\nMCP Integration - Built-in and external tool support\n\nCoding Standards\n\nTypeScript Style Guide\n\nBest Practices\nUse the factory pattern - All providers should extend BaseProvider\nType everything - No implicit any types\nHandle errors gracefully - Use try-catch and provide meaningful errors\nDocument public APIs - Use JSDoc comments for all public methods\nKeep functions small - Single responsibility principle\nWrite tests first - TDD approach encouraged\n\nNaming Conventions\nFiles: kebab-case.ts (e.g., baseProvider.ts)\nClasses: PascalCase (e.g., OpenAIProvider)\nInterfaces: PascalCase (e.g., GenerateOptions)\nFunctions: camelCase (e.g., createProvider)\nConstants: UPPER_SNAKE_CASE (e.g., DEFAULT_TIMEOUT)\n\nTesting Guidelines\n\nTest Structure\n\nTesting Requirements\nUnit tests - For all public methods\nIntegration tests - For provider interactions\nMock external calls - Don't hit real APIs in tests\nTest edge cases - Empty inputs, timeouts, errors\nMaintain coverage - Aim for >80% code coverage\n\nRunning Tests\n\nPull Request Process\n\nBefore Submitting\nUpdate documentation - Keep docs in sync with code changes\nAdd tests - New features need tests\nRun checks - pnpm run lint && pnpm run check && pnpm test\nUpdate CHANGELOG - Add your changes under \"Unreleased\"\n\nPR Template\n\nReview Process\nAutomated checks - CI/CD must pass\nCode review - At least one maintainer approval\nDocumentation review - Docs team review if needed\nTesting - Manual testing for significant changes\n\nDocumentation\n\nDocumentation Standards\nKeep it current - Update docs with code changes\nShow examples - Every feature needs examples\nExplain why - Not just what, but why\nTest code snippets - Ensure examples actually work\nUpdate the matrix - Mark coverage in docs/tracking/FEATURE-DOC-MATRIX.md when new user-facing work lands.\n\nDocumentation Structure\nAPI Reference - Generated from TypeScript types\nGuides - Step-by-step tutorials\nExamples - Working code samples\nArchitecture - System design documentation\n\nWriting Documentation\n\ntypescript\n// Clear, working example\nconst result = await provider.generate({\ninput: { text: \"Example prompt\" },\ntemperature: 0.7\n});\n\\`\n\nCommunity\n\nGetting Help\nGitHub Discussions - Ask questions and share ideas\nIssues - Report bugs and request features\nDiscord - Community chat is planned for the future\n\nWays to Contribute\nCode - Fix bugs, add features\nDocumentation - Improve guides and examples\nTesting - Add test coverage\nDesign - UI/UX improvements\nCommunity - Help others, answer questions\n\nRecognition\n\nWe value all contributions! Contributors are:\nListed in our Contributors page\nMentioned in release notes\nGiven credit in the changelog\n\n🎯 Current Focus Areas\n\nWe're particularly interested in contributions for:\nProvider Support - Adding new AI providers\nTool Integration - MCP external server activation\nPerformance - Optimization and benchmarking\nDocumentation - Tutorials and guides\nTesting - Increasing test coverage\n\n📝 License\n\nBy contributing to NeuroLink, you agree that your contributions will be licensed under the MIT License.\n\nThank you for contributing to NeuroLink! 🚀","hierarchy":{"lvl0":"Community","lvl1":"🤝 Contributing to NeuroLink","lvl2":"","lvl3":""}},
|
|
981
981
|
{"objectID":"9f75fc63f22e80f54f050a05f8d9d0b426662561016342a74af7c01c97b66d9f","title":"🤝 Contributing to NeuroLink","url":"/docs/community/contributing#-contributing-to-neurolink","content":"Thank you for your interest in contributing to NeuroLink! We welcome contributions from the community and are excited to work with you.","hierarchy":{"lvl0":"Community","lvl1":"🤝 Contributing to NeuroLink","lvl2":"🤝 Contributing to NeuroLink","lvl3":""}},
|
|
982
982
|
{"objectID":"c035f4c47a24ca8aff8191aef9c5ab93641822c6aee0927feb6432ce4212c990","title":"📋 Table of Contents","url":"/docs/community/contributing#-table-of-contents","content":"Code of Conduct\nHow to Contribute\nDevelopment Setup\nProject Structure\nCoding Standards\nTesting Guidelines\nPull Request Process\nDocumentation\nCommunity","hierarchy":{"lvl0":"Community","lvl1":"🤝 Contributing to NeuroLink","lvl2":"📋 Table of Contents","lvl3":""}},
|
|
@@ -2334,7 +2334,7 @@
|
|
|
2334
2334
|
{"objectID":"2a0bba905241315a6d948d614e823b3bae586f85ae7088f699d585f0fa818cc1","title":"Routing Fields","url":"/docs/features/claude-proxy-config-reference#routing-fields","content":"| Field | Type | Default | Required | Description |\n| ----------------------------------------------------------- | ------------------------------------ | -------------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| strategy | \"round-robin\" \\| \"fill-first\" | (none) | No | Account selection strategy. round-robin rotates across accounts. fill-first uses one account until exhausted.","hierarchy":{"lvl0":"Features","lvl1":"Claude Proxy Configuration Reference","lvl2":"Routing Fields","lvl3":""}},
|
|
2335
2335
|
{"objectID":"67869c44bf604306f5e7d4f118c84d1357aba914cd78f1c63e338a61afd446cd","title":"ModelMapping Fields","url":"/docs/features/claude-proxy-config-reference#modelmapping-fields","content":"| Field | Type | Default | Required | Description |\n| ---------- | -------- | ------------- | -------- | ------------------------------------------------ |\n| from | string | \"\" | Yes | Incoming model name (what Claude Code requests). |\n| to | string | \"\" | Yes | Target model name at the destination provider. |\n| provider | string | \"anthropic\" | No | Target provider to route to. |","hierarchy":{"lvl0":"Features","lvl1":"Claude Proxy Configuration Reference","lvl2":"ModelMapping Fields","lvl3":""}},
|
|
2336
2336
|
{"objectID":"52dc93bd2fb61c11e711465bcce7ab2445d21dd11f8601a791c1800577cd68bc","title":"FallbackEntry Fields","url":"/docs/features/claude-proxy-config-reference#fallbackentry-fields","content":"| Field | Type | Default | Required | Description |\n| ---------- | -------- | ------- | -------- | -------------------------------------------- |\n| provider | string | \"\" | Yes | Provider name (e.g., google-ai, openai). |\n| model | string | \"\" | Yes | Model to use at that provider. |","hierarchy":{"lvl0":"Features","lvl1":"Claude Proxy Configuration Reference","lvl2":"FallbackEntry Fields","lvl3":""}},
|
|
2337
|
-
{"objectID":"d9b034b736d0076ac98c315f8227b06382eafb161166a630a350add28c818ee6","title":"Cloaking Fields","url":"/docs/features/claude-proxy-config-reference#cloaking-fields","content":"| Field | Type | Default | Description |\n| -------------------------------- | ------------------------------- | ----------------------------- | ------------------------------------------------------------------------------------------------------------ |\n| mode | \"auto\" \\| \"always\" \\| \"never\" | \"auto\" | auto applies cloaking only to OAuth accounts. always applies to all. never disables all plugins. |\n| plugins.headerScrubber | boolean | false | Strip proxy-revealing headers (x-forwarded-for, via, sec-ch-\\*, etc.). |\n| plugins.sessionIdentity | boolean | false | Generate consistent
|
|
2337
|
+
{"objectID":"d9b034b736d0076ac98c315f8227b06382eafb161166a630a350add28c818ee6","title":"Cloaking Fields","url":"/docs/features/claude-proxy-config-reference#cloaking-fields","content":"| Field | Type | Default | Description |\n| -------------------------------- | ------------------------------- | ----------------------------- | ------------------------------------------------------------------------------------------------------------ |\n| mode | \"auto\" \\| \"always\" \\| \"never\" | \"auto\" | auto applies cloaking only to OAuth accounts. always applies to all. never disables all plugins. |\n| plugins.headerScrubber | boolean | false | Strip proxy-revealing headers (x-forwarded-for, via, sec-ch-\\*, etc.). |\n| plugins.sessionIdentity | boolean | false | Generate consistent user_id/session_id per account with 1-hour TTL. |\n| plugins.systemPromptInjector | boolean | false | Inject Claude Code session context (IDE metadata, timestamps) into system prompt. OAuth accounts only. |\n| plugins.wordObfuscator.enabled | boolean | false | Insert zero-width characters into sensitive words to defeat string matching. |\n| plugins.wordObfuscator.words | string[] | [\"proxy\", \"neurolink\", ...] | Words to obfuscate. Defaults include: proxy, neurolink, load balancer, round-robin, failover, multi-account. |\n| plugins.tlsFingerprint.enabled | boolean | false | TLS fingerprint mimicry. Currently a stub/placeholder (no-op). |","hierarchy":{"lvl0":"Features","lvl1":"Claude Proxy Configuration Reference","lvl2":"Cloaking Fields","lvl3":""}},
|
|
2338
2338
|
{"objectID":"f1d10e310dd6cdd2e1ec76e8fb228e48f343eec841772b564c22357e7ea8f64f","title":"Validation Rules","url":"/docs/features/claude-proxy-config-reference#validation-rules","content":"The config loader validates the following:\naccounts must be present and be a non-array object.\nEach provider key in accounts must map to an array.\nEach account must have a non-empty string apiKey.\nIf version is present, it must be a number.\nrouting.account-allowlist must be an array of non-empty strings when present. An explicit null counts as present and is rejected, whichever spelling carries it, including when the other spelling holds an array.\nrouting.quota-routing must be a boolean when present.\nrouting.auto-fallback must be a boolean when present.\nrouting.max-inflight-per-account must be an integer from 1 through 20 when present.\nrouting.session-soft-limit must be a number in (0, 1] when present.\nrouting.session-reset-tolerance-ms must be a positive integer when present.\nrouting.use-overage must be auto, always, or never (case-insensitive)\n when present.\nrouting.account-ranking must be expiry-first or headroom-first when\n present.\nrouting.prefer-primary must be a boolean when present.\nrouting.session-affinity must be a boolean when present.\nrouting.session-affinity-idle-ttl-ms must be an integer from 60000 through\n 86400000 when present.\nrouting.spill-inflight must be an integer from 0 through 100 when present.\nFor those five routing policy keys, an explicit null counts as present\n and is rejected, whichever spelling (kebab-case or camelCase) carries it.\nPlaintext API keys (not using ${ENV_VAR} references) trigger a warning.\n\nAn absent default config is optional. An existing config that cannot be read or\nvalidated fails proxy startup; it is never ignored in favor of unrestricted\nrouting. A value that fails any check above rejects the whole config, never\njust that key: at startup the proxy does not start, and on a hot reload the\nlast-known-good generation stays active.","hierarchy":{"lvl0":"Features","lvl1":"Claude Proxy Configuration Reference","lvl2":"Validation Rules","lvl3":""}},
|
|
2339
2339
|
{"objectID":"c8450374b1fc8e0a0f5fb47d3bef0cab242c75e17bfebe6e943ef17b22c10227","title":"Account Routing Policies","url":"/docs/features/claude-proxy-config-reference#account-routing-policies","content":"The five keys above (account-ranking, prefer-primary, session-affinity,\nsession-affinity-idle-ttl-ms, spill-inflight) all default to today's exact\nbehavior — expiry-first ranking, no affinity, no primary preference, no\nspill — and are validated and hot-reloaded through the same runtime config\nsnapshot as every other routing key.\n\nstrategy: round-robin ignores all five keys. They apply only under\nfill-first with more than one enabled account.\n\nNEUROLINK_PROXY_QUOTA_ROUTING=off disables quota-based ranking, but\nsession-affinity, prefer-primary and spill-inflight still apply.\nTurning off quota routing removes the expiry/headroom ordering step, so\naccount-ranking has no effect; it does not disable sticky sessions, the\nprimary preference or spill, which then work on the configured account\norder.\n\nPrecedence. After unusable accounts are removed, the order a request\ntries is:\nthe session's bound account, when session-affinity is on and that\n account is usable and not session-saturated;\nthe configured primary-account, when prefer-primary is on and it is\n usable and not session-saturated;\nthe remaining accounts in account-ranking order.\n\nSpill only changes which account is tried first, and only for requests\nwithout an active session-affinity binding — it never re-orders or moves a\nrequest that is already bound to an account. Its target must be usable and\nnot session-saturated, like every step above; when no account under the\nthreshold qualifies, nothing spills.\n\nBinding. A served request binds its session to the Anthropic account\nthat served it. The existing binding is kept only when that request never\ntried the bound account and the bound account is still usable and not\nsession-saturated — a request that overflowed the bound account's\nmax-inflight-per-account cap onto another account keeps the session on its\nwarm prompt cache.","hierarchy":{"lvl0":"Features","lvl1":"Claude Proxy Configuration Reference","lvl2":"Account Routing Policies","lvl3":""}},
|
|
2340
2340
|
{"objectID":"2b5d2865be217ed908e64f9d07acbe019108e95f210f6c14f031cf8cb99ece6f","title":"3. Environment Variables","url":"/docs/features/claude-proxy-config-reference#3-environment-variables","content":"| Variable | Purpose | Used By |\n| -------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------ |\n| ANTHROPIC_API_KEY | Anthropic API key. Used as a fallback credential when no OAuth accounts are found. | Proxy routes, Anthropic provider |\n| ANTHROPIC_OAUTH_TOKEN | OAuth access token for Anthropic (alternative to stored tokens). | Anthropic provider, providerConfig |\n| CLAUDE_OAUTH_TOKEN | Alias for ANTHROPIC_OAUTH_TOKEN. Checked as a fallback.","hierarchy":{"lvl0":"Features","lvl1":"Claude Proxy Configuration Reference","lvl2":"3. Environment Variables","lvl3":""}},
|
|
@@ -2383,7 +2383,7 @@
|
|
|
2383
2383
|
{"objectID":"38195842c5496bd96f1d9499bad4994873c7fa80fae9fd3e16d921ed9e1b61cf","title":"Reconciliation limits","url":"/docs/features/claude-proxy-observability#reconciliation-limits","content":"The analyzer deduplicates lifecycle (processInstanceId, sequence) identities\nbefore aggregating outcomes and latency. Conflicting duplicate payloads remain\nvisible in conflictingLifecycleDuplicates, and affected requests are excluded\nfrom lifecycle latency samples. Repeated (requestId, attempt)\nrecords are merged, preserving failure evidence. Legacy :codex-fallback IDs are\njoined to their parents.\n\nfinalOutcomeConflicts counts lifecycle/final disagreements. Final request\nfailures override an old lifecycle success; a lifecycle success with no final\nrecord becomes unknown. acceptedWithoutFinal and terminalWithoutFinal\nreport missing evidence, which can include active requests, interrupted workers,\nretention, or storage loss. They are not automatically provider failures.\n\nToken counting (POST /v1/messages/count_tokens) and model discovery\n(GET /v1/models, GET /backend-api/codex/models) have HTTP terminal outcomes\nwithout model final records. The analyzer identifies these as\nlifecycle.auxiliaryRequests and excludes them from missing-final counts. Their\ntransport errors and unsuccessful HTTP statuses remain failures. They do not\ncontribute model successes to requests.success.\n\nThe time filter admits events in the selected window and follows already\naccepted requests through later retained lifecycle, attempt, and final records.\nConsequently, a request started near the window boundary can finish after\n--until. The observed ranges show that retained follow-up. Sequence gaps only\nmeasure gaps across the selected sequence span for each worker, including\nintervening retained events belonging to requests outside the time window.\nExcluding those requests from the outcome cohort does not create a sequence gap.\nThe audit cannot identify missing\nprefixes, suffixes, or an entire missing worker. Stream completeWindow fields\nindicate temporal coverage, not proof of lossless collection.","hierarchy":{"lvl0":"Features","lvl1":"Claude Proxy Observability","lvl2":"Reconciliation limits","lvl3":""}},
|
|
2384
2384
|
{"objectID":"ebc663e44e2e0d2080e420031334a33db0eedee17a33d89554d7e9ae403958fb","title":"Worker incidents and host pressure","url":"/docs/features/claude-proxy-observability#worker-incidents-and-host-pressure","content":"The launchd supervisor writes proxy-supervisor-YYYY-MM-DD.jsonl independently\nof serving workers. The bounded recent-event ring is a status summary; the journal\nretains activation, failures, rejected connections, and actual worker exits past\nthat ring. Exit records include the worker process-instance ID learned at readiness,\nPID, generation, version, exit code and signal. Supervisor actions are recorded\nseparately from observed exits. Startup permits up to 120 seconds for a candidate;\nan existing worker keeps serving while its replacement starts.\n\nlifecycle.unconfirmedAtWorkerExit joins durable admissions without transport\nterminals to actual worker exits by process-instance ID. This establishes missing\ncompletion evidence at exit, not proof that the provider failed or that the client\nreceived nothing. A final provider record alone cannot prove client delivery.\nOlder workers that do not report an instance ID remain unclassified.\n\nEvery ten seconds, enabled journals record runtime_sample: actual sample duration,\nprocess CPU as a percentage of one core, RSS, heap, event-loop delay p99/max, host\none-minute load average, and available CPU parallelism. Delayed sampling includes\nthe extended interval. proxy analyze reports maxima in runtime; host load is\nnever interpreted as a request count or a provider rate limit. Compare these\nsamples with admission, first-output and attempt timings in the same interval.\n\nSocket offer and commit each get their own deadline. An offer timeout cancels an\nuncommitted connection. A commit timeout closes only that connection, whose dispatch\nis uncertain, and requests a replacement before draining existing streams. Neither\npath kills a serving worker because one handoff failed, and neither replays the\nsocket. Replacements remain bounded by the existing candidate/draining limits and\none-minute stall cooldown. Actual worker exits use the normal recovery backoff.","hierarchy":{"lvl0":"Features","lvl1":"Claude Proxy Observability","lvl2":"Worker incidents and host pressure","lvl3":""}},
|
|
2385
2385
|
{"objectID":"d78a0bcca7749d3da52465ba8ea217bb57b1683cbd185d2c3b709e561095bf0d","title":"Bounded body capture","url":"/docs/features/claude-proxy-observability#bounded-body-capture","content":"Bulk body serialization, redaction, hashing, compression and artifact writes run\nin a separate worker thread. The queue admits at most 64 captures and 32 MiB of\nestimated clone data with a 20-second deadline. OTel-only mode permits one entry\nto use the 32 MiB pool; file mode retains a 16 MiB per-entry ceiling. The estimate\naccounts for UTF-16 strings and object traversal without serializing on the\nserving thread. Oversized or unsupported values are explicitly rejected.\nRedacted bodies retain an 8 MiB OTel-only cap or a 1 MiB file cap. Stream captures\nretain at most 1 MiB per observer within a separate 16 MiB aggregate byte pool;\nindexes flag truncated prefixes. Borrowed traffic excludes body capture. See\nOTel logging for delivery and supervisor verification.\n\nobservability.requestLogs.bodyCapture reconciles:\n\nDebug indexes include bodyWriteFailed, captureError, captureQueueWaitMs, and\ncaptureProcessingMs. Queue rejection and worker errors never fall back to bulk\nserialization on the serving thread. A worker crash can leave an orphan artifact;\nit does not turn a missing index into a successful capture. Regular retention\ncleans both indexed and orphan artifacts.\n\nOTLP body chunks remain compatible with existing dashboards. Chunk construction\nuses byte slices, emission yields between groups, and exporter batches are limited\nto 64 records (approximately 1 MiB of body text). OTLP remains a separate,\nbest-effort export; local append counters do not certify backend delivery.\n\nNative Codex final errors retain the final attempt's transport code and account.\nOnly explicit pre-connect transport failures may rotate automatically. EPIPE,\nsocket resets and generic timeouts can occur after POST dispatch, so they are\nterminal instead of silently replaying potentially executed work.\n\nRequest-log shutdown uses a 30-second flush budget, covering the body worker's\n20-second deadline plus index and export publication.","hierarchy":{"lvl0":"Features","lvl1":"Claude Proxy Observability","lvl2":"Bounded body capture","lvl3":""}},
|
|
2386
|
-
{"objectID":"a4650f77dcc0df3372f435345943b8ab69ac56be0f39aacda034f5452a4adb85","title":"Claude Proxy Troubleshooting","url":"/docs/features/claude-proxy-troubleshooting","content":"Claude Proxy Troubleshooting\n\nThis guide covers every issue encountered during development and real-world usage of the NeuroLink Claude proxy. For general proxy documentation, see Claude Proxy.\n\nCommon Issues\n\"API Error: 400
|
|
2386
|
+
{"objectID":"a4650f77dcc0df3372f435345943b8ab69ac56be0f39aacda034f5452a4adb85","title":"Claude Proxy Troubleshooting","url":"/docs/features/claude-proxy-troubleshooting","content":"Claude Proxy Troubleshooting\n\nThis guide covers every issue encountered during development and real-world usage of the NeuroLink Claude proxy. For general proxy documentation, see Claude Proxy.\n\nCommon Issues\n\"API Error: 400 invalid_request_error: Error\"\n\nCause: An OAuth token was sent without the required cloaking headers (billing header, user_id in metadata). This only happens when making bare curl requests through the proxy -- Claude Code includes its own cloaking automatically.\n\nFix: Always connect to the proxy via Claude Code, not bare HTTP clients. The proxy's cloaking pipeline is designed to complement Claude Code's own request format. If you are testing with curl, the proxy will still work for the /health, /status, and /v1/models endpoints, but /v1/messages requires a properly formed Claude Code request or a valid API key account.\n\"credit balance is too low\"\n\nCause: The ANTHROPIC_API_KEY environment variable points to an account with no credits, and that key was included in the account rotation pool.\n\nFix: The proxy now only uses API keys as a fallback when no OAuth accounts exist. If you have OAuth accounts authenticated via neurolink auth login, remove ANTHROPIC_API_KEY from your environment to prevent it from being picked up:\n\nAccount priority order: TokenStore compound keys > legacy credentials file > ANTHROPIC_API_KEY. The environment variable is only used when no other accounts exist.\n\"context_management: Extra inputs are not permitted\"\n\nCause: Missing beta headers in the upstream request to Anthropic, specifically prompt-caching-scope-2026-01-05. Without this header, Anthropic rejects fields that Claude Code includes in its requests.\n\nFix: The proxy now forwards Claude Code's exact beta headers to Anthropic. Ensure you are running the latest build:\n\nIf the error persists, verify the beta headers in debug logs:\nFirst request takes 30 seconds\n\nCause: MCP server initialization. If ~/.mcp-config.json or the project's .mcp.json references external MCP servers (filesystem, github-copilot, etc.), NeuroLink tries to connect to all of them on the first request.\n\nFix: The proxy sets NEUROLINK_SKIP_MCP=true internally to skip MCP initialization. If you are still experiencing slow first requests:\nVerify you are starting the proxy via neurolink proxy start (not running NeuroLink directly).\nCheck that the NEUROLINK_SKIP_MCP environment variable is not being overridden.\nIf using a custom config, ensure it does not reference MCP servers.\n\"OAuth token has expired\"\n\nCause: The token expired and the auto-refresh mechanism did not trigger in time. This can happen if the proxy was stopped and restarted after a long period, or if the system clock drifted.\n\nFix: Re-authenticate:\n\nThe proxy has two layers of token refresh to prevent this:\nPre-request check (1-hour buffer) -- refreshes before each request if the token expires soon.\n401 auto-refresh + retry -- on a 401 response, refreshes and retries up to 5 times.\n\nIf this error occurs repeatedly, check that your system clock is accurate (date should match real time).\n\"accounts disabled until re-authentication\"\n\nCause: All accounts have been permanently disabled because their OAuth refresh tokens are expired or invalid. This happens after 15 consecutive refresh failures on an account. The proxy persists this state to disk via tokenStore.markDisabled(), so it survives restarts.\n\nFix: Re-authenticate the affected accounts:\n\nAfter re-authentication, the proxy detects the changed token material and automatically re-enables the account (clears permanentlyDisabled, resets consecutiveRefreshFailures).\nToken refresh rate limited\n\nCause: Too many refresh attempts in a short period. Anthropic's OAuth server rate-limits token refresh requests.\n\nFix: Wait 30 seconds, then re-login:\n\nIf you see this error, it likely means multiple proxy instances are running or a manual refresh was triggered concurrently.\n\nCheck for duplicate instances:\nClaude Code not connecting to proxy\n\nSymptoms: Claude Code makes requests directly to api.anthropic.com instead of through the proxy.\n\nDiagnosis:\n\nFix:\nRun neurolink proxy setup which auto-configures ~/.claude/settings.json.\nOr manually add the env var to ~/.claude/settings.json:\nRestart Claude Code after setting the env var. Claude Code reads settings on startup, not dynamically.\nStreaming response shows as raw bytes\n\nCause: An earlier version of the Hono handler re-encoded the ReadableStream as a byte array instead of passing it through as a raw SSE stream.\n\nFix: This is fixed in the current version. The proxy returns a raw Response object for streaming requests, preserving the SSE format. If you encounter this, rebuild:\nTools not working / \"0 chunks\"\n\nCause: An earlier architecture had NeuroLink merging 68+ MCP tools with the client's tools, causing tool name conflicts and prefixing issues. Tool definitions were being modified or dropped in the merge.\n\nFix: This is fixed in the current version. The proxy uses passthrough mode for Claude-to-Clau","hierarchy":{"lvl0":"Features","lvl1":"Claude Proxy Troubleshooting","lvl2":"","lvl3":""}},
|
|
2387
2387
|
{"objectID":"033caff42fb1704738d15f8036b26f372eeb57c0dfc53dac54d5cead4ada2ac2","title":"Claude Proxy Troubleshooting","url":"/docs/features/claude-proxy-troubleshooting#claude-proxy-troubleshooting","content":"This guide covers every issue encountered during development and real-world usage of the NeuroLink Claude proxy. For general proxy documentation, see Claude Proxy.","hierarchy":{"lvl0":"Features","lvl1":"Claude Proxy Troubleshooting","lvl2":"Claude Proxy Troubleshooting","lvl3":""}},
|
|
2388
2388
|
{"objectID":"3e0acb7305380d01b1c40037c50c5bf6dd24c3b79fdc25fb702d990eec0623d5","title":"1. \"API Error: 400 invalid_request_error: Error\"","url":"/docs/features/claude-proxy-troubleshooting#1-api-error-400-invalid_request_error-error","content":"Cause: An OAuth token was sent without the required cloaking headers (billing header, user_id in metadata). This only happens when making bare curl requests through the proxy -- Claude Code includes its own cloaking automatically.\n\nFix: Always connect to the proxy via Claude Code, not bare HTTP clients. The proxy's cloaking pipeline is designed to complement Claude Code's own request format. If you are testing with curl, the proxy will still work for the /health, /status, and /v1/models endpoints, but /v1/messages requires a properly formed Claude Code request or a valid API key account.","hierarchy":{"lvl0":"Features","lvl1":"Claude Proxy Troubleshooting","lvl2":"1. \"API Error: 400 invalid_request_error: Error\"","lvl3":""}},
|
|
2389
2389
|
{"objectID":"667f1b74af1aa911e4eb847ddd22dca4520dd44fde894ef18bf44a9024a4d06f","title":"2. \"credit balance is too low\"","url":"/docs/features/claude-proxy-troubleshooting#2-credit-balance-is-too-low","content":"Cause: The ANTHROPIC_API_KEY environment variable points to an account with no credits, and that key was included in the account rotation pool.\n\nFix: The proxy now only uses API keys as a fallback when no OAuth accounts exist. If you have OAuth accounts authenticated via neurolink auth login, remove ANTHROPIC_API_KEY from your environment to prevent it from being picked up:\n\nAccount priority order: TokenStore compound keys > legacy credentials file > ANTHROPIC_API_KEY. The environment variable is only used when no other accounts exist.","hierarchy":{"lvl0":"Features","lvl1":"Claude Proxy Troubleshooting","lvl2":"2. \"credit balance is too low\"","lvl3":""}},
|
|
@@ -2411,7 +2411,7 @@
|
|
|
2411
2411
|
{"objectID":"04a3520bc9da0d8211f014416da63d0404426d07301f501741e7565ea9f55858","title":"Token lifecycle","url":"/docs/features/claude-proxy-troubleshooting#token-lifecycle","content":"Token lifecycle","hierarchy":{"lvl0":"Features","lvl1":"Claude Proxy Troubleshooting","lvl2":"Token lifecycle","lvl3":""}},
|
|
2412
2412
|
{"objectID":"44f9341fa01636183996f6966d6a698da57d335712c3aa020dfbf6673c3e1e77","title":"Account selection (fill-first)","url":"/docs/features/claude-proxy-troubleshooting#account-selection-fill-first","content":"Account selection (fill-first)","hierarchy":{"lvl0":"Features","lvl1":"Claude Proxy Troubleshooting","lvl2":"Account selection (fill-first)","lvl3":""}},
|
|
2413
2413
|
{"objectID":"cf94af0f8a5039f675a3063e0b06af390d10d2cc678e8ee4b6c3d242cef7dc6a","title":"Exponential backoff progression","url":"/docs/features/claude-proxy-troubleshooting#exponential-backoff-progression","content":"For repeated 429 errors on the same account:\n\n| Backoff Level | Cooldown Duration |\n| ------------- | ----------------- |\n| 0 | 1 second |\n| 1 | 2 seconds |\n| 2 | 4 seconds |\n| 3 | 8 seconds |\n| 4 | 16 seconds |\n| 5 | 32 seconds |\n| ... | ... |\n| Max | 10 minutes (cap) |\n\nThe backoff level resets to zero on a successful request.","hierarchy":{"lvl0":"Features","lvl1":"Claude Proxy Troubleshooting","lvl2":"Exponential backoff progression","lvl3":""}},
|
|
2414
|
-
{"objectID":"464f36b0cd0b7d8db6ad2b4b9618a37434a8270960aa06b24ef167febc873c33","title":"Quick Reference","url":"/docs/features/claude-proxy-troubleshooting#quick-reference","content":"| Symptom | Likely Cause | First Step |\n| ------------------------------- | ------------------------------------ | ----------------------------------------------- |\n| 400
|
|
2414
|
+
{"objectID":"464f36b0cd0b7d8db6ad2b4b9618a37434a8270960aa06b24ef167febc873c33","title":"Quick Reference","url":"/docs/features/claude-proxy-troubleshooting#quick-reference","content":"| Symptom | Likely Cause | First Step |\n| ------------------------------- | ------------------------------------ | ----------------------------------------------- |\n| 400 invalid_request_error | Missing cloaking (bare curl) | Use Claude Code, not curl |\n| credit balance too low | API key with no credits in pool | Remove ANTHROPIC_API_KEY or add credits |\n| Extra inputs not permitted | Missing beta headers | Rebuild with pnpm run build:cli |\n| Slow first request (30s) | MCP server init | Verify NEUROLINK_SKIP_MCP=true |\n| Token expired | Auto-refresh missed | neurolink auth login anthropic --method oauth |\n| Refresh rate limited | Too many refresh attempts | Wait 30s, then re-login |\n| Accounts disabled until re-auth | Expired refresh tokens (15 failures) | neurolink auth login anthropic --method oauth |\n| Claude Code bypassing proxy | ANTHROPIC_BASE_URL not set | neurolink proxy setup, restart Claude Code |\n| Raw bytes in stream | Old build with Hono encoding bug | Rebuild with pnpm run build:cli |\n| Tools broken / 0 chunks | MCP tool merging (old build) | Rebuild; verify passthrough mode in logs |\n| No account rotation | Fill-first is working as designed | Check debug logs for 429 + rotation |","hierarchy":{"lvl0":"Features","lvl1":"Claude Proxy Troubleshooting","lvl2":"Quick Reference","lvl3":""}},
|
|
2415
2415
|
{"objectID":"25fe74322f0fa35cad27d8d2c45cc5572e20c3c0295caacca6a0946123f28030","title":"Claude Proxy","url":"/docs/features/claude-proxy","content":"Claude Proxy\n\nNeuroLink includes a Claude-API-compatible proxy server that sits between Claude Code and Anthropic. It pools multiple Claude accounts, handles rate-limit failover automatically, refreshes OAuth tokens on demand before they expire, and falls back to other providers when all Claude accounts are exhausted.\n\nOverview\n\nWhy use the proxy?\n\nClaude Code supports only one Anthropic account at a time. If you hit a rate limit, you wait. If your token expires mid-session, you re-authenticate manually. The NeuroLink proxy solves these problems:\nMulti-account pooling -- Combine multiple Claude Pro/Max subscriptions for higher aggregate throughput.\nAutomatic token refresh -- OAuth tokens are refreshed before they expire (pre-request check + 401 retry).\nRate-limit failover -- When one account hits a 429, the proxy immediately tries the next account with exponential backoff.\nMulti-provider fallback -- When all Claude accounts are exhausted, requests are routed to alternative providers (Gemini, OpenAI, etc.) through NeuroLink's provider layer.\nTransparent to Claude Code -- Set ANTHROPIC_BASE_URL and Claude Code works normally. The proxy auto-configures this on start.\n\nHow it works at a glance\n\nQuick Start\n\nIf you do not already have the CLI installed, install it first:\n\nThen continue with the proxy setup steps below.\n\nOne-command setup\n\nThis command:\nChecks for existing authenticated accounts\nRuns OAuth login if no valid accounts exist\nInstalls the proxy as a launchd service (macOS) that auto-restarts on crash or reboot\nAuto-configures Claude Code to use the proxy\n\nUse --no-service to skip service installation and start the proxy in the foreground instead:\n\nManual setup\n\nRestart the serving worker\n\nrestart starts a replacement worker while the existing worker continues serving.\nThe supervisor switches new connections only after the replacement acknowledges\nreadiness and activation, then lets requests on the previous worker finish.\nYou do not need to run the check separately: restart includes it.\n\nThe command verifies admission, worker identity/version, socket-transfer counters\nand preservation of request-log disk/OTel settings. It does not generate a model\nrequest. A failed candidate has a 120-second readiness limit; the serving worker\nis retained. Concurrent restarts, pending updates and additional restarts while\nan older worker is still draining are refused. A disconnected terminal does not\ncancel the supervisor-owned operation or close admission.\n\nUse --format json for scripts. Exit zero means the check or activation was\nverified. activated_unverified means the replacement activated but a subsequent\ncheck failed; inspect neurolink proxy status before another operation. A lost\ncontrol connection leaves the outcome unknown, rather than triggering a forced\nservice restart.\n\nThe JSON contract is CliProxyRestartOutput: an authenticated supervisor result\nor { \"ok\": false, \"phase\": \"unverified\", \"message\": \"...\" } when the CLI cannot\nreceive or authenticate that result. The latter exits nonzero and deliberately\nomits supervisor/worker fields that could not be verified. It does not mean the\nreplacement failed or was rolled back. Control-server errors after binding are\nreported through the supervisor logger without stopping the serving listener.\n\nThis requires a running supervisor that advertises restart-control support.\nOlder supervisors must first receive a separately planned service activation;\ninstalling a newer CLI alone does not add the capability to an existing process.\nThe command refuses an unsupported supervisor without signalling it.\n\nThe listener and supervisor remain running, so this command does not apply changed\nlaunchd stdout/stderr destinations or replace supervisor/updater code. Those need\na service activation with its own interruption budget. proxy install is service\nsetup, not a routine restart command. The restart command does not rewrite the\nlauncher, environment, routing configuration or update history. Local OTel\ninitialization is checked; collector/backend delivery still needs telemetry\nverification.\n\nHow It Works\n\nRequest Flow\n\nEvery request from Claude Code flows through the proxy in one of two modes:\n\nPassthrough mode (Claude to Claude): The request body is forwarded directly to api.anthropic.com with only the authentication headers modified. This preserves multi-turn conversation history, thinking content, cache control, and tool definitions exactly as Claude Code sent them. No lossy conversion through an intermediate format.\n\nTranslation mode (Claude to other provider): When model routing directs a request to a non-Anthropic provider, the proxy parses the Claude Messages API request into NeuroLink's internal format, calls neurolink.generate() or neurolink.stream(), and serializes the result back into Claude Messages API format (including SSE streaming events). For streaming, the proxy emits SSE keep-alive comments (: keep-alive) every 15 seconds during idle periods to prevent connection","hierarchy":{"lvl0":"Features","lvl1":"Claude Proxy","lvl2":"","lvl3":""}},
|
|
2416
2416
|
{"objectID":"cd6d13f50f433e6c99d05f1b6836b42b1abae54a3e97303ffd5dfcc94117e1f2","title":"Claude Proxy","url":"/docs/features/claude-proxy#claude-proxy","content":"NeuroLink includes a Claude-API-compatible proxy server that sits between Claude Code and Anthropic. It pools multiple Claude accounts, handles rate-limit failover automatically, refreshes OAuth tokens on demand before they expire, and falls back to other providers when all Claude accounts are exhausted.","hierarchy":{"lvl0":"Features","lvl1":"Claude Proxy","lvl2":"Claude Proxy","lvl3":""}},
|
|
2417
2417
|
{"objectID":"00d0e565d5c6b476beb49291259ad3d6d29245039e72ea47d84d223d42fdde68","title":"Why use the proxy?","url":"/docs/features/claude-proxy#why-use-the-proxy","content":"Claude Code supports only one Anthropic account at a time. If you hit a rate limit, you wait. If your token expires mid-session, you re-authenticate manually. The NeuroLink proxy solves these problems:\nMulti-account pooling -- Combine multiple Claude Pro/Max subscriptions for higher aggregate throughput.\nAutomatic token refresh -- OAuth tokens are refreshed before they expire (pre-request check + 401 retry).\nRate-limit failover -- When one account hits a 429, the proxy immediately tries the next account with exponential backoff.\nMulti-provider fallback -- When all Claude accounts are exhausted, requests are routed to alternative providers (Gemini, OpenAI, etc.) through NeuroLink's provider layer.\nTransparent to Claude Code -- Set ANTHROPIC_BASE_URL and Claude Code works normally. The proxy auto-configures this on start.","hierarchy":{"lvl0":"Features","lvl1":"Claude Proxy","lvl2":"Why use the proxy?","lvl3":""}},
|
|
@@ -2527,9 +2527,9 @@
|
|
|
2527
2527
|
{"objectID":"d00fb8e058a2986c62edad80f7f39bc3fd8aa8c075ac3e8fcf76ae2623a169bb","title":"Test Coverage","url":"/docs/features/claude-subscription-testing#test-coverage","content":"The credentials suite (test/continuous-test-suite-credentials.ts) covers the scenarios below. The numbered list is illustrative of the OAuth/API-key/tier dimensions tested; consult the source for the authoritative inventory.","hierarchy":{"lvl0":"Features","lvl1":"Claude Subscription Testing Guide","lvl2":"Test Coverage","lvl3":""}},
|
|
2528
2528
|
{"objectID":"fa60da6670dc54ec06aa967e8106c3468b981a947a3e3140dc2f9dc4f4101deb","title":"1. OAuth Flow Tests (21 tests)","url":"/docs/features/claude-subscription-testing#1-oauth-flow-tests-21-tests","content":"Tests the AnthropicOAuth class from src/lib/auth/anthropicOAuth.ts.\n\n| Sub-describe | Tests | What It Covers |\n| ---------------------------------- | ----- | ------------------------------------------------------------------------------------------------------------- |\n| OAuth URL Generation with PKCE | 5 | Auth URL parameters, custom scopes, PKCE code challenge inclusion, unique state for CSRF, additional params |\n| Code Verifier/Challenge Generation | 2 | Cryptographic verifier uniqueness and length, S256 challenge generation and base64url encoding |\n| Token Exchange (Mocked HTTP) | 5 | Code-for-token exchange, error on failed exchange, empty code rejection, client secret inclusion, PKCE verify |\n| Token Refresh (Mocked HTTP) | 3 | Refresh token exchange, missing refresh token error, server error handling |\n| Token Validation | 4 | Valid token with details, expired token detection, empty token rejection, expiration buffer checking |\n\nMock pattern: vi.mock(\"open\", ...) for browser, global fetch replaced with vi.fn().","hierarchy":{"lvl0":"Features","lvl1":"Claude Subscription Testing Guide","lvl2":"1. OAuth Flow Tests (21 tests)","lvl3":""}},
|
|
2529
2529
|
{"objectID":"3a8beb7dbecc862c1ac860f56ab187ca080340b915d5ce6126a79eab8f405250","title":"2. Token Storage Tests (18 tests)","url":"/docs/features/claude-subscription-testing#2-token-storage-tests-18-tests","content":"Tests two storage implementations:\nInMemoryTokenStorage from src/lib/mcp/auth/tokenStorage.ts (the MCP OAuth token storage)\nTokenStore from src/lib/auth/tokenStore.ts (file-based multi-provider token store)\n\n| Sub-describe | Tests | What It Covers |\n| ------------------------------- | ----- | --------------------------------------------------------------------------------------------- |\n| Saving Tokens to Storage | 3 | Save to in-memory storage, update existing, handle multiple providers |\n| Loading Tokens from Storage | 4 | Null for non-existent, complete object retrieval, hasTokens check, list server IDs |\n| Clearing Tokens | 3 | Clear specific provider, clear all, handle non-existent gracefully |\n| Token Expiry Detection | 5 | Expired tokens, valid tokens, buffer time, tokens without expiration, calculateExpiresAt |\n| TokenStore (File-based Storage) | 4 | Default path (.neurolink/tokens.json), custom path, validation before save, token refresher |\n\nMock pattern: vi.mock(\"fs/promises\", ...) for file operations.\n\nNote: The TokenStore stores tokens at ~/.neurolink/tokens.json (not ~/.config/neurolink/). The expiresAt values throughout the codebase use Unix milliseconds (Date.now() scale).","hierarchy":{"lvl0":"Features","lvl1":"Claude Subscription Testing Guide","lvl2":"2. Token Storage Tests (18 tests)","lvl3":""}},
|
|
2530
|
-
{"objectID":"f6d5f6030eef510adb85863ee574831ef78ee8e10b63085f3dea1a4a82a9d01b","title":"3. Model Tier Access Tests (19 tests)","url":"/docs/features/claude-subscription-testing#3-model-tier-access-tests-19-tests","content":"Tests functions from src/lib/models/anthropicModels.ts.\n\n| Sub-describe | Tests | What It Covers |\n| ------------------------------- | ----- | -------------------------------------------------------------------------------------------- |\n| isModelAvailableForTier | 6 | Free (Haiku only), Pro (Haiku+Sonnet), Max (all),
|
|
2531
|
-
{"objectID":"7de56030beed759926c939c24aeb580bf7b3ba25037c488bee66e88190e3e685","title":"4. Provider Integration Tests (16 tests)","url":"/docs/features/claude-subscription-testing#4-provider-integration-tests-16-tests","content":"Superseded — kept as a record of what this suite once covered.\nThe mock-based vitest suite described below no longer exists. It mocked\n@ai-sdk/anthropic, which is not a dependency any more, and it targeted\nsrc/lib/providers/anthropic.ts, a path that no longer exists — the Anthropic\nprovider is now native, at src/lib/providers/anthropic/client.ts. Per\nCLAUDE.md rule 15 the suites in test/ are end-to-end: they construct\nNeuroLink and call generate() / stream(), or drive the built CLI. Treat\nthe mock patterns in this section as history, not as a pattern to copy.\n\nTested the AnthropicProvider class, then at src/lib/providers/anthropic.ts.\n\n| Sub-describe | Tests | What It Covers |\n| ---------------------------------------- | ----- | ----------------------------------------------------------------------------------- |\n| Provider Initialization with API Key | 4 | Valid API key init, default model, custom model, default \"api\" tier |\n| Provider Initialization with OAuth Token | 4 | JSON token parsing from env, plain string token, tier from scopes, default pro tier |\n| Beta Headers Inclusion | 2 | Beta header content verification, getAuthHeaders with beta features |\n| Model Access Validation | 1 | API tier has access to all models |\n| Backward Compatibility | 2 | Works with existing
|
|
2532
|
-
{"objectID":"4f86295fa69d1d7b2b2f07eb7a5d738959f44f3767b3304a12a7486b9eac7abd","title":"5. Configuration Tests (11 tests)","url":"/docs/features/claude-subscription-testing#5-configuration-tests-11-tests","content":"Tests environment variable detection, config loading, and credential handling.\n\n| Sub-describe | Tests | What It Covers |\n| ------------------------------ | ----- | ------------------------------------------------------------------------------------------ |\n| Environment Variable Detection | 7 |
|
|
2530
|
+
{"objectID":"f6d5f6030eef510adb85863ee574831ef78ee8e10b63085f3dea1a4a82a9d01b","title":"3. Model Tier Access Tests (19 tests)","url":"/docs/features/claude-subscription-testing#3-model-tier-access-tests-19-tests","content":"Tests functions from src/lib/models/anthropicModels.ts.\n\n| Sub-describe | Tests | What It Covers |\n| ------------------------------- | ----- | -------------------------------------------------------------------------------------------- |\n| isModelAvailableForTier | 6 | Free (Haiku only), Pro (Haiku+Sonnet), Max (all), max_5/max_20 (all), API (all), invalid IDs |\n| getAvailableModelsForTier | 4 | Free returns 2 Haiku models, Pro includes Sonnet, Max returns all 7+, API matches Max |\n| getDefaultModelForTier | 4 | Free=Haiku, Pro=Sonnet 4, Max/max_5/max_20=Opus 4, API=Sonnet 4 |\n| Model Metadata and Capabilities | 4 | Metadata for Opus 4 and Haiku, undefined for unknown, minimum tier, validateModelAccess |\n| Tier Comparison | 1 | compareTiers ordering (free < pro < max < api) |\n\nThe AnthropicModel enum in src/lib/models/anthropicModels.ts defines these models (different from the AnthropicModels enum in src/lib/constants/enums.ts which includes newer models like Claude 4.5):\n\n| Enum Value | Model ID |\n| -------------------- | ----------------------------- |\n| CLAUDE_3_HAIKU | claude-3-haiku-20240307 |\n| CLAUDE_3_5_HAIKU | claude-3-5-haiku-20241022 |\n| CLAUDE_3_5_SONNET | claude-3-5-sonnet-20241022 |\n| CLAUDE_3_5_SONNET_V2 | claude-3-5-sonnet-v2-20241022 |\n| CLAUDE_SONNET_4 | claude-sonnet-4-20250514 |\n| CLAUDE_3_OPUS | claude-3-opus-20240229 |\n| CLAUDE_OPUS_4 | claude-opus-4-20250514 |","hierarchy":{"lvl0":"Features","lvl1":"Claude Subscription Testing Guide","lvl2":"3. Model Tier Access Tests (19 tests)","lvl3":""}},
|
|
2531
|
+
{"objectID":"7de56030beed759926c939c24aeb580bf7b3ba25037c488bee66e88190e3e685","title":"4. Provider Integration Tests (16 tests)","url":"/docs/features/claude-subscription-testing#4-provider-integration-tests-16-tests","content":"Superseded — kept as a record of what this suite once covered.\nThe mock-based vitest suite described below no longer exists. It mocked\n@ai-sdk/anthropic, which is not a dependency any more, and it targeted\nsrc/lib/providers/anthropic.ts, a path that no longer exists — the Anthropic\nprovider is now native, at src/lib/providers/anthropic/client.ts. Per\nCLAUDE.md rule 15 the suites in test/ are end-to-end: they construct\nNeuroLink and call generate() / stream(), or drive the built CLI. Treat\nthe mock patterns in this section as history, not as a pattern to copy.\n\nTested the AnthropicProvider class, then at src/lib/providers/anthropic.ts.\n\n| Sub-describe | Tests | What It Covers |\n| ---------------------------------------- | ----- | ----------------------------------------------------------------------------------- |\n| Provider Initialization with API Key | 4 | Valid API key init, default model, custom model, default \"api\" tier |\n| Provider Initialization with OAuth Token | 4 | JSON token parsing from env, plain string token, tier from scopes, default pro tier |\n| Beta Headers Inclusion | 2 | Beta header content verification, getAuthHeaders with beta features |\n| Model Access Validation | 1 | API tier has access to all models |\n| Backward Compatibility | 2 | Works with existing ANTHROPIC_API_KEY, isAvailable check |\n| Error Handling | 4 | Auth errors, rate limit errors, network errors (ECONNREFUSED), server errors (500) |\n| Usage Tracking | 1 | Initializes with zeroed usage info |\n\nMock pattern (historical): vi.mock(\"@ai-sdk/anthropic\", ...),","hierarchy":{"lvl0":"Features","lvl1":"Claude Subscription Testing Guide","lvl2":"4. Provider Integration Tests (16 tests)","lvl3":""}},
|
|
2532
|
+
{"objectID":"4f86295fa69d1d7b2b2f07eb7a5d738959f44f3767b3304a12a7486b9eac7abd","title":"5. Configuration Tests (11 tests)","url":"/docs/features/claude-subscription-testing#5-configuration-tests-11-tests","content":"Tests environment variable detection, config loading, and credential handling.\n\n| Sub-describe | Tests | What It Covers |\n| ------------------------------ | ----- | ------------------------------------------------------------------------------------------ |\n| Environment Variable Detection | 7 | ANTHROPIC_API_KEY, ANTHROPIC_OAUTH_CLIENT_ID, ANTHROPIC_SUBSCRIPTION_TIER, ANTHROPIC_MODEL |\n| Config File Loading | 1 | createAnthropicOAuthConfig structure |\n| Default Values | 3 | OAuth endpoints (claude.ai/oauth/authorize), default scopes, default redirect URI |\n| Credential Masking | 2 | API key masking preserving prefix/suffix, short credential handling |","hierarchy":{"lvl0":"Features","lvl1":"Claude Subscription Testing Guide","lvl2":"5. Configuration Tests (11 tests)","lvl3":""}},
|
|
2533
2533
|
{"objectID":"527e73d36b655e32546d0aae566a876b1877035cbe29a071761cffcbf9467662","title":"6. Rate Limit Header Parsing Tests (4 tests)","url":"/docs/features/claude-subscription-testing#6-rate-limit-header-parsing-tests-4-tests","content":"Tests parsing of Anthropic rate limit response headers.\n\n| Sub-describe | Tests | What It Covers |\n| ------------------------ | ----- | ---------------------------------------------------------- |\n| Parse Rate Limit Headers | 4 | All headers, missing headers, retry-after, partial headers |\n\nThe tests construct Headers objects manually and parse anthropic-ratelimit-* headers.","hierarchy":{"lvl0":"Features","lvl1":"Claude Subscription Testing Guide","lvl2":"6. Rate Limit Header Parsing Tests (4 tests)","lvl3":""}},
|
|
2534
2534
|
{"objectID":"d778d84e39784f950b72809089eb274820e31f9abfb4a22203e4b70dda31233b","title":"7. CLI Auth Command Tests (5 tests)","url":"/docs/features/claude-subscription-testing#7-cli-auth-command-tests-5-tests","content":"Tests CLI-level authentication validation and status detection.\n\n| Sub-describe | Tests | What It Covers |\n| --------------------- | ----- | ---------------------------------------------------------------------- |\n| API Key Validation | 2 | Valid API key format (sk-ant- prefix, length > 20), invalid key format |\n| Auth Status Detection | 3 | API key presence, API key absence, model configuration |\n| Command Options | 2 | check-only mode, non-interactive mode |","hierarchy":{"lvl0":"Features","lvl1":"Claude Subscription Testing Guide","lvl2":"7. CLI Auth Command Tests (5 tests)","lvl3":""}},
|
|
2535
2535
|
{"objectID":"e33c022b981dcd135adbc9d4bbe4710936769615b543ef3a325c014c0be7b797","title":"Writing New Tests","url":"/docs/features/claude-subscription-testing#writing-new-tests","content":"When adding new tests to this file, follow these patterns from the existing test suite:","hierarchy":{"lvl0":"Features","lvl1":"Claude Subscription Testing Guide","lvl2":"Writing New Tests","lvl3":""}},
|
|
@@ -2583,7 +2583,7 @@
|
|
|
2583
2583
|
{"objectID":"0791842057aa99c9f3c9374d36e5bfe4509c921997968a094f10d1f25fcca7b2","title":"CLI Options","url":"/docs/features/claude-subscription#cli-options","content":"The CLI also supports anthropic-subscription as a provider alias that indicates subscription tier support.","hierarchy":{"lvl0":"Features","lvl1":"Claude Subscription Support","lvl2":"CLI Options","lvl3":""}},
|
|
2584
2584
|
{"objectID":"4b5a652a650282963acbba6d943f6776bd2b1644b049847af46a78d84a1677b6","title":"Beta Features","url":"/docs/features/claude-subscription#beta-features","content":"Anthropic regularly releases new features in beta. NeuroLink includes beta headers automatically when enableBetaFeatures is true (the default).","hierarchy":{"lvl0":"Features","lvl1":"Claude Subscription Support","lvl2":"Beta Features","lvl3":""}},
|
|
2585
2585
|
{"objectID":"d6b8ae9e8844c4f895d7e07c1c05a673c160cef1fc39d6bff8e23a3154a775e9","title":"Beta Headers","url":"/docs/features/claude-subscription#beta-headers","content":"For API key authentication, the following beta headers are included:\n\nThese correspond to the AnthropicBetaFeature enum values in src/lib/constants/enums.ts:\n\n| Enum Value | Header Value |\n| ------------------------ | ---------------------------------------- |\n| CLAUDE_CODE | claude-code-20250219 |\n| INTERLEAVED_THINKING | interleaved-thinking-2025-05-14 |\n| FINE_GRAINED_STREAMING | fine-grained-tool-streaming-2025-05-14 |\n\nFor OAuth authentication, the fetch wrapper uses different beta headers:\n\nThe oauth-2025-04-20 header is required for OAuth-authenticated requests. The claude-code-20250219 header is conditionally included only if the original request headers already contain it.","hierarchy":{"lvl0":"Features","lvl1":"Claude Subscription Support","lvl2":"Beta Headers","lvl3":""}},
|
|
2586
|
-
{"objectID":"cd8fb688f16db1e617bec1ab239e7ea231ac34ea4022c4dadf0e5a0063312897","title":"Model Access Matrix","url":"/docs/features/claude-subscription#model-access-matrix","content":"Model access is defined in MODEL_TIER_ACCESS in src/lib/models/anthropicModels.ts:\n\n| Model | Free | Pro | Max/
|
|
2586
|
+
{"objectID":"cd8fb688f16db1e617bec1ab239e7ea231ac34ea4022c4dadf0e5a0063312897","title":"Model Access Matrix","url":"/docs/features/claude-subscription#model-access-matrix","content":"Model access is defined in MODEL_TIER_ACCESS in src/lib/models/anthropicModels.ts:\n\n| Model | Free | Pro | Max/Max_5/Max_20 | API |\n| ------------------------------------------------------ | ---- | --- | ---------------- | --- |\n| claude-3-haiku-20240307 (Claude 3 Haiku) | Yes | Yes | Yes | Yes |\n| claude-3-5-haiku-20241022 (Claude 3.5 Haiku) | Yes | Yes | Yes | Yes |\n| claude-3-5-sonnet-20241022 (Claude 3.5 Sonnet) | No | Yes | Yes | Yes |\n| claude-3-5-sonnet-v2-20241022 (Claude 3.5 Sonnet V2) | No | Yes | Yes | Yes |\n| claude-sonnet-4-20250514 (Claude Sonnet 4) | No | Yes | Yes | Yes |\n| claude-3-opus-20240229 (Claude 3 Opus) | No | No | Yes | Yes |\n| claude-opus-4-20250514 (Claude Opus 4) | No | No | Yes | Yes |\n\nKey observations:\nFree tier only gets Haiku models (Claude 3 Haiku and Claude 3.5 Haiku)\nPro tier gets Haiku and Sonnet models, but not Opus\nMax tiers (max, max_5, max_20) and API have access to all models (wildcard \"*\")","hierarchy":{"lvl0":"Features","lvl1":"Claude Subscription Support","lvl2":"Model Access Matrix","lvl3":""}},
|
|
2587
2587
|
{"objectID":"08186660ee36a51c9d9fce87ef305dce1fdfb60661df0ebeb1dfd790abf3a689","title":"Default Models by Tier","url":"/docs/features/claude-subscription#default-models-by-tier","content":"Each tier has a recommended default model (from DEFAULT_MODELS_BY_TIER):\n\n| Tier | Default Model |\n| ------ | --------------------------- |\n| Free | claude-3-5-haiku-20241022 |\n| Pro | claude-sonnet-4-20250514 |\n| Max | claude-opus-4-20250514 |\n| Max_5 | claude-opus-4-20250514 |\n| Max_20 | claude-opus-4-20250514 |\n| API | claude-sonnet-4-20250514 |","hierarchy":{"lvl0":"Features","lvl1":"Claude Subscription Support","lvl2":"Default Models by Tier","lvl3":""}},
|
|
2588
2588
|
{"objectID":"d9a7342f2e9e5141590ea48246b43df4145301bd98f76fca99024cded7ef452f","title":"Model Tier Enforcement","url":"/docs/features/claude-subscription#model-tier-enforcement","content":"When the provider detects that the requested model is not available for the user's subscription tier, it automatically falls back to the recommended model for that tier and logs a warning:\n\nYou can validate model access programmatically:","hierarchy":{"lvl0":"Features","lvl1":"Claude Subscription Support","lvl2":"Model Tier Enforcement","lvl3":""}},
|
|
2589
2589
|
{"objectID":"b5d7705c84cfc9e3ffee2e0ab128737f664f4823537eca6e89dfaacbec31b340","title":"Choosing the Right Model","url":"/docs/features/claude-subscription#choosing-the-right-model","content":"Choosing the Right Model","hierarchy":{"lvl0":"Features","lvl1":"Claude Subscription Support","lvl2":"Choosing the Right Model","lvl3":""}},
|
|
@@ -2607,7 +2607,7 @@
|
|
|
2607
2607
|
{"objectID":"2d702930ea64aa23d449ee6e295b6110f636342544b2c5c4268320c2edbea30c","title":"Reliability","url":"/docs/features/claude-subscription#reliability","content":"Use timeouts: Prevent hanging requests\nConsider fallbacks: Configure alternative providers","hierarchy":{"lvl0":"Features","lvl1":"Claude Subscription Support","lvl2":"Reliability","lvl3":""}},
|
|
2608
2608
|
{"objectID":"a2f2f2886250029949ab068960d24829b29ec6f93970819108cae355eb3c9fe4","title":"From src/lib/types/subscriptionTypes.ts","url":"/docs/features/claude-subscription#from-srclibtypessubscriptiontypests","content":"ClaudeSubscriptionTier -- Union type: \"free\" | \"pro\" | \"max\" | \"max_5\" | \"max_20\" | \"api\"\nAnthropicAuthMethod -- Union type: \"api_key\" | \"oauth\"\nOAuthToken -- OAuth token structure with accessToken, refreshToken?, expiresAt?, tokenType?, scopes?\nAnthropicRateLimitInfo -- Rate limit data parsed from response headers\nAnthropicResponseMetadata -- Response metadata including rate limits, request ID, server timing\nClaudeUsageInfo -- Usage tracking with messages, tokens, quotas\nClaudeQuotaInfo -- Quota limits per tier\nSubscriptionFeatures -- Per-tier feature capabilities\nAnthropicBetaFeatures -- Beta feature flag configuration type","hierarchy":{"lvl0":"Features","lvl1":"Claude Subscription Support","lvl2":"From src/lib/types/subscriptionTypes.ts","lvl3":""}},
|
|
2609
2609
|
{"objectID":"82f0947f434857058d80db037f72a20e7693320bf698a04de4f5fdac228cfafa","title":"From src/lib/models/anthropicModels.ts","url":"/docs/features/claude-subscription#from-srclibmodelsanthropicmodelsts","content":"AnthropicModel -- Enum of model identifiers\nMODEL_TIER_ACCESS -- Model access by tier\nMODEL_METADATA -- Model metadata (context window, capabilities, etc.)\nisModelAvailableForTier(model, tier) -- Check model availability\ngetAvailableModelsForTier(tier) -- List all models for a tier\ngetDefaultModelForTier(tier) / getRecommendedModelForTier(tier) -- Get default model\ngetModelMetadata(model) / getModelCapabilities(model) -- Get model metadata\nvalidateModelAccess(model, tier) -- Throws ModelAccessError if access denied\ngetMinimumTierForModel(model) -- Get minimum tier required\nModelAccessError -- Error class for denied model access","hierarchy":{"lvl0":"Features","lvl1":"Claude Subscription Support","lvl2":"From src/lib/models/anthropicModels.ts","lvl3":""}},
|
|
2610
|
-
{"objectID":"dc120048122207e966c370ba63d2d0196eef67cc19f037042186d156b5040a1e","title":"From src/lib/constants/enums.ts","url":"/docs/features/claude-subscription#from-srclibconstantsenumsts","content":"ClaudeSubscriptionTier enum (FREE, PRO, MAX, API)\nAnthropicAuthMethod enum (API_KEY, OAUTH)\nAnthropicBetaFeature enum (
|
|
2610
|
+
{"objectID":"dc120048122207e966c370ba63d2d0196eef67cc19f037042186d156b5040a1e","title":"From src/lib/constants/enums.ts","url":"/docs/features/claude-subscription#from-srclibconstantsenumsts","content":"ClaudeSubscriptionTier enum (FREE, PRO, MAX, API)\nAnthropicAuthMethod enum (API_KEY, OAUTH)\nAnthropicBetaFeature enum (CLAUDE_CODE, INTERLEAVED_THINKING, FINE_GRAINED_STREAMING)\nTOKEN_EXPIRY_BUFFER_MS -- 5-minute buffer constant (300000ms)","hierarchy":{"lvl0":"Features","lvl1":"Claude Subscription Support","lvl2":"From src/lib/constants/enums.ts","lvl3":""}},
|
|
2611
2611
|
{"objectID":"bd2582fa2b33754d27ecbb412afe47910f9eba6d755d62afa2e6840e47715cfa","title":"From src/lib/auth/index.ts","url":"/docs/features/claude-subscription#from-srclibauthindexts","content":"AnthropicOAuth -- OAuth 2.0 flow implementation class\nTokenStore / tokenStore -- Secure token storage\nOAuthError and subclasses -- OAuth error types\ncreateAnthropicOAuth() -- Factory function\nperformOAuthFlow() -- Complete OAuth flow helper\nstartCallbackServer() / stopCallbackServer() -- Local callback server","hierarchy":{"lvl0":"Features","lvl1":"Claude Subscription Support","lvl2":"From src/lib/auth/index.ts","lvl3":""}},
|
|
2612
2612
|
{"objectID":"a2341567fae0ba9944d7e421ed70635fc5c2efbc4f1eae12d98a8be260ec19ee","title":"From src/lib/providers/anthropic.ts","url":"/docs/features/claude-subscription#from-srclibprovidersanthropicts","content":"AnthropicProvider -- Provider class with OAuth support\nAnthropicProviderConfig -- Configuration interface\nANTHROPIC_BETA_HEADERS -- Beta headers constant\nRe-exports: ModelAccessError, isModelAvailableForTier, getRecommendedModelForTier, getModelCapabilities","hierarchy":{"lvl0":"Features","lvl1":"Claude Subscription Support","lvl2":"From src/lib/providers/anthropic.ts","lvl3":""}},
|
|
2613
2613
|
{"objectID":"0d887a2c99ddd9baec3b1841a6b6a059c369673f33c07b987a9ca817bbf7dadb","title":"OAuth Flow (Programmatic)","url":"/docs/features/claude-subscription#oauth-flow-programmatic","content":"Use the AnthropicOAuth class to run the OAuth 2.0 + PKCE flow programmatically:","hierarchy":{"lvl0":"Features","lvl1":"Claude Subscription Support","lvl2":"OAuth Flow (Programmatic)","lvl3":""}},
|
|
@@ -2743,7 +2743,7 @@
|
|
|
2743
2743
|
{"objectID":"2cdd976ac676a31877242b7fcf724052d19939182949e994290b1534464b2edd","title":"calculateFileTokenBudget(contextWindow, currentTokens, maxOutputTokens)","url":"/docs/features/context-compaction#calculatefiletokenbudgetcontextwindow-currenttokens-maxoutputtokens","content":"Calculate available token budget for file reads.\n\nFormula: floor((contextWindow - currentTokens - maxOutputTokens) * FILE_READ_BUDGET_PERCENT)\n\nReturns 0 if remaining tokens is zero or negative.","hierarchy":{"lvl0":"Features","lvl1":"Context Compaction","lvl2":"calculateFileTokenBudget(contextWindow, currentTokens, maxOutputTokens)","lvl3":""}},
|
|
2744
2744
|
{"objectID":"c2ec5193f5504b8a443fabc274924f582446511f1b1c288b65c021c09b18bc10","title":"enforceAggregateFileBudget(files, provider, model, maxTokens)","url":"/docs/features/context-compaction#enforceaggregatefilebudgetfiles-provider-model-maxtokens","content":"File: src/lib/context/fileTokenBudget.ts\n\nEnforces a total token budget across all file attachments in a single request. When the aggregate content of all files exceeds the available context budget, files are truncated proportionally or dropped to fit.\n\nThis prevents the scenario where multiple large file attachments (e.g., 5 files totaling 2.8 MB) overflow the context window on the very first message — before any conversation history exists to compact.\n\nCalled automatically by buildMultimodalMessagesArray() before the file processing loop.","hierarchy":{"lvl0":"Features","lvl1":"Context Compaction","lvl2":"enforceAggregateFileBudget(files, provider, model, maxTokens)","lvl3":""}},
|
|
2745
2745
|
{"objectID":"aa345c6576f1438097ead56a90b92dd0e2320356ed00bcba8763bbd0ccfc2932","title":"shouldTruncateFile(fileSize, budget)","url":"/docs/features/context-compaction#shouldtruncatefilefilesize-budget","content":"Determine how a file should be handled based on its size and the token budget.\n\nDecision logic:\nfileSize > FILE_PREVIEW_MODE_SIZE (5MB) → preview mode (2000 chars)\nfileSize < FILE_FAST_PATH_SIZE (100KB) → no truncation\nOtherwise → estimate tokens at 4 chars/token, truncate if exceeds budget","hierarchy":{"lvl0":"Features","lvl1":"Context Compaction","lvl2":"shouldTruncateFile(fileSize, budget)","lvl3":""}},
|
|
2746
|
-
{"objectID":"8a4652b80bee5f1ed1db88fa78bcdb16c917b4d7ccc1960e3b347e2439f1f426","title":"Tool Pair Repair","url":"/docs/features/context-compaction#tool-pair-repair","content":"File: src/lib/context/toolPairRepair.ts\n\nAfter compaction,
|
|
2746
|
+
{"objectID":"8a4652b80bee5f1ed1db88fa78bcdb16c917b4d7ccc1960e3b347e2439f1f426","title":"Tool Pair Repair","url":"/docs/features/context-compaction#tool-pair-repair","content":"File: src/lib/context/toolPairRepair.ts\n\nAfter compaction, tool_call/tool_result pairs may become orphaned (one half removed while the other remains). repairToolPairs validates every pair and inserts synthetic placeholders where needed.\n\nRepairResult:\n\nBehavior:\nA tool_call without a following tool_result gets a synthetic result: \"[Tool result unavailable - conversation was compacted]\"\nA tool_result without a preceding tool_call gets a synthetic call: \"[Tool call for <tool> - conversation was compacted]\"\nSynthetic messages have metadata.truncated = true\n\nThis runs automatically after compactSession().","hierarchy":{"lvl0":"Features","lvl1":"Context Compaction","lvl2":"Tool Pair Repair","lvl3":""}},
|
|
2747
2747
|
{"objectID":"21d2e6344be189c6da5ae00edb387dd22068dbf82a5ed46975e59e8f4cb77638","title":"CLI Session Warnings","url":"/docs/features/context-compaction#cli-session-warnings","content":"File: src/cli/loop/session.ts:300-354\n\nIn loop mode, the CLI checks context budget after each turn and displays warnings:\n\nAt >60% usage (informational, gray text):\n\nAt >=80% usage (warning, yellow text — compaction threshold reached):\n\nThese warnings only appear when contextCompaction.enabled is true in the session config.","hierarchy":{"lvl0":"Features","lvl1":"Context Compaction","lvl2":"CLI Session Warnings","lvl3":""}},
|
|
2748
2748
|
{"objectID":"74e0c8357b1ed9f7f6e75611be8a91c26714cf29831ccb7870add8089cf801da","title":"Provider Support","url":"/docs/features/context-compaction#provider-support","content":"Summary table of default context windows by provider:\n\n| Provider | Default Context Window | Notable Models |\n| ------------ | ---------------------- | -------------------------------------------------- |\n| Anthropic | 200,000 | All Claude 3/3.5/4 models |\n| OpenAI | 128,000 | GPT-4o, o1/o3 (200K), GPT-4.1/GPT-5 (1M+) |\n| Google AI | 1,048,576 | Gemini 2.x/3.x (1M), Gemini 1.5 Pro (2M) |\n| Vertex | 1,048,576 | Gemini 2.x (1M), Gemini 1.5 Pro (2M) |\n| Bedrock | 200,000 | Claude models (200K), Nova (300K) |\n| Azure | 128,000 | GPT-4o, GPT-4-turbo; GPT-4 (8K) |\n| Mistral | 128,000 | Large/Small (128K), Medium (32K), Codestral (256K) |\n| Ollama | 128,000 | Configurable per model |\n| LiteLLM | 128,000 | Passthrough to underlying provider |\n| Hugging Face | 32,000 | Model-dependent |\n| SageMaker | 128,000 | Model-dependent |","hierarchy":{"lvl0":"Features","lvl1":"Context Compaction","lvl2":"Provider Support","lvl3":""}},
|
|
2749
2749
|
{"objectID":"e72d6e69aea1efc6fbf65d6ed1e134b35a34bd62105faa4db7f99e39878fa2fe","title":"Redis Conversation History Export","url":"/docs/features/conversation-history","content":"Redis Conversation History Export\n\nSince: v7.38.0 | Status: Stable | Availability: SDK + CLI\n\nOverview\n\nWhat it does: Export complete conversation session history from Redis storage as JSON for analytics, debugging, and compliance auditing.\n\nWhy use it: Access structured conversation data for analysis, user behavior insights, quality assurance, and debugging failed sessions. Essential for production observability.\n\nCommon use cases:\nDebugging failed or problematic conversations\nAnalytics and user behavior analysis\nCompliance and audit trail generation\nQuality assurance and model evaluation\nTraining data collection for fine-tuning\n\nQuick Start\n\nConversation history export only works with Redis storage. In-memory storage does not support export functionality. Configure Redis before enabling conversation memory.\n\nSDK Example\n\nCLI Example\n\nConfiguration\n\n| Option | Type | Default | Required | Description |\n| ----------------- | ----------------- | -------- | -------- | ------------------------------ |\n| sessionId | string | - | Yes | Unique session identifier |\n| format | \"json\" \\| \"csv\" | \"json\" | No | Export format |\n| includeMetadata | boolean | true | No | Include session metadata |\n| startTime | Date | - | No | Filter: export from this time |\n| endTime | Date | - | No | Filter: export until this time |\n\nEnvironment Variables\n\nConfig File\n\nHow It Works\n\nData Flow\nConversation occurs → Each turn stored in Redis with session ID\nExport requested → SDK/CLI queries Redis for session\nData aggregated → Turns assembled with metadata\nFormat applied → JSON or CSV serialization\nOutput delivered → File or console output\n\nRedis Storage Structure\n\nData Schema (JSON Export)\n\nAdvanced Usage\n\nRetrieve Session History\n\nClear Session Data\n\nExport History to File\n\nIntegration with Analytics Pipeline\n\nPipe exported conversation data directly to your analytics dashboards for user behavior insights, quality metrics, and model performance tracking. Combine with Auto Evaluation for comprehensive quality monitoring.\n\nAPI Reference\n\nSDK Methods\n\nCLI Commands\n\n| Command | Description |\n| -------------------------------------------------------------- | -------------------------------------------- |\n| neurolink memory list | List all conversation sessions with metadata |\n| neurolink memory list --user-id <ID> | List sessions for specific user |\n| neurolink memory export --session-id <ID> | Export single session to JSON |\n| neurolink memory export --session-id <ID> --include-metadata | Export with metadata |\n| neurolink memory export-all --output <dir> | Export all sessions to directory |\n| neurolink memory delete --session-id <ID> | Delete a specific session |\n| neurolink memory delete --session-id <ID> --force | Delete without confirmation |\n| neurolink memory clear --confirm | Clear all sessions |\n| neurolink memory stats | Show memory statistics |\n| neurolink memory history <sessionId> | Show conversation history |\n\nSee conversation-memory.md for complete memory system documentation.\n\nTroubleshooting\n\nProblem: getConversationHistory returns empty array\n\nCause: Session ID doesn't exist or Redis not configured\nSolution:\n\nProblem: Redis connection failed\n\nCause: Redis server not running or incorrect credentials\nSolution:\n\nProblem: Need additional metadata with history\n\nCause: getConversationHistory returns only message array\nSolution:\n\nUse exportSession with includeMetadata option:\n\nProblem: Memory commands require Redis for listing\n\nCause: In-memory storage doesn't persist session IDs across CLI calls\nSolution:\n\nConfigure Redis for persistent session management:\n\ntypescript\nconfig: {\n conversationMemory: {\n redis: {\n ttl: 7 24 60 * 60, // 7 days in seconds\n },\n },\n}\ntypescript\n// Archive a session before clearing\nasync function archiveSession(sessionId: string) {\n const history = await neurolink.getConversationHistory(sessionId);\n await s3.upload(archives/${sessionId}.json, JSON.stringify(history));\n await neurolink.clearConversationSession(sessionId); // Clean up\n}\ntypescript\n// Redact PII before archiving\nasync function archiveWithRedaction(sessionId: string) {\n const history = await neurolink.getConversationHistory(sessionId);\n\n // Redact sensitive data\n const redactedHistory = history.map((message) => ({\n ...message,\n content:\n typeof message.c","hierarchy":{"lvl0":"Features","lvl1":"Redis Conversation History Export","lvl2":"","lvl3":""}},
|
|
@@ -2828,7 +2828,7 @@
|
|
|
2828
2828
|
{"objectID":"99d5ee10748044f10d6dd1e54785276aac1cf4375eca8dc6a1c9db90fc0c2158","title":"SubQ, at its hosted endpoint","url":"/docs/features/decide-inference-type#subq-at-its-hosted-endpoint","content":"Subquadratic's subq-snap-preview (public preview) speaks the same System One\nwire as TypeSafe, at a public endpoint, so a key alone configures it and there\nis no base URL to set. The key and base URL can equally come from the config\npassed to the SDK, new NeuroLink({ credentials: { subq: { apiKey, baseURL } } }),\nor per call. The provider id is subq; subquadratic and subq-snap name it\ntoo. It comes after TypeSafe, Laya and XOR and ahead of Perplexity and Cloudflare\nClef: its key belongs to no other provider, so it is set on purpose, whereas\ntheirs are shared with text providers and must not displace it. NeuroLink sends it no images or video: SubQ's image format is not\none the decide catalog can describe yet, so an image attached to a call is\nrefused before any request. The state window NeuroLink reports for it is advisory\n(reported, never enforced, not a guarantee); see the\nSubQ provider guide.","hierarchy":{"lvl0":"Features","lvl1":"The `decide` inference type","lvl2":"SubQ, at its hosted endpoint","lvl3":""}},
|
|
2829
2829
|
{"objectID":"dc8b9e9a2c66b1d2a60305a09a44263ceca755d40f04b6771e0a7c05a5237a64","title":"Perplexity, at its hosted endpoint","url":"/docs/features/decide-inference-type#perplexity-at-its-hosted-endpoint","content":"Perplexity's pplx-decider-v1-27b is a hosted API at a public endpoint, so a key\nalone configures it and there is no base URL to set. NeuroLink calls\n<base URL>/v1/decisions; a trailing /v1 on an override is accepted. The key\ncan equally come from the config passed to the SDK,\nnew NeuroLink({ credentials: { perplexityDecider: { apiKey } } }), or per call;\nconfig set there counts when a decide() call picks the default decision\nprovider, exactly as the environment does. The classifier router's auto gate\ncounts them too, per-call credentials included, so a\ncredentials.perplexityDecider passed on one call can make auto pick jev.\nThe provider id is perplexity-decider: the perplexity provider is the\nSonar text provider, which serves generate() and stream() and not decide().\n\nPERPLEXITY_API_KEY is shared with that text provider. A host that set it\nonly to use Sonar has therefore also configured decide, and built-in features\nwill use Perplexity whenever none of TypeSafe, Laya, XOR or SubQ is configured.\nPerplexity comes after XOR and SubQ in descriptor order, so it never displaces\none that is. Context compaction's relevance stage and summary gate need no opt-in of their\nown, so earlier conversation text starts going to Perplexity the first time a\nconversation outgrows its budget; model routing, tool routing and RAG planning do\nnothing unless enabled. To keep the shared key from activating decisions, pass\nthe text provider's key as credentials.perplexity instead of through the\nenvironment, and keep it out of .env too, because the SDK and the CLI load that\nfile into the environment, or configure one of TypeSafe, Laya, XOR and SubQ, which then\nreceives those texts instead. The Perplexity provider guide lists\nwhat each consumer sends\nand the\nexact switches.\nIt reads images but no video; see Images and video.","hierarchy":{"lvl0":"Features","lvl1":"The `decide` inference type","lvl2":"Perplexity, at its hosted endpoint","lvl3":""}},
|
|
2830
2830
|
{"objectID":"86d184ec9e501d4e94e973c833eaee71bb40744e683334ad36c497c3f625387f","title":"Cloudflare Clef, on Workers AI","url":"/docs/features/decide-inference-type#cloudflare-clef-on-workers-ai","content":"Cloudflare's clef and clef-flash are hosted on Workers AI at a public\nendpoint, so there is no base URL to set. The account id is part of the route, so\nClef counts as configured only with both the token and the account id. They can\nequally come from the config passed to the SDK,\nnew NeuroLink({ credentials: { cloudflareClef: { apiKey, accountId } } })\n(baseURL is optional), or per call; config set there counts when a decide()\ncall picks the default decision provider, exactly as the environment does. The\nclassifier router's auto gate counts them too, per-call credentials included,\nso a credentials.cloudflareClef passed on one call can make auto pick jev.\nThe provider id is cloudflare-clef: the cloudflare provider is the Workers AI text\nprovider, which serves generate() and stream() and not decide(), and\ncredentials.cloudflare does not configure decide.\n\nThe Workers AI endpoint's state window changed during October 2026.\nCloudflare documents a 64K window; until 2026-10-04 text past about 2,048 tokens\nwas ignored without an error, and on 2026-10-07 states of at least 190,153 tokens\n(clef-flash) and 52,154 (clef) were read in full (hosted service or model:\nunknown). NeuroLink refuses a state it estimates at more than 16,000 tokens with\nmax_tokens_exceeded, which every built-in consumer treats as \"carry on as\nbefore\"; see Limits and gotchas. Latency grows with the\nstate, about 0.2 s per 1,000 tokens on large ones, so NeuroLink's default timeout\nadds 250 ms per 1,000 estimated tokens.\n\nCLOUDFLARE_API_KEY and CLOUDFLARE_ACCOUNT_ID are shared with that text\nprovider. A host that set them only to use Workers AI text has therefore also\nconfigured decide, and built-in features will use Clef whenever none of\nTypeSafe, Laya, XOR, SubQ or Perplexity is configured. Clef comes after\nTypeSafe, Laya, XOR, SubQ and Perplexity, so it never displaces one that is. No switch turns it off while the two\nvariables are set.","hierarchy":{"lvl0":"Features","lvl1":"The `decide` inference type","lvl2":"Cloudflare Clef, on Workers AI","lvl3":""}},
|
|
2831
|
-
{"objectID":"08fd87a8baa41fd742824c8457907e72804c393825cb2f67997a356c98b4211b","title":"OpenAI Decisions, at its hosted endpoint","url":"/docs/features/decide-inference-type#openai-decisions-at-its-hosted-endpoint","content":"OpenAI's Decisions API is a public beta at a public endpoint, so a key alone\nconfigures it and there is no base URL to set. NeuroLink calls\n<base URL>/v1/decisions; a trailing /v1 on an override is accepted. The key\ncan equally come from the config passed to the SDK,\nnew NeuroLink({ credentials: { openaiDecisions: { apiKey } } }), or per call;\nconfig set there counts when a decide() call picks the default decision\nprovider, exactly as the environment does. The classifier router's auto gate
|
|
2831
|
+
{"objectID":"08fd87a8baa41fd742824c8457907e72804c393825cb2f67997a356c98b4211b","title":"OpenAI Decisions, at its hosted endpoint","url":"/docs/features/decide-inference-type#openai-decisions-at-its-hosted-endpoint","content":"OpenAI's Decisions API is a public beta at a public endpoint, so a key alone\nconfigures it and there is no base URL to set. NeuroLink calls\n<base URL>/v1/decisions; a trailing /v1 on an override is accepted. The key\ncan equally come from the config passed to the SDK,\nnew NeuroLink({ credentials: { openaiDecisions: { apiKey } } }), or per call;\nconfig set there counts when a decide() call picks the default decision\nprovider, exactly as the environment does. The classifier router's auto gate\ncounts them too, per-call credentials included, so a credentials.openaiDecisions\npassed on one call can make auto pick jev. The provider id is openai-decisions: the openai provider is the chat\nprovider, which serves generate() and stream() and not decide(), and\ncredentials.openai does not configure decide. Its wire is OpenAI's own (named\nquestions in an array, an array of answers), so NeuroLink translates both ways;\nthe question types you write are unchanged. See the provider guide's\nwire mapping.\n\nOPENAI_API_KEY is shared with that chat provider. A host that set it only to\nuse OpenAI chat has therefore also configured decide, and built-in features will\nuse OpenAI Decisions whenever none of TypeSafe, Laya, XOR, SubQ, Perplexity or Cloudflare\nClef is configured. It comes after those six in the order, so it never displaces\none that is; only ScaleDown follows it.\nThe built-in consumers (model routing, tool routing, relevance compaction, the\nsummary gate, RAG planning) and the speech-to-text correction check then make paid\ndecision calls, though they still fail open. No switch turns it off while the key\nis set (short of a gateway OPENAI_BASE_URL, below). neurolink.decide() and tryDecide() build a fresh provider for every\ncall, so a key OpenAI rejects costs one failing request per decision site each\ntime, and the 401 latch never carries across calls. The provider guide explains\nwhen NeuroLink uses it\nand\nhow the two providers share the key.","hierarchy":{"lvl0":"Features","lvl1":"The `decide` inference type","lvl2":"OpenAI Decisions, at its hosted endpoint","lvl3":""}},
|
|
2832
2832
|
{"objectID":"691b7e7dec264cbbdcf43939939e82963f66753635c1b5ca81b26b2be05c844b","title":"ScaleDown, at its hosted endpoint","url":"/docs/features/decide-inference-type#scaledown-at-its-hosted-endpoint","content":"ScaleDown's Classify models speak the same System One wire as TypeSafe, at a\npublic endpoint, so a key alone configures it and there is no base URL to set.\nNeuroLink calls <base URL>/v1/scaledown, drops trailing slashes from an\noverride, and sends the key in an x-api-key header and never as a Bearer token.\nThe key can equally come from the config passed to the SDK,\nnew NeuroLink({ credentials: { scaledown: { apiKey } } }), or per call. The\nprovider id is scaledown; scaledown-classify names it too.\n\nScaleDown is the last decision provider, and its key is its own. Nothing\nelse reads SCALEDOWN_API_KEY, so setting it can only be meant for ScaleDown. It\nstill comes last in the order: a host with only that key gets ScaleDown for the\nbuilt-in features, and a host that also has any earlier provider configured\n(including an OPENAI_API_KEY, PERPLEXITY_API_KEY or Cloudflare pair set only for\na text provider) gets that earlier provider and reaches ScaleDown only by naming\nit. When ScaleDown is the default, the built-in consumers make paid decision\ncalls, and still fail open.\n\nIt reads text only, and the state always goes out as a string. A string state\nis sent unchanged, any other value as its JSON text, and a string that is empty or\nonly whitespace is refused before any request, as an invalid_request. {} and\n[] are sent as that text. Images and video are refused before any request. Two\noptional keys in the entry's decide block say this to the shared engine,\nauthHeader: \"x-api-key\" and stateEncoding: \"text\"; an entry that omits them\nbehaves as before. The provider guide has the\nrequest and the\nbilling note:\na choice question is scored once per option, so input tokens grow with options\ntimes state length.\n\nMuch about the endpoint is not measured, including its context size, latency,\nrate limits and the maximum number of options, questions and levels; the guide\nlists what is not measured.","hierarchy":{"lvl0":"Features","lvl1":"The `decide` inference type","lvl2":"ScaleDown, at its hosted endpoint","lvl3":""}},
|
|
2833
2833
|
{"objectID":"7990ffc08aca0afbeae4310cfdcd3758daf52da4d9edd1da90a82b683f4d7d41","title":"Two transports","url":"/docs/features/decide-inference-type#two-transports","content":"The same model is reachable two ways. Which one runs is decided once, in the\nconstructor:\n\n| | Direct | Vercel AI Gateway |\n| ------------------- | ------------------ | --------------------------------------------- |\n| Key | TYPESAFE_API_KEY | AI_GATEWAY_API_KEY |\n| Endpoint | api.typesafe.ai | ai-gateway.vercel.sh/v4/ai/evaluation-model |\n| Model named in | request body | ai-model-id header |\n| Question vocabulary | noul | boolean |\n| confidence | on each answer | on providerMetadata, not on the answer |\n| Billed by | TypeSafe | Vercel |\n\nHolding both keys keeps the direct transport, so the confidence figures a\nhost already sees do not shift underneath it when a second key appears. Both\ntransports report the vendor's calibrated confidence — the gateway simply puts\nit somewhere else, under providerMetadata.typesafe.confidence.<questionId>,\nleaving the answer objects without one. Set TYPESAFE_TRANSPORT=gateway (or\ncredentials.typesafe.transport) to override.\n\n⚠️ Read that field, not the distribution peak. It is tempting to take\nmax(probabilities) when an answer carries no confidence, and on a\nnear-certain answer the two agree. On an uncertain one they do not, and not by a\nlittle: a measured four-way choice returned probabilities\n{alpha 0.16, beta 0.28, gamma 0.33, delta 0.23} — a peak of 0.33 against a\nreported confidence of 0.10. That gap straddles the default\nminUpgradeConfidence of 0.3, so the derived number clears a bar the real one\nfails and a near-random pick gets acted on as a confident one. The peak stays as\nthe fallback when neither source reports a confidence, and it is genuinely a\ndifferent quantity: an even distribution over N options lands near 1/N, not 0.","hierarchy":{"lvl0":"Features","lvl1":"The `decide` inference type","lvl2":"Two transports","lvl3":""}},
|
|
2834
2834
|
{"objectID":"e5df7db87d4cb31c67fcce769cf5a3573764cb358ed9ee4b41f7ce86cb3954b7","title":"Using it","url":"/docs/features/decide-inference-type#using-it","content":"readDecisionBoolean / readDecisionChoice / readDecisionScore validate at\nruntime and return undefined for a missing id or a mismatched type, so no\ncall site needs a type assertion.\n\nticketText is attacker-controlled, so the verdict is a hint: keep assignTo\nreversible or put a deterministic check in front of it (see the Untrusted input\nbullet under What it is bad at).\n\nUse decide() instead of tryDecide() when you want the failure to surface;\nit throws a ProviderError whose cause carries a typed kind\n(authentication, rate_limit, max_tokens_exceeded, …).\n\nMore questions than a provider takes. A provider that caps the questions in\none request (Laya and Cloudflare Clef take 64, Perplexity 128, OpenAI Decisions 200) refuses a longer map from decide() with max_tokens_exceeded, except\nOpenAI Decisions, whose row is advisory: its cap is reported and used to split,\nbut decide() sends a longer map whole and leaves the answer to the server.\ntryDecide(), which every built-in consumer calls, splits the map at the cap\ninstead, keeps the questions in the order given, runs\nup to four batches at a time and joins the answers into one result: usage is\nsummed, the latency is the slowest batch's, and requestId lists the batches'\nids. A batch that fails costs only its own questions, which then have no answer\n(the read* helpers return undefined for them, and every built-in consumer\ncarries on without that decision); tryDecide() returns null only when every\nbatch failed. The state and any media are sent with each batch, so a split\nrequest costs the state's tokens once for each batch. A provider with no cap\n(TypeSafe, XOR, SubQ, ScaleDown) always gets one request.","hierarchy":{"lvl0":"Features","lvl1":"The `decide` inference type","lvl2":"Using it","lvl3":""}},
|
|
@@ -3268,7 +3268,7 @@
|
|
|
3268
3268
|
{"objectID":"e94a1365fb1a84e6227655662d06d1f85813dc4fd43e02b681f28c1b32539eb4","title":"Usage","url":"/docs/features/mcp-enhancements#usage-6","content":"Usage","hierarchy":{"lvl0":"Features","lvl1":"MCP Enhancements","lvl2":"Usage","lvl3":""}},
|
|
3269
3269
|
{"objectID":"218137891a5c9dc10b8eadd26a2d9b7501b472b1c6745e54dfa8f77e2bbba11c","title":"Remote lookup (opt-in)","url":"/docs/features/mcp-enhancements#remote-lookup-opt-in","content":"Set remoteLookup: true to let the client consult the registries in registries. The default list is the official MCP Registry at https://registry.modelcontextprotocol.io; add your own with { type: \"custom\", url } or addRegistry(). A custom registry must serve the same /v0.1 API as the official one (GET /v0.1/servers and GET /v0.1/servers/{name}/versions/latest, see the registry API reference); url is its base URL.\n\nWhat to expect:\nOpt-in. With remoteLookup unset or false, no registry is contacted, whatever registries contains. A client you did not construct, such as the one from neurolink.getMCPRegistryClient(), can be switched with client.setRemoteLookup(true).\nWhen a registry is queried. getEntry(id) asks the registries only after the custom entries and the built-in catalog miss. search() and getAllEntries() merge each registry's servers after the local ones; an id that exists locally is never replaced by a remote entry. search({ query }) passes the query to the registry, which matches it against the server name (a substring match), so a word that appears only in a remote server's description is not found.\nRemote entries are unverified. They carry verified: false, so verifiedOnly never returns them. The registry publishes whatever its authors submit; review a server before running its command and args.\nIds differ from the built-in slugs. The official registry names servers in reverse-DNS form, such as io.github.example/my-server. Built-in slugs like filesystem are not aliased to them.\nWhat is mapped. An npm package becomes npmPackage, command: \"npx\" and args: [\"-y\", \"<package>@<version>\"], with its required environment variables in requiredEnvVars. Other package types (for example pypi or oci) and remote URLs are listed under entry.metadata.packages and entry.metadata.remotes; no command is set for them.\nPackage names are validated, not just typed.","hierarchy":{"lvl0":"Features","lvl1":"MCP Enhancements","lvl2":"Remote lookup (opt-in)","lvl3":""}},
|
|
3270
3270
|
{"objectID":"5b3d6019b7b02e98705f573ca40f35717ada3a4dc46fbfd54a20df21984f6f5f","title":"Methods","url":"/docs/features/mcp-enhancements#methods-1","content":"| Method | Description |\n| ----------------------------- | ------------------------------------------------------------------------------------------- |\n| search(options) | Search for servers with filters; includes remote servers when remote lookup is on |\n| getByCategory(category) | Browse servers by category |\n| getByTag(tag) | Filter entries by tag |\n| getCategories() | Get all available categories |\n| getTags() | Get all available tags |\n| getEntry(id) | Get a specific registry entry; asks the registries on a local miss when remote lookup is on |\n| getAllEntries() | Get local entries, plus every configured registry's servers when remote lookup is on |\n| addCustomEntry(entry) | Add a custom registry entry |\n| removeCustomEntry(id) | Remove a custom entry |\n| addRegistry(config) | Add a registry source (queried only when remote lookup is on) |\n| setRemoteLookup(enabled) | Turn remote lookup on or off at runtime |\n| getPopularServers(limit?)","hierarchy":{"lvl0":"Features","lvl1":"MCP Enhancements","lvl2":"Methods","lvl3":""}},
|
|
3271
|
-
{"objectID":"c9b947029152d8f4bb0d1aed82467f27f4a1d8f8bbead8f54e660c0e4696f13f","title":"Well-Known Servers","url":"/docs/features/mcp-enhancements#well-known-servers","content":"The registry includes these verified servers out of the box:\n\n| ID | Name | Categories | Key Tools |\n| -------------- | ------------ | -------------------- | ------------------------------- |\n| filesystem | Filesystem | file-system |
|
|
3271
|
+
{"objectID":"c9b947029152d8f4bb0d1aed82467f27f4a1d8f8bbead8f54e660c0e4696f13f","title":"Well-Known Servers","url":"/docs/features/mcp-enhancements#well-known-servers","content":"The registry includes these verified servers out of the box:\n\n| ID | Name | Categories | Key Tools |\n| -------------- | ------------ | -------------------- | ------------------------------- |\n| filesystem | Filesystem | file-system | read_file, write_file, list_dir |\n| github | GitHub | version-control, api | create_repo, list_commits |\n| postgres | PostgreSQL | database | query, list_tables |\n| sqlite | SQLite | database | query, list_tables |\n| brave-search | Brave Search | search, api | web_search, local_search |\n| puppeteer | Puppeteer | automation, web | navigate, screenshot, click |\n| git | Git | version-control | git_status, git_log, git_diff |\n| memory | Memory | memory, storage | store, retrieve, search |\n| slack | Slack | communication, api | send_message, list_channels |\n| google-drive | Google Drive | file-system, api | list_files, read_file |","hierarchy":{"lvl0":"Features","lvl1":"MCP Enhancements","lvl2":"Well-Known Servers","lvl3":""}},
|
|
3272
3272
|
{"objectID":"a36a67d4c4fc8beaeeb14bf7c5256b38a842698c0fd229ef22882f4bf8cb5688","title":"Key Types","url":"/docs/features/mcp-enhancements#key-types-11","content":"Key Types","hierarchy":{"lvl0":"Features","lvl1":"MCP Enhancements","lvl2":"Key Types","lvl3":""}},
|
|
3273
3273
|
{"objectID":"e05f50888fa69abd7742f6aaff003d55366c2353c7a67eeeed6679d88899c3a6","title":"Architecture","url":"/docs/features/mcp-enhancements#architecture","content":"For detailed per-module flow diagrams (Tool Router decision flow, Tool Cache eviction, Request Batcher sequencing, Elicitation Protocol handshake, and Multi-Server topology), see MCP Enhancement Architecture Diagrams.\n\nThe MCP enhancement modules are layered on top of NeuroLink's existing MCP infrastructure:","hierarchy":{"lvl0":"Features","lvl1":"MCP Enhancements","lvl2":"Architecture","lvl3":""}},
|
|
3274
3274
|
{"objectID":"829fd08702f1d9f3df55c22251371d69c9640ebcabe385ee66e684617f9c9fd7","title":"Data Flow","url":"/docs/features/mcp-enhancements#data-flow","content":"Data Flow","hierarchy":{"lvl0":"Features","lvl1":"MCP Enhancements","lvl2":"Data Flow","lvl3":""}},
|
|
@@ -4061,7 +4061,7 @@
|
|
|
4061
4061
|
{"objectID":"081502d8e5cd1a1c0f622a7d6118ac263dc88c9d07d8ef96402d71b4957a7172","title":"POST /api/agent/transcribe","url":"/docs/features/transcribe#post-apiagenttranscribe","content":"JSON body with exactly one audio source:\n\n| Source | Rules |\n| ----------- | ------------------------------------------------------------------------------------------------------------------------------- |\n| audio | Base64, or a data:audio/...;base64, URL. Bounded by the adapter's JSON body limit (bodyParser.jsonLimit, 10 MB by default). |\n| audioUrl | An http(s) URL the server downloads through the SSRF guard (private addresses and redirects refused), capped in size. |\n| audioPath | A path on the server. Refused by default; allowed only inside the directories in transcribe.allowedAudioRoots. |\n\nThe response is the TranscribeResult, in the adapters' usual\n{ data, metadata } envelope. Errors use the usual error shape: 400 for an\ninvalid body or an unsupported provider, language or format, 403 for a refused\naudioPath, 413 for audio over the limit, 500 for an engine failure.","hierarchy":{"lvl0":"Features","lvl1":"The transcribe inference type","lvl2":"POST /api/agent/transcribe","lvl3":""}},
|
|
4062
4062
|
{"objectID":"32a917bb7037f51d56da847c36cba9409b8d0a8951cf84aa19822c24a74b8f3f","title":"POST /v1/audio/transcriptions (OpenAI-compatible)","url":"/docs/features/transcribe#post-v1audiotranscriptions-openai-compatible","content":"multipart/form-data, the way OpenAI's API takes it, so an OpenAI client\npointed at http://<host>:<port>/v1 works unchanged:\n\n| Field | Meaning |\n| --------------------------- | ----------------------------------------------------------------------------------------------------------- |\n| file | The audio (required). Its name or type sets the container. |\n| model | <provider> or <provider>/<model>. OpenAI's own model names and auto mean the server's default engine. |\n| language, prompt | As in the SDK. |\n| response_format | json ({ \"text\" }, the default), text (plain text) or verbose_json. |\n| timestamp_granularities[] | word requests word timings. |\n| temperature | Accepted and ignored. |\n| provider | Extension: the STT provider, overriding model. |\n| diarize | Extension: true labels speakers. |\n| dictionary | Extension: the dictionary as a JSON string. |\n| correct | Extension: true runs the correction layer. |\n| fallback | Extension: fallback STT provider.","hierarchy":{"lvl0":"Features","lvl1":"The transcribe inference type","lvl2":"POST /v1/audio/transcriptions (OpenAI-compatible)","lvl3":""}},
|
|
4063
4063
|
{"objectID":"7f04ab4c7a4895ae38a057d50ee353f51a84b959feb713784f0779b9d0319798","title":"WebSocket /v1/audio/transcriptions/stream","url":"/docs/features/transcribe#websocket-v1audiotranscriptionsstream","content":"The route adapters do not handle WebSocket upgrades, so the streaming endpoint\nattaches to the Node HTTP server you own:\nThe first frame is text: a JSON config with the JSON route's fields\n minus the audio, plus streaming (for example { \"language\": \"auto\",\n\"streaming\": { \"sampleRate\": 16000 } }).\nThen binary frames of PCM16LE mono audio at that sample rate.\nA text frame { \"type\": \"end\" }, or closing the socket, ends the audio.\n\nThe server sends one JSON text frame per TranscribeStreamEvent and closes\nwith 1000 when the stream is done; an invalid config gets an error event and\nclose code 1008.","hierarchy":{"lvl0":"Features","lvl1":"The transcribe inference type","lvl2":"WebSocket /v1/audio/transcriptions/stream","lvl3":""}},
|
|
4064
|
-
{"objectID":"499945493bd6604fe9de0b7511127a8f248c00e05724562e9c6c1cd6bf63aa97","title":"Text-to-Speech (TTS) Integration Guide","url":"/docs/features/tts","content":"Text-to-Speech (TTS) Integration Guide\n\nNeuroLink provides integrated Text-to-Speech (TTS) capabilities, allowing you to generate high-quality audio from text prompts or AI-generated responses. This feature is perfect for voice assistants, accessibility features, narration, podcasts, and more.\n\nOverview\n\nKey Features:\nMultiple providers - Google Cloud TTS, OpenAI TTS, ElevenLabs, Azure TTS, Fish Audio, Cartesia, and 60db\nHigh-quality voices - Neural, Wavenet, Standard, and multilingual voice types\nMultiple languages - 50+ voices across 10+ languages\nFlexible audio formats - MP3, WAV, OGG/Opus\nVoice customization - Adjust speed, pitch, and volume\nTwo synthesis modes - Direct text-to-speech OR AI response synthesis\nProduction-ready - Works with Google Cloud, OpenAI, ElevenLabs, Azure, Fish Audio, Cartesia, and 60db\n\nQuick Start\n\nInstallation\n\nTTS support is built into NeuroLink. No additional installation required.\n\nEnvironment Setup\n\nSet the appropriate environment variables for your chosen TTS provider:\n\nGoogle API Key Configuration:\n\nIf using API key authentication for Google, enable both APIs in Google Cloud Console:\nNavigate to \"APIs & Services\" > \"Credentials\"\nCreate or select your API key\nUnder \"API restrictions\", enable:\nGenerative Language API (for Gemini)\nCloud Text-to-Speech API (for TTS)\n\nBasic Usage\n\nCLI:\n\nSDK:\n\nSupported Providers\n\nTTS is available through the following providers:\n\n| Provider | Authentication | Voices / Models | Notes |\n| -------------- | ----------------------------------------------------------- | ------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| google-ai | Service Account (GOOGLE_APPLICATION_CREDENTIALS) | 50+ voices (Neural2, Wavenet, Standard) | Same auth as vertex (TTS uses Google Cloud Text-to-Speech client) |\n| vertex | Service Account (GOOGLE_APPLICATION_CREDENTIALS) | 50+ voices (Neural2, Wavenet, Standard) | Recommended for production |\n| openai-tts | API Key (OPENAI_API_KEY) | 6 voices: alloy, echo, fable, onyx, nova, shimmer; models: tts-1, tts-1-hd | Good default quality |\n| elevenlabs | API Key (ELEVENLABS_API_KEY) | Multilingual voices; model:
|
|
4064
|
+
{"objectID":"499945493bd6604fe9de0b7511127a8f248c00e05724562e9c6c1cd6bf63aa97","title":"Text-to-Speech (TTS) Integration Guide","url":"/docs/features/tts","content":"Text-to-Speech (TTS) Integration Guide\n\nNeuroLink provides integrated Text-to-Speech (TTS) capabilities, allowing you to generate high-quality audio from text prompts or AI-generated responses. This feature is perfect for voice assistants, accessibility features, narration, podcasts, and more.\n\nOverview\n\nKey Features:\nMultiple providers - Google Cloud TTS, OpenAI TTS, ElevenLabs, Azure TTS, Fish Audio, Cartesia, and 60db\nHigh-quality voices - Neural, Wavenet, Standard, and multilingual voice types\nMultiple languages - 50+ voices across 10+ languages\nFlexible audio formats - MP3, WAV, OGG/Opus\nVoice customization - Adjust speed, pitch, and volume\nTwo synthesis modes - Direct text-to-speech OR AI response synthesis\nProduction-ready - Works with Google Cloud, OpenAI, ElevenLabs, Azure, Fish Audio, Cartesia, and 60db\n\nQuick Start\n\nInstallation\n\nTTS support is built into NeuroLink. No additional installation required.\n\nEnvironment Setup\n\nSet the appropriate environment variables for your chosen TTS provider:\n\nGoogle API Key Configuration:\n\nIf using API key authentication for Google, enable both APIs in Google Cloud Console:\nNavigate to \"APIs & Services\" > \"Credentials\"\nCreate or select your API key\nUnder \"API restrictions\", enable:\nGenerative Language API (for Gemini)\nCloud Text-to-Speech API (for TTS)\n\nBasic Usage\n\nCLI:\n\nSDK:\n\nSupported Providers\n\nTTS is available through the following providers:\n\n| Provider | Authentication | Voices / Models | Notes |\n| -------------- | ----------------------------------------------------------- | ------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| google-ai | Service Account (GOOGLE_APPLICATION_CREDENTIALS) | 50+ voices (Neural2, Wavenet, Standard) | Same auth as vertex (TTS uses Google Cloud Text-to-Speech client) |\n| vertex | Service Account (GOOGLE_APPLICATION_CREDENTIALS) | 50+ voices (Neural2, Wavenet, Standard) | Recommended for production |\n| openai-tts | API Key (OPENAI_API_KEY) | 6 voices: alloy, echo, fable, onyx, nova, shimmer; models: tts-1, tts-1-hd | Good default quality |\n| elevenlabs | API Key (ELEVENLABS_API_KEY) | Multilingual voices; model: eleven_multilingual_v2 | High-quality multilingual synthesis |\n| azure-tts | API Key (AZURE_SPEECH_KEY + region AZURE_SPEECH_REGION) | Neural voices with SSML support | Enterprise-grade Azure Speech |\n| fish-audio | API Key (FISH_AUDIO_API_KEY) | 14 languages, voice cloning (15 s reference); models: s1 (default), speech-1.6, speech-1.5 | Low-cost, ~80% cheaper than ElevenLabs — see provider guide |\n| cartesia | API Key (CARTESIA_API_KEY) | Cartesia voice library, English-first; models: sonic-3.6 (default) | Low-latency Sonic models — see provider guide. Synchronous /tts/bytes; the WebSocket streaming flow is exposed separately via CartesiaStream in the voice server. |\n| sixtydb | Workspace API key (SIXTYDB_API_KEY) | Quality and fast workspace voice catalogs | WAV or PCM16 at 24 kHz — see ","hierarchy":{"lvl0":"Features","lvl1":"Text-to-Speech (TTS) Integration Guide","lvl2":"","lvl3":""}},
|
|
4065
4065
|
{"objectID":"9384b791f5d32ea2c126e7a7a7a8852d80e56954c061aba2d9e493b0a9c25f2b","title":"Text-to-Speech (TTS) Integration Guide","url":"/docs/features/tts#text-to-speech-tts-integration-guide","content":"NeuroLink provides integrated Text-to-Speech (TTS) capabilities, allowing you to generate high-quality audio from text prompts or AI-generated responses. This feature is perfect for voice assistants, accessibility features, narration, podcasts, and more.","hierarchy":{"lvl0":"Features","lvl1":"Text-to-Speech (TTS) Integration Guide","lvl2":"Text-to-Speech (TTS) Integration Guide","lvl3":""}},
|
|
4066
4066
|
{"objectID":"9cc14837132bc1ce344a44ef8c73aa1b77fe9b81356e3f5e565115a158d47618","title":"Overview","url":"/docs/features/tts#overview","content":"Key Features:\nMultiple providers - Google Cloud TTS, OpenAI TTS, ElevenLabs, Azure TTS, Fish Audio, Cartesia, and 60db\nHigh-quality voices - Neural, Wavenet, Standard, and multilingual voice types\nMultiple languages - 50+ voices across 10+ languages\nFlexible audio formats - MP3, WAV, OGG/Opus\nVoice customization - Adjust speed, pitch, and volume\nTwo synthesis modes - Direct text-to-speech OR AI response synthesis\nProduction-ready - Works with Google Cloud, OpenAI, ElevenLabs, Azure, Fish Audio, Cartesia, and 60db","hierarchy":{"lvl0":"Features","lvl1":"Text-to-Speech (TTS) Integration Guide","lvl2":"Overview","lvl3":""}},
|
|
4067
4067
|
{"objectID":"fb806097773dc1e87ec327d66a211bf8490b77fa0bc7fafb95d74effe72bb7a5","title":"Installation","url":"/docs/features/tts#installation","content":"TTS support is built into NeuroLink. No additional installation required.","hierarchy":{"lvl0":"Features","lvl1":"Text-to-Speech (TTS) Integration Guide","lvl2":"Installation","lvl3":""}},
|
|
@@ -4799,20 +4799,20 @@
|
|
|
4799
4799
|
{"objectID":"8d743472fd8cf0d4436b7576ae79643241b2751c5d1c8d26212860269138ac30","title":"Rate Limiting","url":"/docs/getting-started/providers/anthropic#rate-limiting","content":"The provider tracks rate limits automatically and logs warnings when approaching limits. Monitor usage via getUsageInfo() and getLastResponseMetadata().","hierarchy":{"lvl0":"Getting Started","lvl1":"Anthropic Provider Guide","lvl2":"Rate Limiting","lvl3":""}},
|
|
4800
4800
|
{"objectID":"52580015f3538f46d6683422aa4fb6c5c98e1b506dc8e49c6e0ceb0035a230c3","title":"Related Documentation","url":"/docs/getting-started/providers/anthropic#related-documentation","content":"Provider Setup Guide - General provider configuration\nExtended Thinking Configuration - Thinking modes","hierarchy":{"lvl0":"Getting Started","lvl1":"Anthropic Provider Guide","lvl2":"Related Documentation","lvl3":""}},
|
|
4801
4801
|
{"objectID":"ba03f6870dbba083038ddcbfa18c3920e1316417fa15cd381421dc3c49833a18","title":"Additional Resources","url":"/docs/getting-started/providers/anthropic#additional-resources","content":"Anthropic Console - Manage API keys\nAnthropic Documentation - Official API docs\nClaude.ai - Claude web interface\nAnthropic Pricing - Pricing details","hierarchy":{"lvl0":"Getting Started","lvl1":"Anthropic Provider Guide","lvl2":"Additional Resources","lvl3":""}},
|
|
4802
|
-
{"objectID":"8e04ea140270a46dc7ece8832f4742841647ad899465799d9825fe8f74b1e07d","title":"API Route Provider Guide","url":"/docs/getting-started/providers/api-route","content":"API Route Provider Guide\n\nAPI Route is a Tier-2 catalog provider: OpenAI-wire-compatible with no\nbehavioural quirks, so its entire integration is one JSON file\n(src/lib/providers/catalog/api-route.json) rather than hand-written code. That\nfile is the source of truth for everything on this page.\n\nKey Facts\nProvider id: api-route (aliases: apiroute)\nProtocol: OpenAI-compatible (/chat/completions)\nBase URL: https://global.api-route.com/v1\nDefault model: claude-sonnet-4-6\nModels in catalog: 8\nStreaming: supported\nTool calling: supported (native)\nStructured output: supported\nEmbeddings: not supported\nBilling: free-tier\n\nQuick Start\nGet an API key\nVisit: https://api-route.com and create an account\nGenerate an API key in your console / dashboard\nSet API_ROUTE_API_KEY in your .env file\nConfigure\nUse it\n\nPer-request credentials work as they do for every provider:\n\nModels\n\n| Model | Context | Vision | $/M in · out | Notes |\n| ---------------------- | ------- | ------ | ------------ | ------------------------------------------------------------------------------------------ |\n| claude-sonnet-4-6 ⭐ | 1M | yes | — | Claude Sonnet 4.6 — flagship model with 1M context, tool calling, and multimodal vision |\n| claude-haiku-4-5 | 195K | yes | — | Claude Haiku 4.5 — fast, high-efficiency model with 200K context, tool calling, and vision |\n| deepseek-v4-flash | 1M | no | — | DeepSeek V4 Flash — fast, cost-effective reasoning model with 1M context |\n| deepseek-v4-pro | 1M | no | — | DeepSeek V4 Pro — powerful reasoning model with 1M context |\n| gemini-3.8-flash | 1M | yes | — | Gemini 3.8 Flash — high-speed multimodal model supporting image input and streaming |\n| qwen3.8-flash | 125K | no | — | Qwen 3.8 Flash — versatile, fast model for general instruction and coding tasks |\n| kimi-k2.7-code | 250K | no | — | Kimi K2.7 Code — specialized for coding and multi-step reasoning |\n| glm-5.3-flash | 125K | no | — | GLM 5.3 Flash — lightweight, fast conversational and instruction-following model |\n\nFallback order when the default is unavailable: claude-haiku-4-5 → deepseek-v4-flash → gemini-3.8-flash.\n\nVerification status\n\nTier-2 onboarding requires evidence before a provider is accepted, and\npnpm run verify:provider-onboarding gates it in CI. This is what the\ncatalog records for API Route:\n\n| Probe | Result |\n| --------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Roster | authenticated GET /v1/models, HTTP 200, 2026-09-17 |\n| Auth rejection | HTTP 401, 2026-09-17 |\n| Live capability sweep | 2026-09-17 — Verified live against https://global.api-route.com/v1: GET /v1/models returned 70 models. Chat completions, streaming, function calling, streamed function calling, and structured JSON output (
|
|
4802
|
+
{"objectID":"8e04ea140270a46dc7ece8832f4742841647ad899465799d9825fe8f74b1e07d","title":"API Route Provider Guide","url":"/docs/getting-started/providers/api-route","content":"API Route Provider Guide\n\nAPI Route is a Tier-2 catalog provider: OpenAI-wire-compatible with no\nbehavioural quirks, so its entire integration is one JSON file\n(src/lib/providers/catalog/api-route.json) rather than hand-written code. That\nfile is the source of truth for everything on this page.\n\nKey Facts\nProvider id: api-route (aliases: apiroute)\nProtocol: OpenAI-compatible (/chat/completions)\nBase URL: https://global.api-route.com/v1\nDefault model: claude-sonnet-4-6\nModels in catalog: 8\nStreaming: supported\nTool calling: supported (native)\nStructured output: supported\nEmbeddings: not supported\nBilling: free-tier\n\nQuick Start\nGet an API key\nVisit: https://api-route.com and create an account\nGenerate an API key in your console / dashboard\nSet API_ROUTE_API_KEY in your .env file\nConfigure\nUse it\n\nPer-request credentials work as they do for every provider:\n\nModels\n\n| Model | Context | Vision | $/M in · out | Notes |\n| ---------------------- | ------- | ------ | ------------ | ------------------------------------------------------------------------------------------ |\n| claude-sonnet-4-6 ⭐ | 1M | yes | — | Claude Sonnet 4.6 — flagship model with 1M context, tool calling, and multimodal vision |\n| claude-haiku-4-5 | 195K | yes | — | Claude Haiku 4.5 — fast, high-efficiency model with 200K context, tool calling, and vision |\n| deepseek-v4-flash | 1M | no | — | DeepSeek V4 Flash — fast, cost-effective reasoning model with 1M context |\n| deepseek-v4-pro | 1M | no | — | DeepSeek V4 Pro — powerful reasoning model with 1M context |\n| gemini-3.8-flash | 1M | yes | — | Gemini 3.8 Flash — high-speed multimodal model supporting image input and streaming |\n| qwen3.8-flash | 125K | no | — | Qwen 3.8 Flash — versatile, fast model for general instruction and coding tasks |\n| kimi-k2.7-code | 250K | no | — | Kimi K2.7 Code — specialized for coding and multi-step reasoning |\n| glm-5.3-flash | 125K | no | — | GLM 5.3 Flash — lightweight, fast conversational and instruction-following model |\n\nFallback order when the default is unavailable: claude-haiku-4-5 → deepseek-v4-flash → gemini-3.8-flash.\n\nVerification status\n\nTier-2 onboarding requires evidence before a provider is accepted, and\npnpm run verify:provider-onboarding gates it in CI. This is what the\ncatalog records for API Route:\n\n| Probe | Result |\n| --------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Roster | authenticated GET /v1/models, HTTP 200, 2026-09-17 |\n| Auth rejection | HTTP 401, 2026-09-17 |\n| Live capability sweep | 2026-09-17 — Verified live against https://global.api-route.com/v1: GET /v1/models returned 70 models. Chat completions, streaming, function calling, streamed function calling, and structured JSON output (json_object and json_schema) |\n\nTroubleshooting\n\n| Symptom | Cause | Fix |\n| --------------------------- | ----------------------------------- | ----------------------------------------------------------------- |\n| Invalid API Route API key | API_ROUTE_API_KEY unset or wrong | Check the key at https://api-route.com |\n| Model not found | The roster changed since 2026-09-17 | Pick a current id; catalog providers retire models without notice |\n\nSee also\nProvider setup overview\nAll providers\nTier-2 onboarding — how this provider's JSON becomes a working integration\nProvider feature compatibility","hierarchy":{"lvl0":"Getting Started","lvl1":"API Route Provider Guide","lvl2":"","lvl3":""}},
|
|
4803
4803
|
{"objectID":"077489791e128a278e530b900c4d2053f713f2f22819a2415441616cbe819a71","title":"API Route Provider Guide","url":"/docs/getting-started/providers/api-route#api-route-provider-guide","content":"API Route is a Tier-2 catalog provider: OpenAI-wire-compatible with no\nbehavioural quirks, so its entire integration is one JSON file\n(src/lib/providers/catalog/api-route.json) rather than hand-written code. That\nfile is the source of truth for everything on this page.","hierarchy":{"lvl0":"Getting Started","lvl1":"API Route Provider Guide","lvl2":"API Route Provider Guide","lvl3":""}},
|
|
4804
4804
|
{"objectID":"e33c9b8eba1ac9981ecd25564565de80d6a226a48e6e68f9445394eb8362e4e9","title":"Key Facts","url":"/docs/getting-started/providers/api-route#key-facts","content":"Provider id: api-route (aliases: apiroute)\nProtocol: OpenAI-compatible (/chat/completions)\nBase URL: https://global.api-route.com/v1\nDefault model: claude-sonnet-4-6\nModels in catalog: 8\nStreaming: supported\nTool calling: supported (native)\nStructured output: supported\nEmbeddings: not supported\nBilling: free-tier","hierarchy":{"lvl0":"Getting Started","lvl1":"API Route Provider Guide","lvl2":"Key Facts","lvl3":""}},
|
|
4805
4805
|
{"objectID":"1206ed8b0eda11b34d3d475c01784c649390693b151073e3b5c07ad5f89f1095","title":"1. Get an API key","url":"/docs/getting-started/providers/api-route#1-get-an-api-key","content":"Visit: https://api-route.com and create an account\nGenerate an API key in your console / dashboard\nSet API_ROUTE_API_KEY in your .env file","hierarchy":{"lvl0":"Getting Started","lvl1":"API Route Provider Guide","lvl2":"1. Get an API key","lvl3":""}},
|
|
4806
4806
|
{"objectID":"880d231c816b09290aad3ac5f0ee2c26a80f8b17feacd97b2df9e1b50fba5e4a","title":"2. Configure","url":"/docs/getting-started/providers/api-route#2-configure","content":"2. Configure","hierarchy":{"lvl0":"Getting Started","lvl1":"API Route Provider Guide","lvl2":"2. Configure","lvl3":""}},
|
|
4807
4807
|
{"objectID":"74948991537a22e7dbf24b0da3f7c0e826418eeabf591c9912a62f0af72bad5e","title":"3. Use it","url":"/docs/getting-started/providers/api-route#3-use-it","content":"Per-request credentials work as they do for every provider:","hierarchy":{"lvl0":"Getting Started","lvl1":"API Route Provider Guide","lvl2":"3. Use it","lvl3":""}},
|
|
4808
4808
|
{"objectID":"da2cdfd41d42de89a99efbd3b248cc0b7707ee73d9e02c1be2323fc99774841b","title":"Models","url":"/docs/getting-started/providers/api-route#models","content":"| Model | Context | Vision | $/M in · out | Notes |\n| ---------------------- | ------- | ------ | ------------ | ------------------------------------------------------------------------------------------ |\n| claude-sonnet-4-6 ⭐ | 1M | yes | — | Claude Sonnet 4.6 — flagship model with 1M context, tool calling, and multimodal vision |\n| claude-haiku-4-5 | 195K | yes | — | Claude Haiku 4.5 — fast, high-efficiency model with 200K context, tool calling, and vision |\n| deepseek-v4-flash | 1M | no | — | DeepSeek V4 Flash — fast, cost-effective reasoning model with 1M context |\n| deepseek-v4-pro | 1M | no | — | DeepSeek V4 Pro — powerful reasoning model with 1M context |\n| gemini-3.8-flash | 1M | yes | — | Gemini 3.8 Flash — high-speed multimodal model supporting image input and streaming |\n| qwen3.8-flash | 125K | no | — | Qwen 3.8 Flash — versatile, fast model for general instruction and coding tasks |\n| kimi-k2.7-code | 250K | no | — | Kimi K2.7 Code — specialized for coding and multi-step reasoning |\n| glm-5.3-flash | 125K | no | — | GLM 5.3 Flash — lightweight, fast conversational and instruction-following model |\n\nFallback order when the default is unavailable: claude-haiku-4-5 → deepseek-v4-flash → gemini-3.8-flash.","hierarchy":{"lvl0":"Getting Started","lvl1":"API Route Provider Guide","lvl2":"Models","lvl3":""}},
|
|
4809
|
-
{"objectID":"a829c7ea7d755ed69e4f2fd66b9b4181706ea927fafe747aff052ff1694e3208","title":"Verification status","url":"/docs/getting-started/providers/api-route#verification-status","content":"Tier-2 onboarding requires evidence before a provider is accepted, and\npnpm run verify:provider-onboarding gates it in CI. This is what the\ncatalog records for API Route:\n\n| Probe | Result |\n| --------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Roster | authenticated GET /v1/models, HTTP 200, 2026-09-17 |\n| Auth rejection | HTTP 401, 2026-09-17 |\n| Live capability sweep | 2026-09-17 — Verified live against https://global.api-route.com/v1: GET /v1/models returned 70 models. Chat completions, streaming, function calling, streamed function calling, and structured JSON output (
|
|
4809
|
+
{"objectID":"a829c7ea7d755ed69e4f2fd66b9b4181706ea927fafe747aff052ff1694e3208","title":"Verification status","url":"/docs/getting-started/providers/api-route#verification-status","content":"Tier-2 onboarding requires evidence before a provider is accepted, and\npnpm run verify:provider-onboarding gates it in CI. This is what the\ncatalog records for API Route:\n\n| Probe | Result |\n| --------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Roster | authenticated GET /v1/models, HTTP 200, 2026-09-17 |\n| Auth rejection | HTTP 401, 2026-09-17 |\n| Live capability sweep | 2026-09-17 — Verified live against https://global.api-route.com/v1: GET /v1/models returned 70 models. Chat completions, streaming, function calling, streamed function calling, and structured JSON output (json_object and json_schema) |","hierarchy":{"lvl0":"Getting Started","lvl1":"API Route Provider Guide","lvl2":"Verification status","lvl3":""}},
|
|
4810
4810
|
{"objectID":"bc92ecfff94022bb7ac65c46d0f0420c49b1d1aa6ad44d3ddbd10aca4cb2808f","title":"Troubleshooting","url":"/docs/getting-started/providers/api-route#troubleshooting","content":"| Symptom | Cause | Fix |\n| --------------------------- | ----------------------------------- | ----------------------------------------------------------------- |\n| Invalid API Route API key | API_ROUTE_API_KEY unset or wrong | Check the key at https://api-route.com |\n| Model not found | The roster changed since 2026-09-17 | Pick a current id; catalog providers retire models without notice |","hierarchy":{"lvl0":"Getting Started","lvl1":"API Route Provider Guide","lvl2":"Troubleshooting","lvl3":""}},
|
|
4811
4811
|
{"objectID":"7bc9dfff71486ee8ef56b766b5763a939281319919c770f077801f72de82566e","title":"See also","url":"/docs/getting-started/providers/api-route#see-also","content":"Provider setup overview\nAll providers\nTier-2 onboarding — how this provider's JSON becomes a working integration\nProvider feature compatibility","hierarchy":{"lvl0":"Getting Started","lvl1":"API Route Provider Guide","lvl2":"See also","lvl3":""}},
|
|
4812
|
-
{"objectID":"ff86b3e34afb9ba8b89efbf7279850f8df16470b0bab216f27b1ae2775bba21b","title":"Arcee Provider Guide","url":"/docs/getting-started/providers/arcee","content":"Arcee Provider Guide\n\nArcee is a Tier-2 catalog provider: OpenAI-wire-compatible, so its entire\nintegration is one JSON file (src/lib/providers/catalog/arcee.json) rather\nthan hand-written code. That file is the source of truth for everything on this\npage.\n\nVerification status: this entry is docs-verified only, not yet\nlive-verified. The vendor's GET https://api.arcee.ai/api/v1/models needs a\nkey (it answers HTTP 401 without one), so the model ids come from Arcee's\npublic docs and the roster has not been checked. No account was created and no\nAPI key was used to build this entry. evidence.liveMatrix is null until\nsomeone runs the live capability matrix with a real key (see\nVerification status below).\n\nKey Facts\nProvider id: arcee\nProtocol: OpenAI-compatible (/chat/completions). The\n Your First API Call page\n says \"The Arcee Platform API is OpenAI compatible.\"\nBase URL: https://api.arcee.ai/api/v1 — the base_url value in the\n Quick Start Python example\n and the baseURL value in its JavaScript example. The\n Your First API Call page\n table lists base_url as https://api.arcee.ai/api/v1/chat/completions;\n wire.baseURL is the value the SDK examples set\nDefault model: trinity-large-thinking — the API Model Name the\n Arcee Model Overview\n lists for Trinity-Large-Thinking (400B), which the page says is \"the only Arcee\n model available via api.\"\nModels in catalog: 10 — the ten rows of the \"Text Models\" table on the\n pricing page\nStreaming: supported — the\n Streaming Messages page\n says \"To enable streaming, set stream=True.\"\nTool calling: model-dependent — the\n Function Calling page\n documents the tools parameter and the tool_calls output with a\n MODEL_NAME placeholder, and the\n Trinity-Large-Thinking page\n lists \"Purpose-built for tool calling, multi-step planning, and agent\n workflows\" under Key Features\nTools while streaming: false — not exercised, since no POST request was\n sent\nStructured output: true — the\n Structured Outputs page\n documents the response_format value {'type': 'json_object'}. Under \"To\n enable JSON Output, users should:\" the page lists \"Include the word \"json\" in\n the system or user prompt, and provide an example of the desired JSON format\n to guide the model in outputting valid JSON.\" and \"Set the max_tokens\n parameter reasonably to prevent the JSON string from being truncated\n midway.\"\n quirks.responseFormatDowngrade is set so a generate({ schema }) request\n sends json_object; NeuroLink still validates the response against your\n schema on the client. No request with json_schema was sent\nStructured output + tools together: false — no combined probe was run\n without credentials\nEmbeddings: false\nThinking: false — the entry sets no thinking-level request parameter.\n The Reasoning Traces page\n documents the reasoning_content response field for Trinity-Large-Thinking\nReasoning replay (quirks.replayReasoningContent: true): the\n Trinity-Large-Thinking page says \"thinking tokens must be kept in context for\n multi-turn conversations and agentic loops to function correctly\", and the\n Reasoning Traces page says \"use reasoning_content when constructing\n assistant messages for input\". NeuroLink sends each assistant turn's\n reasoning_content back on later requests. No multi-turn request was sent\nBilling: schema value no-free-tier, see Billing below\nKey format: none declared. The\n Chat Completion reference\n gives the key format as \"Arcee API key (prefixed with rcai-)\"; NeuroLink does\n not validate it because no key was available to test it\n\nQuick Start\nGet an API key\nVisit: https://platform.arcee.ai/api/api-keys — the Quick Start says to access the Arcee Platform (https://platform.arcee.ai/), \"Register or Login.\", then to \"Create an API Key in the API Keys management page.\" and \"Copy your API Key for use and store in a secure location.\"\nAuthentication is HTTP Bearer: the Quick Start's curl example sends the header Authorization: Bearer
|
|
4812
|
+
{"objectID":"ff86b3e34afb9ba8b89efbf7279850f8df16470b0bab216f27b1ae2775bba21b","title":"Arcee Provider Guide","url":"/docs/getting-started/providers/arcee","content":"Arcee Provider Guide\n\nArcee is a Tier-2 catalog provider: OpenAI-wire-compatible, so its entire\nintegration is one JSON file (src/lib/providers/catalog/arcee.json) rather\nthan hand-written code. That file is the source of truth for everything on this\npage.\n\nVerification status: this entry is docs-verified only, not yet\nlive-verified. The vendor's GET https://api.arcee.ai/api/v1/models needs a\nkey (it answers HTTP 401 without one), so the model ids come from Arcee's\npublic docs and the roster has not been checked. No account was created and no\nAPI key was used to build this entry. evidence.liveMatrix is null until\nsomeone runs the live capability matrix with a real key (see\nVerification status below).\n\nKey Facts\nProvider id: arcee\nProtocol: OpenAI-compatible (/chat/completions). The\n Your First API Call page\n says \"The Arcee Platform API is OpenAI compatible.\"\nBase URL: https://api.arcee.ai/api/v1 — the base_url value in the\n Quick Start Python example\n and the baseURL value in its JavaScript example. The\n Your First API Call page\n table lists base_url as https://api.arcee.ai/api/v1/chat/completions;\n wire.baseURL is the value the SDK examples set\nDefault model: trinity-large-thinking — the API Model Name the\n Arcee Model Overview\n lists for Trinity-Large-Thinking (400B), which the page says is \"the only Arcee\n model available via api.\"\nModels in catalog: 10 — the ten rows of the \"Text Models\" table on the\n pricing page\nStreaming: supported — the\n Streaming Messages page\n says \"To enable streaming, set stream=True.\"\nTool calling: model-dependent — the\n Function Calling page\n documents the tools parameter and the tool_calls output with a\n MODEL_NAME placeholder, and the\n Trinity-Large-Thinking page\n lists \"Purpose-built for tool calling, multi-step planning, and agent\n workflows\" under Key Features\nTools while streaming: false — not exercised, since no POST request was\n sent\nStructured output: true — the\n Structured Outputs page\n documents the response_format value {'type': 'json_object'}. Under \"To\n enable JSON Output, users should:\" the page lists \"Include the word \"json\" in\n the system or user prompt, and provide an example of the desired JSON format\n to guide the model in outputting valid JSON.\" and \"Set the max_tokens\n parameter reasonably to prevent the JSON string from being truncated\n midway.\"\n quirks.responseFormatDowngrade is set so a generate({ schema }) request\n sends json_object; NeuroLink still validates the response against your\n schema on the client. No request with json_schema was sent\nStructured output + tools together: false — no combined probe was run\n without credentials\nEmbeddings: false\nThinking: false — the entry sets no thinking-level request parameter.\n The Reasoning Traces page\n documents the reasoning_content response field for Trinity-Large-Thinking\nReasoning replay (quirks.replayReasoningContent: true): the\n Trinity-Large-Thinking page says \"thinking tokens must be kept in context for\n multi-turn conversations and agentic loops to function correctly\", and the\n Reasoning Traces page says \"use reasoning_content when constructing\n assistant messages for input\". NeuroLink sends each assistant turn's\n reasoning_content back on later requests. No multi-turn request was sent\nBilling: schema value no-free-tier, see Billing below\nKey format: none declared. The\n Chat Completion reference\n gives the key format as \"Arcee API key (prefixed with rcai-)\"; NeuroLink does\n not validate it because no key was available to test it\n\nQuick Start\nGet an API key\nVisit: https://platform.arcee.ai/api/api-keys — the Quick Start says to access the Arcee Platform (https://platform.arcee.ai/), \"Register or Login.\", then to \"Create an API Key in the API Keys management page.\" and \"Copy your API Key for use and store in a secure location.\"\nAuthentication is HTTP Bearer: the Quick Start's curl example sends the header Authorization: Bearer YOUR_API_KEY, and the Chat Completion reference (https://docs.arcee.ai/api-reference/chat-completion.md) gives the key format as \"Arcee API key (prefixed with rcai-)\"\nBilling as the vendor states it: the Quick Start says to open the Wallet (https://platform.arcee.ai/api/wallet) \"to top up if needed\"; the Chat Completion reference lists HTTP 402 as \"Insufficient Balance\"\nSet ARCEE_API_KEY in your .env file\nConfigure\nUse it\n\nPer-request credentials use the same shape as the other catalog providers:\n\nBilling\n\nThe Quick Start says to open\nthe Wallet (https://platform.arcee.ai/api/wallet) \"to top up if needed\". The\nChat Completion reference\nlists HTTP 402 as \"Insufficient Balance\". The\npricing page says \"All prices are\nin USD.\" and lists prices per 1M tokens.\n\nThe catalog schema has no unknown billing value, so billingPolicy holds\nno-free-tier. It is a schema value, not a vendor statement of signup terms.\n\nModels\n\n| Model | Context | Vision | $/M in · out (cached) | Notes ","hierarchy":{"lvl0":"Getting Started","lvl1":"Arcee Provider Guide","lvl2":"","lvl3":""}},
|
|
4813
4813
|
{"objectID":"2ae7f55564fe4ef4d1f94b2412de0f00a713d532c0af12c8d42e9fd543672cc4","title":"Arcee Provider Guide","url":"/docs/getting-started/providers/arcee#arcee-provider-guide","content":"Arcee is a Tier-2 catalog provider: OpenAI-wire-compatible, so its entire\nintegration is one JSON file (src/lib/providers/catalog/arcee.json) rather\nthan hand-written code. That file is the source of truth for everything on this\npage.\n\nVerification status: this entry is docs-verified only, not yet\nlive-verified. The vendor's GET https://api.arcee.ai/api/v1/models needs a\nkey (it answers HTTP 401 without one), so the model ids come from Arcee's\npublic docs and the roster has not been checked. No account was created and no\nAPI key was used to build this entry. evidence.liveMatrix is null until\nsomeone runs the live capability matrix with a real key (see\nVerification status below).","hierarchy":{"lvl0":"Getting Started","lvl1":"Arcee Provider Guide","lvl2":"Arcee Provider Guide","lvl3":""}},
|
|
4814
4814
|
{"objectID":"071a8e4a5fe3f512c4b32bd583c1f067925f09a824cfede9b1cc4f0af2c46069","title":"Key Facts","url":"/docs/getting-started/providers/arcee#key-facts","content":"Provider id: arcee\nProtocol: OpenAI-compatible (/chat/completions). The\n Your First API Call page\n says \"The Arcee Platform API is OpenAI compatible.\"\nBase URL: https://api.arcee.ai/api/v1 — the base_url value in the\n Quick Start Python example\n and the baseURL value in its JavaScript example. The\n Your First API Call page\n table lists base_url as https://api.arcee.ai/api/v1/chat/completions;\n wire.baseURL is the value the SDK examples set\nDefault model: trinity-large-thinking — the API Model Name the\n Arcee Model Overview\n lists for Trinity-Large-Thinking (400B), which the page says is \"the only Arcee\n model available via api.\"\nModels in catalog: 10 — the ten rows of the \"Text Models\" table on the\n pricing page\nStreaming: supported — the\n Streaming Messages page\n says \"To enable streaming, set stream=True.\"\nTool calling: model-dependent — the\n Function Calling page\n documents the tools parameter and the tool_calls output with a\n MODEL_NAME placeholder, and the\n Trinity-Large-Thinking page\n lists \"Purpose-built for tool calling, multi-step planning, and agent\n workflows\" under Key Features\nTools while streaming: false — not exercised, since no POST request was\n sent\nStructured output: true — the\n Structured Outputs page\n documents the response_format value {'type': 'json_object'}. Under \"To\n enable JSON Output, users should:\" the page lists \"Include the word \"json\" in\n the system or user prompt, and provide an example of the desired JSON format\n to guide the model in outputting valid JSON.\" and \"Set the max_tokens\n parameter reasonably to prevent the JSON string from being truncated\n midway.\"\n quirks.responseFormatDowngrade is set so a generate({ schema }) request\n sends json_object; NeuroLink still validates the response against your\n schema on the client.","hierarchy":{"lvl0":"Getting Started","lvl1":"Arcee Provider Guide","lvl2":"Key Facts","lvl3":""}},
|
|
4815
|
-
{"objectID":"92b86e47a9502515df434cddd600ea4bc68f7dfa2582d4a733f364ceaed77e39","title":"1. Get an API key","url":"/docs/getting-started/providers/arcee#1-get-an-api-key","content":"Visit: https://platform.arcee.ai/api/api-keys — the Quick Start says to access the Arcee Platform (https://platform.arcee.ai/), \"Register or Login.\", then to \"Create an API Key in the API Keys management page.\" and \"Copy your API Key for use and store in a secure location.\"\nAuthentication is HTTP Bearer: the Quick Start's curl example sends the header Authorization: Bearer
|
|
4815
|
+
{"objectID":"92b86e47a9502515df434cddd600ea4bc68f7dfa2582d4a733f364ceaed77e39","title":"1. Get an API key","url":"/docs/getting-started/providers/arcee#1-get-an-api-key","content":"Visit: https://platform.arcee.ai/api/api-keys — the Quick Start says to access the Arcee Platform (https://platform.arcee.ai/), \"Register or Login.\", then to \"Create an API Key in the API Keys management page.\" and \"Copy your API Key for use and store in a secure location.\"\nAuthentication is HTTP Bearer: the Quick Start's curl example sends the header Authorization: Bearer YOUR_API_KEY, and the Chat Completion reference (https://docs.arcee.ai/api-reference/chat-completion.md) gives the key format as \"Arcee API key (prefixed with rcai-)\"\nBilling as the vendor states it: the Quick Start says to open the Wallet (https://platform.arcee.ai/api/wallet) \"to top up if needed\"; the Chat Completion reference lists HTTP 402 as \"Insufficient Balance\"\nSet ARCEE_API_KEY in your .env file","hierarchy":{"lvl0":"Getting Started","lvl1":"Arcee Provider Guide","lvl2":"1. Get an API key","lvl3":""}},
|
|
4816
4816
|
{"objectID":"42d898e12759854598614fd1392b5eded0f1730f5158a99cf5413a92c269ba1c","title":"2. Configure","url":"/docs/getting-started/providers/arcee#2-configure","content":"2. Configure","hierarchy":{"lvl0":"Getting Started","lvl1":"Arcee Provider Guide","lvl2":"2. Configure","lvl3":""}},
|
|
4817
4817
|
{"objectID":"caf52d468e76358475deffb490ae4de2d4425025b97bb7f682623a7da0da7d3e","title":"3. Use it","url":"/docs/getting-started/providers/arcee#3-use-it","content":"Per-request credentials use the same shape as the other catalog providers:","hierarchy":{"lvl0":"Getting Started","lvl1":"Arcee Provider Guide","lvl2":"3. Use it","lvl3":""}},
|
|
4818
4818
|
{"objectID":"d4862d73f0e93772d48382c16d8e705fc9f314d58d191b1f65874d45b61cfd66","title":"Billing","url":"/docs/getting-started/providers/arcee#billing","content":"The Quick Start says to open\nthe Wallet (https://platform.arcee.ai/api/wallet) \"to top up if needed\". The\nChat Completion reference\nlists HTTP 402 as \"Insufficient Balance\". The\npricing page says \"All prices are\nin USD.\" and lists prices per 1M tokens.\n\nThe catalog schema has no unknown billing value, so billingPolicy holds\nno-free-tier. It is a schema value, not a vendor statement of signup terms.","hierarchy":{"lvl0":"Getting Started","lvl1":"Arcee Provider Guide","lvl2":"Billing","lvl3":""}},
|
|
@@ -4936,15 +4936,15 @@
|
|
|
4936
4936
|
{"objectID":"ec6300f21745b39bc6ee317430d479d7c88ccf7c58d241764dff42a7e70293dd","title":"Supported Voices","url":"/docs/getting-started/providers/azure-speech#supported-voices","content":"Azure Speech supports 400+ neural voices across 140+ languages. Common voices:\n\n| Voice | Language | Style |\n| -------------------- | ------------ | ------- |\n| en-US-JennyNeural | English (US) | General |\n| en-US-GuyNeural | English (US) | General |\n| en-GB-SoniaNeural | English (UK) | General |\n| de-DE-KatjaNeural | German | General |\n| fr-FR-DeniseNeural | French | General |\n| ja-JP-NanamiNeural | Japanese | General |","hierarchy":{"lvl0":"Getting Started","lvl1":"Azure Speech Services","lvl2":"Supported Voices","lvl3":""}},
|
|
4937
4937
|
{"objectID":"43d94a26d7cd992572edaf4c441dcf2112c7ee11aa44e8107e706a07af92b67f","title":"Supported Audio Formats","url":"/docs/getting-started/providers/azure-speech#supported-audio-formats","content":"TTS output: mp3, wav, ogg\nSTT input: wav (16kHz PCM mono recommended), ogg, opus\nAzure's short-audio REST endpoint does not decode MP3 — convert to WAV first or use a different STT provider for MP3 input.","hierarchy":{"lvl0":"Getting Started","lvl1":"Azure Speech Services","lvl2":"Supported Audio Formats","lvl3":""}},
|
|
4938
4938
|
{"objectID":"da9b065ce67be33eeb3ba05aa627928f7de5427599917c3969f368a829452d86","title":"Limits","url":"/docs/getting-started/providers/azure-speech#limits","content":"TTS: 10,000 characters per request\nSTT: Batch mode (streaming not yet supported)","hierarchy":{"lvl0":"Getting Started","lvl1":"Azure Speech Services","lvl2":"Limits","lvl3":""}},
|
|
4939
|
-
{"objectID":"32755ff724ca5a57803a91e09392878685ad08441e3d09b3555b787fd830db1c","title":"Baidu Qianfan Provider Guide","url":"/docs/getting-started/providers/baidu-qianfan","content":"Baidu Qianfan Provider Guide\n\nBaidu Qianfan is a Tier-2 catalog provider: its integration is one JSON\nfile (src/lib/providers/catalog/baidu-qianfan.json) rather than hand-written\ncode. That file is the source of truth for everything on this page.\n\nVerification status: this entry is docs-verified only, not yet\nlive-verified. An unauthenticated GET https://qianfan.baidubce.com/v2/models\non 2026-09-29 answered HTTP 403, so the model ids come from Baidu's public\ndocs and the roster has not been checked. No account was created and no API\nkey was used to build this entry.\nevidence.liveMatrix is null until someone runs the live capability matrix\nwith a real key (see Verification status below).\n\nKey Facts\nProvider id: baidu-qianfan (aliases qianfan, baidu)\nProtocol: OpenAI-compatible (/chat/completions). The\n quickstart says\n \"千帆ModelBuilder提供了与OpenAI兼容的使用方式,用户只需调整
|
|
4939
|
+
{"objectID":"32755ff724ca5a57803a91e09392878685ad08441e3d09b3555b787fd830db1c","title":"Baidu Qianfan Provider Guide","url":"/docs/getting-started/providers/baidu-qianfan","content":"Baidu Qianfan Provider Guide\n\nBaidu Qianfan is a Tier-2 catalog provider: its integration is one JSON\nfile (src/lib/providers/catalog/baidu-qianfan.json) rather than hand-written\ncode. That file is the source of truth for everything on this page.\n\nVerification status: this entry is docs-verified only, not yet\nlive-verified. An unauthenticated GET https://qianfan.baidubce.com/v2/models\non 2026-09-29 answered HTTP 403, so the model ids come from Baidu's public\ndocs and the roster has not been checked. No account was created and no API\nkey was used to build this entry.\nevidence.liveMatrix is null until someone runs the live capability matrix\nwith a real key (see Verification status below).\n\nKey Facts\nProvider id: baidu-qianfan (aliases qianfan, baidu)\nProtocol: OpenAI-compatible (/chat/completions). The\n quickstart says\n \"千帆ModelBuilder提供了与OpenAI兼容的使用方式,用户只需调整api_key、base_url、model等参数,就可以通过OpenAI SDK调用千帆ModelBuilder推理服务。\"\n and the Inference API V2 page\n says the V2 model-service API is \"完全兼容OpenAI标准(包含身份认证、接口协议)\"\nBase URL: https://qianfan.baidubce.com/v2\nDefault model: ernie-5.1\nModels in catalog: 12, taken from the vendor's\n model-list page\n (updated 2026-09-16, retrieved 2026-09-29)\nStreaming: supported — the\n structured-outputs page\n shows an OpenAI SDK example with stream=True that iterates over the chunks\nTool calling: model-dependent — the\n function-calling page\n (updated 2026-07-09) documents an OpenAI-style tools parameter and lists\n ernie-5.1 and ernie-5.0 in its 支持模型范围 (supported models) section\nTools while streaming: not declared (false) — the function-calling\n page's request examples send \"stream\": false\nStructured output: true on this entry — the\n structured-outputs page\n (updated 2026-05-27) documents the response_format field with text,\n json_object and json_schema, has a json_schema object description\n containing \"只有部分模型支持\" (translation: only some models support it), and\n lists DeepSeek-V4-Pro and GLM-5.1, among others, in its 支持模型范围\n (supported models) section\nStructured output + tools together: not declared (false) — no combined\n probe was possible without credentials\nEmbeddings: not declared on this catalog entry (embeddings is false).\n The model-list page has a 文本向量 (text embedding) section; this flag\n describes the NeuroLink entry, not the vendor's own API surface\nThinking: not declared (false) — the\n deep-thinking page\n documents thinking and enable_thinking request parameters for the models\n it lists and a reasoning_content output field; this entry declares no\n thinking capability\nBilling: free-tier — see Billing below\nKey format: none declared (apiKeyFormat is null), so NeuroLink does\n not validate the key\nScheduled retirements: the\n model-retirement page\n (updated 2026-09-24, retrieved 2026-09-29) has rows with 模型退役日期\n \"2026-10-29\" for ERNIE-5.0, ERNIE-4.5-Turbo-128K, ERNIE-4.5-Turbo-32K,\n ERNIE-4.5-Turbo-VL-128K and ERNIE-4.5-Turbo-VL-32K\n\nQuick Start\nGet an API key\nVisit: https://console.bce.baidu.com/qianfan/ (an unauthenticated GET on 2026-09-29 answered HTTP 200 with the page title 百度智能云千帆大模型平台; sign-in was not attempted while building this entry)\nCreate an API key: the API KEY page (https://cloud.baidu.com/doc/qianfan/s/wmh8l6tnf, updated 2026-04-14) says to log in to the 百度千帆 platform, click 系统管理 in the left navigation, open API Key, then click 创建 API Key and enter a name; the quickstart (https://cloud.baidu.com/doc/qianfan/s/rmh4stn9m) links 控制台-安全认证-API Key to https://console.bce.baidu.com/iam/#/iam/apikey/list\nAuthentication is HTTP Bearer: the quickstart (https://cloud.baidu.com/doc/qianfan/s/rmh4stn9m) says the Authorization request header must carry the API key with Bearer in front of it; NeuroLink does not validate the key format\nBilling as the vendor states it: the new-user free-quota page (https://cloud.baidu.com/doc/qianfan/s/Imi2rpirg, updated 2025-11-17) says that after you visit the platform and agree to the user agreement the system activates it automatically and issues a new-user free token quota; its table has 17 rows under 服务名称, 赠送Tokens量 and 有效期, and the page says the quota applies to online inference calls of preset model services, not batch inference. The billing page (https://cloud.baidu.com/doc/qianfan/s/wmh4sv6ya, updated 2026-09-24) lists text-generation prices under \"按量后付费\" in 元/千tokens, for example \"ERNIE 5.1\" (版本名称 \"ERNIE-5.1\") with 在线推理 \"0.004\" for 子项 输入(输入<=32k) and \"0.018\" for 子项 输出(输入<=32k)\nSet BAIDU_QIANFAN_API_KEY in your .env file\nConfigure\nUse it\n\nPer-request credentials work as they do for every provider:\n\nBilling\n\nThe new-user free-quota page\n(updated 2025-11-17) says that from 2025-10-24 00:00, after you visit the\nplatform and agree to the user agreement, the system activates Qianfan\nautomatically and issues a new-user free token quota. Its table has 17 rows,\nand the 服务名称 column reads: ERNIE-4.5-Turbo-128K, ERNIE-4.5-Turbo-32K,\nERNIE-4.5-Turbo-VL, ERNIE-X1-Turbo-32K, DeepSeek-R1, DeepSeek-R1-250528,\nDeepSeek-V3-","hierarchy":{"lvl0":"Getting Started","lvl1":"Baidu Qianfan Provider Guide","lvl2":"","lvl3":""}},
|
|
4940
4940
|
{"objectID":"3e898f39b0a8d2eb2432f857ff4359f6ced3cd7a6ebb7f8274d0d672dd83e6f9","title":"Baidu Qianfan Provider Guide","url":"/docs/getting-started/providers/baidu-qianfan#baidu-qianfan-provider-guide","content":"Baidu Qianfan is a Tier-2 catalog provider: its integration is one JSON\nfile (src/lib/providers/catalog/baidu-qianfan.json) rather than hand-written\ncode. That file is the source of truth for everything on this page.\n\nVerification status: this entry is docs-verified only, not yet\nlive-verified. An unauthenticated GET https://qianfan.baidubce.com/v2/models\non 2026-09-29 answered HTTP 403, so the model ids come from Baidu's public\ndocs and the roster has not been checked. No account was created and no API\nkey was used to build this entry.\nevidence.liveMatrix is null until someone runs the live capability matrix\nwith a real key (see Verification status below).","hierarchy":{"lvl0":"Getting Started","lvl1":"Baidu Qianfan Provider Guide","lvl2":"Baidu Qianfan Provider Guide","lvl3":""}},
|
|
4941
|
-
{"objectID":"ce434581d2a842a3d82f9916ee421eb35916112ad29c3c6e9035f2f7c55ca261","title":"Key Facts","url":"/docs/getting-started/providers/baidu-qianfan#key-facts","content":"Provider id: baidu-qianfan (aliases qianfan, baidu)\nProtocol: OpenAI-compatible (/chat/completions). The\n quickstart says\n \"千帆ModelBuilder提供了与OpenAI兼容的使用方式,用户只需调整
|
|
4941
|
+
{"objectID":"ce434581d2a842a3d82f9916ee421eb35916112ad29c3c6e9035f2f7c55ca261","title":"Key Facts","url":"/docs/getting-started/providers/baidu-qianfan#key-facts","content":"Provider id: baidu-qianfan (aliases qianfan, baidu)\nProtocol: OpenAI-compatible (/chat/completions). The\n quickstart says\n \"千帆ModelBuilder提供了与OpenAI兼容的使用方式,用户只需调整api_key、base_url、model等参数,就可以通过OpenAI SDK调用千帆ModelBuilder推理服务。\"\n and the Inference API V2 page\n says the V2 model-service API is \"完全兼容OpenAI标准(包含身份认证、接口协议)\"\nBase URL: https://qianfan.baidubce.com/v2\nDefault model: ernie-5.1\nModels in catalog: 12, taken from the vendor's\n model-list page\n (updated 2026-09-16, retrieved 2026-09-29)\nStreaming: supported — the\n structured-outputs page\n shows an OpenAI SDK example with stream=True that iterates over the chunks\nTool calling: model-dependent — the\n function-calling page\n (updated 2026-07-09) documents an OpenAI-style tools parameter and lists\n ernie-5.1 and ernie-5.0 in its 支持模型范围 (supported models) section\nTools while streaming: not declared (false) — the function-calling\n page's request examples send \"stream\": false\nStructured output: true on this entry — the\n structured-outputs page\n (updated 2026-05-27) documents the response_format field with text,\n json_object and json_schema, has a json_schema object description\n containing \"只有部分模型支持\" (translation: only some models support it), and\n lists DeepSeek-V4-Pro and GLM-5.1, among others, in its 支持模型范围\n (supported models) section\nStructured output + tools together: not declared (false) — no combined\n probe was possible without credentials\nEmbeddings: not declared on this catalog entry (embeddings is false).","hierarchy":{"lvl0":"Getting Started","lvl1":"Baidu Qianfan Provider Guide","lvl2":"Key Facts","lvl3":""}},
|
|
4942
4942
|
{"objectID":"517850866c80db1ab276996a57fc710b3847b1fdad87d74299649ee5299d1bf8","title":"1. Get an API key","url":"/docs/getting-started/providers/baidu-qianfan#1-get-an-api-key","content":"Visit: https://console.bce.baidu.com/qianfan/ (an unauthenticated GET on 2026-09-29 answered HTTP 200 with the page title 百度智能云千帆大模型平台; sign-in was not attempted while building this entry)\nCreate an API key: the API KEY page (https://cloud.baidu.com/doc/qianfan/s/wmh8l6tnf, updated 2026-04-14) says to log in to the 百度千帆 platform, click 系统管理 in the left navigation, open API Key, then click 创建 API Key and enter a name; the quickstart (https://cloud.baidu.com/doc/qianfan/s/rmh4stn9m) links 控制台-安全认证-API Key to https://console.bce.baidu.com/iam/#/iam/apikey/list\nAuthentication is HTTP Bearer: the quickstart (https://cloud.baidu.com/doc/qianfan/s/rmh4stn9m) says the Authorization request header must carry the API key with Bearer in front of it; NeuroLink does not validate the key format\nBilling as the vendor states it: the new-user free-quota page (https://cloud.baidu.com/doc/qianfan/s/Imi2rpirg, updated 2025-11-17) says that after you visit the platform and agree to the user agreement the system activates it automatically and issues a new-user free token quota; its table has 17 rows under 服务名称, 赠送Tokens量 and 有效期, and the page says the quota applies to online inference calls of preset model services, not batch inference. The billing page (https://cloud.baidu.com/doc/qianfan/s/wmh4sv6ya, updated 2026-09-24) lists text-generation prices under \"按量后付费\" in 元/千tokens, for example \"ERNIE 5.1\" (版本名称 \"ERNIE-5.1\") with 在线推理 \"0.004\" for 子项 输入(输入<=32k) and \"0.018\" for 子项 输出(输入<=32k)\nSet BAIDU_QIANFAN_API_KEY in your .env file","hierarchy":{"lvl0":"Getting Started","lvl1":"Baidu Qianfan Provider Guide","lvl2":"1. Get an API key","lvl3":""}},
|
|
4943
4943
|
{"objectID":"4bcc1521ad01b432181c87f78da4174dbf12dbd59b1b2744c8ced42e2c9ee840","title":"2. Configure","url":"/docs/getting-started/providers/baidu-qianfan#2-configure","content":"2. Configure","hierarchy":{"lvl0":"Getting Started","lvl1":"Baidu Qianfan Provider Guide","lvl2":"2. Configure","lvl3":""}},
|
|
4944
4944
|
{"objectID":"811d34461e004acc7b4e3f0b94fe68385527cf908e80a91e632115d78fd149bf","title":"3. Use it","url":"/docs/getting-started/providers/baidu-qianfan#3-use-it","content":"Per-request credentials work as they do for every provider:","hierarchy":{"lvl0":"Getting Started","lvl1":"Baidu Qianfan Provider Guide","lvl2":"3. Use it","lvl3":""}},
|
|
4945
4945
|
{"objectID":"34403636b2be7d95e2e955a5cc647f3f8b8b27e51d40be5328683930359ec024","title":"Billing","url":"/docs/getting-started/providers/baidu-qianfan#billing","content":"The new-user free-quota page\n(updated 2025-11-17) says that from 2025-10-24 00:00, after you visit the\nplatform and agree to the user agreement, the system activates Qianfan\nautomatically and issues a new-user free token quota. Its table has 17 rows,\nand the 服务名称 column reads: ERNIE-4.5-Turbo-128K, ERNIE-4.5-Turbo-32K,\nERNIE-4.5-Turbo-VL, ERNIE-X1-Turbo-32K, DeepSeek-R1, DeepSeek-R1-250528,\nDeepSeek-V3-250324, DeepSeek-V3.1-250821, DeepSeek-V3.1-Think-250821,\nKimi-K2-Instruct, Qwen3-235B-A22B-Instruct-2507,\nQwen3-30B-A3B-Instruct-2507, Qwen3-Coder-30B-A3B-Instruct,\nQwen3-Coder-480B-A35B-Instruct, bge-large-en, bge-large-zh and\nqianfan-sug-8k. In rows 1 to 17 the 赠送Tokens量 cell reads \"100万\" and the\n有效期 cell reads \"3个月\". The page says the quota applies to online inference\ncalls of preset model services, not batch inference. The entry records\nfree-tier from that page.\n\nThe model-retirement page\n(updated 2026-09-24, retrieved 2026-09-29) has rows with 退役模型版本\n\"DeepSeek-V3.1-250821\" (模型退役日期 \"2026-06-30\"), \"Kimi-K2-Instruct\"\n(模型退役日期 \"2026-03-26\") and \"ERNIE-4.5-Turbo-128K\" (模型退役日期\n\"2026-10-29\").\n\nThe billing page (updated\n2026-09-24) lists text-generation prices under \"按量后付费\" in 元/千tokens\n(yuan per thousand tokens). For example, its row with 模型名称 \"ERNIE 5.1\" and\n版本名称 \"ERNIE-5.1\" has 在线推理 \"0.004\" for 子项 输入(输入<=32k), \"0.018\"\nfor 输出(输入<=32k), \"0.006\" for 输入(32k<输入<=128k) and \"0.022\" for\n输出(32k<输入<=128k). The catalog entry carries no pricingPerMTok; the\nbilling page states prices in 元/千tokens.","hierarchy":{"lvl0":"Getting Started","lvl1":"Baidu Qianfan Provider Guide","lvl2":"Billing","lvl3":""}},
|
|
4946
4946
|
{"objectID":"3723ee1692c59419af321583f3907cbbaa45b2fe9dfc1d8a71f0e2f465969ebf","title":"Models","url":"/docs/getting-started/providers/baidu-qianfan#models","content":"| Model | Context | Vision | Max output | Notes |\n| ------------------------ | ------- | ------ | ---------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| ernie-5.1 ⭐ | 128k | no | 65,536 | NeuroLink default. Listed under the \"ERNIE系列-旗舰模型\" heading; the \"推荐模型\" table cell begins \"ERNIE 5.1是文心系列最新模型\". Listed on the function-calling page. |\n| ernie-5.0 | 128k | yes | 65,536 | Listed in the vendor's 视觉理解 (vision understanding) ERNIE table and on the function-calling page; described as \"文心5.0是原生全模态大模型\". The model-retirement page has a row with 退役模型版本 \"ERNIE-5.0\" and 模型退役日期 \"2026-10-29\". |\n| ernie-4.5-turbo-128k | 128k | no | not set | Listed under the \"ERNIE系列-旗舰模型\" heading and in the \"推荐模型\" table; the page states max output as \"16k\" in one table and \"[2,12288]\" in another, so the entry leaves it unset. The model-retirement page has a row with 退役模型版本 \"ERNIE-4.5-Turbo-128K\" and 模型退役日期 \"2026-10-29\". |\n| ernie-4.5-turbo-32k | 32k | no | 12,288 | Listed under the \"ERNIE系列-旗舰模型\" heading. The model-retirement page has a row with 退役模型版本 \"ERNIE-4.5-Turbo-32K\" and 模型退役日期 \"2026-10-29\".","hierarchy":{"lvl0":"Getting Started","lvl1":"Baidu Qianfan Provider Guide","lvl2":"Models","lvl3":""}},
|
|
4947
|
-
{"objectID":"73c5535c842de474a975503055f53f725cbd491e6909fd33d6c6e572621634b8","title":"Verification status","url":"/docs/getting-started/providers/baidu-qianfan#verification-status","content":"Tier-2 onboarding requires evidence before a provider is accepted, and\npnpm run verify:provider-onboarding gates it in CI. This is what the\ncatalog currently records for Baidu Qianfan — docs-verified only, not\nlive-verified:\n\n| Probe | Result |\n| ------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Roster | unauthenticated GET https://qianfan.baidubce.com/v2/models, HTTP 403, JSON body with code \"AccessDenied\" and message \"Access denied.\", 2026-09-29 — no key used, so the 12 model ids come from the model-list page and the roster has not been checked |\n| Auth-failure shape | unauthenticated GET https://qianfan.baidubce.com/v2/chat/completions, HTTP 401, JSON body with error.code \"
|
|
4947
|
+
{"objectID":"73c5535c842de474a975503055f53f725cbd491e6909fd33d6c6e572621634b8","title":"Verification status","url":"/docs/getting-started/providers/baidu-qianfan#verification-status","content":"Tier-2 onboarding requires evidence before a provider is accepted, and\npnpm run verify:provider-onboarding gates it in CI. This is what the\ncatalog currently records for Baidu Qianfan — docs-verified only, not\nlive-verified:\n\n| Probe | Result |\n| ------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Roster | unauthenticated GET https://qianfan.baidubce.com/v2/models, HTTP 403, JSON body with code \"AccessDenied\" and message \"Access denied.\", 2026-09-29 — no key used, so the 12 model ids come from the model-list page and the roster has not been checked |\n| Auth-failure shape | unauthenticated GET https://qianfan.baidubce.com/v2/chat/completions, HTTP 401, JSON body with error.code \"invalid_iam_token\", 2026-09-29.","hierarchy":{"lvl0":"Getting Started","lvl1":"Baidu Qianfan Provider Guide","lvl2":"Verification status","lvl3":""}},
|
|
4948
4948
|
{"objectID":"3d29151dfe00cdf36635c380767d0f0e9ba915ea66f5f71b8c742dbe64712516","title":"Troubleshooting","url":"/docs/getting-started/providers/baidu-qianfan#troubleshooting","content":"| Symptom | Cause | Fix |\n| ---------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ |\n| HTTP 401 with code invalid_iam_token | The error-code page says the bearer token is invalid or expired, or the request's Authorization header did not add Bearer | The quickstart says to put Bearer in front of the API key in the Authorization header; NeuroLink reads BAIDU_QIANFAN_API_KEY |\n| HTTP 429 with 类型 rate_limit_exceeded | The error-code page lists 错误码 rpm_rate_limit_exceeded (错误信息 \"Rate limit reached for RPM\") and tpm_rate_limit_exceeded (\"Rate limit reached for TPM\") | The same page's 说明 for those rows includes \"适当控制请求频率\" (translation: control the request frequency appropriately) |","hierarchy":{"lvl0":"Getting Started","lvl1":"Baidu Qianfan Provider Guide","lvl2":"Troubleshooting","lvl3":""}},
|
|
4949
4949
|
{"objectID":"b73c8158fc0fec24943e26c79d211092c64cc829b5187ff5a0cd63f3c08bc98f","title":"See also","url":"/docs/getting-started/providers/baidu-qianfan#see-also","content":"Provider setup overview\nAll providers\nTier-2 onboarding — how this provider's JSON becomes a working integration\nProvider feature compatibility","hierarchy":{"lvl0":"Getting Started","lvl1":"Baidu Qianfan Provider Guide","lvl2":"See also","lvl3":""}},
|
|
4950
4950
|
{"objectID":"2635222e23856e968a4b8684e741c55f18fc3655d0bca7b4ffe1034b90cbc7ec","title":"Baseten Provider Guide","url":"/docs/getting-started/providers/baseten","content":"Baseten Provider Guide\n\nBaseten is a Tier-2 catalog provider: OpenAI-wire-compatible with no\nbehavioural quirks, so its entire integration is one JSON file\n(src/lib/providers/catalog/baseten.json) rather than hand-written code. That\nfile is the source of truth for everything on this page.\n\nKey Facts\nProvider id: baseten\nProtocol: OpenAI-compatible (/chat/completions)\nBase URL: https://inference.baseten.co/v1\nDefault model: zai-org/GLM-5.3-Flash\nModels in catalog: 16\nStreaming: supported\nTool calling: supported (native)\nStructured output: supported\nEmbeddings: not supported\nBilling: free-tier\n\nQuick Start\nGet an API key\nVisit: https://app.baseten.co/ and sign in or create a workspace\nReview the current Baseten billing and credit terms in the console before making requests\nCreate a personal API key in the Baseten console\nSet BASETEN_API_KEY in your .env file\nConfigure\nUse it\n\nPer-request credentials work as they do for every provider:\n\nModels\n\n| Model | Context | Vision | $/M in · out | Notes |\n| ------------------------------------------ | ------- | ------ | ------------- | -------------------------------------------------------------------------------------------------- |\n| openai/gpt-oss-120b | 125K | no | $0.1 / $0.5 | OpenAI GPT-OSS 120B; general-purpose model with controllable reasoning |\n| zai-org/GLM-4.7 | 195K | no | $0.6 / $2.2 | GLM 4.7; fast general-purpose model with 200K context and enhanced tool use |\n| moonshotai/Kimi-K2.6 | 256K | no | $0.95 / $4 | Kimi K2.6; agentic and coding model for multi-step reasoning and tool use |\n| deepseek-ai/DeepSeek-V4-Pro | 1M | no | $1.74 / $3.48 | DeepSeek V4 Pro; 1M-context mixture-of-experts model for agentic workflows and coding |\n| nvidia/NVIDIA-Nemotron-3-Ultra-550B-A55B | 198K | no | $0.6 / $2.4 | NVIDIA Nemotron 3 Ultra; flagship reasoning and non-reasoning model for code and agentic execution |\n| zai-org/GLM-5.2 | 1M | no | $1.4 / $4.4 | GLM 5.2; 1M-context reasoning model |\n| moonshotai/Kimi-K2.7-Code | 256K | no | $0.95 / $4 | Kimi K2.7 Code; model for complex coding, code reasoning and long-horizon development |\n| deepseek-ai/DeepSeek-V4-Flash-0731 | 1M | no | $0.13 / $0.26 | DeepSeek V4 Flash 0731; fast, low-cost 1M-context mixture-of-experts model |\n| thinkingmachines/inkling | 1M | no | $1 / $4.05 | Thinking Machines Inkling; 1M-context reasoning model |\n| zai-org/GLM-5.2-Fast | 1M | no | $2.1 / $6.6 | GLM 5.2 Fast; 1M-context model |\n| moonshotai/Kimi-K3 | 1M | no | $3 / $15 | Kimi K3; 1M-context model |\n| thinkingmachines/inkling-small | 1M | no | $0.5 / $1.2 | Thinking Machines Inkling Small; 1M-context reasoning model |\n| deepseek-ai/DeepSeek-V4-Pro-0813 | 1M | no | $1.32 / $3.96 | DeepSeek V4 Pro 0813; dated 1M-context mixture-of-experts model for agentic workflows and coding |\n| zai-org/GLM-5.3-Flash ⭐ | 1M | yes | $0.15 / $0.5 | GLM 5.3 Flash; 1M-context reasoning model with live-verified image input |\n| zai-org/GLM-5.3 | 1M | no | $1.4 / $4.4 | GLM 5.3; 1M-context reasoning model |\n| zai-org/GLM-5.3-Fast | 1M | yes | $2.1 / $6.6 | GLM 5.3 Fast; 1M-context reasoning model with image input |\n\nFallback order when the default is unavailable: zai-org/GLM-5.3-Flash → zai-org/GLM-5.3 → zai-org/GLM-5.2.\n\nVerification status\n\nTier-2 onboarding requires evidence before a provider is accepted, and\npnpm run verify:provider-onboarding gates it in CI. This is what the\ncatalog records for Baseten:\n\n| Probe | Result |\n| --------------------- | -------------------------------------------------- |\n| Roster | authenticated GET /v1/models, HTTP 200, 2026-09-03 |\n| Auth rejection | HTTP 403, 2026-09-03 |\n| Live capability sweep | not run |\n\n⚠️ No live capability sweep is recorded for Baseten. The roster and auth\nbehaviour were ver","hierarchy":{"lvl0":"Getting Started","lvl1":"Baseten Provider Guide","lvl2":"","lvl3":""}},
|
|
@@ -5338,14 +5338,14 @@
|
|
|
5338
5338
|
{"objectID":"341bb86e88577c8982f565e3bb49d1faa5c1449e8cd5310b8df239e829efdb9e","title":"Verification status","url":"/docs/getting-started/providers/friendli#verification-status","content":"Tier-2 onboarding requires evidence before a provider is accepted, and\npnpm run verify:provider-onboarding gates it in CI. This is what the\ncatalog records for FriendliAI:\n\n| Probe | Result |\n| --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n| Roster | authenticated GET /serverless/v1/models, HTTP 200, 2026-09-06 |\n| Auth rejection | HTTP 401, 2026-09-06","hierarchy":{"lvl0":"Getting Started","lvl1":"FriendliAI Provider Guide","lvl2":"Verification status","lvl3":""}},
|
|
5339
5339
|
{"objectID":"7d5ebae39916c5745bbc01788b7092e2fa3f81495e1375fc9d720eb326bee964","title":"Troubleshooting","url":"/docs/getting-started/providers/friendli#troubleshooting","content":"| Symptom | Cause | Fix |\n| ------------------------------------------------------ | --------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ |\n| Invalid Friendli API key | FRIENDLI_API_KEY unset or wrong | Check the key at https://suite.friendli.ai/ |\n| Model not found | The roster changed since 2026-09-06 | Pick a current id from the authenticated /serverless/v1/models roster |\n| Frequent 429s | Friendli's rate limits are tight | Pace requests at least 20 seconds apart and retry |\n| Structured output silently dropped when tools are used | Friendli rejects response_format when tools is present (HTTP 422) | NeuroLink omits response_format automatically whenever tools are present, before sending — this is expected, not a bug |\n| Empty content at a small maxTokens | zai-org/GLM-5.3 spends its budget on reasoning_content first | Give reasoning prompts a generous maxTokens budget |","hierarchy":{"lvl0":"Getting Started","lvl1":"FriendliAI Provider Guide","lvl2":"Troubleshooting","lvl3":""}},
|
|
5340
5340
|
{"objectID":"9a2b3c1a8e2b87f12be59e06d2a131fcba54035f11d0fa25b11030eebc0064f7","title":"See also","url":"/docs/getting-started/providers/friendli#see-also","content":"Provider setup overview\nAll providers\nTier-2 onboarding — how this provider's JSON becomes a working integration\nProvider feature compatibility","hierarchy":{"lvl0":"Getting Started","lvl1":"FriendliAI Provider Guide","lvl2":"See also","lvl3":""}},
|
|
5341
|
-
{"objectID":"3f4a67c46fcd7980b7a40666e1ec1dcc4a4f71af4691b96f8f3893ccfe3932ab","title":"GMI Cloud Provider Guide","url":"/docs/getting-started/providers/gmicloud","content":"GMI Cloud Provider Guide\n\nGMI Cloud is a Tier-2 catalog provider: OpenAI-wire-compatible with no\nbehavioural quirks, so its entire integration is one JSON file\n(src/lib/providers/catalog/gmicloud.json) rather than hand-written code. That\nfile is the source of truth for everything on this page.\n\nKey Facts\nProvider id: gmicloud (aliases: gmi-cloud)\nProtocol: OpenAI-compatible (/chat/completions)\nBase URL: https://api.gmi-serving.com/v1\nDefault model: MiniMaxAI/MiniMax-M3\nModels in catalog: 1\nStreaming: supported\nTool calling: supported (native)\nStructured output: supported\nEmbeddings: not supported\nBilling: free-tier\nKey format: ^eyJ[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+$\n\nQuick Start\nGet an API key\nVisit: https://console.gmicloud.ai\nSign in and select the Inference service\nCreate an API key; check Console → Inference → Model Hub for current model pricing\nSet GMICLOUD_API_KEY in your .env file\nConfigure\nUse it\n\nPer-request credentials work as they do for every provider:\n\nModels\n\n| Model | Context | Vision | $/M in · out | Notes |\n| ------------------------- | ------- | ------ | ------------ | -------------------------------------------------- |\n| MiniMaxAI/MiniMax-M3 ⭐ | 1M | no | — | MiniMaxAI/MiniMax-M3 — live GMI Cloud-probed model |\n\nFallback order when the default is unavailable: MiniMaxAI/MiniMax-M3.\n\nVerification status\n\nTier-2 onboarding requires evidence before a provider is accepted, and\npnpm run verify:provider-onboarding gates it in CI. This is what the\ncatalog records for GMI Cloud:\n\n| Probe | Result |\n| --------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Roster | authenticated GET /v1/models, HTTP 200, 2026-09-03 |\n| Auth rejection | HTTP 401, 2026-09-03 |\n| Live capability sweep | 2026-09-03 — MiniMax-M3 accepted
|
|
5341
|
+
{"objectID":"3f4a67c46fcd7980b7a40666e1ec1dcc4a4f71af4691b96f8f3893ccfe3932ab","title":"GMI Cloud Provider Guide","url":"/docs/getting-started/providers/gmicloud","content":"GMI Cloud Provider Guide\n\nGMI Cloud is a Tier-2 catalog provider: OpenAI-wire-compatible with no\nbehavioural quirks, so its entire integration is one JSON file\n(src/lib/providers/catalog/gmicloud.json) rather than hand-written code. That\nfile is the source of truth for everything on this page.\n\nKey Facts\nProvider id: gmicloud (aliases: gmi-cloud)\nProtocol: OpenAI-compatible (/chat/completions)\nBase URL: https://api.gmi-serving.com/v1\nDefault model: MiniMaxAI/MiniMax-M3\nModels in catalog: 1\nStreaming: supported\nTool calling: supported (native)\nStructured output: supported\nEmbeddings: not supported\nBilling: free-tier\nKey format: ^eyJ[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+$\n\nQuick Start\nGet an API key\nVisit: https://console.gmicloud.ai\nSign in and select the Inference service\nCreate an API key; check Console → Inference → Model Hub for current model pricing\nSet GMICLOUD_API_KEY in your .env file\nConfigure\nUse it\n\nPer-request credentials work as they do for every provider:\n\nModels\n\n| Model | Context | Vision | $/M in · out | Notes |\n| ------------------------- | ------- | ------ | ------------ | -------------------------------------------------- |\n| MiniMaxAI/MiniMax-M3 ⭐ | 1M | no | — | MiniMaxAI/MiniMax-M3 — live GMI Cloud-probed model |\n\nFallback order when the default is unavailable: MiniMaxAI/MiniMax-M3.\n\nVerification status\n\nTier-2 onboarding requires evidence before a provider is accepted, and\npnpm run verify:provider-onboarding gates it in CI. This is what the\ncatalog records for GMI Cloud:\n\n| Probe | Result |\n| --------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Roster | authenticated GET /v1/models, HTTP 200, 2026-09-03 |\n| Auth rejection | HTTP 401, 2026-09-03 |\n| Live capability sweep | 2026-09-03 — MiniMax-M3 accepted max_completion_tokens=524288 and rejected 1048576 with an explicit 524288 limit. Structured output: the endpoint ignores response_format (json_schema and json_object both return prose with no prompt h |\n\nTroubleshooting\n\n| Symptom | Cause | Fix |\n| --------------------------- | ----------------------------------- | ----------------------------------------------------------------- |\n| Invalid GMI Cloud API key | GMICLOUD_API_KEY unset or wrong | Check the key at https://console.gmicloud.ai |\n| Model not found | The roster changed since 2026-09-03 | Pick a current id; catalog providers retire models without notice |\n\nSee also\nProvider setup overview\nAll providers\nTier-2 onboarding — how this provider's JSON becomes a working integration\nProvider feature compatibility","hierarchy":{"lvl0":"Getting Started","lvl1":"GMI Cloud Provider Guide","lvl2":"","lvl3":""}},
|
|
5342
5342
|
{"objectID":"1eb70df9354621e43dbd2fef9c02cbba04abccfd67b8519feca9b39bdd2d597a","title":"GMI Cloud Provider Guide","url":"/docs/getting-started/providers/gmicloud#gmi-cloud-provider-guide","content":"GMI Cloud is a Tier-2 catalog provider: OpenAI-wire-compatible with no\nbehavioural quirks, so its entire integration is one JSON file\n(src/lib/providers/catalog/gmicloud.json) rather than hand-written code. That\nfile is the source of truth for everything on this page.","hierarchy":{"lvl0":"Getting Started","lvl1":"GMI Cloud Provider Guide","lvl2":"GMI Cloud Provider Guide","lvl3":""}},
|
|
5343
5343
|
{"objectID":"9a38090e3834cbc605f4afecb9e69e9519dc7a754b7a63cedf2b06ff6baa2166","title":"Key Facts","url":"/docs/getting-started/providers/gmicloud#key-facts","content":"Provider id: gmicloud (aliases: gmi-cloud)\nProtocol: OpenAI-compatible (/chat/completions)\nBase URL: https://api.gmi-serving.com/v1\nDefault model: MiniMaxAI/MiniMax-M3\nModels in catalog: 1\nStreaming: supported\nTool calling: supported (native)\nStructured output: supported\nEmbeddings: not supported\nBilling: free-tier\nKey format: ^eyJ[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+\\.[A-Za-z0-9_-]+$","hierarchy":{"lvl0":"Getting Started","lvl1":"GMI Cloud Provider Guide","lvl2":"Key Facts","lvl3":""}},
|
|
5344
5344
|
{"objectID":"b22c2ea8139b8400d0aa148fc37f3570e54cab4a4f327e680d898f05c4d759f7","title":"1. Get an API key","url":"/docs/getting-started/providers/gmicloud#1-get-an-api-key","content":"Visit: https://console.gmicloud.ai\nSign in and select the Inference service\nCreate an API key; check Console → Inference → Model Hub for current model pricing\nSet GMICLOUD_API_KEY in your .env file","hierarchy":{"lvl0":"Getting Started","lvl1":"GMI Cloud Provider Guide","lvl2":"1. Get an API key","lvl3":""}},
|
|
5345
5345
|
{"objectID":"f9e83bb38cfeb487ed52ea9b43bd0ab714460658702acc153fe9419a336bf5b1","title":"2. Configure","url":"/docs/getting-started/providers/gmicloud#2-configure","content":"2. Configure","hierarchy":{"lvl0":"Getting Started","lvl1":"GMI Cloud Provider Guide","lvl2":"2. Configure","lvl3":""}},
|
|
5346
5346
|
{"objectID":"2435c0693b06e5faa05dc3f7bd8da29cfda3c8b4ccaf8a1f26f3a686dcdc8f02","title":"3. Use it","url":"/docs/getting-started/providers/gmicloud#3-use-it","content":"Per-request credentials work as they do for every provider:","hierarchy":{"lvl0":"Getting Started","lvl1":"GMI Cloud Provider Guide","lvl2":"3. Use it","lvl3":""}},
|
|
5347
5347
|
{"objectID":"81b13cddfb73afae4626a03f3b17f597084c81bb2c302bb833e762b6491e2abd","title":"Models","url":"/docs/getting-started/providers/gmicloud#models","content":"| Model | Context | Vision | $/M in · out | Notes |\n| ------------------------- | ------- | ------ | ------------ | -------------------------------------------------- |\n| MiniMaxAI/MiniMax-M3 ⭐ | 1M | no | — | MiniMaxAI/MiniMax-M3 — live GMI Cloud-probed model |\n\nFallback order when the default is unavailable: MiniMaxAI/MiniMax-M3.","hierarchy":{"lvl0":"Getting Started","lvl1":"GMI Cloud Provider Guide","lvl2":"Models","lvl3":""}},
|
|
5348
|
-
{"objectID":"87e36f819567210dd09eced7af298ec9fff30be7e30c0083ad975c20bc605f17","title":"Verification status","url":"/docs/getting-started/providers/gmicloud#verification-status","content":"Tier-2 onboarding requires evidence before a provider is accepted, and\npnpm run verify:provider-onboarding gates it in CI. This is what the\ncatalog records for GMI Cloud:\n\n| Probe | Result |\n| --------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Roster | authenticated GET /v1/models, HTTP 200, 2026-09-03 |\n| Auth rejection | HTTP 401, 2026-09-03 |\n| Live capability sweep | 2026-09-03 — MiniMax-M3 accepted
|
|
5348
|
+
{"objectID":"87e36f819567210dd09eced7af298ec9fff30be7e30c0083ad975c20bc605f17","title":"Verification status","url":"/docs/getting-started/providers/gmicloud#verification-status","content":"Tier-2 onboarding requires evidence before a provider is accepted, and\npnpm run verify:provider-onboarding gates it in CI. This is what the\ncatalog records for GMI Cloud:\n\n| Probe | Result |\n| --------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Roster | authenticated GET /v1/models, HTTP 200, 2026-09-03 |\n| Auth rejection | HTTP 401, 2026-09-03 |\n| Live capability sweep | 2026-09-03 — MiniMax-M3 accepted max_completion_tokens=524288 and rejected 1048576 with an explicit 524288 limit. Structured output: the endpoint ignores response_format (json_schema and json_object both return prose with no prompt h |","hierarchy":{"lvl0":"Getting Started","lvl1":"GMI Cloud Provider Guide","lvl2":"Verification status","lvl3":""}},
|
|
5349
5349
|
{"objectID":"2075d1e2c6cebd97b42c471bce05d14e93e245f153f89b179dcd0fbb0179e5fc","title":"Troubleshooting","url":"/docs/getting-started/providers/gmicloud#troubleshooting","content":"| Symptom | Cause | Fix |\n| --------------------------- | ----------------------------------- | ----------------------------------------------------------------- |\n| Invalid GMI Cloud API key | GMICLOUD_API_KEY unset or wrong | Check the key at https://console.gmicloud.ai |\n| Model not found | The roster changed since 2026-09-03 | Pick a current id; catalog providers retire models without notice |","hierarchy":{"lvl0":"Getting Started","lvl1":"GMI Cloud Provider Guide","lvl2":"Troubleshooting","lvl3":""}},
|
|
5350
5350
|
{"objectID":"90f520c2f8fb00f91038c5f51f0925fb1d04d7647142331409bbe5e87f814e54","title":"See also","url":"/docs/getting-started/providers/gmicloud#see-also","content":"Provider setup overview\nAll providers\nTier-2 onboarding — how this provider's JSON becomes a working integration\nProvider feature compatibility","hierarchy":{"lvl0":"Getting Started","lvl1":"GMI Cloud Provider Guide","lvl2":"See also","lvl3":""}},
|
|
5351
5351
|
{"objectID":"b81ddd2ee4cdeb7fcb4cb7cb50e6d476e29ee3d3037a86b15618354b95ab49c3","title":"Google AI Studio Provider Guide","url":"/docs/getting-started/providers/google-ai","content":"Google AI Studio Provider Guide\n\nDirect access to Google's Gemini models with generous free tier and simple API key authentication\n\nOverview\n\nGoogle AI Studio (formerly MakerSuite) provides direct access to Google's Gemini AI models with simple API key authentication and one of the most generous free tiers available. Perfect for development, prototyping, and low-volume production workloads.\n\nGoogle AI Studio offers one of the most generous free tiers: 1,500 requests/day with Gemini 2.5 Flash. Perfect for startups and small projects to run in production at zero cost.\n\nKey Benefits\n🆓 Generous Free Tier: 15 requests/minute, 1M tokens/minute, 1500 requests/day\n⚡ Fast Setup: Single API key, no service accounts required\n🎯 Gemini Models: Access to Gemini 3.1/3 (with Extended Thinking), Gemini 2.5 Pro/Flash, and more\n💰 Cost-Effective: Free tier covers most development needs\n🔧 Simple Auth: No complex GCP setup needed\n📊 Multimodal: Text, images, video, and audio support\n\nUse Cases\nRapid Prototyping: Quick AI integration without GCP complexity\nDevelopment: Free tier perfect for development and testing\nLow-Volume Production: Small apps within free tier limits\nMultimodal Applications: Image, video, and audio processing\nCost-Sensitive Projects: Generous free tier reduces costs\n\nQuick Start\nGet Your API Key\nVisit Google AI Studio\nSign in with your Google account (no GCP project needed)\nClick Get API Key in the top navigation\nClick Create API Key\nCopy the generated key (starts with AIza)\nConfigure NeuroLink\n\nAdd to your .env file:\nTest the Setup\n\nFree Tier Details\n\nCurrent Limits (Updated 2025)\n\n| Resource | Free Tier Limit | Notes |\n| ----------------------------- | --------------- | -------------------------------- |\n| Requests per Minute (RPM) | 15 RPM | Per API key |\n| Tokens per Minute (TPM) | 1M TPM | Combined input + output |\n| Requests per Day (RPD) | 1,500 RPD | Rolling 24-hour window |\n| Concurrent Requests | 15 | Max simultaneous requests |\n| Context Length | Up to 1M tokens | Model-dependent (Gemini 2.5 Pro) |\n\nFree Tier Capacity Estimate\n\nWhen to Upgrade\n\nYou should consider upgrading to Vertex AI when:\n✅ Exceeding 1,500 requests/day consistently\n✅ Need for SLA guarantees\n✅ Enterprise compliance requirements (HIPAA, SOC2)\n✅ Multi-region deployment\n✅ Advanced security features (VPC, customer-managed encryption)\n✅ Fine-tuning custom models\n\nModel Selection Guide\n\nAvailable Gemini Models\n\n| Model | Model ID | Context Window | Max Output | Multimodal |\n| --------------------- | ------------------------------- | -------------- | ---------- | ------------------------------- |\n| Gemini 3.1 Pro | gemini-3.1-pro-preview | 1,048,576 | 65,536 | Text, images, audio, video, PDF |\n| Gemini 3 Flash | gemini-3-flash-preview | 1,048,576 | 65,536 | Text, images, audio, video, PDF |\n| Gemini 3.1 Flash Lite | gemini-3.1-flash-lite-preview | 1,048,576 | 65,536 | Text, images, audio, video |\n| Gemini 2.5 Pro | gemini-2.5-pro | 1,048,576 | 65,536 | Text, images, audio, video, PDF |\n| Gemini 2.5 Flash | gemini-2.5-flash | 1,048,576 | 65,536 | Text, images, audio, video |\n| Gemini 2.5 Flash Lite | gemini-2.5-flash-lite | 1,048,576 | 65,536 | Text, images, audio, video |\n\nGemini 3.1 Pro, Gemini 3 Flash, and Gemini 3.1 Flash Lite carry the -preview suffix and may change behavior before reaching general availability. Pin to a specific model ID in production and monitor the Gemini API changelog for graduation announcements and deprecation timelines.\n\nDeprecated / Retiring Models\n\n| Model | Model ID | Status | Notes |\n| ---------------- | ------------------ | --------------------- | ----------------------------------- |\n| Gemini 2.0 Flash | gemini-2.0-flash | Retiring June 1, 2026 | Migrate to gemini-2.5-flash |\n| Gemini 1.5 Pro | gemini-1.5-pro | SHUT DOWN | Returns 404. Use gemini-2.5-pro |\n| Gemini 1.5 Flash | gemini-1.5-flash | SHUT DOWN | Returns 404. Use gemini-2.5-flash |\n\nEmbedding Models\n\n| Model | Model ID | Dimensions | Multimodal | Status |\n| -------------------------- | ---------------------------- | ---------- | -------------------------- | ------------------------------ |\n| Gemini Embedding 001 | gemini-embedding-001 | 3,072 | Text only | Current default |\n| Gemini Embedding 2 Preview | gemini-embedding-2-preview | 3,072 | Text, images, video, audio | NEW -- preview |\n| Text Embedding 004 | text-embedding-004 | 768 ","hierarchy":{"lvl0":"Getting Started","lvl1":"Google AI Studio Provider Guide","lvl2":"","lvl3":""}},
|
|
@@ -5560,20 +5560,20 @@
|
|
|
5560
5560
|
{"objectID":"cce316f6da6f311d30372118d04f2867d44a782f7d0a337014168a895561130c","title":"CLI Usage","url":"/docs/getting-started/providers/ideogram#cli-usage","content":"CLI Usage","hierarchy":{"lvl0":"Getting Started","lvl1":"Ideogram Provider Guide (image-gen)","lvl2":"CLI Usage","lvl3":""}},
|
|
5561
5561
|
{"objectID":"6605551398cae4d8f4684ccd4934ba47156e1e34a806b6bd62c63906685d4799","title":"Configuration Reference","url":"/docs/getting-started/providers/ideogram#configuration-reference","content":"| Environment Variable | Required | Default |\n| -------------------- | -------- | ------- |\n| IDEOGRAM_API_KEY | Yes | — |\n| IDEOGRAM_MODEL | No | V_3 |","hierarchy":{"lvl0":"Getting Started","lvl1":"Ideogram Provider Guide (image-gen)","lvl2":"Configuration Reference","lvl3":""}},
|
|
5562
5562
|
{"objectID":"dede022f35384d486165b8104c72667945d10cf57feb7d84d12191264be4eeb4","title":"See Also","url":"/docs/getting-started/providers/ideogram#see-also","content":"Stability AI Provider\nRecraft Provider","hierarchy":{"lvl0":"Getting Started","lvl1":"Ideogram Provider Guide (image-gen)","lvl2":"See Also","lvl3":""}},
|
|
5563
|
-
{"objectID":"dc64fd7d29e0397ec72385731dc1908f8692b567ecfff90ba821d8b2c28ec70f","title":"Inception Labs Provider Guide","url":"/docs/getting-started/providers/inception-labs","content":"Inception Labs Provider Guide\n\nInception Labs is a Tier-2 catalog provider: OpenAI-wire-compatible with no\nbehavioural quirks, so its entire integration is one JSON file\n(src/lib/providers/catalog/inception-labs.json) rather than hand-written code. That\nfile is the source of truth for everything on this page.\n\nKey Facts\nProvider id: inception-labs (aliases: inception, mercury)\nProtocol: OpenAI-compatible (/chat/completions)\nBase URL: https://api.inceptionlabs.ai/v1\nDefault model: mercury-2\nModels in catalog: 1\nStreaming: supported\nTool calling: supported (native)\nStructured output: supported\nEmbeddings: not supported\nBilling: free-tier\nKey format: ^sk_[A-Za-z0-9_-]+$\n\nQuick Start\nGet an API key\nVisit: https://platform.inceptionlabs.ai and sign in (Google OAuth works)\nNew accounts get 100M free tokens with no card required\nCreate an API key under Dashboard -> API Keys\nSet INCEPTION_LABS_API_KEY in your .env file\nConfigure\nUse it\n\nPer-request credentials work as they do for every provider:\n\nModels\n\n| Model | Context | Vision | $/M in · out | Notes |\n| -------------- | ------- | ------ | ------------- | ------------------------------------------------------------------------------------------------------------------------- |\n| mercury-2 ⭐ | 125K | no | $0.25 / $0.75 | Mercury 2, Inception's enterprise diffusion LLM (dLLM); reasoning, tool use, structured output; 128K context, 1000+ tok/s |\n\nFallback order when the default is unavailable: mercury-2.\n\nVerification status\n\nTier-2 onboarding requires evidence before a provider is accepted, and\npnpm run verify:provider-onboarding gates it in CI. This is what the\ncatalog records for Inception Labs:\n\n| Probe | Result |\n| --------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Roster | authenticated GET /v1/models, HTTP 200, 2026-09-03 |\n| Auth rejection | HTTP 401 invalid_api_key, 2026-09-03 |\n| Live capability sweep | 2026-09-03 — Full capability sweep on mercury-2: chat, stream,
|
|
5563
|
+
{"objectID":"dc64fd7d29e0397ec72385731dc1908f8692b567ecfff90ba821d8b2c28ec70f","title":"Inception Labs Provider Guide","url":"/docs/getting-started/providers/inception-labs","content":"Inception Labs Provider Guide\n\nInception Labs is a Tier-2 catalog provider: OpenAI-wire-compatible with no\nbehavioural quirks, so its entire integration is one JSON file\n(src/lib/providers/catalog/inception-labs.json) rather than hand-written code. That\nfile is the source of truth for everything on this page.\n\nKey Facts\nProvider id: inception-labs (aliases: inception, mercury)\nProtocol: OpenAI-compatible (/chat/completions)\nBase URL: https://api.inceptionlabs.ai/v1\nDefault model: mercury-2\nModels in catalog: 1\nStreaming: supported\nTool calling: supported (native)\nStructured output: supported\nEmbeddings: not supported\nBilling: free-tier\nKey format: ^sk_[A-Za-z0-9_-]+$\n\nQuick Start\nGet an API key\nVisit: https://platform.inceptionlabs.ai and sign in (Google OAuth works)\nNew accounts get 100M free tokens with no card required\nCreate an API key under Dashboard -> API Keys\nSet INCEPTION_LABS_API_KEY in your .env file\nConfigure\nUse it\n\nPer-request credentials work as they do for every provider:\n\nModels\n\n| Model | Context | Vision | $/M in · out | Notes |\n| -------------- | ------- | ------ | ------------- | ------------------------------------------------------------------------------------------------------------------------- |\n| mercury-2 ⭐ | 125K | no | $0.25 / $0.75 | Mercury 2, Inception's enterprise diffusion LLM (dLLM); reasoning, tool use, structured output; 128K context, 1000+ tok/s |\n\nFallback order when the default is unavailable: mercury-2.\n\nVerification status\n\nTier-2 onboarding requires evidence before a provider is accepted, and\npnpm run verify:provider-onboarding gates it in CI. This is what the\ncatalog records for Inception Labs:\n\n| Probe | Result |\n| --------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Roster | authenticated GET /v1/models, HTTP 200, 2026-09-03 |\n| Auth rejection | HTTP 401 invalid_api_key, 2026-09-03 |\n| Live capability sweep | 2026-09-03 — Full capability sweep on mercury-2: chat, stream, system_role, content_text_parts, sampling_params, tools, tools_stream, tools_roundtrip_null, tool_choice_without_tools, json_object, json_schema and tools_plus_schema all |\n\nTroubleshooting\n\n| Symptom | Cause | Fix |\n| -------------------------------- | --------------------------------------- | --------------------------------------------------------------------- |\n| Invalid Inception Labs API key | INCEPTION_LABS_API_KEY unset or wrong | Check the key at https://platform.inceptionlabs.ai/dashboard/api-keys |\n| Model not found | The roster changed since 2026-09-03 | Pick a current id; catalog providers retire models without notice |\n\nSee also\nProvider setup overview\nAll providers\nTier-2 onboarding — how this provider's JSON becomes a working integration\nProvider feature compatibility","hierarchy":{"lvl0":"Getting Started","lvl1":"Inception Labs Provider Guide","lvl2":"","lvl3":""}},
|
|
5564
5564
|
{"objectID":"36512d2cf83719a0d1e45e409b90993527af7871e176a4c69f6abe2942de263f","title":"Inception Labs Provider Guide","url":"/docs/getting-started/providers/inception-labs#inception-labs-provider-guide","content":"Inception Labs is a Tier-2 catalog provider: OpenAI-wire-compatible with no\nbehavioural quirks, so its entire integration is one JSON file\n(src/lib/providers/catalog/inception-labs.json) rather than hand-written code. That\nfile is the source of truth for everything on this page.","hierarchy":{"lvl0":"Getting Started","lvl1":"Inception Labs Provider Guide","lvl2":"Inception Labs Provider Guide","lvl3":""}},
|
|
5565
5565
|
{"objectID":"97f3ad76236100ad74e85da8d5801b4be76aa6b9387a0418f840fb81542f2a55","title":"Key Facts","url":"/docs/getting-started/providers/inception-labs#key-facts","content":"Provider id: inception-labs (aliases: inception, mercury)\nProtocol: OpenAI-compatible (/chat/completions)\nBase URL: https://api.inceptionlabs.ai/v1\nDefault model: mercury-2\nModels in catalog: 1\nStreaming: supported\nTool calling: supported (native)\nStructured output: supported\nEmbeddings: not supported\nBilling: free-tier\nKey format: ^sk_[A-Za-z0-9_-]+$","hierarchy":{"lvl0":"Getting Started","lvl1":"Inception Labs Provider Guide","lvl2":"Key Facts","lvl3":""}},
|
|
5566
5566
|
{"objectID":"1ad16724295f6948925cd94a4284d7e107e6ec7cf08f4d9aead9a531aa5c6ca3","title":"1. Get an API key","url":"/docs/getting-started/providers/inception-labs#1-get-an-api-key","content":"Visit: https://platform.inceptionlabs.ai and sign in (Google OAuth works)\nNew accounts get 100M free tokens with no card required\nCreate an API key under Dashboard -> API Keys\nSet INCEPTION_LABS_API_KEY in your .env file","hierarchy":{"lvl0":"Getting Started","lvl1":"Inception Labs Provider Guide","lvl2":"1. Get an API key","lvl3":""}},
|
|
5567
5567
|
{"objectID":"2224db92dbb0915f93d4a8c07596517c40c4a3a23564e971a2adad61a7a8e9b2","title":"2. Configure","url":"/docs/getting-started/providers/inception-labs#2-configure","content":"2. Configure","hierarchy":{"lvl0":"Getting Started","lvl1":"Inception Labs Provider Guide","lvl2":"2. Configure","lvl3":""}},
|
|
5568
5568
|
{"objectID":"432222a6e598f4b09e45618e84895f40ba7c282d95e92bc11bc26a06b946dd85","title":"3. Use it","url":"/docs/getting-started/providers/inception-labs#3-use-it","content":"Per-request credentials work as they do for every provider:","hierarchy":{"lvl0":"Getting Started","lvl1":"Inception Labs Provider Guide","lvl2":"3. Use it","lvl3":""}},
|
|
5569
5569
|
{"objectID":"535c5992460ef097372ab742822352677529e65edbe7f040c820f4d06cecdc90","title":"Models","url":"/docs/getting-started/providers/inception-labs#models","content":"| Model | Context | Vision | $/M in · out | Notes |\n| -------------- | ------- | ------ | ------------- | ------------------------------------------------------------------------------------------------------------------------- |\n| mercury-2 ⭐ | 125K | no | $0.25 / $0.75 | Mercury 2, Inception's enterprise diffusion LLM (dLLM); reasoning, tool use, structured output; 128K context, 1000+ tok/s |\n\nFallback order when the default is unavailable: mercury-2.","hierarchy":{"lvl0":"Getting Started","lvl1":"Inception Labs Provider Guide","lvl2":"Models","lvl3":""}},
|
|
5570
|
-
{"objectID":"e36b07253cf3b9f30e41c888c8083b32320bae3c3cc53e6fc824e7d9677f6e07","title":"Verification status","url":"/docs/getting-started/providers/inception-labs#verification-status","content":"Tier-2 onboarding requires evidence before a provider is accepted, and\npnpm run verify:provider-onboarding gates it in CI. This is what the\ncatalog records for Inception Labs:\n\n| Probe | Result |\n| --------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Roster | authenticated GET /v1/models, HTTP 200, 2026-09-03 |\n| Auth rejection | HTTP 401 invalid_api_key, 2026-09-03 |\n| Live capability sweep | 2026-09-03 — Full capability sweep on mercury-2: chat, stream,
|
|
5570
|
+
{"objectID":"e36b07253cf3b9f30e41c888c8083b32320bae3c3cc53e6fc824e7d9677f6e07","title":"Verification status","url":"/docs/getting-started/providers/inception-labs#verification-status","content":"Tier-2 onboarding requires evidence before a provider is accepted, and\npnpm run verify:provider-onboarding gates it in CI. This is what the\ncatalog records for Inception Labs:\n\n| Probe | Result |\n| --------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Roster | authenticated GET /v1/models, HTTP 200, 2026-09-03 |\n| Auth rejection | HTTP 401 invalid_api_key, 2026-09-03 |\n| Live capability sweep | 2026-09-03 — Full capability sweep on mercury-2: chat, stream, system_role, content_text_parts, sampling_params, tools, tools_stream, tools_roundtrip_null, tool_choice_without_tools, json_object, json_schema and tools_plus_schema all |","hierarchy":{"lvl0":"Getting Started","lvl1":"Inception Labs Provider Guide","lvl2":"Verification status","lvl3":""}},
|
|
5571
5571
|
{"objectID":"7eccde36bee5c7ddb2b800c370a2adba5ae48cbde5f16cf242e969e6a691d8ab","title":"Troubleshooting","url":"/docs/getting-started/providers/inception-labs#troubleshooting","content":"| Symptom | Cause | Fix |\n| -------------------------------- | --------------------------------------- | --------------------------------------------------------------------- |\n| Invalid Inception Labs API key | INCEPTION_LABS_API_KEY unset or wrong | Check the key at https://platform.inceptionlabs.ai/dashboard/api-keys |\n| Model not found | The roster changed since 2026-09-03 | Pick a current id; catalog providers retire models without notice |","hierarchy":{"lvl0":"Getting Started","lvl1":"Inception Labs Provider Guide","lvl2":"Troubleshooting","lvl3":""}},
|
|
5572
5572
|
{"objectID":"1f495e1867e86b99eab1619314909fddc3a3bd14172aa094a059683a4daac6c3","title":"See also","url":"/docs/getting-started/providers/inception-labs#see-also","content":"Provider setup overview\nAll providers\nTier-2 onboarding — how this provider's JSON becomes a working integration\nProvider feature compatibility","hierarchy":{"lvl0":"Getting Started","lvl1":"Inception Labs Provider Guide","lvl2":"See also","lvl3":""}},
|
|
5573
|
-
{"objectID":"d998c763c0816e5153aa248aea16e97902016580a5274b0dfc77074aba8b95e1","title":"Inceptron Provider Guide","url":"/docs/getting-started/providers/inceptron","content":"Inceptron Provider Guide\n\nInceptron is a Tier-2 catalog provider: an OpenAI-compatible endpoint\ndescribed by one JSON file (src/lib/providers/catalog/inceptron.json) rather\nthan hand-written code.\n\nVerification status: this entry is docs- and roster-verified, not yet\nlive-verified. The fields below come from Inceptron's own public pages,\nan unauthenticated GET /v1/models call and an unauthenticated\nGET /v1/chat/completions call — no account was created and no API key was\nused to build it. evidence.liveMatrix is null until someone runs the live\ncapability matrix with a real key (see\nVerification status below).\n\nKey Facts\nProvider id: inceptron\nProtocol: OpenAI-compatible (/chat/completions) — the Chat Completions\n API Reference says \"Our API is compliant with OpenAI's Chat Completions API\"\n (docs)\nBase URL: https://api.inceptron.io/v1\nDefault model: zai-org/GLM-5.3\nModels in catalog: 6 (the full 6-model live roster)\nStreaming: supported — the Chat Completions API Reference documents the\n stream parameter and a streaming response, and there is a\n Handling Streaming Responses\n guide\nTool calling: true — the Chat Completions API Reference and the\n Tool Calling guide describe\n OpenAI-compatible tool calling with tools and tool_choice, with worked\n examples on moonshotai/Kimi-K2.6. The models page tags each of the six\n model cards tool-calling\nTools while streaming: true — the Chat Completions API Reference has a\n \"Streaming Tool Call Response\" section and the Tool Calling guide has a\n \"Handle Streamed Tool Calls\" section\nStructured output: false on this entry. The Chat Completions API\n Reference request table lists model, messages, temperature,\n max_tokens, stream, top_p, n, stop, tools and tool_choice; the\n roster's supported_features field lists json_mode and structured_outputs\n for the six models. Structured output was not exercised live\nStructured output + tools together: not declared (false) — no\n combined probe was run without credentials\nEmbeddings: not declared (false)\nThinking: not declared (false). The models page tags each of the six\n model cards reasoning, and the Kilo Code guide configures reasoningEffort\n variants low, high and max for zai-org/GLM-5.3\nBilling: recorded as no-free-tier because the catalog schema has no\n unknown value — a schema placeholder, not a vendor statement\nKey format: none declared\n\nQuick Start\nGet an API key\nVisit: https://console.inceptron.io and sign in or sign up — the sign-in page shows Continue with Google, Continue with GitHub and Sign in with email, and links to https://console.inceptron.io/auth/signup\nCreate an API key — the Introduction page says: \"After signing up, navigate to the account section of the dashboard to create an API key.\" (https://docs.inceptron.io/introduction)\nSet INCEPTRON_API_KEY in your .env file (the docs' examples read
|
|
5573
|
+
{"objectID":"d998c763c0816e5153aa248aea16e97902016580a5274b0dfc77074aba8b95e1","title":"Inceptron Provider Guide","url":"/docs/getting-started/providers/inceptron","content":"Inceptron Provider Guide\n\nInceptron is a Tier-2 catalog provider: an OpenAI-compatible endpoint\ndescribed by one JSON file (src/lib/providers/catalog/inceptron.json) rather\nthan hand-written code.\n\nVerification status: this entry is docs- and roster-verified, not yet\nlive-verified. The fields below come from Inceptron's own public pages,\nan unauthenticated GET /v1/models call and an unauthenticated\nGET /v1/chat/completions call — no account was created and no API key was\nused to build it. evidence.liveMatrix is null until someone runs the live\ncapability matrix with a real key (see\nVerification status below).\n\nKey Facts\nProvider id: inceptron\nProtocol: OpenAI-compatible (/chat/completions) — the Chat Completions\n API Reference says \"Our API is compliant with OpenAI's Chat Completions API\"\n (docs)\nBase URL: https://api.inceptron.io/v1\nDefault model: zai-org/GLM-5.3\nModels in catalog: 6 (the full 6-model live roster)\nStreaming: supported — the Chat Completions API Reference documents the\n stream parameter and a streaming response, and there is a\n Handling Streaming Responses\n guide\nTool calling: true — the Chat Completions API Reference and the\n Tool Calling guide describe\n OpenAI-compatible tool calling with tools and tool_choice, with worked\n examples on moonshotai/Kimi-K2.6. The models page tags each of the six\n model cards tool-calling\nTools while streaming: true — the Chat Completions API Reference has a\n \"Streaming Tool Call Response\" section and the Tool Calling guide has a\n \"Handle Streamed Tool Calls\" section\nStructured output: false on this entry. The Chat Completions API\n Reference request table lists model, messages, temperature,\n max_tokens, stream, top_p, n, stop, tools and tool_choice; the\n roster's supported_features field lists json_mode and structured_outputs\n for the six models. Structured output was not exercised live\nStructured output + tools together: not declared (false) — no\n combined probe was run without credentials\nEmbeddings: not declared (false)\nThinking: not declared (false). The models page tags each of the six\n model cards reasoning, and the Kilo Code guide configures reasoningEffort\n variants low, high and max for zai-org/GLM-5.3\nBilling: recorded as no-free-tier because the catalog schema has no\n unknown value — a schema placeholder, not a vendor statement\nKey format: none declared\n\nQuick Start\nGet an API key\nVisit: https://console.inceptron.io and sign in or sign up — the sign-in page shows Continue with Google, Continue with GitHub and Sign in with email, and links to https://console.inceptron.io/auth/signup\nCreate an API key — the Introduction page says: \"After signing up, navigate to the account section of the dashboard to create an API key.\" (https://docs.inceptron.io/introduction)\nSet INCEPTRON_API_KEY in your .env file (the docs' examples read INCEPTRON_API_KEY)\n\nThe Authentication guide\n(docs) says:\n\nYou can find your API key in your Inceptron account dashboard under the \"API Keys\" section.\nConfigure\nUse it\n\nPer-request credentials also work:\n\nModels\n\n| Model | Context | Vision | $/M in · out (cache read) | Notes |\n| ------------------------------------ | --------- | ------ | ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| zai-org/GLM-5.3 ⭐ | 1,048,576 | no | $1.40 / $4.40 ($0.26) | NeuroLink default. The model in the docs' Get Started, Introduction, Chat Completions, Error Handling and Streaming code examples and in the Kilo Code and OpenCode config. Tags: text, code, tool-calling, reasoning. |\n| moonshotai/Kimi-K2.6 | 262,144 | yes | $0.73 / $3.50 ($0.25) | NeuroLink fallback. The model in the docs' tool-calling examples. Tags: multimodal, tool-calling, reasoning. models.visionModel. |\n| deepseek-ai/DeepSeek-V4-Flash-0731 | 1,048,576 | no | $0.13 / $0.28 ($0.03) | NeuroLink fallback. Tags: text, code, tool-calling, reasoning. |\n| zai-org/GLM-5.2 | 1,048,576 | no | $1.20 / $4.20 ($0.26) | NeuroLink fallback. Tags: text, code, tool-calling, reasoning. |\n| moonshotai/Kimi-K2.7-Code | 262,144 | yes | $0.75 / $3.50 ($0.20) | Tags: multimodal","hierarchy":{"lvl0":"Getting Started","lvl1":"Inceptron Provider Guide","lvl2":"","lvl3":""}},
|
|
5574
5574
|
{"objectID":"68d39b8082a2f3b72b1acd4614547a17dd2bffcd4a43ba4528fb7a470d907dd8","title":"Inceptron Provider Guide","url":"/docs/getting-started/providers/inceptron#inceptron-provider-guide","content":"Inceptron is a Tier-2 catalog provider: an OpenAI-compatible endpoint\ndescribed by one JSON file (src/lib/providers/catalog/inceptron.json) rather\nthan hand-written code.\n\nVerification status: this entry is docs- and roster-verified, not yet\nlive-verified. The fields below come from Inceptron's own public pages,\nan unauthenticated GET /v1/models call and an unauthenticated\nGET /v1/chat/completions call — no account was created and no API key was\nused to build it. evidence.liveMatrix is null until someone runs the live\ncapability matrix with a real key (see\nVerification status below).","hierarchy":{"lvl0":"Getting Started","lvl1":"Inceptron Provider Guide","lvl2":"Inceptron Provider Guide","lvl3":""}},
|
|
5575
5575
|
{"objectID":"919a3280bd716c6f2b06da95e79dffb8bc9506f8702ec8d39c9a1963df7b61a2","title":"Key Facts","url":"/docs/getting-started/providers/inceptron#key-facts","content":"Provider id: inceptron\nProtocol: OpenAI-compatible (/chat/completions) — the Chat Completions\n API Reference says \"Our API is compliant with OpenAI's Chat Completions API\"\n (docs)\nBase URL: https://api.inceptron.io/v1\nDefault model: zai-org/GLM-5.3\nModels in catalog: 6 (the full 6-model live roster)\nStreaming: supported — the Chat Completions API Reference documents the\n stream parameter and a streaming response, and there is a\n Handling Streaming Responses\n guide\nTool calling: true — the Chat Completions API Reference and the\n Tool Calling guide describe\n OpenAI-compatible tool calling with tools and tool_choice, with worked\n examples on moonshotai/Kimi-K2.6. The models page tags each of the six\n model cards tool-calling\nTools while streaming: true — the Chat Completions API Reference has a\n \"Streaming Tool Call Response\" section and the Tool Calling guide has a\n \"Handle Streamed Tool Calls\" section\nStructured output: false on this entry. The Chat Completions API\n Reference request table lists model, messages, temperature,\n max_tokens, stream, top_p, n, stop, tools and tool_choice; the\n roster's supported_features field lists json_mode and structured_outputs\n for the six models. Structured output was not exercised live\nStructured output + tools together: not declared (false) — no\n combined probe was run without credentials\nEmbeddings: not declared (false)\nThinking: not declared (false). The models page tags each of the six\n model cards reasoning, and the Kilo Code guide configures reasoningEffort\n variants low, high and max for zai-org/GLM-5.3\nBilling: recorded as no-free-tier because the catalog schema has no\n unknown value — a schema placeholder, not a vendor statement\nKey format: none declared","hierarchy":{"lvl0":"Getting Started","lvl1":"Inceptron Provider Guide","lvl2":"Key Facts","lvl3":""}},
|
|
5576
|
-
{"objectID":"98222a8f08f959ed3d40c7f2c823e2a837de60c13bdc3cffab5911ac76ab7f24","title":"1. Get an API key","url":"/docs/getting-started/providers/inceptron#1-get-an-api-key","content":"Visit: https://console.inceptron.io and sign in or sign up — the sign-in page shows Continue with Google, Continue with GitHub and Sign in with email, and links to https://console.inceptron.io/auth/signup\nCreate an API key — the Introduction page says: \"After signing up, navigate to the account section of the dashboard to create an API key.\" (https://docs.inceptron.io/introduction)\nSet INCEPTRON_API_KEY in your .env file (the docs' examples read
|
|
5576
|
+
{"objectID":"98222a8f08f959ed3d40c7f2c823e2a837de60c13bdc3cffab5911ac76ab7f24","title":"1. Get an API key","url":"/docs/getting-started/providers/inceptron#1-get-an-api-key","content":"Visit: https://console.inceptron.io and sign in or sign up — the sign-in page shows Continue with Google, Continue with GitHub and Sign in with email, and links to https://console.inceptron.io/auth/signup\nCreate an API key — the Introduction page says: \"After signing up, navigate to the account section of the dashboard to create an API key.\" (https://docs.inceptron.io/introduction)\nSet INCEPTRON_API_KEY in your .env file (the docs' examples read INCEPTRON_API_KEY)\n\nThe Authentication guide\n(docs) says:\n\nYou can find your API key in your Inceptron account dashboard under the \"API Keys\" section.","hierarchy":{"lvl0":"Getting Started","lvl1":"Inceptron Provider Guide","lvl2":"1. Get an API key","lvl3":""}},
|
|
5577
5577
|
{"objectID":"b36372342b93872d5c0dd643ffef15f4d1e1e3c4532b16d340ffa22542f22fdd","title":"2. Configure","url":"/docs/getting-started/providers/inceptron#2-configure","content":"2. Configure","hierarchy":{"lvl0":"Getting Started","lvl1":"Inceptron Provider Guide","lvl2":"2. Configure","lvl3":""}},
|
|
5578
5578
|
{"objectID":"61380218fbe2826b4402b4655d1ae1bf5dd65a85c6df5c0bd9cd94cf2b96f1a6","title":"3. Use it","url":"/docs/getting-started/providers/inceptron#3-use-it","content":"Per-request credentials also work:","hierarchy":{"lvl0":"Getting Started","lvl1":"Inceptron Provider Guide","lvl2":"3. Use it","lvl3":""}},
|
|
5579
5579
|
{"objectID":"bf7155ddc335ae301b978fea3c6bb95c374b004b25355c5249f367f43690f4b6","title":"Models","url":"/docs/getting-started/providers/inceptron#models","content":"| Model | Context | Vision | $/M in · out (cache read) | Notes |\n| ------------------------------------ | --------- | ------ | ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| zai-org/GLM-5.3 ⭐ | 1,048,576 | no | $1.40 / $4.40 ($0.26) | NeuroLink default. The model in the docs' Get Started, Introduction, Chat Completions, Error Handling and Streaming code examples and in the Kilo Code and OpenCode config. Tags: text, code, tool-calling, reasoning. |\n| moonshotai/Kimi-K2.6 | 262,144 | yes | $0.73 / $3.50 ($0.25) | NeuroLink fallback. The model in the docs' tool-calling examples. Tags: multimodal, tool-calling, reasoning. models.visionModel. |\n| deepseek-ai/DeepSeek-V4-Flash-0731 | 1,048,576 | no | $0.13 / $0.28 ($0.03) | NeuroLink fallback. Tags: text, code, tool-calling, reasoning. |\n| zai-org/GLM-5.2 | 1,048,576 | no | $1.20 / $4.20 ($0.26) | NeuroLink fallback. Tags: text, code, tool-calling, reasoning. |\n| moonshotai/Kimi-K2.7-Code | 262,144 | yes | $0.75 / $3.50 ($0.20) | Tags: multimodal, tool-calling, reasoning.","hierarchy":{"lvl0":"Getting Started","lvl1":"Inceptron Provider Guide","lvl2":"Models","lvl3":""}},
|
|
@@ -5591,7 +5591,7 @@
|
|
|
5591
5591
|
{"objectID":"25f1d3278b1488298f5b9109f01c8dde6c5435b8f5e4173ccf44d3e52552381a","title":"Live verification still needed","url":"/docs/getting-started/providers/inco#live-verification-still-needed","content":"Tier-2 onboarding normally requires an authenticated roster probe, an auth\nrejection probe, and a live capability sweep\n(docs/provider-integration/tiers/tier-2-catalog-entry.md). This entry was\nbuilt credential-free — no signup, no key, no POST request to Inco — so\nnone of that could run yet:\n\n| Probe | Result |\n| ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Roster | Done. Unauthenticated GET /v1/models, HTTP 200, 2026-09-28, 10 models — matches the vendor docs' claim that the catalog \"can be fetched without a key.\" |\n| Docs cross-check | Done. https://platform.inco.ai/docs confirms the OpenAI Chat Completions wire shape, Authorization: Bearer sk-inco-... auth, and the documented error code values (invalid_api_key, key_expired, model_not_found, rate_limit_exceeded, spend_limit_exceeded, credit_balance_exhausted) used to build errorRules — no literal JSON error bodies were shown on the page, only the code table.","hierarchy":{"lvl0":"Getting Started","lvl1":"Inco Provider Guide","lvl2":"Live verification still needed","lvl3":""}},
|
|
5592
5592
|
{"objectID":"05f582110af48060e03a60a8669d5104da1b95217c289cebbc9e838740f646d8","title":"Troubleshooting","url":"/docs/getting-started/providers/inco#troubleshooting","content":"| Symptom | Cause | Fix |\n| -------------------------------- | -------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- |\n| Invalid Inco API key | INCO_API_KEY unset, wrong, or expired | Check the key on the dashboard's Keys page (https://platform.inco.ai/keys) |\n| Model not found | The roster changed since 2026-09-28, or the id is mistyped | Pick a current id from the unauthenticated GET /v1/models roster |\n| HTTP 402 on every request | Prepaid balance is empty (credit_balance_exhausted) — no free tier | Top up credit on the dashboard before retrying |\n| HTTP 429, spend_limit_exceeded | Your account's monthly spending cap was hit | Raise the cap on the Limits page, or wait for the next billing cycle |\n| HTTP 429, rate_limit_exceeded | Per-minute request limit hit | Back off and retry; check the x-inco-ratelimit-scope response header (quota vs upstream) |\n| Can't sign up | Access is currently gated by a waitlist, not open signup | Join the waitlist at https://platform.inco.ai/waitlist |","hierarchy":{"lvl0":"Getting Started","lvl1":"Inco Provider Guide","lvl2":"Troubleshooting","lvl3":""}},
|
|
5593
5593
|
{"objectID":"1c1fbb4b7a4dfb07f32bac79e9f5e4ceb900107e47960af3df8300fca99f1d04","title":"See also","url":"/docs/getting-started/providers/inco#see-also","content":"Provider setup overview\nAll providers\nTier-2 onboarding — how this provider's JSON becomes a working integration\nProvider feature compatibility","hierarchy":{"lvl0":"Getting Started","lvl1":"Inco Provider Guide","lvl2":"See also","lvl3":""}},
|
|
5594
|
-
{"objectID":"7c072c8c78d8d180a49a16614547286fe7383a263bca00df6636171ffe874cc5","title":"AI Provider Guides","url":"/docs/getting-started/providers","content":"AI Provider Guides\n\nComplete setup guides for all supported AI providers.\n\n🆓 Free Tier Providers\n\nStart with zero cost using these free-tier options:\n\nHugging Face\n\n100,000+ open-source models\n✅ Free inference API\n🌍 Largest model collection\n🔓 Fully open source\n📊 Models by task: chat, classification, NER, summarization\n\nSetup Guide →\n\nGoogle AI Studio\n\nGemini models with generous free tier\n✅ 1,500 requests/day free\n⚡ Fast Gemini 2.0 Flash\n🎯 15 requests/minute\n💰 Pay-as-you-go option\n\nSetup Guide →\n\n🤖 Direct AI Providers\n\nAccess leading AI models directly from their creators:\n\nOpenAI\n\nGPT-5.4, GPT-5, GPT-4o, and o-series reasoning models\n🧠 GPT-5.4 and GPT-5 series flagships with up to 1.05M context\n👁️ GPT-4o multimodal (vision) and o3 / o3-pro / o4-mini reasoning models\n🔧 Full tool/function calling and embeddings support\n🔑 Auth: API Key (OPENAI_API_KEY)\n\nSetup Guide →\n\nAnthropic\n\nClaude models with API key or OAuth authentication\n🧠 Claude 4.5 Opus/Sonnet/Haiku, Claude 4.0 Opus/Sonnet\n🔐 API key or OAuth (Pro/Max subscription)\n💭 Extended thinking for deep reasoning\n📄 200K context window, multimodal support\n\nSetup Guide →\n\n🏢 Enterprise Providers\n\nProduction-grade providers for enterprise deployments:\n\nAzure OpenAI\n\nEnterprise AI with Microsoft Azure\n🔒 SOC2, HIPAA, ISO 27001 compliant\n🌍 Multi-region deployment (30+ regions)\n🛡️ Private endpoints with VNet\n💼 Enterprise SLAs\n\nSetup Guide →\n\nGoogle Vertex AI\n\nGoogle Cloud ML platform\n☁️ GCP integration\n🔐 IAM, VPC, service accounts\n🌏 Global deployment\n🎯 Gemini, PaLM, Codey models\n\nSetup Guide →\n\nAWS Bedrock\n\nServerless AI on AWS\n📦 13 foundation models (Claude, Llama, Mistral)\n🔐 IAM, VPC integration\n🌍 Multi-region (us-east-1, eu-west-1, ap-southeast-1)\n💰 Pay-per-use pricing\n\nSetup Guide →\n\nAWS SageMaker\n\nCustom model endpoints on AWS SageMaker infrastructure\n🎯 Deploy fine-tuned, Hugging Face, or JumpStart models\n🔐 IAM, VPC, PrivateLink, KMS encryption\n⚠️ generate() only — streaming is not implemented\n💰 Full control over instance types and autoscaling\n\nSetup Guide →\n\n🌍 Compliance-Focused\n\nProviders with specific compliance certifications:\n\nMistral AI\n\nEuropean AI with GDPR compliance\n🇪🇺 EU data residency\n✅ GDPR compliant by default\n🔓 Open source models\n💰 Cost-effective\n\nSetup Guide →\n\n🧑💻 Hosted Inference Providers\n\nAccess frontier models via hosted cloud inference APIs:\n\nDeepSeek\n\ndeepseek-chat (V3) and deepseek-reasoner (R1)\n🧠 deepseek-chat — high-quality general chat at low cost\n💭 deepseek-reasoner — R1 chain-of-thought reasoning model\n🔑 API key from platform.deepseek.com\n🔄 Aliases: ds\n\nSetup Guide →\n\nNVIDIA NIM\n\n400+ models via NVIDIA's hosted and self-hosted inference platform\n🚀 Llama 3.3 70B Instruct (default), Mistral, Nemotron, and 400+ catalog models\n🔧 NIM-specific extras:
|
|
5594
|
+
{"objectID":"7c072c8c78d8d180a49a16614547286fe7383a263bca00df6636171ffe874cc5","title":"AI Provider Guides","url":"/docs/getting-started/providers","content":"AI Provider Guides\n\nComplete setup guides for all supported AI providers.\n\n🆓 Free Tier Providers\n\nStart with zero cost using these free-tier options:\n\nHugging Face\n\n100,000+ open-source models\n✅ Free inference API\n🌍 Largest model collection\n🔓 Fully open source\n📊 Models by task: chat, classification, NER, summarization\n\nSetup Guide →\n\nGoogle AI Studio\n\nGemini models with generous free tier\n✅ 1,500 requests/day free\n⚡ Fast Gemini 2.0 Flash\n🎯 15 requests/minute\n💰 Pay-as-you-go option\n\nSetup Guide →\n\n🤖 Direct AI Providers\n\nAccess leading AI models directly from their creators:\n\nOpenAI\n\nGPT-5.4, GPT-5, GPT-4o, and o-series reasoning models\n🧠 GPT-5.4 and GPT-5 series flagships with up to 1.05M context\n👁️ GPT-4o multimodal (vision) and o3 / o3-pro / o4-mini reasoning models\n🔧 Full tool/function calling and embeddings support\n🔑 Auth: API Key (OPENAI_API_KEY)\n\nSetup Guide →\n\nAnthropic\n\nClaude models with API key or OAuth authentication\n🧠 Claude 4.5 Opus/Sonnet/Haiku, Claude 4.0 Opus/Sonnet\n🔐 API key or OAuth (Pro/Max subscription)\n💭 Extended thinking for deep reasoning\n📄 200K context window, multimodal support\n\nSetup Guide →\n\n🏢 Enterprise Providers\n\nProduction-grade providers for enterprise deployments:\n\nAzure OpenAI\n\nEnterprise AI with Microsoft Azure\n🔒 SOC2, HIPAA, ISO 27001 compliant\n🌍 Multi-region deployment (30+ regions)\n🛡️ Private endpoints with VNet\n💼 Enterprise SLAs\n\nSetup Guide →\n\nGoogle Vertex AI\n\nGoogle Cloud ML platform\n☁️ GCP integration\n🔐 IAM, VPC, service accounts\n🌏 Global deployment\n🎯 Gemini, PaLM, Codey models\n\nSetup Guide →\n\nAWS Bedrock\n\nServerless AI on AWS\n📦 13 foundation models (Claude, Llama, Mistral)\n🔐 IAM, VPC integration\n🌍 Multi-region (us-east-1, eu-west-1, ap-southeast-1)\n💰 Pay-per-use pricing\n\nSetup Guide →\n\nAWS SageMaker\n\nCustom model endpoints on AWS SageMaker infrastructure\n🎯 Deploy fine-tuned, Hugging Face, or JumpStart models\n🔐 IAM, VPC, PrivateLink, KMS encryption\n⚠️ generate() only — streaming is not implemented\n💰 Full control over instance types and autoscaling\n\nSetup Guide →\n\n🌍 Compliance-Focused\n\nProviders with specific compliance certifications:\n\nMistral AI\n\nEuropean AI with GDPR compliance\n🇪🇺 EU data residency\n✅ GDPR compliant by default\n🔓 Open source models\n💰 Cost-effective\n\nSetup Guide →\n\n🧑💻 Hosted Inference Providers\n\nAccess frontier models via hosted cloud inference APIs:\n\nDeepSeek\n\ndeepseek-chat (V3) and deepseek-reasoner (R1)\n🧠 deepseek-chat — high-quality general chat at low cost\n💭 deepseek-reasoner — R1 chain-of-thought reasoning model\n🔑 API key from platform.deepseek.com\n🔄 Aliases: ds\n\nSetup Guide →\n\nNVIDIA NIM\n\n400+ models via NVIDIA's hosted and self-hosted inference platform\n🚀 Llama 3.3 70B Instruct (default), Mistral, Nemotron, and 400+ catalog models\n🔧 NIM-specific extras: top_k, min_p, repetition_penalty, reasoning_budget\n🔑 API key from build.nvidia.com\n🖥️ Also supports self-hosted NIM endpoints via NVIDIA_NIM_BASE_URL\n🔄 Aliases: nim, nvidia\n\nSetup Guide →\n\nxAI Grok\n\nGrok 3 / 3 Mini / 2 / 2 Vision via api.x.ai\n🧠 Grok 3 — flagship reasoning + coding\n⚡ Grok 3 Mini — faster + cheaper\n👁️ Grok 2 Vision — multimodal text + images\n🔑 API key from console.x.ai\n🔄 Aliases: grok\n\nSetup Guide →\n\nGroq\n\nSub-100ms inference via LPU acceleration\n⚡ \\\n\nStrategy 2: Multi-Region Enterprise\n\nStrategy 3: GDPR Compliance\n\nNext Steps\nChoose a provider based on your requirements (free tier, compliance, region)\nFollow the setup guide to get your API key\nConfigure NeuroLink with the provider\nTest the integration with a simple request\nAdd failover for production reliability\n\nRelated Documentation\nMulti-Provider Failover - High availability patterns\nCost Optimization - Reduce costs by 80-95%\nCompliance & Security - GDPR, SOC2, HIPAA\nLoad Balancing - Distribution strategies\nVoice Providers Comparison - TTS, STT, and Realtime capability matrix\nVoice Provider Selection - Choosing the right voice provider","hierarchy":{"lvl0":"Getting Started","lvl1":"AI Provider Guides","lvl2":"","lvl3":""}},
|
|
5595
5595
|
{"objectID":"61fd5d334fc9a01ce08b9d06d237d42e3bec615a6af167e9f21285e6602a5cb3","title":"AI Provider Guides","url":"/docs/getting-started/providers#ai-provider-guides","content":"Complete setup guides for all supported AI providers.","hierarchy":{"lvl0":"Getting Started","lvl1":"AI Provider Guides","lvl2":"AI Provider Guides","lvl3":""}},
|
|
5596
5596
|
{"objectID":"186f620ef7eedd0c1191700ef81e03911662a949091bd47dbe9aae5146728090","title":"🆓 Free Tier Providers","url":"/docs/getting-started/providers#-free-tier-providers","content":"Start with zero cost using these free-tier options:","hierarchy":{"lvl0":"Getting Started","lvl1":"AI Provider Guides","lvl2":"🆓 Free Tier Providers","lvl3":""}},
|
|
5597
5597
|
{"objectID":"a5c5d85342beed55592caaf4ede7acb7b2bc5196fe8ae151275fa2d3bee5134b","title":"[Hugging Face](/docs/getting-started/providers/huggingface)","url":"/docs/getting-started/providers#hugging-facedocsgetting-startedprovidershuggingface","content":"100,000+ open-source models\n✅ Free inference API\n🌍 Largest model collection\n🔓 Fully open source\n📊 Models by task: chat, classification, NER, summarization\n\nSetup Guide →","hierarchy":{"lvl0":"Getting Started","lvl1":"AI Provider Guides","lvl2":"[Hugging Face](/docs/getting-started/providers/huggingface)","lvl3":""}},
|
|
@@ -5608,7 +5608,7 @@
|
|
|
5608
5608
|
{"objectID":"a3dbb5b7e6d68edfcffdffcb40e1da199556ea4b2228ad66d56cc08c027c6683","title":"[Mistral AI](/docs/getting-started/providers/mistral)","url":"/docs/getting-started/providers#mistral-aidocsgetting-startedprovidersmistral","content":"European AI with GDPR compliance\n🇪🇺 EU data residency\n✅ GDPR compliant by default\n🔓 Open source models\n💰 Cost-effective\n\nSetup Guide →","hierarchy":{"lvl0":"Getting Started","lvl1":"AI Provider Guides","lvl2":"[Mistral AI](/docs/getting-started/providers/mistral)","lvl3":""}},
|
|
5609
5609
|
{"objectID":"521499b75fdfcd9367e5d76293113096fbbc48490544b5a394e8b60e918fc667","title":"🧑💻 Hosted Inference Providers","url":"/docs/getting-started/providers#-hosted-inference-providers","content":"Access frontier models via hosted cloud inference APIs:","hierarchy":{"lvl0":"Getting Started","lvl1":"AI Provider Guides","lvl2":"🧑💻 Hosted Inference Providers","lvl3":""}},
|
|
5610
5610
|
{"objectID":"8b06a284811af75725797304e62d1fddb0c89670cbfae7ab8af756767697b542","title":"[DeepSeek](/docs/getting-started/provider-setup.md#deepseek)","url":"/docs/getting-started/providers#deepseekdocsgetting-startedprovider-setupmddeepseek","content":"deepseek-chat (V3) and deepseek-reasoner (R1)\n🧠 deepseek-chat — high-quality general chat at low cost\n💭 deepseek-reasoner — R1 chain-of-thought reasoning model\n🔑 API key from platform.deepseek.com\n🔄 Aliases: ds\n\nSetup Guide →","hierarchy":{"lvl0":"Getting Started","lvl1":"AI Provider Guides","lvl2":"[DeepSeek](/docs/getting-started/provider-setup.md#deepseek)","lvl3":""}},
|
|
5611
|
-
{"objectID":"21a5db7e84f443153367e694a5e6341291f1a2acf53f45469d270c87b5673d3f","title":"[NVIDIA NIM](/docs/getting-started/provider-setup.md#nvidia-nim)","url":"/docs/getting-started/providers#nvidia-nimdocsgetting-startedprovider-setupmdnvidia-nim","content":"400+ models via NVIDIA's hosted and self-hosted inference platform\n🚀 Llama 3.3 70B Instruct (default), Mistral, Nemotron, and 400+ catalog models\n🔧 NIM-specific extras:
|
|
5611
|
+
{"objectID":"21a5db7e84f443153367e694a5e6341291f1a2acf53f45469d270c87b5673d3f","title":"[NVIDIA NIM](/docs/getting-started/provider-setup.md#nvidia-nim)","url":"/docs/getting-started/providers#nvidia-nimdocsgetting-startedprovider-setupmdnvidia-nim","content":"400+ models via NVIDIA's hosted and self-hosted inference platform\n🚀 Llama 3.3 70B Instruct (default), Mistral, Nemotron, and 400+ catalog models\n🔧 NIM-specific extras: top_k, min_p, repetition_penalty, reasoning_budget\n🔑 API key from build.nvidia.com\n🖥️ Also supports self-hosted NIM endpoints via NVIDIA_NIM_BASE_URL\n🔄 Aliases: nim, nvidia\n\nSetup Guide →","hierarchy":{"lvl0":"Getting Started","lvl1":"AI Provider Guides","lvl2":"[NVIDIA NIM](/docs/getting-started/provider-setup.md#nvidia-nim)","lvl3":""}},
|
|
5612
5612
|
{"objectID":"baf71d0bab0012962b2e704ea816e7493252ac1f2e945344529a2a8f729db9f9","title":"[xAI Grok](/docs/getting-started/providers/xai)","url":"/docs/getting-started/providers#xai-grokdocsgetting-startedprovidersxai","content":"Grok 3 / 3 Mini / 2 / 2 Vision via api.x.ai\n🧠 Grok 3 — flagship reasoning + coding\n⚡ Grok 3 Mini — faster + cheaper\n👁️ Grok 2 Vision — multimodal text + images\n🔑 API key from console.x.ai\n🔄 Aliases: grok\n\nSetup Guide →","hierarchy":{"lvl0":"Getting Started","lvl1":"AI Provider Guides","lvl2":"[xAI Grok](/docs/getting-started/providers/xai)","lvl3":""}},
|
|
5613
5613
|
{"objectID":"6081742cf294c95d4132ce85d7d10c3691d6c726acad8692f0166484e46e4d3d","title":"[Groq](/docs/getting-started/providers/groq)","url":"/docs/getting-started/providers#groqdocsgetting-startedprovidersgroq","content":"Sub-100ms inference via LPU acceleration\n⚡ \\<100ms TTFT — fastest hosted inference available\n🦙 Llama 3.3 70B Versatile (default), Llama 3.1 8B Instant, Mixtral, Gemma 2\n👁️ Llama 3.2 vision-preview variants for multimodal\n🔑 API key from console.groq.com/keys\n\nSetup Guide →","hierarchy":{"lvl0":"Getting Started","lvl1":"AI Provider Guides","lvl2":"[Groq](/docs/getting-started/providers/groq)","lvl3":""}},
|
|
5614
5614
|
{"objectID":"efd70b0c79fda00535219fcd436bd491cbf425f24f62c507715a7f92b4bd4298","title":"[Cerebras](/docs/getting-started/providers/cerebras)","url":"/docs/getting-started/providers#cerebrasdocsgetting-startedproviderscerebras","content":"Wafer-scale inference at ~3000 tokens/s\n🚀 Fastest generation speed of any hosted provider (WSE hardware)\n🤖 GPT-OSS 120B (default), Gemma 4 31B — roster live-verified 2026-08-27\n💳 Free $5 credit requires a saved payment method\n🔑 API key from cloud.cerebras.ai\n\nSetup Guide →","hierarchy":{"lvl0":"Getting Started","lvl1":"AI Provider Guides","lvl2":"[Cerebras](/docs/getting-started/providers/cerebras)","lvl3":""}},
|
|
@@ -5631,7 +5631,7 @@
|
|
|
5631
5631
|
{"objectID":"29d290214c79046b93e1fdbe05b51297117750dab6901db32fe09f589601b38a","title":"Jina AI","url":"/docs/getting-started/providers#jina-ai","content":"Embeddings + reranking\n📊 jina-embeddings-v3 multilingual flagship\n🔄 jina-reranker-v2 for retrieval reranking\n🔍 jina-colbert-v2 late-interaction retrieval\n🔑 API key from jina.ai","hierarchy":{"lvl0":"Getting Started","lvl1":"AI Provider Guides","lvl2":"Jina AI","lvl3":""}},
|
|
5632
5632
|
{"objectID":"f1c52f1f7430763dffd4085b88c57d69ef5bb6b1884ea3cf6bb3fd8fe1079f91","title":"🎨 Direct Image Generation","url":"/docs/getting-started/providers#-direct-image-generation","content":"Specialised image-gen providers (in addition to Vertex Imagen / OpenAI DALL-E / Anthropic / Bedrock):","hierarchy":{"lvl0":"Getting Started","lvl1":"AI Provider Guides","lvl2":"🎨 Direct Image Generation","lvl3":""}},
|
|
5633
5633
|
{"objectID":"4a4f54e3c06b19ba5c0fc42c6797be872d019b85daf6fc4753ef5126c39e2657","title":"[Stability AI](/docs/getting-started/providers/stability)","url":"/docs/getting-started/providers#stability-aidocsgetting-startedprovidersstability","content":"Stable Image Ultra/Core + SD 3.5 family\n🎨 Stable Image Ultra (flagship), Core (fast), SD 3.5 Large/Large-Turbo/Medium\n🖼️ PNG output, aspect-ratio + negative-prompt + seed support\n🔑 API key from platform.stability.ai/account/keys\n🔄 Aliases: stability-ai, sd\n\nSetup Guide →","hierarchy":{"lvl0":"Getting Started","lvl1":"AI Provider Guides","lvl2":"[Stability AI](/docs/getting-started/providers/stability)","lvl3":""}},
|
|
5634
|
-
{"objectID":"2ee0e9aa41cdad45a6b1eebd0cbcc1063468cfff012f4768ed93c60669b774f1","title":"Ideogram","url":"/docs/getting-started/providers#ideogram","content":"Strong typography + design-focused image generation\n📝 V3 default; V2/V2-Turbo/V1 also supported\n🎨
|
|
5634
|
+
{"objectID":"2ee0e9aa41cdad45a6b1eebd0cbcc1063468cfff012f4768ed93c60669b774f1","title":"Ideogram","url":"/docs/getting-started/providers#ideogram","content":"Strong typography + design-focused image generation\n📝 V3 default; V2/V2-Turbo/V1 also supported\n🎨 magic_prompt + style + aspect_ratio controls\n🔑 API key from developer.ideogram.ai","hierarchy":{"lvl0":"Getting Started","lvl1":"AI Provider Guides","lvl2":"Ideogram","lvl3":""}},
|
|
5635
5635
|
{"objectID":"546cf7aaf6f60e971e2560eba3c8cd3ac03fdb15467c359842ac21cae11d3802","title":"Recraft","url":"/docs/getting-started/providers#recraft","content":"Vector / illustration-focused image generation\n🎨 recraftv3 (raster), recraftv3-svg (vector), recraftv2\n📐 OpenAI-compat shape + style + size controls\n🔑 API token from recraft.ai/api","hierarchy":{"lvl0":"Getting Started","lvl1":"AI Provider Guides","lvl2":"Recraft","lvl3":""}},
|
|
5636
5636
|
{"objectID":"d4a7b0fdf64041c228ffab5acdbc99cb43ffab6ccc9d8f8fd22e9109cdc30399","title":"💻 Local Providers","url":"/docs/getting-started/providers#-local-providers","content":"Run models entirely on your own hardware — no API key or internet required for inference:","hierarchy":{"lvl0":"Getting Started","lvl1":"AI Provider Guides","lvl2":"💻 Local Providers","lvl3":""}},
|
|
5637
5637
|
{"objectID":"b8b4ec91123f70b3678f749037c102f0755f0c073a22a5a4c66998e4b517aa69","title":"[Ollama](/docs/getting-started/providers/ollama)","url":"/docs/getting-started/providers#ollamadocsgetting-startedprovidersollama","content":"Run open-source models locally with full privacy\n🖥️ 100% local inference — no data leaves your machine\n🦙 70+ models: Llama, Mistral, Qwen, DeepSeek, Gemma, Phi, CodeLlama\n🌐 Native Ollama API and OpenAI-compatible mode\n🆓 No API key required\n\nSetup Guide →","hierarchy":{"lvl0":"Getting Started","lvl1":"AI Provider Guides","lvl2":"[Ollama](/docs/getting-started/providers/ollama)","lvl3":""}},
|
|
@@ -5701,7 +5701,7 @@
|
|
|
5701
5701
|
{"objectID":"c9abe84f1ac16cb01ba6b62824fd08cd9349a56a128be587d337bd8de8dafaef","title":"2. Configure","url":"/docs/getting-started/providers/io-intelligence#2-configure","content":"2. Configure","hierarchy":{"lvl0":"Getting Started","lvl1":"io.net Intelligence Provider Guide","lvl2":"2. Configure","lvl3":""}},
|
|
5702
5702
|
{"objectID":"8a771e7d8ec6229440c4286d9f751948e8975390934d7735a1459083d19eb04b","title":"3. Use it","url":"/docs/getting-started/providers/io-intelligence#3-use-it","content":"Per-request credentials work as they do for every provider:","hierarchy":{"lvl0":"Getting Started","lvl1":"io.net Intelligence Provider Guide","lvl2":"3. Use it","lvl3":""}},
|
|
5703
5703
|
{"objectID":"2409ba183adac7e9ded9ece1a2ac26106703c35a47cc18d74db630461f42f87e","title":"Models","url":"/docs/getting-started/providers/io-intelligence#models","content":"| Model | Context | Vision | $/M in · out | Notes |\n| ---------------------------------------------------- | ------- | ------ | -------------------- | --------------------------------------------------- |\n| zai-org/GLM-5.3-Flash | 256K | yes | $0.147997 / $0.49399 | Z.ai: GLM 5.3 Flash |\n| zai-org/GLM-5.3 | 256K | no | $1.39 / $4.4 | Z.ai: GLM 5.3 |\n| Qwen/Qwen3.8-27B | 64K | yes | $0.39 / $2.99 | Qwen: Qwen3.8 27B |\n| deepseek-ai/DeepSeek-V4-Flash-0731 | 256K | no | $0.196 / $0.534 | DeepSeek: DeepSeek V4 Flash 0731 |\n| moonshotai/Kimi-K3 | 1M | yes | $3.18 / $15.9 | MoonshotAI: Kimi K3 |\n| XiaomiMiMo/MiMo-V2.5 | 1M | no | $0.1934 / $0.6268 | Xiaomi: MiMo-V2.5 |\n| zai-org/GLM-5.2 | 256K | no | $1.552 / $4.884 | Z.ai: GLM 5.2 |\n| moonshotai/Kimi-K2.7-Code | 256K | yes | $1.026 / $4.53 | MoonshotAI: Kimi K2.7 Code |\n| Qwen/Qwen3.6-35B-A3B | 256K | yes | $0.1872 / $1.24675 | Qwen: Qwen3.6 35B A3B |\n| Qwen/Qwen3.6-27B | 32K | yes | $0.399 / $3.19 | Qwen: Qwen3.6 27B |\n| MiniMaxAI/MiniMax-M2.7 | 256K | no | $0.426 / $1.62 | MiniMaxAI: MiniMax M2.7 |\n| deepseek-ai/DeepSeek-V4-Flash","hierarchy":{"lvl0":"Getting Started","lvl1":"io.net Intelligence Provider Guide","lvl2":"Models","lvl3":""}},
|
|
5704
|
-
{"objectID":"e7a35b5af52d32c36160bbb3e0d65413bddef991cd8281dbef3ae1e34cb68827","title":"Verification status","url":"/docs/getting-started/providers/io-intelligence#verification-status","content":"Tier-2 onboarding requires evidence before a provider is accepted, and\npnpm run verify:provider-onboarding gates it in CI. This is what the\ncatalog records for io.net Intelligence:\n\n| Probe | Result |\n| --------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Roster | authenticated GET /v1/models, HTTP 200, 2026-09-03 |\n| Auth rejection | HTTP 401, 2026-09-03 |\n| Live capability sweep | 2026-09-03 — SDK end-to-end via dist: generate, stream, tool call (nonce round-trip) and
|
|
5704
|
+
{"objectID":"e7a35b5af52d32c36160bbb3e0d65413bddef991cd8281dbef3ae1e34cb68827","title":"Verification status","url":"/docs/getting-started/providers/io-intelligence#verification-status","content":"Tier-2 onboarding requires evidence before a provider is accepted, and\npnpm run verify:provider-onboarding gates it in CI. This is what the\ncatalog records for io.net Intelligence:\n\n| Probe | Result |\n| --------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Roster | authenticated GET /v1/models, HTTP 200, 2026-09-03 |\n| Auth rejection | HTTP 401, 2026-09-03 |\n| Live capability sweep | 2026-09-03 — SDK end-to-end via dist: generate, stream, tool call (nonce round-trip) and json_schema structured output all pass. Tools + schema: after a tool result the vendor answers finish_reason=tool_calls with no tool_calls and n |","hierarchy":{"lvl0":"Getting Started","lvl1":"io.net Intelligence Provider Guide","lvl2":"Verification status","lvl3":""}},
|
|
5705
5705
|
{"objectID":"ad5b6c599e1487c52aaeca2227994c6f2d41b550380a40541ee83e850f896ee0","title":"Troubleshooting","url":"/docs/getting-started/providers/io-intelligence#troubleshooting","content":"| Symptom | Cause | Fix |\n| ------------------------------------- | ---------------------------------------- | ----------------------------------------------------------------- |\n| Invalid io.net Intelligence API key | IO_INTELLIGENCE_API_KEY unset or wrong | Check the key at https://ai.io.net/ |\n| Model not found | The roster changed since 2026-09-03 | Pick a current id; catalog providers retire models without notice |","hierarchy":{"lvl0":"Getting Started","lvl1":"io.net Intelligence Provider Guide","lvl2":"Troubleshooting","lvl3":""}},
|
|
5706
5706
|
{"objectID":"e91fb2d1b995c146cbdaa96fc4c879a991cef58bae28e2fa2af70fbaa89e9ca5","title":"See also","url":"/docs/getting-started/providers/io-intelligence#see-also","content":"Provider setup overview\nAll providers\nTier-2 onboarding — how this provider's JSON becomes a working integration\nProvider feature compatibility","hierarchy":{"lvl0":"Getting Started","lvl1":"io.net Intelligence Provider Guide","lvl2":"See also","lvl3":""}},
|
|
5707
5707
|
{"objectID":"bdfd8e24d5312bc71c647c51df496b075470c2b5462f25547b6707038517dc54","title":"Jina AI Provider Guide","url":"/docs/getting-started/providers/jina","content":"Jina AI Provider Guide\n\nMultilingual embeddings + reranking through the Jina AI API\n\nOverview\n\nJina AI ships the jina-embeddings-v3 family — a\nstate-of-the-art multilingual embedding model that supports 89 languages\nout of the box. NeuroLink exposes the embedding endpoint via the standard\nembed() / embedMany() provider contract.\n\nKey Facts\nProtocol: REST (/v1/embeddings)\nDefault base URL: https://api.jina.ai/v1\nDefault embedding model: jina-embeddings-v3\nMultilingual: 89 languages\nText generation: No (embeddings-only provider)\n\nQuick Start\nGet an API Key\n\nSign up at https://jina.ai/ and grab a key from the\ndashboard.\nConfigure Environment\nGenerate Embeddings\n\nSupported Models\n\n| Model ID | Family | Dim | Notes |\n| ------------------------------------ | ---------- | ---- | ------------------------------------- |\n| jina-embeddings-v3 | Embeddings | 1024 | Default; multilingual, 8K context |\n| jina-embeddings-v2-base-en | Embeddings | 768 | English, 8K context |\n| jina-embeddings-v2-base-code | Embeddings | 768 | Code-specialised |\n| jina-reranker-v2-base-multilingual | Reranking | n/a | Multilingual reranker (RAG pipelines) |\n\nCLI Usage\n\nProvider Aliases\n\n| Alias | Example |\n| ------ | ----------------- |\n| jina | --provider jina |\n\nConfiguration Reference\n\n| Environment Variable | Required | Default | Description |\n| -------------------- | -------- | ------------------------ | ----------------- |\n| JINA_API_KEY | Yes | — | Jina AI API key |\n| JINA_MODEL | No | jina-embeddings-v3 | Default model |\n| JINA_BASE_URL | No | https://api.jina.ai/v1 | Base URL override |\n\nFeature Support Matrix\n\n| Feature | Support |\n| --------------- | ------------------------------ |\n| Text generation | No |\n| Streaming | No |\n| Tool calling | No |\n| Embeddings | Yes — embed(), embedMany() |\n| Reranking | Yes (via Jina Reranker model) |\n\nTroubleshooting\n401 Unauthorized — check JINA_API_KEY.\n429 Too Many Requests — Jina's free tier has tight per-minute caps.\n Add exponential backoff or upgrade your plan.\n\nSee Also\nVoyage Provider\nCohere Provider","hierarchy":{"lvl0":"Getting Started","lvl1":"Jina AI Provider Guide","lvl2":"","lvl3":""}},
|
|
@@ -5882,12 +5882,12 @@
|
|
|
5882
5882
|
{"objectID":"c44f68b9bfbfcf606b6e5b11fd208187df9ab3baa6d13acdea38d436231cface","title":"2. Configure","url":"/docs/getting-started/providers/mancer#2-configure","content":"2. Configure","hierarchy":{"lvl0":"Getting Started","lvl1":"Mancer Provider Guide","lvl2":"2. Configure","lvl3":""}},
|
|
5883
5883
|
{"objectID":"e525975a1c966c0d13d130517070e7a210dfb90ceff011073343780f791899bc","title":"3. Use it","url":"/docs/getting-started/providers/mancer#3-use-it","content":"Per-request credentials work as they do for every provider:","hierarchy":{"lvl0":"Getting Started","lvl1":"Mancer Provider Guide","lvl2":"3. Use it","lvl3":""}},
|
|
5884
5884
|
{"objectID":"00c959cf52c612fecadfbd0cfee00dfec12d194d5f8d957287513a43d241856c","title":"Models","url":"/docs/getting-started/providers/mancer#models","content":"| Model | Context | Vision | $/M in · out | Notes |\n| ------------------------ | ------- | ------ | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n| mythomax | 8K | no | $0.14 / $0.24 | MythoMax (LLaMA 2, Simplified Alpaca format) — pricing and limits from the authenticated /oai/v1/models roster, 2026-09-03 |\n| deepseek-v4-flash ⭐ | 1M | no | $0.07 / $0.2 | DeepSeek V4 Flash — Mancer's flagship general model; paid credits required — pricing and limits from the authenticated /oai/v1/models roster, 2026-09-03 |\n| deepseek-v4-flash-0731 | 1M | no | $0.07 / $0.2 | DeepSeek V4 Flash, 2026-07-31 snapshot; paid credits required — pricing and limits from the authenticated /oai/v1/models roster, 2026-09-03 |\n| mytholite | 3K | no | $0 / $0 | MythoLite — Mancer's free demo model (2,560-token context, 150-token completions, Simplified Alpaca format); the only model usable with a zero balance — pricing and limits from the authenticated /oai/v1/models roster, 2026-09-03 |\n| remm-slerp | 6K | no | $0.14 / $0.26 | ReMM-SLERP (Simplified Alpaca format) — pricing and limits from the authenticated /oai/v1/models roster, 2026-09-03","hierarchy":{"lvl0":"Getting Started","lvl1":"Mancer Provider Guide","lvl2":"Models","lvl3":""}},
|
|
5885
|
-
{"objectID":"effd805db1c992eccfff874a394a8ece66ab29e1a2663effffea816e7941f238","title":"Verification status","url":"/docs/getting-started/providers/mancer#verification-status","content":"Tier-2 onboarding requires evidence before a provider is accepted, and\npnpm run verify:provider-onboarding gates it in CI. This is what the\ncatalog records for Mancer:\n\n| Probe | Result |\n| --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n| Roster | authenticated GET /oai/v1/models; full response retained as evidence/mancer-roster-authenticated.json in the campaign scratchpad and every catalog price/limit machine-checked against it (Mancer re-prices — gpt-oss-120b input moved 0.024 → 0.022 within the day), HTTP 200, 2026-09-03 |\n| Auth rejection | HTTP 401, 2026-09-03 |\n| Live capability sweep | 2026-09-03 — 18-probe harness on the free model mytholite: roster, chat,
|
|
5885
|
+
{"objectID":"effd805db1c992eccfff874a394a8ece66ab29e1a2663effffea816e7941f238","title":"Verification status","url":"/docs/getting-started/providers/mancer#verification-status","content":"Tier-2 onboarding requires evidence before a provider is accepted, and\npnpm run verify:provider-onboarding gates it in CI. This is what the\ncatalog records for Mancer:\n\n| Probe | Result |\n| --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n| Roster | authenticated GET /oai/v1/models; full response retained as evidence/mancer-roster-authenticated.json in the campaign scratchpad and every catalog price/limit machine-checked against it (Mancer re-prices — gpt-oss-120b input moved 0.024 → 0.022 within the day), HTTP 200, 2026-09-03 |\n| Auth rejection | HTTP 401, 2026-09-03 |\n| Live capability sweep | 2026-09-03 — 18-probe harness on the free model mytholite: roster, chat, max_completion_tokens, system role, content parts, sampling params, SSE stream (usage chunk + [DONE]), json_schema (valid JSON matching schema) and json_object |","hierarchy":{"lvl0":"Getting Started","lvl1":"Mancer Provider Guide","lvl2":"Verification status","lvl3":""}},
|
|
5886
5886
|
{"objectID":"2fc031ba3f49f74856ae83f42061c95e272c18e9152fdf018a27c507bf27db17","title":"Troubleshooting","url":"/docs/getting-started/providers/mancer#troubleshooting","content":"| Symptom | Cause | Fix |\n| ------------------------ | ----------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |\n| Invalid Mancer API key | MANCER_API_KEY unset or wrong | Check the key at https://mancer.tech/dashboard |\n| Model not found | The roster changed since 2026-09-03 | Pick a current id; catalog providers retire models without notice |\n| Tools silently absent | Mancer declares tools: false | Use a tool-capable provider for agentic work — see provider capabilities |","hierarchy":{"lvl0":"Getting Started","lvl1":"Mancer Provider Guide","lvl2":"Troubleshooting","lvl3":""}},
|
|
5887
5887
|
{"objectID":"03eaed001f1323b249a03ebf54953bb3af9079f0e3956ebcbe2e34bef4766534","title":"See also","url":"/docs/getting-started/providers/mancer#see-also","content":"Provider setup overview\nAll providers\nTier-2 onboarding — how this provider's JSON becomes a working integration\nProvider feature compatibility","hierarchy":{"lvl0":"Getting Started","lvl1":"Mancer Provider Guide","lvl2":"See also","lvl3":""}},
|
|
5888
|
-
{"objectID":"c4a43493271fa327c125e88509481c384839d0c2ba39da4e65edf736aebee4a2","title":"Meta Model API Provider Guide","url":"/docs/getting-started/providers/meta-model-api","content":"Meta Model API Provider Guide\n\nMeta Model API is a Tier-2 catalog provider: OpenAI-wire-compatible, so its\nentire integration is one JSON file\n(src/lib/providers/catalog/meta-model-api.json) rather than hand-written\ncode. That file is the source of truth for everything on this page.\n\nVerification status: this entry is docs-verified only, not yet\nlive-verified. The vendor's GET https://api.meta.ai/v1/models needs a key\n(an unauthenticated GET on 2026-09-29 answered HTTP 401), so the model ids\ncome from Meta's public docs and the roster has not been checked. No account\nwas created and no API key was used to build this entry.\nevidence.liveMatrix is null until someone runs the live capability matrix\nwith a real key (see Verification status below).\n\nKey Facts\nProvider id: meta-model-api\nProtocol: OpenAI-compatible (/chat/completions). The\n Chat Completions page\n says \"The endpoint is OpenAI-compatible\" and \"The response matches the OpenAI\n chat completions shape.\"\nBase URL: https://api.meta.ai/v1 — the Base URL in the At a glance\n block of the Overview, and the\n base_url value in the Chat Completions page's OpenAI SDK examples\nDefault model: muse-spark-1.3 — the Models page\n says \"muse-spark-1.3 is the default model in the code examples throughout\n these docs.\"\nModels in catalog: 5 — the five rows of the \"Available Muse Spark models\"\n table on the Models page (three Standard tier, two Contributor tier)\nStreaming: supported — the Chat Completions page says \"Set stream=True to\n enable streaming:\"\nTool calling: true — the\n Tool calling page says \"tool calling\n is fully supported there too\" for Chat Completions\nTools while streaming: true — the Tool calling page says \"Tool-call\n arguments stream: With stream: true, the model streams arguments\n incrementally.\"\nStructured output: true — the\n Structured output page says\n \"Set
|
|
5888
|
+
{"objectID":"c4a43493271fa327c125e88509481c384839d0c2ba39da4e65edf736aebee4a2","title":"Meta Model API Provider Guide","url":"/docs/getting-started/providers/meta-model-api","content":"Meta Model API Provider Guide\n\nMeta Model API is a Tier-2 catalog provider: OpenAI-wire-compatible, so its\nentire integration is one JSON file\n(src/lib/providers/catalog/meta-model-api.json) rather than hand-written\ncode. That file is the source of truth for everything on this page.\n\nVerification status: this entry is docs-verified only, not yet\nlive-verified. The vendor's GET https://api.meta.ai/v1/models needs a key\n(an unauthenticated GET on 2026-09-29 answered HTTP 401), so the model ids\ncome from Meta's public docs and the roster has not been checked. No account\nwas created and no API key was used to build this entry.\nevidence.liveMatrix is null until someone runs the live capability matrix\nwith a real key (see Verification status below).\n\nKey Facts\nProvider id: meta-model-api\nProtocol: OpenAI-compatible (/chat/completions). The\n Chat Completions page\n says \"The endpoint is OpenAI-compatible\" and \"The response matches the OpenAI\n chat completions shape.\"\nBase URL: https://api.meta.ai/v1 — the Base URL in the At a glance\n block of the Overview, and the\n base_url value in the Chat Completions page's OpenAI SDK examples\nDefault model: muse-spark-1.3 — the Models page\n says \"muse-spark-1.3 is the default model in the code examples throughout\n these docs.\"\nModels in catalog: 5 — the five rows of the \"Available Muse Spark models\"\n table on the Models page (three Standard tier, two Contributor tier)\nStreaming: supported — the Chat Completions page says \"Set stream=True to\n enable streaming:\"\nTool calling: true — the\n Tool calling page says \"tool calling\n is fully supported there too\" for Chat Completions\nTools while streaming: true — the Tool calling page says \"Tool-call\n arguments stream: With stream: true, the model streams arguments\n incrementally.\"\nStructured output: true — the\n Structured output page says\n \"Set response_format to type: \"json_schema\" and provide your schema in the\n json_schema field.\"\nStructured output + tools together: false — no combined probe was run\n without credentials\nEmbeddings: false\nThinking: false — the entry sets no thinking-level request parameter.\n The Chat Completions page\n says \"Muse Spark always reasons, so reasoning_effort: \"none\" returns HTTP\n 400.\" The Reasoning page documents the\n request parameter: \"On Chat Completions, use the top-level reasoning_effort\n parameter.\"\nBilling: schema value no-free-tier, a placeholder; see\n Billing below\nKey format: LLM|{id}|{secret} — the\n Error handling page lists\n Malformed API key (not in LLM|{id}|{secret} format) as a cause of HTTP 401;\n the entry's apiKeyFormat is ^LLM\\|.+\\|.+$\n\nQuick Start\nGet an API key\nVisit: https://dev.meta.ai/ — the page carries a \"Start building\" button whose link target is /api/auth/login\nCreate an API key: the Authentication page (https://dev.meta.ai/docs/authentication) lists the steps \"Log in and open the API keys tab.\", \"Click Create API key, give it a descriptive name, and click Create.\" and \"Copy the key right away. You only see it once.\"\nAuthentication is a Bearer token: the Authentication page says \"Pass the key as a Bearer token in the Authorization header:\", and the Error handling page (https://dev.meta.ai/docs/error-handling) lists Malformed API key (not in LLM|{id}|{secret} format) as a cause of HTTP 401\nBilling as the vendor states it: the Pricing page (https://dev.meta.ai/docs/pricing-rate-limits) says \"You pay only for what you use.\" and the Authentication and billing page (https://dev.meta.ai/docs/muse-code/auth) says \"Meta Model API billing is usage-based: you're billed for the tokens your requests consume.\"\nSet META_MODEL_API_API_KEY in your .env file (the vendor's examples read MODEL_API_KEY, which NeuroLink does not)\nConfigure\nUse it\n\nPer-request credentials use the same call shape as the other catalog providers:\n\nBilling\n\nThe Pricing page (https://dev.meta.ai/docs/pricing-rate-limits) says \"You pay\nonly for what you use.\" and lists these prices per 1M tokens:\n\n| Tier | Cached input | Input | Output |\n| ----------- | ------------ | ----- | ------ |\n| Standard | $0.15 | $1.25 | $4.25 |\n| Contributor | $0.002 | $0.10 | $0.20 |\n\nThe Authentication and billing page (https://dev.meta.ai/docs/muse-code/auth)\nsays \"Meta Model API billing is usage-based: you're billed for the tokens your\nrequests consume.\" and lists two steps for a team admin: \"Add a payment method.\"\nand \"Create an API key.\" The Pricing page's Muse Voice Transcribe paragraph says\n\"ZDR is priced at parity with Standard, and platform free-tier credits apply.\"\n\nThe entry records the schema value no-free-tier as a placeholder: the schema\nhas no unknown value, and the value is not a vendor statement.\n\nRate limits on the Pricing page: Standard tier 3,000 requests per minute and\n4,000,000 tokens per minute; Contributor tier 100 requests per minute and\n3,000,000 tokens per minute. The page says \"Limits apply per team, not per API\nkey.\"\n\nModels\n\n| Model | Tier ","hierarchy":{"lvl0":"Getting Started","lvl1":"Meta Model API Provider Guide","lvl2":"","lvl3":""}},
|
|
5889
5889
|
{"objectID":"00bea98432dfe235c69a768b7d4818ed9060bef5d4428d7e48cf3c06a75a9f50","title":"Meta Model API Provider Guide","url":"/docs/getting-started/providers/meta-model-api#meta-model-api-provider-guide","content":"Meta Model API is a Tier-2 catalog provider: OpenAI-wire-compatible, so its\nentire integration is one JSON file\n(src/lib/providers/catalog/meta-model-api.json) rather than hand-written\ncode. That file is the source of truth for everything on this page.\n\nVerification status: this entry is docs-verified only, not yet\nlive-verified. The vendor's GET https://api.meta.ai/v1/models needs a key\n(an unauthenticated GET on 2026-09-29 answered HTTP 401), so the model ids\ncome from Meta's public docs and the roster has not been checked. No account\nwas created and no API key was used to build this entry.\nevidence.liveMatrix is null until someone runs the live capability matrix\nwith a real key (see Verification status below).","hierarchy":{"lvl0":"Getting Started","lvl1":"Meta Model API Provider Guide","lvl2":"Meta Model API Provider Guide","lvl3":""}},
|
|
5890
|
-
{"objectID":"95d53345e325157b1a204e08dbe66c0d6145f987a1bf2e84cc67de04ee9854cb","title":"Key Facts","url":"/docs/getting-started/providers/meta-model-api#key-facts","content":"Provider id: meta-model-api\nProtocol: OpenAI-compatible (/chat/completions). The\n Chat Completions page\n says \"The endpoint is OpenAI-compatible\" and \"The response matches the OpenAI\n chat completions shape.\"\nBase URL: https://api.meta.ai/v1 — the Base URL in the At a glance\n block of the Overview, and the\n base_url value in the Chat Completions page's OpenAI SDK examples\nDefault model: muse-spark-1.3 — the Models page\n says \"muse-spark-1.3 is the default model in the code examples throughout\n these docs.\"\nModels in catalog: 5 — the five rows of the \"Available Muse Spark models\"\n table on the Models page (three Standard tier, two Contributor tier)\nStreaming: supported — the Chat Completions page says \"Set stream=True to\n enable streaming:\"\nTool calling: true — the\n Tool calling page says \"tool calling\n is fully supported there too\" for Chat Completions\nTools while streaming: true — the Tool calling page says \"Tool-call\n arguments stream: With stream: true, the model streams arguments\n incrementally.\"\nStructured output: true — the\n Structured output page says\n \"Set
|
|
5890
|
+
{"objectID":"95d53345e325157b1a204e08dbe66c0d6145f987a1bf2e84cc67de04ee9854cb","title":"Key Facts","url":"/docs/getting-started/providers/meta-model-api#key-facts","content":"Provider id: meta-model-api\nProtocol: OpenAI-compatible (/chat/completions). The\n Chat Completions page\n says \"The endpoint is OpenAI-compatible\" and \"The response matches the OpenAI\n chat completions shape.\"\nBase URL: https://api.meta.ai/v1 — the Base URL in the At a glance\n block of the Overview, and the\n base_url value in the Chat Completions page's OpenAI SDK examples\nDefault model: muse-spark-1.3 — the Models page\n says \"muse-spark-1.3 is the default model in the code examples throughout\n these docs.\"\nModels in catalog: 5 — the five rows of the \"Available Muse Spark models\"\n table on the Models page (three Standard tier, two Contributor tier)\nStreaming: supported — the Chat Completions page says \"Set stream=True to\n enable streaming:\"\nTool calling: true — the\n Tool calling page says \"tool calling\n is fully supported there too\" for Chat Completions\nTools while streaming: true — the Tool calling page says \"Tool-call\n arguments stream: With stream: true, the model streams arguments\n incrementally.\"\nStructured output: true — the\n Structured output page says\n \"Set response_format to type: \"json_schema\" and provide your schema in the\n json_schema field.\"\nStructured output + tools together: false — no combined probe was run\n without credentials\nEmbeddings: false\nThinking: false — the entry sets no thinking-level request parameter.\n The Chat Completions page\n says \"Muse Spark always reasons, so reasoning_effort: \"none\" returns HTTP\n 400.\" The Reasoning page documents the\n request parameter: \"On Chat Completions, use the top-level reasoning_effort\n parameter.\"\nBilling: schema value no-free-tier, a placeholder; see\n Billing below\nKey format: LLM|{id}|{secret} — the\n Error handling page lists\n Malformed API key (not in LLM|{id}|{secret} format) as a cause of HTTP 401;\n the entry's apiKeyFormat is ^LLM\\|.+\\|.+$","hierarchy":{"lvl0":"Getting Started","lvl1":"Meta Model API Provider Guide","lvl2":"Key Facts","lvl3":""}},
|
|
5891
5891
|
{"objectID":"315e803ffce5048a28914d91a5062a409fe51656821fc655bbdece566579ea00","title":"1. Get an API key","url":"/docs/getting-started/providers/meta-model-api#1-get-an-api-key","content":"Visit: https://dev.meta.ai/ — the page carries a \"Start building\" button whose link target is /api/auth/login\nCreate an API key: the Authentication page (https://dev.meta.ai/docs/authentication) lists the steps \"Log in and open the API keys tab.\", \"Click Create API key, give it a descriptive name, and click Create.\" and \"Copy the key right away. You only see it once.\"\nAuthentication is a Bearer token: the Authentication page says \"Pass the key as a Bearer token in the Authorization header:\", and the Error handling page (https://dev.meta.ai/docs/error-handling) lists Malformed API key (not in LLM|{id}|{secret} format) as a cause of HTTP 401\nBilling as the vendor states it: the Pricing page (https://dev.meta.ai/docs/pricing-rate-limits) says \"You pay only for what you use.\" and the Authentication and billing page (https://dev.meta.ai/docs/muse-code/auth) says \"Meta Model API billing is usage-based: you're billed for the tokens your requests consume.\"\nSet META_MODEL_API_API_KEY in your .env file (the vendor's examples read MODEL_API_KEY, which NeuroLink does not)","hierarchy":{"lvl0":"Getting Started","lvl1":"Meta Model API Provider Guide","lvl2":"1. Get an API key","lvl3":""}},
|
|
5892
5892
|
{"objectID":"9c81b333489541503030ce4f1f65a68c391162f4645faac7067adda2022432d8","title":"2. Configure","url":"/docs/getting-started/providers/meta-model-api#2-configure","content":"2. Configure","hierarchy":{"lvl0":"Getting Started","lvl1":"Meta Model API Provider Guide","lvl2":"2. Configure","lvl3":""}},
|
|
5893
5893
|
{"objectID":"c8c9eedeb453afab0b73251ad9b516f371050a99aee9aac5ce3d31d437c99436","title":"3. Use it","url":"/docs/getting-started/providers/meta-model-api#3-use-it","content":"Per-request credentials use the same call shape as the other catalog providers:","hierarchy":{"lvl0":"Getting Started","lvl1":"Meta Model API Provider Guide","lvl2":"3. Use it","lvl3":""}},
|
|
@@ -5895,7 +5895,7 @@
|
|
|
5895
5895
|
{"objectID":"c95a365d6b982149ef118df3b4ef55833d45c34fb2e2808f80a984706bb7063f","title":"Models","url":"/docs/getting-started/providers/meta-model-api#models","content":"| Model | Tier | Context | Vision | $/M in · out (cached input) | Notes |\n| ---------------------------- | ----------- | --------- | ------ | --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| muse-spark-1.3 ⭐ | Standard | 1,048,576 | yes | $1.25 / $4.25 ($0.15) | NeuroLink default. Models page: \"the latest version, tuned for agentic workflows (multi-step tool, browser, and long-horizon tasks) with improved coding over 1.2.\" and \"Recommended for new work.\" Output figure 131072 (see below). |\n| muse-spark-1.2 | Standard | 1,048,576 | yes | $1.25 / $4.25 ($0.15) | NeuroLink fallback. Models page: \"the previous version.\" Home page card: \"A coding-optimized model purpose-built for agentic workflows.\" |\n| muse-spark-1.1 | Standard | 1,048,576 | yes | $1.25 / $4.25 ($0.15) | NeuroLink fallback. Models page: \"the original version.\" Home page card: \"Built for agentic workflows, coding, computer use & multimodal perception.\" |\n| muse-spark-1.3-contributor | Contributor | 1,048,576 | yes | $0.10 / $0.20 ($0.002) | Models page: the Contributor variant \"trades a lower price for permission to train on your prompts and completions\". Not in models.fallbacks.","hierarchy":{"lvl0":"Getting Started","lvl1":"Meta Model API Provider Guide","lvl2":"Models","lvl3":""}},
|
|
5896
5896
|
{"objectID":"8b6857a6ee4c13957648460707c3733024f9a8a20000fab97cf74c9427282b92","title":"Vendor-documented request parameters","url":"/docs/getting-started/providers/meta-model-api#vendor-documented-request-parameters","content":"These are statements on Meta's own pages about request fields on Chat\nCompletions. They are quoted as written and were not exercised against the API.\n\n| Request | What the vendor page says |\n| ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n| tool_choice other than auto | Tool calling page: \"tool_choice must be \"auto\": Only \"auto\" (the default) is supported on both Chat Completions and the Responses API; \"none\", \"required\", and named function choices return HTTP 400\" |\n| reasoning_effort: \"none\" | Chat Completions page: \"Muse Spark always reasons, so reasoning_effort: \"none\" returns HTTP 400.\" |\n| n above 1 | Chat Completions page: \"Only n=1 is supported; values greater than 1 return HTTP 400.\" |\n| stop | Chat Completions page, OpenAI compatibility notes table: \"Not supported on reasoning models. This matches OpenAI's behavior on o3 and o4-mini.\" |\n| logprobs: true | Chat Completions page: \"logprobs: true returns HTTP 400\" |\n| max_tokens | Chat Completions page, Parameters table: \"The deprecated alias max_tokens is still accepted.\"","hierarchy":{"lvl0":"Getting Started","lvl1":"Meta Model API Provider Guide","lvl2":"Vendor-documented request parameters","lvl3":""}},
|
|
5897
5897
|
{"objectID":"9d28dc29f4b76724c759418fc318ffd6e7d76baf7d66f145bbb94c69d8ef9ccb","title":"Verification status","url":"/docs/getting-started/providers/meta-model-api#verification-status","content":"Tier-2 onboarding requires evidence before a provider is accepted, and\npnpm run verify:provider-onboarding gates it in CI. This is what the catalog\ncurrently records for Meta Model API — docs-verified only, not\nlive-verified:\n\n| Probe | Result |\n| ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Roster | unauthenticated GET https://api.meta.ai/v1/models answered HTTP 401 on 2026-09-29, so model ids are taken from the Models page; the roster has not been checked. The List models reference shows GET /models called with a Bearer key |\n| Auth-failure shape | unauthenticated GET https://api.meta.ai/v1/models: HTTP 401, content-type: application/json, body {\"error\":{\"code\":\"invalid_api_key\",\"message\":\"Unauthorized\",\"param\":null,\"type\":\"authentication_error\"}}.","hierarchy":{"lvl0":"Getting Started","lvl1":"Meta Model API Provider Guide","lvl2":"Verification status","lvl3":""}},
|
|
5898
|
-
{"objectID":"7535e1c5a2f2e7e3b8715a49eb5996cb6daa7fa578be2df578a188401d927339","title":"Troubleshooting","url":"/docs/getting-started/providers/meta-model-api#troubleshooting","content":"The Vendor statement column quotes the vendor's own pages.\n\n| Symptom | Vendor statement | NeuroLink note |\n| ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- |\n| HTTP 401 | Error handling page: \"The API key was missing, invalid, or revoked.\" Its fix line: \"Send a valid Authorization: Bearer $
|
|
5898
|
+
{"objectID":"7535e1c5a2f2e7e3b8715a49eb5996cb6daa7fa578be2df578a188401d927339","title":"Troubleshooting","url":"/docs/getting-started/providers/meta-model-api#troubleshooting","content":"The Vendor statement column quotes the vendor's own pages.\n\n| Symptom | Vendor statement | NeuroLink note |\n| ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- |\n| HTTP 401 | Error handling page: \"The API key was missing, invalid, or revoked.\" Its fix line: \"Send a valid Authorization: Bearer $MODEL_API_KEY header.\" | NeuroLink reads META_MODEL_API_API_KEY; the vendor's examples use MODEL_API_KEY |\n| HTTP 402 | Error handling page: \"The request cannot be completed due to a billing issue.\" Its fix line: \"Check account status and billing details in the Model API dashboard.\" | The example body's error.code is billing_not_configured |\n| HTTP 404, code model_not_found | Quickstart page: \"404 model_not_found: use a valid model ID such as muse-spark-1.3 (the default in these examples) or muse-spark-1.1 exactly.\" | The five catalog ids are listed in Models |\n| HTTP 429 | Error handling page: \"Your team has exceeded the rate limit.\" Its fix line: \"Implement exponential backoff with jitter.\" | Limits are listed in Billing |\n| HTTP 504 on a non-streaming request | Chat Completions page: \"a non-streaming request that runs too long returns HTTP 504\". Error handling page fix line: \"Stream the response by setting stream: true.\"","hierarchy":{"lvl0":"Getting Started","lvl1":"Meta Model API Provider Guide","lvl2":"Troubleshooting","lvl3":""}},
|
|
5899
5899
|
{"objectID":"57b46158b04483758b7c94c97896457fd9ad976c83728009bec8293bdbfd0ce0","title":"See also","url":"/docs/getting-started/providers/meta-model-api#see-also","content":"Provider setup overview\nAll providers\nTier-2 onboarding — how this provider's JSON becomes a working integration\nProvider feature compatibility\nMeta Model API pages opened for this entry: Home, Overview, Quickstart, Authentication, Models, Pricing and rate limits, Chat Completions, Tool calling, Structured output, Reasoning, Image understanding, Coding agents, Authentication and billing, Error handling","hierarchy":{"lvl0":"Getting Started","lvl1":"Meta Model API Provider Guide","lvl2":"See also","lvl3":""}},
|
|
5900
5900
|
{"objectID":"cfedd052236b6720db1dd71055fa4ee7af6e05619e746a639565b7c931107f9d","title":"MiniMax Provider Guide","url":"/docs/getting-started/providers/minimax","content":"MiniMax Provider Guide\n\nMiniMax is a Tier-2 catalog provider: its integration is one JSON file\n(src/lib/providers/catalog/minimax.json) rather than hand-written code.\nThat file is the source of truth for everything on this page.\n\nVerification status: this entry is docs-verified only, not yet\nlive-verified. MiniMax's GET https://api.minimax.io/v1/models answers\nHTTP 401 without a key, so the model ids come from MiniMax's public docs and\nthe roster has not been checked. No account was created and no API key was\nused to build the entry. evidence.liveMatrix is null until someone runs\nthe live capability matrix with a real key (see\nVerification status below).\n\nKey Facts\nProvider id: minimax\nProtocol: OpenAI-compatible (/chat/completions) — MiniMax's own\n OpenAI SDK page\n sets OPENAI_BASE_URL=https://api.minimax.io/v1 and calls\n client.chat.completions.create\nBase URL: https://api.minimax.io/v1\nDefault model: MiniMax-M3\nModels in catalog: 9 — the nine ids in the Supported Models table of the\n OpenAI SDK page, which are also the model enum of the\n Chat Completions reference\n (roster not verified)\nStreaming: supported — the Chat Completions reference documents stream\n (\"Whether to use streaming output, defaults to false. When set to true,\n the response will be returned in chunks.\")\nTool calling: model-dependent — the Chat Completions reference lists\n tools (\"Function tools are supported.\") and returns tool_calls; none of it\n was exercised. With model-dependent, NeuroLink falls back to its\n model-registry default per model\nTools while streaming: not declared (false)\nStructured output: not declared (false)\nStructured output + tools together: not declared (false) — no combined\n probe was run without credentials\nEmbeddings: not declared\nThinking: the catalog capabilities.thinking is false, and the entry\n sets none of MiniMax's thinking, reasoning_effort or reasoning_split\n request parameters. The Chat Completions reference says of MiniMax-M3:\n \"adaptive thinking is on by default\", and of MiniMax-M3.1-Flash-Preview:\n \"always thinks\". The OpenAI SDK page says of max_tokens: \"Thinking tokens\n count toward it too, so a value that is too small yields\n finish_reason: \"length\" with an empty content.\"\nVision: true for MiniMax-M3 and MiniMax-M3.1-Flash-Preview, where\n the OpenAI SDK page says \"Image and video inputs are supported by\n MiniMax-M3.1-Flash-Preview and MiniMax-M3 through OpenAI-compatible\n message content parts\"\nBilling: free-tier — the schema's closest value, see\n Billing below\nKey format: not validated by NeuroLink (apiKeyFormat: null)\n\nQuick Start\nGet an API key\nVisit: https://platform.minimax.io/login?source=platform_docs and register or log in (https://platform.minimax.io/docs/guides/quickstart-preparation)\nPay-as-you-go: open API Keys > Create new secret key at https://platform.minimax.io/user-center/basic-information/interface-key and copy the API Key (https://platform.minimax.io/docs/guides/quickstart-preparation)\nToken Plan: view your Subscription Key at https://platform.minimax.io/user-center/payment/token-plan. MiniMax-M3.1-Flash-Preview is stated as available only through Token Plan and MiniMax Code for now, and the Subscription Key is stated as not interchangeable with pay-as-you-go API Keys (https://platform.minimax.io/docs/api-reference/text-openai-api, https://platform.minimax.io/docs/token-plan/intro)\nBilling as the vendor words it: \"Pay-as-you-go uses standard Open Platform API Keys and consumes your account balance by actual usage.\" (https://platform.minimax.io/docs/guides/pricing-paygo) and \"New users without subscription can try the free quota from Pay-as-you-go\" (https://platform.minimax.io/docs/solutions/eigent, a tutorial dated January 23, 2026)\nSet MINIMAX_API_KEY in your .env file\nConfigure\nUse it\n\nPer-request credentials work as they do for every provider:\n\nBilling\n\nMiniMax's pay-as-you-go pricing page\n(https://platform.minimax.io/docs/guides/pricing-paygo) says: \"Pay-as-you-go\nuses standard Open Platform API Keys and consumes your account balance by\nactual usage.\" The Prerequisites page\n(https://platform.minimax.io/docs/guides/quickstart-preparation) says: \"For\npay-as-you-go, access Billing/Balance to top up if needed.\" MiniMax's Eigent\ntutorial (https://platform.minimax.io/docs/solutions/eigent, dated January 23,\n2026 and written for MiniMax M2.1) says: \"New users without subscription can\ntry the free quota from Pay-as-you-go\".\n\nThe catalog schema has no unknown billing value, so the entry records\nfree-tier as the closest value. It is not a MiniMax statement of terms.\n\nModels\n\n| Model | Context | Max output | Vision | $/M in · out (cache read) | Notes ","hierarchy":{"lvl0":"Getting Started","lvl1":"MiniMax Provider Guide","lvl2":"","lvl3":""}},
|
|
5901
5901
|
{"objectID":"c80bae4d2aa2e431395c1a10e67a7316aa8a3121754ef8e9cd4aa263c70eee94","title":"MiniMax Provider Guide","url":"/docs/getting-started/providers/minimax#minimax-provider-guide","content":"MiniMax is a Tier-2 catalog provider: its integration is one JSON file\n(src/lib/providers/catalog/minimax.json) rather than hand-written code.\nThat file is the source of truth for everything on this page.\n\nVerification status: this entry is docs-verified only, not yet\nlive-verified. MiniMax's GET https://api.minimax.io/v1/models answers\nHTTP 401 without a key, so the model ids come from MiniMax's public docs and\nthe roster has not been checked. No account was created and no API key was\nused to build the entry. evidence.liveMatrix is null until someone runs\nthe live capability matrix with a real key (see\nVerification status below).","hierarchy":{"lvl0":"Getting Started","lvl1":"MiniMax Provider Guide","lvl2":"MiniMax Provider Guide","lvl3":""}},
|
|
@@ -5998,10 +5998,10 @@
|
|
|
5998
5998
|
{"objectID":"437760a4f4fc09d897c639ab95d4a0fc40451d7c69c5dff47fe1ce5b19941e59","title":"CLI Usage","url":"/docs/getting-started/providers/musetalk#cli-usage","content":"CLI Usage","hierarchy":{"lvl0":"Getting Started","lvl1":"MuseTalk Provider Guide (avatar via Replicate)","lvl2":"CLI Usage","lvl3":""}},
|
|
5999
5999
|
{"objectID":"1a32a023806e0bc683c11be23cd003efd38edcb7da8ee2eb9dbf0632d7fdc93f","title":"Configuration Reference","url":"/docs/getting-started/providers/musetalk#configuration-reference","content":"| Environment Variable | Required | Description |\n| --------------------- | -------- | ------------------------ |\n| REPLICATE_API_TOKEN | Yes | Replicate token (shared) |","hierarchy":{"lvl0":"Getting Started","lvl1":"MuseTalk Provider Guide (avatar via Replicate)","lvl2":"Configuration Reference","lvl3":""}},
|
|
6000
6000
|
{"objectID":"ec367313e5b5dd65b2c473ea1344e2aea7697fad04c59fb75468e1f4689bc75a","title":"See Also","url":"/docs/getting-started/providers/musetalk#see-also","content":"HeyGen Provider\nD-ID Provider\nReplicate Provider","hierarchy":{"lvl0":"Getting Started","lvl1":"MuseTalk Provider Guide (avatar via Replicate)","lvl2":"See Also","lvl3":""}},
|
|
6001
|
-
{"objectID":"47b465ea03d8d1b35468ff377c8124533a71cb1052b9746dbbe5db02a05f8c66","title":"Nebius Token Factory Provider Guide","url":"/docs/getting-started/providers/nebius","content":"Nebius Token Factory Provider Guide\n\nNebius Token Factory is a Tier-2 catalog provider: OpenAI-wire-compatible,\nwith no catalog quirks set, so its entire integration is one JSON file\n(src/lib/providers/catalog/nebius.json) rather than hand-written code.\nThat file is the source of truth for everything on this page.\n\nVerification status: this entry is docs-verified, not yet\nlive-verified. The vendor's GET /v1/models needs a key (an unauthenticated\nrequest answers HTTP 401), so the model ids come from the vendor's public model\ncatalog and the roster has not been checked against the API. No account was\ncreated and no API key was used to build it. evidence.liveMatrix is null\nuntil someone runs the live capability matrix with a real key (see\nVerification status below).\n\nKey Facts\nProvider id: nebius\nProtocol: OpenAI-compatible (/chat/completions) — the API introduction\n says \"Nebius Token Factory offers an OpenAI-compatible API for inference and\n fine-tuning.\" (docs)\nBase URL: https://api.tokenfactory.nebius.com/v1\nDefault model: Qwen/Qwen3-235B-A22B-Instruct-2507\nModels in catalog: 7, listed in the Models table below\nStreaming: supported — the chat completion reference documents stream,\n with data-only server-sent events and a stream \"terminated by a data: [DONE]\n message\" (reference)\nTool calling: model-dependent — the\n Function calling & Tools page\n documents tools and tool_choice, and the public model catalog lists\n function_calling in use_cases for 6 of the 7 models in this entry (not\n for openbmb/MiniCPM-V-4_5)\nTools while streaming: declared (true) — the reference's streaming\n delta schema has a tool_calls field described as \"The tool calls generated\n by the model, such as function calls.\"\nStructured output: declared (true) — the\n Structured output & JSON page\n documents response_format with json_schema and json_object, and says\n \"Use JSON mode tag in on a model card to find a model with structured output\n supported.\" The public catalog carries the JSON mode tag on 6 of the 7\n models here: the default, the four fallbacks and openbmb/MiniCPM-V-4_5\nStructured output + tools together: not declared (false) — no combined\n probe was possible without credentials\nVision: openbmb/MiniCPM-V-4_5 is vision: true (catalog type\n image2text with image in use_cases). The\n Vision capabilities example\n passes an image as image_url, either \"A URL to the image\" or \"A base64\n encoded image directly in the request.\"\nEmbeddings: not declared on this catalog entry. The public model catalog\n lists an embedding model type, but NeuroLink's generic\n ConfiguredOpenAICompatProvider (which Tier-2 catalog entries use) has\n no native embed()/embedMany() — BaseProvider's default throws — so this\n flag tracks that, not the vendor's own API surface\nThinking: not declared (false) — the reference lists a\n reasoning_effort request field (none, minimal, low, medium, high,\n xhigh, max) and reasoning_content / reasoning response fields; no\n request using them was sent\nBilling: free-with-card — the billing page says \"Setting up a billing\n account requires a bank card.\" and \"Upon first sign-up, you receive $1 in\n trial credit, valid for 30 days.\"\nKey format: none declared\n\nQuick Start\nGet an API key\nVisit: https://tokenfactory.nebius.com/ and create an account; the quickstart (https://docs.tokenfactory.nebius.com/quickstart) says: \"Log in using your Google or GitHub account\"\nCreate an API key (https://docs.tokenfactory.nebius.com/api-reference/introduction#authentication): go to the API keys section, click Create API key, enter the key name, click Create, and save the displayed key — \"Save the displayed API key. You cannot open it later in Nebius Token Factory.\"\nBilling (https://docs.tokenfactory.nebius.com/other-capabilities/billing-new): \"Billing setup is mandatory—you cannot complete onboarding without it.\" \"Setting up a billing account requires a bank card.\" \"Upon first sign-up, you receive $1 in trial credit, valid for 30 days.\"\nSet NEBIUS_API_KEY in your .env file (the vendor's docs read
|
|
6001
|
+
{"objectID":"47b465ea03d8d1b35468ff377c8124533a71cb1052b9746dbbe5db02a05f8c66","title":"Nebius Token Factory Provider Guide","url":"/docs/getting-started/providers/nebius","content":"Nebius Token Factory Provider Guide\n\nNebius Token Factory is a Tier-2 catalog provider: OpenAI-wire-compatible,\nwith no catalog quirks set, so its entire integration is one JSON file\n(src/lib/providers/catalog/nebius.json) rather than hand-written code.\nThat file is the source of truth for everything on this page.\n\nVerification status: this entry is docs-verified, not yet\nlive-verified. The vendor's GET /v1/models needs a key (an unauthenticated\nrequest answers HTTP 401), so the model ids come from the vendor's public model\ncatalog and the roster has not been checked against the API. No account was\ncreated and no API key was used to build it. evidence.liveMatrix is null\nuntil someone runs the live capability matrix with a real key (see\nVerification status below).\n\nKey Facts\nProvider id: nebius\nProtocol: OpenAI-compatible (/chat/completions) — the API introduction\n says \"Nebius Token Factory offers an OpenAI-compatible API for inference and\n fine-tuning.\" (docs)\nBase URL: https://api.tokenfactory.nebius.com/v1\nDefault model: Qwen/Qwen3-235B-A22B-Instruct-2507\nModels in catalog: 7, listed in the Models table below\nStreaming: supported — the chat completion reference documents stream,\n with data-only server-sent events and a stream \"terminated by a data: [DONE]\n message\" (reference)\nTool calling: model-dependent — the\n Function calling & Tools page\n documents tools and tool_choice, and the public model catalog lists\n function_calling in use_cases for 6 of the 7 models in this entry (not\n for openbmb/MiniCPM-V-4_5)\nTools while streaming: declared (true) — the reference's streaming\n delta schema has a tool_calls field described as \"The tool calls generated\n by the model, such as function calls.\"\nStructured output: declared (true) — the\n Structured output & JSON page\n documents response_format with json_schema and json_object, and says\n \"Use JSON mode tag in on a model card to find a model with structured output\n supported.\" The public catalog carries the JSON mode tag on 6 of the 7\n models here: the default, the four fallbacks and openbmb/MiniCPM-V-4_5\nStructured output + tools together: not declared (false) — no combined\n probe was possible without credentials\nVision: openbmb/MiniCPM-V-4_5 is vision: true (catalog type\n image2text with image in use_cases). The\n Vision capabilities example\n passes an image as image_url, either \"A URL to the image\" or \"A base64\n encoded image directly in the request.\"\nEmbeddings: not declared on this catalog entry. The public model catalog\n lists an embedding model type, but NeuroLink's generic\n ConfiguredOpenAICompatProvider (which Tier-2 catalog entries use) has\n no native embed()/embedMany() — BaseProvider's default throws — so this\n flag tracks that, not the vendor's own API surface\nThinking: not declared (false) — the reference lists a\n reasoning_effort request field (none, minimal, low, medium, high,\n xhigh, max) and reasoning_content / reasoning response fields; no\n request using them was sent\nBilling: free-with-card — the billing page says \"Setting up a billing\n account requires a bank card.\" and \"Upon first sign-up, you receive $1 in\n trial credit, valid for 30 days.\"\nKey format: none declared\n\nQuick Start\nGet an API key\nVisit: https://tokenfactory.nebius.com/ and create an account; the quickstart (https://docs.tokenfactory.nebius.com/quickstart) says: \"Log in using your Google or GitHub account\"\nCreate an API key (https://docs.tokenfactory.nebius.com/api-reference/introduction#authentication): go to the API keys section, click Create API key, enter the key name, click Create, and save the displayed key — \"Save the displayed API key. You cannot open it later in Nebius Token Factory.\"\nBilling (https://docs.tokenfactory.nebius.com/other-capabilities/billing-new): \"Billing setup is mandatory—you cannot complete onboarding without it.\" \"Setting up a billing account requires a bank card.\" \"Upon first sign-up, you receive $1 in trial credit, valid for 30 days.\"\nSet NEBIUS_API_KEY in your .env file (the vendor's docs read NEBIUS_API_KEY)\nConfigure\nUse it\n\nPer-request credentials:\n\nModels\n\n| Model | Context (max_model_len) | Vision | Price per M tokens, in / out | Notes |\n| --------------------------------------- | ------------------------- | ------ | ---------------------------- | ---------------------------------------------------------------------- |\n| Qwen/Qwen3-235B-A22B-Instruct-2507 ⭐ | 262,144 | no | 0.2 / 0.6 | NeuroLink default; JSON mode tag; function_calling in use_cases. |\n| deepseek-ai/DeepSeek-V4-Flash-0731 | 1,024,000 | no | 0.14 / 0.28 | Fallback; JSON mode tag; function_calling in use_cases. |\n| openai/gpt-oss-120b | 131,072 | no | 0.15 / 0.6 | Fallback; JSON mode tag; function_calling in u","hierarchy":{"lvl0":"Getting Started","lvl1":"Nebius Token Factory Provider Guide","lvl2":"","lvl3":""}},
|
|
6002
6002
|
{"objectID":"2e910368f461f2d7d7a39679e66497f9f791f1367dec08155a31f428a81f7d03","title":"Nebius Token Factory Provider Guide","url":"/docs/getting-started/providers/nebius#nebius-token-factory-provider-guide","content":"Nebius Token Factory is a Tier-2 catalog provider: OpenAI-wire-compatible,\nwith no catalog quirks set, so its entire integration is one JSON file\n(src/lib/providers/catalog/nebius.json) rather than hand-written code.\nThat file is the source of truth for everything on this page.\n\nVerification status: this entry is docs-verified, not yet\nlive-verified. The vendor's GET /v1/models needs a key (an unauthenticated\nrequest answers HTTP 401), so the model ids come from the vendor's public model\ncatalog and the roster has not been checked against the API. No account was\ncreated and no API key was used to build it. evidence.liveMatrix is null\nuntil someone runs the live capability matrix with a real key (see\nVerification status below).","hierarchy":{"lvl0":"Getting Started","lvl1":"Nebius Token Factory Provider Guide","lvl2":"Nebius Token Factory Provider Guide","lvl3":""}},
|
|
6003
6003
|
{"objectID":"46e9545fce99ca3a7049ea78b6859fd2851222d155a0cf578685e43e866ee67a","title":"Key Facts","url":"/docs/getting-started/providers/nebius#key-facts","content":"Provider id: nebius\nProtocol: OpenAI-compatible (/chat/completions) — the API introduction\n says \"Nebius Token Factory offers an OpenAI-compatible API for inference and\n fine-tuning.\" (docs)\nBase URL: https://api.tokenfactory.nebius.com/v1\nDefault model: Qwen/Qwen3-235B-A22B-Instruct-2507\nModels in catalog: 7, listed in the Models table below\nStreaming: supported — the chat completion reference documents stream,\n with data-only server-sent events and a stream \"terminated by a data: [DONE]\n message\" (reference)\nTool calling: model-dependent — the\n Function calling & Tools page\n documents tools and tool_choice, and the public model catalog lists\n function_calling in use_cases for 6 of the 7 models in this entry (not\n for openbmb/MiniCPM-V-4_5)\nTools while streaming: declared (true) — the reference's streaming\n delta schema has a tool_calls field described as \"The tool calls generated\n by the model, such as function calls.\"\nStructured output: declared (true) — the\n Structured output & JSON page\n documents response_format with json_schema and json_object, and says\n \"Use JSON mode tag in on a model card to find a model with structured output\n supported.\" The public catalog carries the JSON mode tag on 6 of the 7\n models here: the default, the four fallbacks and openbmb/MiniCPM-V-4_5\nStructured output + tools together: not declared (false) — no combined\n probe was possible without credentials\nVision: openbmb/MiniCPM-V-4_5 is vision: true (catalog type\n image2text with image in use_cases). The\n Vision capabilities example\n passes an image as image_url, either \"A URL to the image\" or \"A base64\n encoded image directly in the request.\"\nEmbeddings: not declared on this catalog entry.","hierarchy":{"lvl0":"Getting Started","lvl1":"Nebius Token Factory Provider Guide","lvl2":"Key Facts","lvl3":""}},
|
|
6004
|
-
{"objectID":"4318ec8c33491a70f292dba15ecaf3554cfd323626d5dbc1046c4f9516f378d4","title":"1. Get an API key","url":"/docs/getting-started/providers/nebius#1-get-an-api-key","content":"Visit: https://tokenfactory.nebius.com/ and create an account; the quickstart (https://docs.tokenfactory.nebius.com/quickstart) says: \"Log in using your Google or GitHub account\"\nCreate an API key (https://docs.tokenfactory.nebius.com/api-reference/introduction#authentication): go to the API keys section, click Create API key, enter the key name, click Create, and save the displayed key — \"Save the displayed API key. You cannot open it later in Nebius Token Factory.\"\nBilling (https://docs.tokenfactory.nebius.com/other-capabilities/billing-new): \"Billing setup is mandatory—you cannot complete onboarding without it.\" \"Setting up a billing account requires a bank card.\" \"Upon first sign-up, you receive $1 in trial credit, valid for 30 days.\"\nSet NEBIUS_API_KEY in your .env file (the vendor's docs read
|
|
6004
|
+
{"objectID":"4318ec8c33491a70f292dba15ecaf3554cfd323626d5dbc1046c4f9516f378d4","title":"1. Get an API key","url":"/docs/getting-started/providers/nebius#1-get-an-api-key","content":"Visit: https://tokenfactory.nebius.com/ and create an account; the quickstart (https://docs.tokenfactory.nebius.com/quickstart) says: \"Log in using your Google or GitHub account\"\nCreate an API key (https://docs.tokenfactory.nebius.com/api-reference/introduction#authentication): go to the API keys section, click Create API key, enter the key name, click Create, and save the displayed key — \"Save the displayed API key. You cannot open it later in Nebius Token Factory.\"\nBilling (https://docs.tokenfactory.nebius.com/other-capabilities/billing-new): \"Billing setup is mandatory—you cannot complete onboarding without it.\" \"Setting up a billing account requires a bank card.\" \"Upon first sign-up, you receive $1 in trial credit, valid for 30 days.\"\nSet NEBIUS_API_KEY in your .env file (the vendor's docs read NEBIUS_API_KEY)","hierarchy":{"lvl0":"Getting Started","lvl1":"Nebius Token Factory Provider Guide","lvl2":"1. Get an API key","lvl3":""}},
|
|
6005
6005
|
{"objectID":"049146a1e85f3dee12ab7db22f1ae1b438992c38b276aa68a80a6578696de44c","title":"2. Configure","url":"/docs/getting-started/providers/nebius#2-configure","content":"2. Configure","hierarchy":{"lvl0":"Getting Started","lvl1":"Nebius Token Factory Provider Guide","lvl2":"2. Configure","lvl3":""}},
|
|
6006
6006
|
{"objectID":"76465dee81eb27deb73ad640dba27889c76e9fb4d50f82524f6c528e41ffc6cf","title":"3. Use it","url":"/docs/getting-started/providers/nebius#3-use-it","content":"Per-request credentials:","hierarchy":{"lvl0":"Getting Started","lvl1":"Nebius Token Factory Provider Guide","lvl2":"3. Use it","lvl3":""}},
|
|
6007
6007
|
{"objectID":"2567be20c814e120e34968db69acd7d377034a74adbd6852ca50ebd234f535db","title":"Models","url":"/docs/getting-started/providers/nebius#models","content":"| Model | Context (max_model_len) | Vision | Price per M tokens, in / out | Notes |\n| --------------------------------------- | ------------------------- | ------ | ---------------------------- | ---------------------------------------------------------------------- |\n| Qwen/Qwen3-235B-A22B-Instruct-2507 ⭐ | 262,144 | no | 0.2 / 0.6 | NeuroLink default; JSON mode tag; function_calling in use_cases. |\n| deepseek-ai/DeepSeek-V4-Flash-0731 | 1,024,000 | no | 0.14 / 0.28 | Fallback; JSON mode tag; function_calling in use_cases. |\n| openai/gpt-oss-120b | 131,072 | no | 0.15 / 0.6 | Fallback; JSON mode tag; function_calling in use_cases. |\n| Qwen/Qwen3-30B-A3B-Instruct-2507 | 262,144 | no | 0.1 / 0.3 | Fallback; JSON mode tag; function_calling in use_cases. |\n| NousResearch/Hermes-4-405B | 131,072 | no | 1 / 3 | Fallback; JSON mode tag; function_calling in use_cases. |\n| nvidia/Nemotron-3_5-Lightning | 1,048,576 | no | 0.06 / 0.24 | function_calling in use_cases. |\n| openbmb/MiniCPM-V-4_5 | 32,000 | yes | 0.658 / 1.11 | JSON mode tag; catalog type image2text; models.visionModel. |\n\nModel ids, context lengths and prices come from the vendor's public model\ncatalog, retrieved 2026-09-29:\n/api/public/models_info\n(its Markdown view is at\n/model-catalog.md, which\nsays \"The JSON endpoint is the authoritative machine-readable source\"). Context\nis each model's max_model_len; the catalog also gives a rounded\ncontext_window_k.","hierarchy":{"lvl0":"Getting Started","lvl1":"Nebius Token Factory Provider Guide","lvl2":"Models","lvl3":""}},
|
|
@@ -6283,13 +6283,13 @@
|
|
|
6283
6283
|
{"objectID":"c994e45e402007ca5c7c39fa42a03cfddd2d1e339787d263d9ad11b2283d8611","title":"When to Use OpenRouter","url":"/docs/getting-started/providers/openrouter#when-to-use-openrouter","content":"Use OpenRouter when:\nYou want to experiment with multiple models\nYou need automatic failover for high availability\nYou want simplified billing across providers\nYou're building multi-model applications\nYou want to avoid vendor lock-in\n\nUse Direct Providers when:\nYou only need one specific model\nYou need provider-specific features (e.g., AWS Bedrock's VPC integration)\nYou have existing provider integrations\nYour organization has enterprise agreements with specific providers","hierarchy":{"lvl0":"Getting Started","lvl1":"OpenRouter Provider Guide","lvl2":"When to Use OpenRouter","lvl3":""}},
|
|
6284
6284
|
{"objectID":"49e316cfe9e9156fab48e16e3b37b805c2e6919bc28d0c0a21122eb1ea3805cc","title":"Related Documentation","url":"/docs/getting-started/providers/openrouter#related-documentation","content":"LiteLLM Provider - Alternative multi-provider solution\nOpenAI Compatible - OpenAI-compatible endpoints\nProvider Setup Guide - General provider configuration\nCost Optimization Guide - Reduce AI costs","hierarchy":{"lvl0":"Getting Started","lvl1":"OpenRouter Provider Guide","lvl2":"Related Documentation","lvl3":""}},
|
|
6285
6285
|
{"objectID":"011b797c3c17dd7e2b3b50ee3a9f43f9ec0d418962d744a6099aab36dd6670a4","title":"Additional Resources","url":"/docs/getting-started/providers/openrouter#additional-resources","content":"OpenRouter Website - Main website\nOpenRouter Models - Browse all models\nOpenRouter Dashboard - Usage tracking\nOpenRouter Docs - Official documentation\nOpenRouter API Reference - API docs\n\nNeed Help? Join our GitHub Discussions or open an issue.","hierarchy":{"lvl0":"Getting Started","lvl1":"OpenRouter Provider Guide","lvl2":"Additional Resources","lvl3":""}},
|
|
6286
|
-
{"objectID":"66e4581a9631bf3ea7c89b0518897c60a435b1c030447ea819bbc4636790e3ca","title":"OVHcloud AI Endpoints Provider Guide","url":"/docs/getting-started/providers/ovhcloud","content":"OVHcloud AI Endpoints Provider Guide\n\nOVHcloud AI Endpoints is a Tier-2 catalog provider: OpenAI-wire-compatible\nwith no behavioural quirks, so its entire integration is one JSON file\n(src/lib/providers/catalog/ovhcloud.json) rather than hand-written code.\nThat file is the source of truth for everything on this page.\n\nVerification status: this entry is docs- and roster-verified, not\nyet live-verified. It was built entirely from OVHcloud's own public\ndocumentation pages and one unauthenticated GET /v1/models call — no\naccount was created, no key was issued, and no authenticated or POST\nrequest was ever sent. evidence.liveMatrix is null until someone runs\nthe credentialed matrix (see Live verification\nbelow).\n\nKey Facts\nProvider id: ovhcloud\nProtocol: OpenAI-compatible (/chat/completions) — OVHcloud's own docs\n state the LLM APIs are \"compatible with the OpenAI specifications\"\nBase URL: https://oai.endpoints.kepler.ai.cloud.ovh.net/v1\nDefault model: gpt-oss-120b\nModels in catalog: 14 (chat-completions models only — see\n Out of scope)\nStreaming: documented (the vendor's own gpt-oss-120b catalog card\n lists \"Streaming\" under Supported Features)\nTool calling: model-dependent — documented per-model on OVHcloud's\n catalog page (Yes for gpt-oss-120b, gpt-oss-20b, the four Qwen3.x\n visual models and Meta-Llama-3_3-70B-Instruct; No for\n Qwen2.5-VL-72B-Instruct)\nStructured output: documented — OVHcloud's capabilities guide\n describes both JSON Mode (json_object) and JSON-Schema Structured\n Outputs, and the gpt-oss-120b catalog card lists json_object and\n json_schema under Output Formats\nTools + structured output together: not asserted. No combined probe\n was possible without credentials, so structuredOutputWithTools is\n false and toolsWithStreaming is conservatively false too — both\n features are independently documented, but nothing confirms they compose\n correctly in one request\nEmbeddings: not wired (OVHcloud does serve embedding models, but as\n separate endpoints outside this chat-completions integration's scope)\nBilling: free-with-card — several individual models are billed at\n €0, but OVHcloud's own docs state a project in \"Discovery mode\" (no\n payment method attached) cannot use the API at all\nKey format: none declared\nRate limits: documented as 400 requests/minute per project per model\n with a key; 429 on overage\n\nQuick Start\nGet an API key\nVisit: https://www.ovhcloud.com/en/public-cloud/ai-endpoints/ and click\n Start now, which signs you in to (or creates) an OVHcloud Public Cloud\n manager account\nIn the manager, open Public Cloud > your project > AI & Machine Learning\n > AI Endpoints, and add a payment method to the project — OVHcloud\n > states that projects in Discovery mode (no payment method) cannot use\n > the service\nCreate an AI Endpoints API access token in that section; it is shown\n only once, so store it yourself, and note it can be given an expiration\n date and revoked\nSet OVH_AI_ENDPOINTS_ACCESS_TOKEN in your .env file (this is the exact\n variable name OVHcloud's own code samples use)\nConfigure\nUse it\n\nPer-request credentials work as they do for every provider:\n\nModels\n\n| Model | Context | Vision | Tools | $/M in · out | Notes |\n| ------------------------------------- | ------- | ------ | ----- | ------------- | --------------------------------------------------------------------------------------------------------------- |\n| gpt-oss-120b ⭐ | 131K | no | yes | $0.09 / $0.47 | Recommended — the vendor's own example model; docs confirm streaming, tools, reasoning,
|
|
6286
|
+
{"objectID":"66e4581a9631bf3ea7c89b0518897c60a435b1c030447ea819bbc4636790e3ca","title":"OVHcloud AI Endpoints Provider Guide","url":"/docs/getting-started/providers/ovhcloud","content":"OVHcloud AI Endpoints Provider Guide\n\nOVHcloud AI Endpoints is a Tier-2 catalog provider: OpenAI-wire-compatible\nwith no behavioural quirks, so its entire integration is one JSON file\n(src/lib/providers/catalog/ovhcloud.json) rather than hand-written code.\nThat file is the source of truth for everything on this page.\n\nVerification status: this entry is docs- and roster-verified, not\nyet live-verified. It was built entirely from OVHcloud's own public\ndocumentation pages and one unauthenticated GET /v1/models call — no\naccount was created, no key was issued, and no authenticated or POST\nrequest was ever sent. evidence.liveMatrix is null until someone runs\nthe credentialed matrix (see Live verification\nbelow).\n\nKey Facts\nProvider id: ovhcloud\nProtocol: OpenAI-compatible (/chat/completions) — OVHcloud's own docs\n state the LLM APIs are \"compatible with the OpenAI specifications\"\nBase URL: https://oai.endpoints.kepler.ai.cloud.ovh.net/v1\nDefault model: gpt-oss-120b\nModels in catalog: 14 (chat-completions models only — see\n Out of scope)\nStreaming: documented (the vendor's own gpt-oss-120b catalog card\n lists \"Streaming\" under Supported Features)\nTool calling: model-dependent — documented per-model on OVHcloud's\n catalog page (Yes for gpt-oss-120b, gpt-oss-20b, the four Qwen3.x\n visual models and Meta-Llama-3_3-70B-Instruct; No for\n Qwen2.5-VL-72B-Instruct)\nStructured output: documented — OVHcloud's capabilities guide\n describes both JSON Mode (json_object) and JSON-Schema Structured\n Outputs, and the gpt-oss-120b catalog card lists json_object and\n json_schema under Output Formats\nTools + structured output together: not asserted. No combined probe\n was possible without credentials, so structuredOutputWithTools is\n false and toolsWithStreaming is conservatively false too — both\n features are independently documented, but nothing confirms they compose\n correctly in one request\nEmbeddings: not wired (OVHcloud does serve embedding models, but as\n separate endpoints outside this chat-completions integration's scope)\nBilling: free-with-card — several individual models are billed at\n €0, but OVHcloud's own docs state a project in \"Discovery mode\" (no\n payment method attached) cannot use the API at all\nKey format: none declared\nRate limits: documented as 400 requests/minute per project per model\n with a key; 429 on overage\n\nQuick Start\nGet an API key\nVisit: https://www.ovhcloud.com/en/public-cloud/ai-endpoints/ and click\n Start now, which signs you in to (or creates) an OVHcloud Public Cloud\n manager account\nIn the manager, open Public Cloud > your project > AI & Machine Learning\n > AI Endpoints, and add a payment method to the project — OVHcloud\n > states that projects in Discovery mode (no payment method) cannot use\n > the service\nCreate an AI Endpoints API access token in that section; it is shown\n only once, so store it yourself, and note it can be given an expiration\n date and revoked\nSet OVH_AI_ENDPOINTS_ACCESS_TOKEN in your .env file (this is the exact\n variable name OVHcloud's own code samples use)\nConfigure\nUse it\n\nPer-request credentials work as they do for every provider:\n\nModels\n\n| Model | Context | Vision | Tools | $/M in · out | Notes |\n| ------------------------------------- | ------- | ------ | ----- | ------------- | --------------------------------------------------------------------------------------------------------------- |\n| gpt-oss-120b ⭐ | 131K | no | yes | $0.09 / $0.47 | Recommended — the vendor's own example model; docs confirm streaming, tools, reasoning, json_object/json_schema |\n| gpt-oss-20b | 131K | no | yes | $0.05 / $0.18 | Smaller gpt-oss sibling; roster-listed, catalog-page confirmed; fallback |\n| Qwen3.6-27B | 262K | yes | yes | $0.47 / $3.19 | Visual LLM (New); catalog-page confirmed; fallback |\n| Qwen3.8-27B | 262K | yes | yes | $0.47 / $3.19 | Visual LLM (New), newer sibling of 3.6; catalog-page confirmed |\n| Qwen3.5-397B-A17B | 262K | yes | yes | $0.71 / $4.25 | Largest MoE in the roster (397B params, ~17B active); catalog-page confirmed |\n| Qwen3.5-9B | 262K | yes | yes | $0.12 / $0.18 | Smallest of the Qwen3.x visual family; catalog-page confirmed |\n| Meta-Llama-3_3-70B-Instruct | 131K | no | yes | $0.74 / $0.74 | Plain non-reasoning instruct model; catalog-page confirmed |\n| Qwen2.5-VL-72B-Instruct | 32K | yes ","hierarchy":{"lvl0":"Getting Started","lvl1":"OVHcloud AI Endpoints Provider Guide","lvl2":"","lvl3":""}},
|
|
6287
6287
|
{"objectID":"4d1fecb5c86a07eeec94b2fe23bb5ef8103bd048e63ef6f5bf4694b25c356e02","title":"OVHcloud AI Endpoints Provider Guide","url":"/docs/getting-started/providers/ovhcloud#ovhcloud-ai-endpoints-provider-guide","content":"OVHcloud AI Endpoints is a Tier-2 catalog provider: OpenAI-wire-compatible\nwith no behavioural quirks, so its entire integration is one JSON file\n(src/lib/providers/catalog/ovhcloud.json) rather than hand-written code.\nThat file is the source of truth for everything on this page.\n\nVerification status: this entry is docs- and roster-verified, not\nyet live-verified. It was built entirely from OVHcloud's own public\ndocumentation pages and one unauthenticated GET /v1/models call — no\naccount was created, no key was issued, and no authenticated or POST\nrequest was ever sent. evidence.liveMatrix is null until someone runs\nthe credentialed matrix (see Live verification\nbelow).","hierarchy":{"lvl0":"Getting Started","lvl1":"OVHcloud AI Endpoints Provider Guide","lvl2":"OVHcloud AI Endpoints Provider Guide","lvl3":""}},
|
|
6288
6288
|
{"objectID":"7a4e185d9947f70d76ddc878232f63c5d492130e1730397affa054d49f29d539","title":"Key Facts","url":"/docs/getting-started/providers/ovhcloud#key-facts","content":"Provider id: ovhcloud\nProtocol: OpenAI-compatible (/chat/completions) — OVHcloud's own docs\n state the LLM APIs are \"compatible with the OpenAI specifications\"\nBase URL: https://oai.endpoints.kepler.ai.cloud.ovh.net/v1\nDefault model: gpt-oss-120b\nModels in catalog: 14 (chat-completions models only — see\n Out of scope)\nStreaming: documented (the vendor's own gpt-oss-120b catalog card\n lists \"Streaming\" under Supported Features)\nTool calling: model-dependent — documented per-model on OVHcloud's\n catalog page (Yes for gpt-oss-120b, gpt-oss-20b, the four Qwen3.x\n visual models and Meta-Llama-3_3-70B-Instruct; No for\n Qwen2.5-VL-72B-Instruct)\nStructured output: documented — OVHcloud's capabilities guide\n describes both JSON Mode (json_object) and JSON-Schema Structured\n Outputs, and the gpt-oss-120b catalog card lists json_object and\n json_schema under Output Formats\nTools + structured output together: not asserted. No combined probe\n was possible without credentials, so structuredOutputWithTools is\n false and toolsWithStreaming is conservatively false too — both\n features are independently documented, but nothing confirms they compose\n correctly in one request\nEmbeddings: not wired (OVHcloud does serve embedding models, but as\n separate endpoints outside this chat-completions integration's scope)\nBilling: free-with-card — several individual models are billed at\n €0, but OVHcloud's own docs state a project in \"Discovery mode\" (no\n payment method attached) cannot use the API at all\nKey format: none declared\nRate limits: documented as 400 requests/minute per project per model\n with a key; 429 on overage","hierarchy":{"lvl0":"Getting Started","lvl1":"OVHcloud AI Endpoints Provider Guide","lvl2":"Key Facts","lvl3":""}},
|
|
6289
6289
|
{"objectID":"752fd742c9de7d9d91adbed61dc882aa17ea9b803406d266a8256be9a4aa0fdd","title":"1. Get an API key","url":"/docs/getting-started/providers/ovhcloud#1-get-an-api-key","content":"Visit: https://www.ovhcloud.com/en/public-cloud/ai-endpoints/ and click\n Start now, which signs you in to (or creates) an OVHcloud Public Cloud\n manager account\nIn the manager, open Public Cloud > your project > AI & Machine Learning\n > AI Endpoints, and add a payment method to the project — OVHcloud\n > states that projects in Discovery mode (no payment method) cannot use\n > the service\nCreate an AI Endpoints API access token in that section; it is shown\n only once, so store it yourself, and note it can be given an expiration\n date and revoked\nSet OVH_AI_ENDPOINTS_ACCESS_TOKEN in your .env file (this is the exact\n variable name OVHcloud's own code samples use)","hierarchy":{"lvl0":"Getting Started","lvl1":"OVHcloud AI Endpoints Provider Guide","lvl2":"1. Get an API key","lvl3":""}},
|
|
6290
6290
|
{"objectID":"d7a4c0a68f828e0090f7bb0ca20ae9602ea5ce05b89e728adb06fd60db3319a4","title":"2. Configure","url":"/docs/getting-started/providers/ovhcloud#2-configure","content":"2. Configure","hierarchy":{"lvl0":"Getting Started","lvl1":"OVHcloud AI Endpoints Provider Guide","lvl2":"2. Configure","lvl3":""}},
|
|
6291
6291
|
{"objectID":"00eb5a2f0b9179972c5cd1069e949e85e809bf4c6f96db4d1839507d361ddf3d","title":"3. Use it","url":"/docs/getting-started/providers/ovhcloud#3-use-it","content":"Per-request credentials work as they do for every provider:","hierarchy":{"lvl0":"Getting Started","lvl1":"OVHcloud AI Endpoints Provider Guide","lvl2":"3. Use it","lvl3":""}},
|
|
6292
|
-
{"objectID":"74fea27d06a9384760fcd9a69ad9d43c53f0e9ee1695da2ffed47fd56f57268e","title":"Models","url":"/docs/getting-started/providers/ovhcloud#models","content":"| Model | Context | Vision | Tools | $/M in · out | Notes |\n| ------------------------------------- | ------- | ------ | ----- | ------------- | --------------------------------------------------------------------------------------------------------------- |\n| gpt-oss-120b ⭐ | 131K | no | yes | $0.09 / $0.47 | Recommended — the vendor's own example model; docs confirm streaming, tools, reasoning,
|
|
6292
|
+
{"objectID":"74fea27d06a9384760fcd9a69ad9d43c53f0e9ee1695da2ffed47fd56f57268e","title":"Models","url":"/docs/getting-started/providers/ovhcloud#models","content":"| Model | Context | Vision | Tools | $/M in · out | Notes |\n| ------------------------------------- | ------- | ------ | ----- | ------------- | --------------------------------------------------------------------------------------------------------------- |\n| gpt-oss-120b ⭐ | 131K | no | yes | $0.09 / $0.47 | Recommended — the vendor's own example model; docs confirm streaming, tools, reasoning, json_object/json_schema |\n| gpt-oss-20b | 131K | no | yes | $0.05 / $0.18 | Smaller gpt-oss sibling; roster-listed, catalog-page confirmed; fallback |\n| Qwen3.6-27B | 262K | yes | yes | $0.47 / $3.19 | Visual LLM (New); catalog-page confirmed; fallback |\n| Qwen3.8-27B | 262K | yes | yes | $0.47 / $3.19 | Visual LLM (New), newer sibling of 3.6; catalog-page confirmed |\n| Qwen3.5-397B-A17B | 262K | yes | yes | $0.71 / $4.25 | Largest MoE in the roster (397B params, ~17B active); catalog-page confirmed |\n| Qwen3.5-9B | 262K | yes | yes | $0.12 / $0.18 | Smallest of the Qwen3.x visual family; catalog-page confirmed |\n| Meta-Llama-3_3-70B-Instruct | 131K | no | yes | $0.74 / $0.74 | Plain non-reasoning instruct model; catalog-page confirmed |\n| Qwen2.5-VL-72B-Instruct | 32K | yes | no | $1.01 / $1.01 | Dedicated vision-language model; models.visionModel.","hierarchy":{"lvl0":"Getting Started","lvl1":"OVHcloud AI Endpoints Provider Guide","lvl2":"Models","lvl3":""}},
|
|
6293
6293
|
{"objectID":"b1e765e796f5b74d3d0ee1bed2420c8afe006de3f41768b6303f4103d17ed68f","title":"Out-of-scope (non-chat) endpoints","url":"/docs/getting-started/providers/ovhcloud#out-of-scope-non-chat-endpoints","content":"OVHcloud AI Endpoints also serves speech-to-text (whisper-large-v3,\nwhisper-large-v3-turbo), text-to-speech (four NVIDIA Riva voices),\nimage generation (stable-diffusion-xl-base-v10) and embeddings (bge-m3,\nbge-multilingual-gemma2, Qwen3-Embedding-8B) on the same platform and\nbase URL prefix. These are separate, non-chat-completions API shapes and\nare not part of this Tier-2 catalog entry, so capabilities.embeddings is\nfalse here even though the vendor documents embedding models elsewhere on\nthe same platform.","hierarchy":{"lvl0":"Getting Started","lvl1":"OVHcloud AI Endpoints Provider Guide","lvl2":"Out-of-scope (non-chat) endpoints","lvl3":""}},
|
|
6294
6294
|
{"objectID":"42aa9cf24ddb1baadfd869caa4f7f24e41404184d44a78f57b4377b8dfef44cb","title":"Verification status","url":"/docs/getting-started/providers/ovhcloud#verification-status","content":"Tier-2 onboarding requires evidence before a provider is accepted, and\npnpm run verify:provider-onboarding gates it in CI. This is what the\ncatalog records for OVHcloud AI Endpoints — deliberately credential-free:\n\n| Probe | Result |\n| --------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Roster | unauthenticated GET /v1/models, HTTP 200, 2026-09-28 — 24 models returned; no key used |\n| Auth rejection | not probed — would require an authenticated request, which this credential-free onboarding does not send. The errorRules entry for authentication failures is taken verbatim from OVHcloud's written docs (\"403 Forbidden: Authentication Failed\"), not from a live probe |\n| Live capability sweep | not run (evidence.liveMatrix is null).","hierarchy":{"lvl0":"Getting Started","lvl1":"OVHcloud AI Endpoints Provider Guide","lvl2":"Verification status","lvl3":""}},
|
|
6295
6295
|
{"objectID":"3ee83d1cb747b6e8ba97384beb145e3da82eaf0487ba7e1e317026fe4c226499","title":"Troubleshooting","url":"/docs/getting-started/providers/ovhcloud#troubleshooting","content":"| Symptom | Cause | Fix |\n| ------------------------------- | ---------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |\n| Requests fail immediately | Project has no payment method attached (\"Discovery mode\") | Add a payment method to the Public Cloud project in the OVHcloud manager before creating/using an access token |\n| Invalid or revoked ... token | OVH_AI_ENDPOINTS_ACCESS_TOKEN unset, wrong, or revoked | Check/recreate the token under AI & Machine Learning > AI Endpoints in the OVHcloud manager |\n| Frequent 429s | Authenticated limit is 400 requests/minute per project per model | Pace requests and/or request a higher limit from OVHcloud support |\n| Model not found | The roster changed since 2026-09-28 | Pick a current id from the unauthenticated GET /v1/models roster |\n| Tool calls silently unsupported | capabilities.tools is model-dependent | Use a model the catalog page marks Function calling: Yes (e.g. gpt-oss-120b, not Qwen2.5-VL-72B-Instruct) |","hierarchy":{"lvl0":"Getting Started","lvl1":"OVHcloud AI Endpoints Provider Guide","lvl2":"Troubleshooting","lvl3":""}},
|
|
@@ -6348,10 +6348,10 @@
|
|
|
6348
6348
|
{"objectID":"9c27a11c0ebcaad3730b5040169bf7e59b61e12c50477d166c250d91e57717c2","title":"Configuration Reference","url":"/docs/getting-started/providers/perplexity#configuration-reference","content":"| Environment Variable | Required | Default |\n| --------------------- | -------- | --------------------------- |\n| PERPLEXITY_API_KEY | Yes | — |\n| PERPLEXITY_MODEL | No | sonar |\n| PERPLEXITY_BASE_URL | No | https://api.perplexity.ai |","hierarchy":{"lvl0":"Getting Started","lvl1":"Perplexity Provider Guide","lvl2":"Configuration Reference","lvl3":""}},
|
|
6349
6349
|
{"objectID":"b67f2a3fac01aa89f00439994b86dc4e53d345274ba20ce64db2f4f9d6577523","title":"Feature Support Matrix","url":"/docs/getting-started/providers/perplexity#feature-support-matrix","content":"| Feature | Support |\n| ----------------- | ------------ |\n| Text generation | Yes |\n| Streaming | Yes |\n| Tool calling | No |\n| Structured output | Limited |\n| Web search | Yes (native) |\n| Citations | Yes |","hierarchy":{"lvl0":"Getting Started","lvl1":"Perplexity Provider Guide","lvl2":"Feature Support Matrix","lvl3":""}},
|
|
6350
6350
|
{"objectID":"863a4c9129e2042f2c209c6d79faf1a589d15399b222cef42341b701ce775a0c","title":"See Also","url":"/docs/getting-started/providers/perplexity#see-also","content":"Perplexity Decisions Provider — typed, calibrated decide() judgments on the same key\nAnthropic Provider — web-search via the web_search tool\nVertex Provider — Google search grounding","hierarchy":{"lvl0":"Getting Started","lvl1":"Perplexity Provider Guide","lvl2":"See Also","lvl3":""}},
|
|
6351
|
-
{"objectID":"2085fe13de3c871057e70fbc1ba2d37f1825f635c6d9528764fdc45d76fe6744","title":"Poolside Provider Guide","url":"/docs/getting-started/providers/poolside","content":"Poolside Provider Guide\n\nPoolside is a Tier-2 catalog provider: its entire integration is one JSON\nfile (src/lib/providers/catalog/poolside.json) rather than hand-written code.\nThat file is the source of truth for everything on this page.\n\nVerification status: this entry is docs-verified only, not yet\nlive-verified. Poolside's GET https://inference.poolside.ai/v1/models\nneeds a key (an unauthenticated GET answered HTTP 401), so the model id comes\nfrom Poolside's public docs and the roster has not been checked. No account\nwas created and no API key was used to build it. evidence.liveMatrix is\nnull until someone runs the live capability matrix with a real key (see\nVerification status below).\n\nKey Facts\nProvider id: poolside\nProtocol: OpenAI-compatible (/chat/completions) — the\n Poolside API page opens with\n \"Call Poolside models through an OpenAI-compatible API.\"\nBase URL: https://inference.poolside.ai/v1 (the \"Poolside-hosted\n inference\" row of the Access methods table on the same page)\nDefault model: poolside/laguna-s-2.1\nModels in catalog: 1 — the model id the docs' examples use against the\n hosted base URL\nStreaming: supported — the\n examples page documents\n setting stream to true to receive \"a series of chunks returned as\n server-sent events\"\nTool calling: supported (true) — the examples page's \"Extend models with\n tools\" section shows a tools array and a returned tool_calls array on\n poolside/laguna-s-2.1\nTools while streaming: not declared (false) — no request combining them\n was sent\nStructured output: not declared (false) — no request using\n response_format was sent\nStructured output + tools together: not declared (false) — no combined\n probe was sent\nEmbeddings: not declared — the overview page's Available endpoints table\n lists two endpoints, GET /v1/models and POST /v1/chat/completions\nThinking: not declared (false) — the entry sends no thinking request\n parameter. The examples page says \"Poolside-hosted inference enables thinking\n by default.\" and documents setting chat_template_kwargs.enable_thinking to\n false to turn it off for a request\nReasoning content: quirks.replayReasoningContent is set, because the\n examples page says \"For agentic workflows with Poolside models, preserve\n reasoning_content from assistant responses when you include those responses in\n follow-up requests.\" No multi-turn request was sent\nBilling: free-tier — one of the three values the catalog schema allows;\n see Billing below\nKey format: none declared\n\nQuick Start\nGet an API key\nVisit: https://platform.poolside.ai/ — https://docs.poolside.ai/get-started/log-in.md says of the Poolside Platform option: \"sign in to Poolside Platform or create an account\"\nCreate an API key: https://docs.poolside.ai/api/overview.md says \"Sign in to Poolside Platform, open the API Keys tab, and click New key.\"\nBilling as the vendor states it: https://docs.poolside.ai/get-started/log-in.md describes the Poolside Platform option as \"free developer access\" and says \"The API key created through Poolside Platform is for Poolside-hosted inference.\"\nAuthentication is HTTP Bearer: https://docs.poolside.ai/api/overview.md shows the header Authorization: Bearer <api-key> and exports the key as
|
|
6351
|
+
{"objectID":"2085fe13de3c871057e70fbc1ba2d37f1825f635c6d9528764fdc45d76fe6744","title":"Poolside Provider Guide","url":"/docs/getting-started/providers/poolside","content":"Poolside Provider Guide\n\nPoolside is a Tier-2 catalog provider: its entire integration is one JSON\nfile (src/lib/providers/catalog/poolside.json) rather than hand-written code.\nThat file is the source of truth for everything on this page.\n\nVerification status: this entry is docs-verified only, not yet\nlive-verified. Poolside's GET https://inference.poolside.ai/v1/models\nneeds a key (an unauthenticated GET answered HTTP 401), so the model id comes\nfrom Poolside's public docs and the roster has not been checked. No account\nwas created and no API key was used to build it. evidence.liveMatrix is\nnull until someone runs the live capability matrix with a real key (see\nVerification status below).\n\nKey Facts\nProvider id: poolside\nProtocol: OpenAI-compatible (/chat/completions) — the\n Poolside API page opens with\n \"Call Poolside models through an OpenAI-compatible API.\"\nBase URL: https://inference.poolside.ai/v1 (the \"Poolside-hosted\n inference\" row of the Access methods table on the same page)\nDefault model: poolside/laguna-s-2.1\nModels in catalog: 1 — the model id the docs' examples use against the\n hosted base URL\nStreaming: supported — the\n examples page documents\n setting stream to true to receive \"a series of chunks returned as\n server-sent events\"\nTool calling: supported (true) — the examples page's \"Extend models with\n tools\" section shows a tools array and a returned tool_calls array on\n poolside/laguna-s-2.1\nTools while streaming: not declared (false) — no request combining them\n was sent\nStructured output: not declared (false) — no request using\n response_format was sent\nStructured output + tools together: not declared (false) — no combined\n probe was sent\nEmbeddings: not declared — the overview page's Available endpoints table\n lists two endpoints, GET /v1/models and POST /v1/chat/completions\nThinking: not declared (false) — the entry sends no thinking request\n parameter. The examples page says \"Poolside-hosted inference enables thinking\n by default.\" and documents setting chat_template_kwargs.enable_thinking to\n false to turn it off for a request\nReasoning content: quirks.replayReasoningContent is set, because the\n examples page says \"For agentic workflows with Poolside models, preserve\n reasoning_content from assistant responses when you include those responses in\n follow-up requests.\" No multi-turn request was sent\nBilling: free-tier — one of the three values the catalog schema allows;\n see Billing below\nKey format: none declared\n\nQuick Start\nGet an API key\nVisit: https://platform.poolside.ai/ — https://docs.poolside.ai/get-started/log-in.md says of the Poolside Platform option: \"sign in to Poolside Platform or create an account\"\nCreate an API key: https://docs.poolside.ai/api/overview.md says \"Sign in to Poolside Platform, open the API Keys tab, and click New key.\"\nBilling as the vendor states it: https://docs.poolside.ai/get-started/log-in.md describes the Poolside Platform option as \"free developer access\" and says \"The API key created through Poolside Platform is for Poolside-hosted inference.\"\nAuthentication is HTTP Bearer: https://docs.poolside.ai/api/overview.md shows the header Authorization: Bearer <api-key> and exports the key as POOLSIDE_API_KEY, the name NeuroLink reads. Set POOLSIDE_API_KEY in your .env file\nConfigure\nUse it\n\nPer-request credentials work the same way as for the other catalog providers:\n\nBilling\n\nThe log-in page describes the\nPoolside Platform option as \"free developer access\" and says \"The API key\ncreated through Poolside Platform is for Poolside-hosted inference.\" The catalog\nschema has three billing values (free-tier, free-with-card, no-free-tier);\nthe entry holds free-tier, built from that wording.\n\nModels\n\n| Model | Context | Vision | Notes |\n| -------------------------- | ------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| poolside/laguna-s-2.1 ⭐ | not set | no | NeuroLink default — the model id the API page's quickstart examples and the examples page's examples use against https://inference.poolside.ai/v1. The supported-models page lists \"118B total, 8B active per token\", \"Mixture of Experts\" and \"Text-to-text\". |\n\nValues come from Poolside's public docs, retrieved 2026-09-29:\nContext — the catalog entry sets no contextWindow for this model, so\n models.defaultContextWindow (128,000) applies. The Context window row of the\n supported-","hierarchy":{"lvl0":"Getting Started","lvl1":"Poolside Provider Guide","lvl2":"","lvl3":""}},
|
|
6352
6352
|
{"objectID":"246fe064c68a09a615422277d825f7537bc3c7d8cfdf3cbca1a6f902279369f4","title":"Poolside Provider Guide","url":"/docs/getting-started/providers/poolside#poolside-provider-guide","content":"Poolside is a Tier-2 catalog provider: its entire integration is one JSON\nfile (src/lib/providers/catalog/poolside.json) rather than hand-written code.\nThat file is the source of truth for everything on this page.\n\nVerification status: this entry is docs-verified only, not yet\nlive-verified. Poolside's GET https://inference.poolside.ai/v1/models\nneeds a key (an unauthenticated GET answered HTTP 401), so the model id comes\nfrom Poolside's public docs and the roster has not been checked. No account\nwas created and no API key was used to build it. evidence.liveMatrix is\nnull until someone runs the live capability matrix with a real key (see\nVerification status below).","hierarchy":{"lvl0":"Getting Started","lvl1":"Poolside Provider Guide","lvl2":"Poolside Provider Guide","lvl3":""}},
|
|
6353
6353
|
{"objectID":"3cf9f1d461fe520b9110f9d1e32d4000fd91eeeeb908a498d0fc61faa5947a06","title":"Key Facts","url":"/docs/getting-started/providers/poolside#key-facts","content":"Provider id: poolside\nProtocol: OpenAI-compatible (/chat/completions) — the\n Poolside API page opens with\n \"Call Poolside models through an OpenAI-compatible API.\"\nBase URL: https://inference.poolside.ai/v1 (the \"Poolside-hosted\n inference\" row of the Access methods table on the same page)\nDefault model: poolside/laguna-s-2.1\nModels in catalog: 1 — the model id the docs' examples use against the\n hosted base URL\nStreaming: supported — the\n examples page documents\n setting stream to true to receive \"a series of chunks returned as\n server-sent events\"\nTool calling: supported (true) — the examples page's \"Extend models with\n tools\" section shows a tools array and a returned tool_calls array on\n poolside/laguna-s-2.1\nTools while streaming: not declared (false) — no request combining them\n was sent\nStructured output: not declared (false) — no request using\n response_format was sent\nStructured output + tools together: not declared (false) — no combined\n probe was sent\nEmbeddings: not declared — the overview page's Available endpoints table\n lists two endpoints, GET /v1/models and POST /v1/chat/completions\nThinking: not declared (false) — the entry sends no thinking request\n parameter. The examples page says \"Poolside-hosted inference enables thinking\n by default.\" and documents setting chat_template_kwargs.enable_thinking to\n false to turn it off for a request\nReasoning content: quirks.replayReasoningContent is set, because the\n examples page says \"For agentic workflows with Poolside models, preserve\n reasoning_content from assistant responses when you include those responses in\n follow-up requests.\" No multi-turn request was sent\nBilling: free-tier — one of the three values the catalog schema allows;\n see Billing below\nKey format: none declared","hierarchy":{"lvl0":"Getting Started","lvl1":"Poolside Provider Guide","lvl2":"Key Facts","lvl3":""}},
|
|
6354
|
-
{"objectID":"0473e398409c69bbff129c7e7661af0a8c1206ded44c459e526deffe51efb38a","title":"1. Get an API key","url":"/docs/getting-started/providers/poolside#1-get-an-api-key","content":"Visit: https://platform.poolside.ai/ — https://docs.poolside.ai/get-started/log-in.md says of the Poolside Platform option: \"sign in to Poolside Platform or create an account\"\nCreate an API key: https://docs.poolside.ai/api/overview.md says \"Sign in to Poolside Platform, open the API Keys tab, and click New key.\"\nBilling as the vendor states it: https://docs.poolside.ai/get-started/log-in.md describes the Poolside Platform option as \"free developer access\" and says \"The API key created through Poolside Platform is for Poolside-hosted inference.\"\nAuthentication is HTTP Bearer: https://docs.poolside.ai/api/overview.md shows the header Authorization: Bearer <api-key> and exports the key as
|
|
6354
|
+
{"objectID":"0473e398409c69bbff129c7e7661af0a8c1206ded44c459e526deffe51efb38a","title":"1. Get an API key","url":"/docs/getting-started/providers/poolside#1-get-an-api-key","content":"Visit: https://platform.poolside.ai/ — https://docs.poolside.ai/get-started/log-in.md says of the Poolside Platform option: \"sign in to Poolside Platform or create an account\"\nCreate an API key: https://docs.poolside.ai/api/overview.md says \"Sign in to Poolside Platform, open the API Keys tab, and click New key.\"\nBilling as the vendor states it: https://docs.poolside.ai/get-started/log-in.md describes the Poolside Platform option as \"free developer access\" and says \"The API key created through Poolside Platform is for Poolside-hosted inference.\"\nAuthentication is HTTP Bearer: https://docs.poolside.ai/api/overview.md shows the header Authorization: Bearer <api-key> and exports the key as POOLSIDE_API_KEY, the name NeuroLink reads. Set POOLSIDE_API_KEY in your .env file","hierarchy":{"lvl0":"Getting Started","lvl1":"Poolside Provider Guide","lvl2":"1. Get an API key","lvl3":""}},
|
|
6355
6355
|
{"objectID":"6bcd2e876e3f913e7ed43ca32ed789bc9b2c2af442f11f733eb36e97a95ffad2","title":"2. Configure","url":"/docs/getting-started/providers/poolside#2-configure","content":"2. Configure","hierarchy":{"lvl0":"Getting Started","lvl1":"Poolside Provider Guide","lvl2":"2. Configure","lvl3":""}},
|
|
6356
6356
|
{"objectID":"1ba4b5ee1ceec247fe3c01f23307db6a6f63524398f3b199ade21753eee2f597","title":"3. Use it","url":"/docs/getting-started/providers/poolside#3-use-it","content":"Per-request credentials work the same way as for the other catalog providers:","hierarchy":{"lvl0":"Getting Started","lvl1":"Poolside Provider Guide","lvl2":"3. Use it","lvl3":""}},
|
|
6357
6357
|
{"objectID":"cf2d42279209983e361bb87311eed47de7a08324990e27b9bc7ef6590312249d","title":"Billing","url":"/docs/getting-started/providers/poolside#billing","content":"The log-in page describes the\nPoolside Platform option as \"free developer access\" and says \"The API key\ncreated through Poolside Platform is for Poolside-hosted inference.\" The catalog\nschema has three billing values (free-tier, free-with-card, no-free-tier);\nthe entry holds free-tier, built from that wording.","hierarchy":{"lvl0":"Getting Started","lvl1":"Poolside Provider Guide","lvl2":"Billing","lvl3":""}},
|
|
@@ -6380,10 +6380,10 @@
|
|
|
6380
6380
|
{"objectID":"cdae5eae86cbd553afc4fa80975e66c361b1f95af932a9ab02ec44a00e3f44d8","title":"CLI Usage","url":"/docs/getting-started/providers/recraft#cli-usage","content":"CLI Usage","hierarchy":{"lvl0":"Getting Started","lvl1":"Recraft Provider Guide (image-gen)","lvl2":"CLI Usage","lvl3":""}},
|
|
6381
6381
|
{"objectID":"8b6c0c2cc6eda6858431c784ce846bac4040fca7b7fb7e1d8b78994d71dbd2c9","title":"Configuration Reference","url":"/docs/getting-started/providers/recraft#configuration-reference","content":"| Environment Variable | Required | Default |\n| -------------------- | -------- | ----------- |\n| RECRAFT_API_KEY | Yes | — |\n| RECRAFT_MODEL | No | recraftv3 |","hierarchy":{"lvl0":"Getting Started","lvl1":"Recraft Provider Guide (image-gen)","lvl2":"Configuration Reference","lvl3":""}},
|
|
6382
6382
|
{"objectID":"a486a24ebd4845bec154166c9db68f9d2a4ef200eab97990b9384f23ab7a3ae5","title":"See Also","url":"/docs/getting-started/providers/recraft#see-also","content":"Stability AI Provider\nIdeogram Provider","hierarchy":{"lvl0":"Getting Started","lvl1":"Recraft Provider Guide (image-gen)","lvl2":"See Also","lvl3":""}},
|
|
6383
|
-
{"objectID":"253e96d7ea40ad1aea03bc5cb594922747b4cfc6eafdf54b8b1a8711a513a431","title":"Reka AI Provider Guide","url":"/docs/getting-started/providers/reka","content":"Reka AI Provider Guide\n\nReka AI is a Tier-2 catalog provider: its entire integration is one JSON\nfile (src/lib/providers/catalog/reka.json) rather than hand-written code.\nThat file is the source of truth for everything on this page.\n\nVerification status: this entry is docs-verified only, not yet\nlive-verified. Reka's GET https://api.reka.ai/v1/models needs a key (it\nanswers HTTP 401 without one), so the four model ids come from Reka's public\ndocs (Models page, retrieved\n2026-09-29 for the first three and 2026-10-17 for reka-flash-3) and the\nroster has not been checked. No account was created, no\nAPI key was used and no POST request was sent to build it.\nevidence.liveMatrix is null until someone runs the live capability matrix\nwith a real key (see Verification status below).\n\nKey Facts\nProvider id: reka\nEndpoint: /chat/completions — the\n Quickstart says \"our API is fully\n OpenAI-compatible\"\nBase URL: https://api.reka.ai/v1\nDefault model: reka-flash\nModels in catalog: 4 — reka-flash, reka-edge and reka-edge-2603\n from the Models page as first read, plus reka-flash-3 from the Models page\n as read on 2026-10-17\nStreaming: supported — the\n Chat overview says \"The Chat API\n supports streaming\"\nTool calling: model-dependent — the table on the\n Models page (retrieved 2026-10-17) has a\n \"Tools\" column that is Yes for reka-edge-2603 and No for reka-flash-3,\n and the Tools section of the\n Chat overview (the Function Calling\n page now redirects there) says \"Models that list tools in their\n supported_features accept OpenAI-format tools and tool_choice.\" So\n reka-edge-2603 and its alias reka-edge are marked tools: true and\n reka-flash-3 is tools: false. reka-flash keeps tools: true from the\n sentence \"Currently, only Reka Flash supports function calling.\" (retrieved\n 2026-09-29), which the current pages no longer carry, so that entry is\n unconfirmed\nTools while streaming: not declared (false) — no request combining them\n was sent\nStructured output: not declared (false) — the ChatRequest on the\n Chat API reference lists\n messages, model, frequency_penalty, max_tokens, presence_penalty,\n seed, stop, stream, temperature, tool_choice, tools, top_k and\n top_p\nStructured output + tools together: not declared (false) — no combined\n probe was run without credentials\nEmbeddings: not declared\nThinking: not declared\nVision: reka-flash, reka-edge and reka-edge-2603 are marked\n vision: true from the vendor's image examples and Models table;\n reka-flash-3 is vision: false because the Models table lists its input as\n text only (see Models)\nBilling: billingPolicy holds free-tier, one of the three values the\n catalog schema allows — the vendor wording is quoted in\n Billing below\nKey format: none declared\n\nQuick Start\nGet an API key\nVisit: https://platform.reka.ai/sign-up (the \"Start for free\" and \"Get started\" links on https://platform.reka.ai/pricing point to /sign-up). The Quickstart (https://docs.reka.ai/quickstart.md) says \"Create a free account on the Reka Platform to access your API key.\" and the FAQ (https://docs.reka.ai/resources/faqs.md) answers \"How do I get an API key?\" with \"Go to Platform, > API Keys to generate or copy your key.\"\nBilling as the vendor states it: https://docs.reka.ai/pricing.md says \"Get started with no upfront costs.\"; the FAQ (https://docs.reka.ai/resources/faqs.md) answers \"Do I need to pre-pay?\" with \"Yes. Add credits to your account before making requests.\" and says the balance error reads \"P001: Insufficient Balance\" when the balance hits $0\nAuthentication: the vendor's REST examples send the header X-Api-Key (https://docs.reka.ai/chat/overview.md) and the OpenAPI file https://docs.reka.ai/openapi/api-reference.yaml declares one security scheme, an apiKey in the header X-Api-Key; the OpenAI Python SDK examples pass
|
|
6383
|
+
{"objectID":"253e96d7ea40ad1aea03bc5cb594922747b4cfc6eafdf54b8b1a8711a513a431","title":"Reka AI Provider Guide","url":"/docs/getting-started/providers/reka","content":"Reka AI Provider Guide\n\nReka AI is a Tier-2 catalog provider: its entire integration is one JSON\nfile (src/lib/providers/catalog/reka.json) rather than hand-written code.\nThat file is the source of truth for everything on this page.\n\nVerification status: this entry is docs-verified only, not yet\nlive-verified. Reka's GET https://api.reka.ai/v1/models needs a key (it\nanswers HTTP 401 without one), so the four model ids come from Reka's public\ndocs (Models page, retrieved\n2026-09-29 for the first three and 2026-10-17 for reka-flash-3) and the\nroster has not been checked. No account was created, no\nAPI key was used and no POST request was sent to build it.\nevidence.liveMatrix is null until someone runs the live capability matrix\nwith a real key (see Verification status below).\n\nKey Facts\nProvider id: reka\nEndpoint: /chat/completions — the\n Quickstart says \"our API is fully\n OpenAI-compatible\"\nBase URL: https://api.reka.ai/v1\nDefault model: reka-flash\nModels in catalog: 4 — reka-flash, reka-edge and reka-edge-2603\n from the Models page as first read, plus reka-flash-3 from the Models page\n as read on 2026-10-17\nStreaming: supported — the\n Chat overview says \"The Chat API\n supports streaming\"\nTool calling: model-dependent — the table on the\n Models page (retrieved 2026-10-17) has a\n \"Tools\" column that is Yes for reka-edge-2603 and No for reka-flash-3,\n and the Tools section of the\n Chat overview (the Function Calling\n page now redirects there) says \"Models that list tools in their\n supported_features accept OpenAI-format tools and tool_choice.\" So\n reka-edge-2603 and its alias reka-edge are marked tools: true and\n reka-flash-3 is tools: false. reka-flash keeps tools: true from the\n sentence \"Currently, only Reka Flash supports function calling.\" (retrieved\n 2026-09-29), which the current pages no longer carry, so that entry is\n unconfirmed\nTools while streaming: not declared (false) — no request combining them\n was sent\nStructured output: not declared (false) — the ChatRequest on the\n Chat API reference lists\n messages, model, frequency_penalty, max_tokens, presence_penalty,\n seed, stop, stream, temperature, tool_choice, tools, top_k and\n top_p\nStructured output + tools together: not declared (false) — no combined\n probe was run without credentials\nEmbeddings: not declared\nThinking: not declared\nVision: reka-flash, reka-edge and reka-edge-2603 are marked\n vision: true from the vendor's image examples and Models table;\n reka-flash-3 is vision: false because the Models table lists its input as\n text only (see Models)\nBilling: billingPolicy holds free-tier, one of the three values the\n catalog schema allows — the vendor wording is quoted in\n Billing below\nKey format: none declared\n\nQuick Start\nGet an API key\nVisit: https://platform.reka.ai/sign-up (the \"Start for free\" and \"Get started\" links on https://platform.reka.ai/pricing point to /sign-up). The Quickstart (https://docs.reka.ai/quickstart.md) says \"Create a free account on the Reka Platform to access your API key.\" and the FAQ (https://docs.reka.ai/resources/faqs.md) answers \"How do I get an API key?\" with \"Go to Platform, > API Keys to generate or copy your key.\"\nBilling as the vendor states it: https://docs.reka.ai/pricing.md says \"Get started with no upfront costs.\"; the FAQ (https://docs.reka.ai/resources/faqs.md) answers \"Do I need to pre-pay?\" with \"Yes. Add credits to your account before making requests.\" and says the balance error reads \"P001: Insufficient Balance\" when the balance hits $0\nAuthentication: the vendor's REST examples send the header X-Api-Key (https://docs.reka.ai/chat/overview.md) and the OpenAPI file https://docs.reka.ai/openapi/api-reference.yaml declares one security scheme, an apiKey in the header X-Api-Key; the OpenAI Python SDK examples pass api_key=\"YOUR_API_KEY\" to the client (https://docs.reka.ai/quickstart.md)\nSet REKA_API_KEY in your .env file\nConfigure\nUse it\n\nPer-request credentials work as they do for every provider:\n\nBilling\n\nWhat the vendor's pages say, as opened on 2026-09-29:\nThe Quickstart (https://docs.reka.ai/quickstart.md): \"Create a free account on\n the Reka Platform to access your API key.\"\nThe FAQ (https://docs.reka.ai/resources/faqs.md), \"Do I need to pre-pay?\":\n \"Yes. Add credits to your account before making requests.\" It adds that when\n the balance hits $0 the error reads \"P001: Insufficient Balance\".\nThe API pricing page (https://docs.reka.ai/pricing.md) has a \"Pay as you go\"\n heading and says \"Get started with no upfront costs. You only pay for what you\n use.\"\nThe platform pricing page (https://platform.reka.ai/pricing) shows a \"Pay as\n you go\" tile with the text \"Add credits only when you need them.\" and a \"Start\n for free\" link to /sign-up; the page also carries the text \"Free credits used\".\n\nbillingPolicy holds free-tier, one of the three values the catalog schema\nallows (free-tier, free-with-card, no-free-tier).\n\nModels\n\n| Model | Context | Vision | $/M i","hierarchy":{"lvl0":"Getting Started","lvl1":"Reka AI Provider Guide","lvl2":"","lvl3":""}},
|
|
6384
6384
|
{"objectID":"38095f1d07a68493e80f61e00e63dc03b2c3f1f7ddfc60ed826901938191b33e","title":"Reka AI Provider Guide","url":"/docs/getting-started/providers/reka#reka-ai-provider-guide","content":"Reka AI is a Tier-2 catalog provider: its entire integration is one JSON\nfile (src/lib/providers/catalog/reka.json) rather than hand-written code.\nThat file is the source of truth for everything on this page.\n\nVerification status: this entry is docs-verified only, not yet\nlive-verified. Reka's GET https://api.reka.ai/v1/models needs a key (it\nanswers HTTP 401 without one), so the four model ids come from Reka's public\ndocs (Models page, retrieved\n2026-09-29 for the first three and 2026-10-17 for reka-flash-3) and the\nroster has not been checked. No account was created, no\nAPI key was used and no POST request was sent to build it.\nevidence.liveMatrix is null until someone runs the live capability matrix\nwith a real key (see Verification status below).","hierarchy":{"lvl0":"Getting Started","lvl1":"Reka AI Provider Guide","lvl2":"Reka AI Provider Guide","lvl3":""}},
|
|
6385
6385
|
{"objectID":"b02f09d4dbdb71bc5dad5c0e801689e956e1f45e74e10d9fc471032ab2d34b3e","title":"Key Facts","url":"/docs/getting-started/providers/reka#key-facts","content":"Provider id: reka\nEndpoint: /chat/completions — the\n Quickstart says \"our API is fully\n OpenAI-compatible\"\nBase URL: https://api.reka.ai/v1\nDefault model: reka-flash\nModels in catalog: 4 — reka-flash, reka-edge and reka-edge-2603\n from the Models page as first read, plus reka-flash-3 from the Models page\n as read on 2026-10-17\nStreaming: supported — the\n Chat overview says \"The Chat API\n supports streaming\"\nTool calling: model-dependent — the table on the\n Models page (retrieved 2026-10-17) has a\n \"Tools\" column that is Yes for reka-edge-2603 and No for reka-flash-3,\n and the Tools section of the\n Chat overview (the Function Calling\n page now redirects there) says \"Models that list tools in their\n supported_features accept OpenAI-format tools and tool_choice.\" So\n reka-edge-2603 and its alias reka-edge are marked tools: true and\n reka-flash-3 is tools: false. reka-flash keeps tools: true from the\n sentence \"Currently, only Reka Flash supports function calling.\" (retrieved\n 2026-09-29), which the current pages no longer carry, so that entry is\n unconfirmed\nTools while streaming: not declared (false) — no request combining them\n was sent\nStructured output: not declared (false) — the ChatRequest on the\n Chat API reference lists\n messages, model, frequency_penalty, max_tokens, presence_penalty,\n seed, stop, stream, temperature, tool_choice, tools, top_k and\n top_p\nStructured output + tools together: not declared (false) — no combined\n probe was run without credentials\nEmbeddings: not declared\nThinking: not declared\nVision: reka-flash, reka-edge and reka-edge-2603 are marked\n vision: true from the vendor's image examples and Models table;\n reka-flash-3 is vision: false because the Models table lists its input as\n text only (see Models)\nBilling: billingPolicy holds free-tier, one of the three values the\n catalog schema allows — the vendor wording is quoted in\n Billing below\nKey format: none declared","hierarchy":{"lvl0":"Getting Started","lvl1":"Reka AI Provider Guide","lvl2":"Key Facts","lvl3":""}},
|
|
6386
|
-
{"objectID":"387a63f66e05b9721faebe894f1be59d37ca90a54446fb46a92597c11e63392b","title":"1. Get an API key","url":"/docs/getting-started/providers/reka#1-get-an-api-key","content":"Visit: https://platform.reka.ai/sign-up (the \"Start for free\" and \"Get started\" links on https://platform.reka.ai/pricing point to /sign-up). The Quickstart (https://docs.reka.ai/quickstart.md) says \"Create a free account on the Reka Platform to access your API key.\" and the FAQ (https://docs.reka.ai/resources/faqs.md) answers \"How do I get an API key?\" with \"Go to Platform, > API Keys to generate or copy your key.\"\nBilling as the vendor states it: https://docs.reka.ai/pricing.md says \"Get started with no upfront costs.\"; the FAQ (https://docs.reka.ai/resources/faqs.md) answers \"Do I need to pre-pay?\" with \"Yes. Add credits to your account before making requests.\" and says the balance error reads \"P001: Insufficient Balance\" when the balance hits $0\nAuthentication: the vendor's REST examples send the header X-Api-Key (https://docs.reka.ai/chat/overview.md) and the OpenAPI file https://docs.reka.ai/openapi/api-reference.yaml declares one security scheme, an apiKey in the header X-Api-Key; the OpenAI Python SDK examples pass
|
|
6386
|
+
{"objectID":"387a63f66e05b9721faebe894f1be59d37ca90a54446fb46a92597c11e63392b","title":"1. Get an API key","url":"/docs/getting-started/providers/reka#1-get-an-api-key","content":"Visit: https://platform.reka.ai/sign-up (the \"Start for free\" and \"Get started\" links on https://platform.reka.ai/pricing point to /sign-up). The Quickstart (https://docs.reka.ai/quickstart.md) says \"Create a free account on the Reka Platform to access your API key.\" and the FAQ (https://docs.reka.ai/resources/faqs.md) answers \"How do I get an API key?\" with \"Go to Platform, > API Keys to generate or copy your key.\"\nBilling as the vendor states it: https://docs.reka.ai/pricing.md says \"Get started with no upfront costs.\"; the FAQ (https://docs.reka.ai/resources/faqs.md) answers \"Do I need to pre-pay?\" with \"Yes. Add credits to your account before making requests.\" and says the balance error reads \"P001: Insufficient Balance\" when the balance hits $0\nAuthentication: the vendor's REST examples send the header X-Api-Key (https://docs.reka.ai/chat/overview.md) and the OpenAPI file https://docs.reka.ai/openapi/api-reference.yaml declares one security scheme, an apiKey in the header X-Api-Key; the OpenAI Python SDK examples pass api_key=\"YOUR_API_KEY\" to the client (https://docs.reka.ai/quickstart.md)\nSet REKA_API_KEY in your .env file","hierarchy":{"lvl0":"Getting Started","lvl1":"Reka AI Provider Guide","lvl2":"1. Get an API key","lvl3":""}},
|
|
6387
6387
|
{"objectID":"beaff5f1264dce4783e1403f377578f50d9be36ec6a08067ada2534d4c636e2b","title":"2. Configure","url":"/docs/getting-started/providers/reka#2-configure","content":"2. Configure","hierarchy":{"lvl0":"Getting Started","lvl1":"Reka AI Provider Guide","lvl2":"2. Configure","lvl3":""}},
|
|
6388
6388
|
{"objectID":"fa1555bea79084e58dc26d47a4b84902ff751b53983cd3d38a46298530cc33ab","title":"3. Use it","url":"/docs/getting-started/providers/reka#3-use-it","content":"Per-request credentials work as they do for every provider:","hierarchy":{"lvl0":"Getting Started","lvl1":"Reka AI Provider Guide","lvl2":"3. Use it","lvl3":""}},
|
|
6389
6389
|
{"objectID":"24b90c27fd9b6a0f9aa811dc072f50dcdbc865d66d37e282250e575ad113224e","title":"Billing","url":"/docs/getting-started/providers/reka#billing","content":"What the vendor's pages say, as opened on 2026-09-29:\nThe Quickstart (https://docs.reka.ai/quickstart.md): \"Create a free account on\n the Reka Platform to access your API key.\"\nThe FAQ (https://docs.reka.ai/resources/faqs.md), \"Do I need to pre-pay?\":\n \"Yes. Add credits to your account before making requests.\" It adds that when\n the balance hits $0 the error reads \"P001: Insufficient Balance\".\nThe API pricing page (https://docs.reka.ai/pricing.md) has a \"Pay as you go\"\n heading and says \"Get started with no upfront costs. You only pay for what you\n use.\"\nThe platform pricing page (https://platform.reka.ai/pricing) shows a \"Pay as\n you go\" tile with the text \"Add credits only when you need them.\" and a \"Start\n for free\" link to /sign-up; the page also carries the text \"Free credits used\".\n\nbillingPolicy holds free-tier, one of the three values the catalog schema\nallows (free-tier, free-with-card, no-free-tier).","hierarchy":{"lvl0":"Getting Started","lvl1":"Reka AI Provider Guide","lvl2":"Billing","lvl3":""}},
|
|
@@ -6465,7 +6465,7 @@
|
|
|
6465
6465
|
{"objectID":"d9009271ed23f9cdca4ffb7aa37896b7e3a51c816ec68d1e40e4ec90612d6ee3","title":"6. \"Endpoint not found\"","url":"/docs/getting-started/providers/sagemaker#6-endpoint-not-found","content":"Problem: The specified endpoint does not exist or is not in the correct region.\n\nSolution:","hierarchy":{"lvl0":"Getting Started","lvl1":"Amazon SageMaker Provider Guide","lvl2":"6. \"Endpoint not found\"","lvl3":""}},
|
|
6466
6466
|
{"objectID":"a94e36be6bd76d0cc347eec562a467b16c6e5e80dc1afd09fd2c485dcecfd625","title":"Related Documentation","url":"/docs/getting-started/providers/sagemaker#related-documentation","content":"AWS Bedrock Provider - Serverless foundation models on AWS (supports streaming and embeddings)\nProvider Setup - General provider configuration\nHugging Face Provider - Direct Hugging Face Inference API access","hierarchy":{"lvl0":"Getting Started","lvl1":"Amazon SageMaker Provider Guide","lvl2":"Related Documentation","lvl3":""}},
|
|
6467
6467
|
{"objectID":"ed525641c5fafea19eea16784251d4ca1c2aa9b0ad5ae1926eba282b65ed9b7b","title":"Additional Resources","url":"/docs/getting-started/providers/sagemaker#additional-resources","content":"SageMaker Docs - Official documentation\nSageMaker Pricing - Instance and inference pricing\nSageMaker Console - Manage endpoints\nJumpStart Models - Pre-built model catalog\nHugging Face on SageMaker - Deploy HF models to SageMaker\n\nNeed Help? Join our GitHub Discussions or open an issue.","hierarchy":{"lvl0":"Getting Started","lvl1":"Amazon SageMaker Provider Guide","lvl2":"Additional Resources","lvl3":""}},
|
|
6468
|
-
{"objectID":"c69e13f51b8da8fb7cdbb5637c4d539fbb7038f943221a5cd7114f4407d8ce46","title":"Sakana AI Provider Guide","url":"/docs/getting-started/providers/sakana-ai","content":"Sakana AI Provider Guide\n\nSakana AI is a Tier-2 catalog provider: it is expressed as OpenAI-wire-compatible\nwith no quirks block, so its entire integration is one JSON file\n(src/lib/providers/catalog/sakana-ai.json) rather than hand-written code.\nThat file is the source of truth for the facts on this page.\n\nVerification status: this entry is docs-verified only, not yet\nlive-verified. The vendor's GET https://api.sakana.ai/v1/models needs a\nkey (it answers HTTP 401 without one), so the model ids come from Sakana AI's\npublic Models page and the roster has not been checked. No account was created\nand no API key was used to build it. evidence.liveMatrix is null until\nsomeone runs the live capability matrix with a real key (see\nVerification status below).\n\nKey Facts\nProvider id: sakana-ai (alias sakana)\nProtocol: OpenAI-compatible (/chat/completions). The Models page\n (console.sakana.ai/models) also lists\n Responses, Models and Anthropic-compatible Messages endpoints and says: \"For\n generation requests, we strongly recommend using the Responses API, for better\n performance.\" This entry sends /chat/completions, which the same page\n documents with the line \"Use /v1/chat/completions when you want the OpenAI\n Chat Completions API shape.\"\nBase URL: https://api.sakana.ai/v1 (the Get Started page,\n console.sakana.ai/get-started, shows\n the OpenAI Python SDK with base_url = \"https://api.sakana.ai/v1\")\nDefault model: fugu\nModels in catalog: 9, copied from the Supported models table on the Models\n page. The table's other two ids, fugu-cyber and fugu-cyber-v1.0, are left\n out of the catalog: the page says \"In order to use Fugu Cyber, users must\n submit an access request form detailing their intended use case and providing\n verified contact information.\"\nStreaming: supported — the Chat Completions field table lists stream\n (\"Stream the response.\"), and the Sakana Namazu tab lists Streaming as\n \"Supported\"\nTool calling: model-dependent — the Chat Completions field tables list\n tools (\"Tool definitions the model may call.\") and tool_choice for Fugu,\n and tools (\"Function tool definitions or built-in tools\") for Sakana Namazu;\n not exercised with a key\nTools while streaming: not declared (false) — no page documents tools\n and streaming together\nStructured output: supported — the Fugu Chat Completions table lists\n response_format (\"Structured output with text, json_object, or\n
|
|
6468
|
+
{"objectID":"c69e13f51b8da8fb7cdbb5637c4d539fbb7038f943221a5cd7114f4407d8ce46","title":"Sakana AI Provider Guide","url":"/docs/getting-started/providers/sakana-ai","content":"Sakana AI Provider Guide\n\nSakana AI is a Tier-2 catalog provider: it is expressed as OpenAI-wire-compatible\nwith no quirks block, so its entire integration is one JSON file\n(src/lib/providers/catalog/sakana-ai.json) rather than hand-written code.\nThat file is the source of truth for the facts on this page.\n\nVerification status: this entry is docs-verified only, not yet\nlive-verified. The vendor's GET https://api.sakana.ai/v1/models needs a\nkey (it answers HTTP 401 without one), so the model ids come from Sakana AI's\npublic Models page and the roster has not been checked. No account was created\nand no API key was used to build it. evidence.liveMatrix is null until\nsomeone runs the live capability matrix with a real key (see\nVerification status below).\n\nKey Facts\nProvider id: sakana-ai (alias sakana)\nProtocol: OpenAI-compatible (/chat/completions). The Models page\n (console.sakana.ai/models) also lists\n Responses, Models and Anthropic-compatible Messages endpoints and says: \"For\n generation requests, we strongly recommend using the Responses API, for better\n performance.\" This entry sends /chat/completions, which the same page\n documents with the line \"Use /v1/chat/completions when you want the OpenAI\n Chat Completions API shape.\"\nBase URL: https://api.sakana.ai/v1 (the Get Started page,\n console.sakana.ai/get-started, shows\n the OpenAI Python SDK with base_url = \"https://api.sakana.ai/v1\")\nDefault model: fugu\nModels in catalog: 9, copied from the Supported models table on the Models\n page. The table's other two ids, fugu-cyber and fugu-cyber-v1.0, are left\n out of the catalog: the page says \"In order to use Fugu Cyber, users must\n submit an access request form detailing their intended use case and providing\n verified contact information.\"\nStreaming: supported — the Chat Completions field table lists stream\n (\"Stream the response.\"), and the Sakana Namazu tab lists Streaming as\n \"Supported\"\nTool calling: model-dependent — the Chat Completions field tables list\n tools (\"Tool definitions the model may call.\") and tool_choice for Fugu,\n and tools (\"Function tool definitions or built-in tools\") for Sakana Namazu;\n not exercised with a key\nTools while streaming: not declared (false) — no page documents tools\n and streaming together\nStructured output: supported — the Fugu Chat Completions table lists\n response_format (\"Structured output with text, json_object, or\n json_schema.\"), and the Sakana Namazu tab lists \"json_schema and json_object\"\nStructured output + tools together: not declared (false) — no combined\n probe was run without credentials\nEmbeddings: not declared\nThinking: declared — the Fugu Chat Completions table lists\n reasoning_effort with an effort value of high, xhigh or max, and the\n Sakana Namazu tab says \"Sakana Namazu supports extended thinking\". Neither was\n exercised through NeuroLink\nBilling: catalog value no-free-tier. The Pricing page\n (console.sakana.ai/pricing) lists Pay as\n you go rates per model and three Subscription Plans (Standard $20/month, Pro\n $100/month, Max $200/month)\nKey format: none declared. The Get Started page's Claude Code example\n writes the key as \"fish_...\" with the comment # your Sakana key; NeuroLink\n does not validate a prefix\n\nQuick Start\nGet an API key\nVisit: https://console.sakana.ai/overview and sign in - the page shows \"Login with Google\" and \"Send login link\"\nCreate an API key - the Get Started page (https://console.sakana.ai/get-started) says: \"Before using Fugu or Sakana Namazu, create an API key and copy the generated key. The key is shown only once, so store it somewhere secure before closing the dialog.\"\nBilling as the vendor states it: the Pricing page (https://console.sakana.ai/pricing) lists Pay as you go rates per model and Subscription Plans (Standard $20/month, Pro $100/month, Max $200/month); the Get Started page says Sakana Namazu \"is billed purely on a pay-as-you-go (per-token) basis.\"\nSet SAKANA_AI_API_KEY in your .env file (SAKANA_API_KEY, which the Get Started page's curl example reads, is accepted as a fallback; the Models page's Python example reads FUGU_API_KEY and FUGU_BASE_URL, which NeuroLink does not)\nConfigure\nUse it\n\nPer-request credentials work as they do for other providers:\n\nModels\n\n| Model | Context | Vision | $/M in · out (cached) | Notes |\n| -------------------- | ------- | ------ | --------------------- | --------------------------------------------------------------------------------------------------------------- |\n| fugu ⭐ | 1M | yes | not recorded | NeuroLink default. Models page: \"The default Fugu model.\" Fugu overview: \"the ideal default for everyday work.\" |\n| fugu-ultra | 1M | yes | $5 / $30 ($0.50) | Models page: \"The Fugu Ultra model, defaults to fugu-ultra-v2.0.\" Priced as fugu-ultra-v2.0. |\n| fugu-ultra-v2.0","hierarchy":{"lvl0":"Getting Started","lvl1":"Sakana AI Provider Guide","lvl2":"","lvl3":""}},
|
|
6469
6469
|
{"objectID":"4bdbaf980cae430df988750cb1409d7f9d280437fd98e5bd73ac538154f2e5d0","title":"Sakana AI Provider Guide","url":"/docs/getting-started/providers/sakana-ai#sakana-ai-provider-guide","content":"Sakana AI is a Tier-2 catalog provider: it is expressed as OpenAI-wire-compatible\nwith no quirks block, so its entire integration is one JSON file\n(src/lib/providers/catalog/sakana-ai.json) rather than hand-written code.\nThat file is the source of truth for the facts on this page.\n\nVerification status: this entry is docs-verified only, not yet\nlive-verified. The vendor's GET https://api.sakana.ai/v1/models needs a\nkey (it answers HTTP 401 without one), so the model ids come from Sakana AI's\npublic Models page and the roster has not been checked. No account was created\nand no API key was used to build it. evidence.liveMatrix is null until\nsomeone runs the live capability matrix with a real key (see\nVerification status below).","hierarchy":{"lvl0":"Getting Started","lvl1":"Sakana AI Provider Guide","lvl2":"Sakana AI Provider Guide","lvl3":""}},
|
|
6470
6470
|
{"objectID":"dde3b7fa1971790ee9b9926cdb09e6cf3ad3e0fc9f0916b3f41a5104b78649d2","title":"Key Facts","url":"/docs/getting-started/providers/sakana-ai#key-facts","content":"Provider id: sakana-ai (alias sakana)\nProtocol: OpenAI-compatible (/chat/completions). The Models page\n (console.sakana.ai/models) also lists\n Responses, Models and Anthropic-compatible Messages endpoints and says: \"For\n generation requests, we strongly recommend using the Responses API, for better\n performance.\" This entry sends /chat/completions, which the same page\n documents with the line \"Use /v1/chat/completions when you want the OpenAI\n Chat Completions API shape.\"\nBase URL: https://api.sakana.ai/v1 (the Get Started page,\n console.sakana.ai/get-started, shows\n the OpenAI Python SDK with base_url = \"https://api.sakana.ai/v1\")\nDefault model: fugu\nModels in catalog: 9, copied from the Supported models table on the Models\n page. The table's other two ids, fugu-cyber and fugu-cyber-v1.0, are left\n out of the catalog: the page says \"In order to use Fugu Cyber, users must\n submit an access request form detailing their intended use case and providing\n verified contact information.\"\nStreaming: supported — the Chat Completions field table lists stream\n (\"Stream the response.\"), and the Sakana Namazu tab lists Streaming as\n \"Supported\"\nTool calling: model-dependent — the Chat Completions field tables list\n tools (\"Tool definitions the model may call.\")","hierarchy":{"lvl0":"Getting Started","lvl1":"Sakana AI Provider Guide","lvl2":"Key Facts","lvl3":""}},
|
|
6471
6471
|
{"objectID":"a79c3e494e2b89617d3a74499a627e61a75ed99459bd3971bb5f64e5c514c151","title":"1. Get an API key","url":"/docs/getting-started/providers/sakana-ai#1-get-an-api-key","content":"Visit: https://console.sakana.ai/overview and sign in - the page shows \"Login with Google\" and \"Send login link\"\nCreate an API key - the Get Started page (https://console.sakana.ai/get-started) says: \"Before using Fugu or Sakana Namazu, create an API key and copy the generated key. The key is shown only once, so store it somewhere secure before closing the dialog.\"\nBilling as the vendor states it: the Pricing page (https://console.sakana.ai/pricing) lists Pay as you go rates per model and Subscription Plans (Standard $20/month, Pro $100/month, Max $200/month); the Get Started page says Sakana Namazu \"is billed purely on a pay-as-you-go (per-token) basis.\"\nSet SAKANA_AI_API_KEY in your .env file (SAKANA_API_KEY, which the Get Started page's curl example reads, is accepted as a fallback; the Models page's Python example reads FUGU_API_KEY and FUGU_BASE_URL, which NeuroLink does not)","hierarchy":{"lvl0":"Getting Started","lvl1":"Sakana AI Provider Guide","lvl2":"1. Get an API key","lvl3":""}},
|
|
@@ -6475,7 +6475,7 @@
|
|
|
6475
6475
|
{"objectID":"e440f8a3944119705452b4e4b314c23399667042fd12fc2172a73c7fdce92e43","title":"Verification status","url":"/docs/getting-started/providers/sakana-ai#verification-status","content":"Tier-2 onboarding requires evidence before a provider is accepted, and\npnpm run verify:provider-onboarding gates it in CI. This is what the catalog\ncurrently records for Sakana AI — docs-verified only, not yet\nlive-verified:\n\n| Probe | Result |\n| ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Roster | unauthenticated GET https://api.sakana.ai/v1/models answers HTTP 401 without a key, 2026-09-29 — model ids are taken from https://console.sakana.ai/models; the roster has not been checked |\n| Auth-failure shape | unauthenticated GET /v1/models returned HTTP 401 with JSON body {\"error\":{\"message\":\"Missing API key\",\"type\":\"authentication_error\",\"param\":null,\"code\":null}}, 2026-09-29; errorRules holds one rule, for status 401, and evidence.authProbe.code records the body's error.type because error.code is null.","hierarchy":{"lvl0":"Getting Started","lvl1":"Sakana AI Provider Guide","lvl2":"Verification status","lvl3":""}},
|
|
6476
6476
|
{"objectID":"535b640f9827b93ee1fc1989ffeddfb34f93243c908cea478eeb2490872a8aa3","title":"Troubleshooting","url":"/docs/getting-started/providers/sakana-ai#troubleshooting","content":"Each row below is a statement from a Sakana AI page or the observed response\nbody; NeuroLink has not exercised them with a key.\n\n| Symptom | What the vendor page or response says | Source |\n| ----------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------- |\n| HTTP 401 with error.message \"Missing API key\" | Body returned by an unauthenticated GET https://api.sakana.ai/v1/models on 2026-09-29; the Get Started page's curl example sends the header Authorization: Bearer $SAKANA_API_KEY | api.sakana.ai response; Get Started page |\n| Client-side timeouts with fugu-ultra | \"For complex tasks, especially when using fugu-ultra and fugu-cyber, you may need to increase client-side timeouts.\" | Get Started page |\n| sakana-namazu requests and a subscription | \"Sakana Namazu is not included in subscription plans — it is billed purely on a pay-as-you-go (per-token) basis.\" | Get Started page |\n| A fugu-cyber id is needed | \"In order to use Fugu Cyber, users must submit an access request form detailing their intended use case and providing verified contact information.\" | Models page |\n| Sampling fields have no effect | The Fugu Chat Completions table lists temperature, top_p, stop, seed, frequency_penalty and presence_penalty as \"Accepted but ignored.\"","hierarchy":{"lvl0":"Getting Started","lvl1":"Sakana AI Provider Guide","lvl2":"Troubleshooting","lvl3":""}},
|
|
6477
6477
|
{"objectID":"678b820278936bd9c76c4a1d812d401ef54b3d4c8d8c4cc49e01bc30c37f9ce3","title":"See also","url":"/docs/getting-started/providers/sakana-ai#see-also","content":"Provider setup overview\nAll providers\nTier-2 onboarding — how this provider's JSON becomes a working integration\nProvider feature compatibility","hierarchy":{"lvl0":"Getting Started","lvl1":"Sakana AI Provider Guide","lvl2":"See also","lvl3":""}},
|
|
6478
|
-
{"objectID":"0a26140d8305e97ec7c162263ae7f808cc4d3d7d6a9e6854f8b69200332a577e","title":"SambaNova Provider Guide","url":"/docs/getting-started/providers/sambanova","content":"SambaNova Provider Guide\n\nOpen-weight flagships (Llama 3.3 70B, GPT-OSS 120B, DeepSeek V3.x,\nMiniMax, Gemma 4) on SambaNova's RDU-accelerated cloud\n\nOverview\n\nSambaNova Cloud serves open-weight models on its Reconfigurable Dataflow\nUnits. NeuroLink wraps api.sambanova.ai/v1 (OpenAI-compatible,\nzero-quirk Tier 2 catalog entry) so the standard generate / stream\ncontract applies.\n\nRoster verified against a live authenticated /v1/models on 2026-08-27:\nMeta-Llama-3.3-70B-Instruct (default) — production, 128K context\ngpt-oss-120b — production, 128K context\nDeepSeek-V3.1 — production reasoning model, 128K context\nDeepSeek-V3.2 — vendor preview, 32K context\nMiniMax-M2.7 — production, 192K context\nMiniMax-M3 — vision-capable per the vendor dashboard\ngemma-4-31B-it — vendor preview; vision (text + image + video)\n\nKey Facts\nProtocol: OpenAI-compatible (/v1/chat/completions)\nDefault base URL: https://api.sambanova.ai/v1\nDefault model: Meta-Llama-3.3-70B-Instruct\nVision: gemma-4-31B-it (image + video) and MiniMax-M3\nStreaming / tool calling: per the OpenAI-compatible contract\n⚠️ Billing (probed live 2026-08-27): new accounts have no free\n allowance — every call returns 402 PAYMENT_METHOD_REQUIRED\n (balance_units: 0) until a payment method is added and credits are\n purchased at cloud.sambanova.ai/plans/billing.\n The onboarding wizard's payment step may show \"temporarily\n unavailable\" — use the Billing page instead.\nPricing (per million tokens, vendor pricing page 2026-08-27):\n Llama-3.3-70B $0.60/$1.20 · gpt-oss-120b $0.22/$0.59 ·\n DeepSeek-V3.x $3.00/$4.50 · MiniMax $0.60/$2.40 ·\n gemma-4-31B-it $0.38/$1.15\nAPI keys are bare UUIDs (no sk--style prefix) — keep them out of\n logs; NeuroLink's Authorization-header redaction covers them.\n\nQuick Start\nGet an API Key\n\nSign up at https://cloud.sambanova.ai\n(Google/Microsoft OAuth), complete the profile step, add a payment\nmethod + credits under Plans → Billing, and create a key under\nAPI Keys.\nConfigure Environment\nGenerate Your First Response\n\nCLI Usage\n\nConfiguration Reference\n\n| Environment Variable | Required | Default | Description |\n| -------------------- | -------- | ----------------------------- | ----------------- |\n| SAMBANOVA_API_KEY | Yes | — | SambaNova API key |\n| SAMBANOVA_MODEL | No | Meta-Llama-3.3-70B-Instruct | Default model |\n| SAMBANOVA_BASE_URL | No | https://api.sambanova.ai/v1 | Base URL |\n\nTroubleshooting\n\n402 on every call / \"
|
|
6478
|
+
{"objectID":"0a26140d8305e97ec7c162263ae7f808cc4d3d7d6a9e6854f8b69200332a577e","title":"SambaNova Provider Guide","url":"/docs/getting-started/providers/sambanova","content":"SambaNova Provider Guide\n\nOpen-weight flagships (Llama 3.3 70B, GPT-OSS 120B, DeepSeek V3.x,\nMiniMax, Gemma 4) on SambaNova's RDU-accelerated cloud\n\nOverview\n\nSambaNova Cloud serves open-weight models on its Reconfigurable Dataflow\nUnits. NeuroLink wraps api.sambanova.ai/v1 (OpenAI-compatible,\nzero-quirk Tier 2 catalog entry) so the standard generate / stream\ncontract applies.\n\nRoster verified against a live authenticated /v1/models on 2026-08-27:\nMeta-Llama-3.3-70B-Instruct (default) — production, 128K context\ngpt-oss-120b — production, 128K context\nDeepSeek-V3.1 — production reasoning model, 128K context\nDeepSeek-V3.2 — vendor preview, 32K context\nMiniMax-M2.7 — production, 192K context\nMiniMax-M3 — vision-capable per the vendor dashboard\ngemma-4-31B-it — vendor preview; vision (text + image + video)\n\nKey Facts\nProtocol: OpenAI-compatible (/v1/chat/completions)\nDefault base URL: https://api.sambanova.ai/v1\nDefault model: Meta-Llama-3.3-70B-Instruct\nVision: gemma-4-31B-it (image + video) and MiniMax-M3\nStreaming / tool calling: per the OpenAI-compatible contract\n⚠️ Billing (probed live 2026-08-27): new accounts have no free\n allowance — every call returns 402 PAYMENT_METHOD_REQUIRED\n (balance_units: 0) until a payment method is added and credits are\n purchased at cloud.sambanova.ai/plans/billing.\n The onboarding wizard's payment step may show \"temporarily\n unavailable\" — use the Billing page instead.\nPricing (per million tokens, vendor pricing page 2026-08-27):\n Llama-3.3-70B $0.60/$1.20 · gpt-oss-120b $0.22/$0.59 ·\n DeepSeek-V3.x $3.00/$4.50 · MiniMax $0.60/$2.40 ·\n gemma-4-31B-it $0.38/$1.15\nAPI keys are bare UUIDs (no sk--style prefix) — keep them out of\n logs; NeuroLink's Authorization-header redaction covers them.\n\nQuick Start\nGet an API Key\n\nSign up at https://cloud.sambanova.ai\n(Google/Microsoft OAuth), complete the profile step, add a payment\nmethod + credits under Plans → Billing, and create a key under\nAPI Keys.\nConfigure Environment\nGenerate Your First Response\n\nCLI Usage\n\nConfiguration Reference\n\n| Environment Variable | Required | Default | Description |\n| -------------------- | -------- | ----------------------------- | ----------------- |\n| SAMBANOVA_API_KEY | Yes | — | SambaNova API key |\n| SAMBANOVA_MODEL | No | Meta-Llama-3.3-70B-Instruct | Default model |\n| SAMBANOVA_BASE_URL | No | https://api.sambanova.ai/v1 | Base URL |\n\nTroubleshooting\n\n402 on every call / \"PAYMENT_METHOD_REQUIRED\"\n\nThe account has no credits — new accounts have no free allowance.\nAdd a payment method and purchase credits at\ncloud.sambanova.ai/plans/billing.\n\n\"Invalid SambaNova API key\"\n\nRotate at cloud.sambanova.ai/apis. A\nbad key returns an OpenAI-shaped 401 with \"code\": \"invalid_api_key\".\n\n404 for a model that used to exist\n\nPreview models (DeepSeek-V3.2, gemma-4-31B-it) \"may be removed at\nshort notice\" per the vendor. Verify with an authenticated\nGET https://api.sambanova.ai/v1/models.\n\nSee Also\nCerebras Provider — sibling wafer-scale speed provider\nGroq Provider — sibling LPU speed provider\nTier 2 catalog entry guide — internal wiring\n\nNeed Help? Open a GitHub Discussion or issue.","hierarchy":{"lvl0":"Getting Started","lvl1":"SambaNova Provider Guide","lvl2":"","lvl3":""}},
|
|
6479
6479
|
{"objectID":"afb11b7e78791febba1752f0315138e0323159b838468f4d5b291f5d4646a7ac","title":"SambaNova Provider Guide","url":"/docs/getting-started/providers/sambanova#sambanova-provider-guide","content":"Open-weight flagships (Llama 3.3 70B, GPT-OSS 120B, DeepSeek V3.x,\nMiniMax, Gemma 4) on SambaNova's RDU-accelerated cloud","hierarchy":{"lvl0":"Getting Started","lvl1":"SambaNova Provider Guide","lvl2":"SambaNova Provider Guide","lvl3":""}},
|
|
6480
6480
|
{"objectID":"32d8042b72d676ef0f4f025a61c7f62d2a0aa2289c6971e318919545188931de","title":"Overview","url":"/docs/getting-started/providers/sambanova#overview","content":"SambaNova Cloud serves open-weight models on its Reconfigurable Dataflow\nUnits. NeuroLink wraps api.sambanova.ai/v1 (OpenAI-compatible,\nzero-quirk Tier 2 catalog entry) so the standard generate / stream\ncontract applies.\n\nRoster verified against a live authenticated /v1/models on 2026-08-27:\nMeta-Llama-3.3-70B-Instruct (default) — production, 128K context\ngpt-oss-120b — production, 128K context\nDeepSeek-V3.1 — production reasoning model, 128K context\nDeepSeek-V3.2 — vendor preview, 32K context\nMiniMax-M2.7 — production, 192K context\nMiniMax-M3 — vision-capable per the vendor dashboard\ngemma-4-31B-it — vendor preview; vision (text + image + video)","hierarchy":{"lvl0":"Getting Started","lvl1":"SambaNova Provider Guide","lvl2":"Overview","lvl3":""}},
|
|
6481
6481
|
{"objectID":"4c5ae4c4c69f95533414fb2cb511a624f93f27352ae6d152ed5685956a84f85c","title":"Key Facts","url":"/docs/getting-started/providers/sambanova#key-facts","content":"Protocol: OpenAI-compatible (/v1/chat/completions)\nDefault base URL: https://api.sambanova.ai/v1\nDefault model: Meta-Llama-3.3-70B-Instruct\nVision: gemma-4-31B-it (image + video) and MiniMax-M3\nStreaming / tool calling: per the OpenAI-compatible contract\n⚠️ Billing (probed live 2026-08-27): new accounts have no free\n allowance — every call returns 402 PAYMENT_METHOD_REQUIRED\n (balance_units: 0) until a payment method is added and credits are\n purchased at cloud.sambanova.ai/plans/billing.\n The onboarding wizard's payment step may show \"temporarily\n unavailable\" — use the Billing page instead.\nPricing (per million tokens, vendor pricing page 2026-08-27):\n Llama-3.3-70B $0.60/$1.20 · gpt-oss-120b $0.22/$0.59 ·\n DeepSeek-V3.x $3.00/$4.50 · MiniMax $0.60/$2.40 ·\n gemma-4-31B-it $0.38/$1.15\nAPI keys are bare UUIDs (no sk--style prefix) — keep them out of\n logs; NeuroLink's Authorization-header redaction covers them.","hierarchy":{"lvl0":"Getting Started","lvl1":"SambaNova Provider Guide","lvl2":"Key Facts","lvl3":""}},
|
|
@@ -6511,7 +6511,7 @@
|
|
|
6511
6511
|
{"objectID":"f0a725ba02edca902073a9425b5e6f11d56bb918130f79c1f4f75c017fb7ab37","title":"How a request is sent","url":"/docs/getting-started/providers/scaledown#how-a-request-is-sent","content":"ScaleDown's wire is System One's, so you write the same questions as for any\nother decide provider.\n\n| NeuroLink | Sent to /v1/scaledown |\n| --------- | ---------------------------------------------------------------------------------------------------------- |\n| the key | the header x-api-key: <key>, beside Content-Type: application/json; there is no Authorization header |\n| the model | model in the body (classify-1 unless you set another) |\n| state | state, always a string; see below |\n| boolean | a noul question with its instructions |\n| choice | a choice question; criteria maps each option name to its description |\n| score | a score question; criteria is an ordered list of level descriptions |\n\nThe reply has the System One shape, an answers object keyed by question id,\nplus model and usage (input_tokens, output_tokens and a cost in USD).\nA boolean answer carries a probability. A choice or score answer carries\nthe confidence the reply reports and a probability for each option or level; when\na reply omits the confidence, NeuroLink uses the highest probability in that\nanswer's distribution instead. Whether ScaleDown's confidence is calibrated is\nnot established, so tune a threshold on it against your own labelled data.\n\nScaleDown's documentation describes a score question's criteria as an ordered\nlist of 2 to 10 level descriptions. NeuroLink does not enforce that.","hierarchy":{"lvl0":"Getting Started","lvl1":"ScaleDown Provider Guide","lvl2":"How a request is sent","lvl3":""}},
|
|
6512
6512
|
{"objectID":"019697cf87430bd6504ed998cc379cd4c9565713e8336341735eac9e28a05e95","title":"How the state is sent","url":"/docs/getting-started/providers/scaledown#how-the-state-is-sent","content":"ScaleDown's documentation says it reads only the text and document fields of\nthe state, and treats a string state as shorthand for { \"text\": <the string> }.\nNeuroLink therefore sends the state as a string, whatever you pass:\n\n| You pass | ScaleDown receives |\n| ----------------------------------------- | ----------------------------------------------- |\n| a string | the string, unchanged (not trimmed) |\n| an object, an array, a number, a boolean | its JSON text, as one string (JSON.stringify) |\n| {} or [] | the two-character text {} or [] |\n| a string that is empty or only whitespace | nothing: refused locally, before any request |\n\nTwo consequences:\nAn object state is classified as text. ScaleDown does not read an object's\n other keys, so { \"title\": \"...\", \"review\": \"...\" } reaches it as the JSON text\n of that object, and an object that has a text field is not unwrapped either.\n If you want it to read plain prose, pass a string.\n{} and [] are not refused. They are non-blank text, so they are sent\n and ScaleDown classifies the literal characters. ScaleDown itself answers HTTP\n 422 ('state.text' or 'state.document' must be provided) to an empty or\n text-less state object, as the marketing session saw on 2026-10-15, but\n NeuroLink never sends one. Check for an empty container yourself if you want it\n refused.\n\nA blank string is refused as an invalid_request, with a message that names\nScaleDown and the rule (needs non-blank state text) and never repeats the state.\ndecide() rejects with it, tryDecide() returns null, and no request is made.\nThis is a catalog setting, decide.stateEncoding: see\nHow the catalog entry says this.","hierarchy":{"lvl0":"Getting Started","lvl1":"ScaleDown Provider Guide","lvl2":"How the state is sent","lvl3":""}},
|
|
6513
6513
|
{"objectID":"909b8119299644649ccc89ea4d6942c9d088298200c8dde9487649c6a689140f","title":"Choice options and billing","url":"/docs/getting-started/providers/scaledown#choice-options-and-billing","content":"ScaleDown's documentation says every option of a choice question is scored by\na separate internal call, so the input tokens a request is charged for grow with\nthe number of options times the length of the state. The marketing session\nreported two data points on 2026-10-15, not measured here: about 1,829 input\ntokens for a 20-option choice and about 13,059 for a 255-option choice, each on a\none-sentence state.\n\nNeuroLink declares no cap on options. A probe by the marketing session saw a\n255-option choice answered and a 300-option choice refused with HTTP 502; the\nlimit between them is not mapped. When ScaleDown answers a request with HTTP 502,\nas it did to the 300-option probe, NeuroLink reports a server error, retries\nonce, and every built-in consumer then treats the decision as failed and falls\nback. Whether a refused request is charged is not established. Keep the number of\noptions of a choice question modest, and see Cost.","hierarchy":{"lvl0":"Getting Started","lvl1":"ScaleDown Provider Guide","lvl2":"Choice options and billing","lvl3":""}},
|
|
6514
|
-
{"objectID":"0e9ffbaad88dadb6493a28fd7481227ff45f814672b9224e965f48bf3b8b9e0b","title":"When NeuroLink uses it","url":"/docs/getting-started/providers/scaledown#when-neurolink-uses-it","content":"Every built-in consumer of decide — model routing, relevance-driven\ncompaction, tool routing and RAG planning — asks for the default decision\nprovider. That is the first one that is configured, in the environment or in\nthe credentials passed to the SDK, in the order TypeSafe, Laya,\nXOR, SubQ, Perplexity,\nCloudflare Clef, OpenAI Decisions,\nthen ScaleDown. ScaleDown counts with its key alone. So:\nOnly a ScaleDown key: built-in features use ScaleDown, and each of their\n decisions is then a paid request (see Cost) that still falls back to\n what NeuroLink did before on any failure.\nA ScaleDown key, plus any earlier provider's key: built-in features use\n that earlier provider. ScaleDown runs only where a caller asks for\n provider: \"scaledown\".\nA blank SCALEDOWN_API_KEY: no key. ScaleDown is not configured.\nprovider: \"scaledown\" with no key: an authentication error and no\n request.\n\nScaleDown is last on purpose, and its key is not shared. Apart from ScaleDown, the providers that\ncome after SubQ in the order are the ones whose key is also read by a text\nprovider (Perplexity's, the Cloudflare pair and OpenAI's), placed behind it so\nthat a key set only for a text provider cannot displace a decision provider a\nhost set up on purpose. That reasoning does not cover ScaleDown, whose key\nbelongs to no other provider: it was placed last, after OpenAI Decisions, as a\ndeliberate choice and not by that rule. The effect is that an ambient OPENAI_API_KEY, PERPLEXITY_API_KEY or\nCloudflare pair in the environment outranks a SCALEDOWN_API_KEY set on purpose.\
|
|
6514
|
+
{"objectID":"0e9ffbaad88dadb6493a28fd7481227ff45f814672b9224e965f48bf3b8b9e0b","title":"When NeuroLink uses it","url":"/docs/getting-started/providers/scaledown#when-neurolink-uses-it","content":"Every built-in consumer of decide — model routing, relevance-driven\ncompaction, tool routing and RAG planning — asks for the default decision\nprovider. That is the first one that is configured, in the environment or in\nthe credentials passed to the SDK, in the order TypeSafe, Laya,\nXOR, SubQ, Perplexity,\nCloudflare Clef, OpenAI Decisions,\nthen ScaleDown. ScaleDown counts with its key alone. So:\nOnly a ScaleDown key: built-in features use ScaleDown, and each of their\n decisions is then a paid request (see Cost) that still falls back to\n what NeuroLink did before on any failure.\nA ScaleDown key, plus any earlier provider's key: built-in features use\n that earlier provider. ScaleDown runs only where a caller asks for\n provider: \"scaledown\".\nA blank SCALEDOWN_API_KEY: no key. ScaleDown is not configured.\nprovider: \"scaledown\" with no key: an authentication error and no\n request.\n\nScaleDown is last on purpose, and its key is not shared. Apart from ScaleDown, the providers that\ncome after SubQ in the order are the ones whose key is also read by a text\nprovider (Perplexity's, the Cloudflare pair and OpenAI's), placed behind it so\nthat a key set only for a text provider cannot displace a decision provider a\nhost set up on purpose. That reasoning does not cover ScaleDown, whose key\nbelongs to no other provider: it was placed last, after OpenAI Decisions, as a\ndeliberate choice and not by that rule. The effect is that an ambient OPENAI_API_KEY, PERPLEXITY_API_KEY or\nCloudflare pair in the environment outranks a SCALEDOWN_API_KEY set on purpose.\nThe one exception is a gateway's key: an OPENAI_API_KEY found only in the\nenvironment is skipped for the default while OPENAI_BASE_URL, OPENAI_API_BASE\nor credentials.openai.baseURL names a host other than https://api.openai.com,\nso with nothing earlier configured ScaleDown is the default.","hierarchy":{"lvl0":"Getting Started","lvl1":"ScaleDown Provider Guide","lvl2":"When NeuroLink uses it","lvl3":""}},
|
|
6515
6515
|
{"objectID":"b06a4af3a93c004935822bcc4b8c3fa7b19a496460ca3d2a9f8ea72446d6c262","title":"How the catalog entry says this","url":"/docs/getting-started/providers/scaledown#how-the-catalog-entry-says-this","content":"scaledown.json needed two optional keys in its decide block that no earlier\nentry set, both read by the shared catalog engine for any entry that sets them.\nAn entry that omits them behaves exactly as before.\n\n| Key | Value | What it does |\n| --------------- | ------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| authHeader | \"x-api-key\" | The API key is sent as x-api-key: <key> and no Authorization header is sent at all. \"bearer\", the default when the key is omitted, sends Authorization: Bearer <key>. This is the decide request's own setting; quirks.authHeaderStyle belongs to the chat path and is not read here |\n| stateEncoding | \"text\" | The state that goes out is always a string: a string is sent unchanged (not trimmed), any other value as its JSON text, and a state that is blank after trimming is refused before any request as an invalid_request. Omitted means the state goes out as given |\n\nThe rest of the entry is the same kind of data every decide entry carries: the\nsystem-one dialect, order 8, the endpoint {baseURL}/v1/scaledown, the model in\nthe body, trailing slashes dropped from the base URL, and the error rules in the\ntable below. The fields are also described in the generated API reference, under\nDecideBlock.","hierarchy":{"lvl0":"Getting Started","lvl1":"ScaleDown Provider Guide","lvl2":"How the catalog entry says this","lvl3":""}},
|
|
6516
6516
|
{"objectID":"9f3c9d52f412bb381d8f770fa11e1de1c1f66ba5b56c324de62a11d5f6cf35bd","title":"Images and video","url":"/docs/getting-started/providers/scaledown#images-and-video","content":"ScaleDown's endpoint reads text only, and the catalog entry declares no media. An\nimage or a video attached to a decide() call for ScaleDown is refused before any\nrequest, as an invalid_request, and the catalog marks both models\nvision: false. This refusal comes before the blank-state check, so a call that\ncarries media is always refused for the media. To decide over images today, use\nXOR, Perplexity,\nCloudflare Clef or OpenAI Decisions.","hierarchy":{"lvl0":"Getting Started","lvl1":"ScaleDown Provider Guide","lvl2":"Images and video","lvl3":""}},
|
|
6517
6517
|
{"objectID":"32661eaf2994628038e0d49fc81ee5e962c42273147ac024b6b6a66c0d2f2142","title":"Timeouts","url":"/docs/getting-started/providers/scaledown#timeouts","content":"The default is 5,000 ms per attempt (the shared decide default,\nDEFAULT_DECISION_TIMEOUT_MS). A choice question is scored once per option, and\nthe marketing session saw one ScaleDown 504 (Endpoint request timed out) after\nabout 29 seconds. ScaleDown's own latency is not measured here, so a caller with\nmany options or a long state should pass timeoutMs.\n\nA 504 that ScaleDown sends is classified timeout and is not retried. A timeout\nraised by NeuroLink's own clock is retried once.","hierarchy":{"lvl0":"Getting Started","lvl1":"ScaleDown Provider Guide","lvl2":"Timeouts","lvl3":""}},
|
|
@@ -6633,10 +6633,10 @@
|
|
|
6633
6633
|
{"objectID":"1b321e95b49cf8c2e2e15b3e5b1292363d492fd984294d3c5a329e11a33765f2","title":"Verification status","url":"/docs/getting-started/providers/synthetic#verification-status","content":"Tier-2 onboarding requires evidence before a provider is accepted, and\npnpm run verify:provider-onboarding gates it in CI. This is what the\ncatalog records for Synthetic — all credential-free:\n\n| Probe | Result |\n| ---------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Roster | unauthenticated GET /openai/v1/models, HTTP 200, 11 models, 2026-09-28. No API key used or required for this endpoint. |\n| Billing | unauthenticated GET https://synthetic.new/pricing, HTTP 200, 2026-09-28 — no free tier; $1/day or $30/month subscription pack (500 req/5hr), or enterprise usage-based pricing. |\n| Third-party wire check | LiteLLM's Synthetic provider page confirms base URL https://api.synthetic.new/openai/v1, env var SYNTHETIC_API_KEY, and /chat/completions as the only supported operation. |\n| Live capability sweep | Not yet run. evidence.liveMatrix is null. Tool calling, structured output, streaming and the tools+schema combination are documented by the vendor's own supported_features roster field, not wire-proven against a real key. |\n\nBecause no live key was used, capabilities.structuredOutputWithTools is\nfalse per Tier-2 policy — a documented individual capability is not\nevidence for the combined one.","hierarchy":{"lvl0":"Getting Started","lvl1":"Synthetic Provider Guide","lvl2":"Verification status","lvl3":""}},
|
|
6634
6634
|
{"objectID":"4db386b896f3e19c66e5564b8719cb8bddca88d0d596ccdea459ee60cf27f825","title":"Troubleshooting","url":"/docs/getting-started/providers/synthetic#troubleshooting","content":"| Symptom | Cause | Fix |\n| ---------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- |\n| Auth error on first request | No documented auth-error shape yet (no live probe) | Check SYNTHETIC_API_KEY is set and valid; see https://synthetic.new for key management |\n| Model not found | The roster changed since 2026-09-28 | Pick a current id from the unauthenticated GET /openai/v1/models roster |\n| No free tier | Synthetic requires a paid Pack or usage-based billing | Subscribe at https://synthetic.new before making live calls |\n| Structured output + tools together fails | Not yet probed combined; declared unsupported (structuredOutputWithTools: false) until proven live | Send tools and response_format in separate requests until this is live-verified |","hierarchy":{"lvl0":"Getting Started","lvl1":"Synthetic Provider Guide","lvl2":"Troubleshooting","lvl3":""}},
|
|
6635
6635
|
{"objectID":"452f3970d27c44897602d26d618f2d1f808aae1c21ceba07acf57e2c84c34a02","title":"See also","url":"/docs/getting-started/providers/synthetic#see-also","content":"Provider setup overview\nAll providers\nTier-2 onboarding — how this provider's JSON becomes a working integration\nProvider feature compatibility","hierarchy":{"lvl0":"Getting Started","lvl1":"Synthetic Provider Guide","lvl2":"See also","lvl3":""}},
|
|
6636
|
-
{"objectID":"072e186cf310a05c6cbfe1c00fe2900a3e93ebb2e86d53a93a5b4aa8bfbc3c71","title":"Telnyx Provider Guide","url":"/docs/getting-started/providers/telnyx","content":"Telnyx Provider Guide\n\nTelnyx is a Tier-2 catalog provider: its integration is one JSON file\n(src/lib/providers/catalog/telnyx.json) rather than hand-written code.\nThat file is the source of truth for this page.\n\nVerification status: this entry is docs-verified only, not yet\nlive-verified. Telnyx's GET /v2/ai/openai/models needs a key (it answers\nHTTP 401 without one), so the model ids come from Telnyx's public models page\nand the roster has not been checked. No account was created and no API key\nwas used to build this entry. evidence.liveMatrix is null until someone\nruns the live capability matrix with a real key (see\nVerification status below).\n\nKey Facts\nProvider id: telnyx\nProtocol: OpenAI-compatible (/chat/completions) — the\n Quickstart\n says \"The Inference API is OpenAI-compatible.\"\nBase URL: https://api.telnyx.com/v2/ai/openai\nDefault model: zai-org/GLM-5.3-Flash — NeuroLink default. The\n models page tags it\n \"(Recommended)\", and the Quickstart's first chat-completions example uses it\nModels in catalog: 9 — the nine chat models the models page lists on\n 2026-09-29\nStreaming: supported — the Quickstart's Streaming section says\n \"Server-sent events, same as OpenAI.\"\nTool calling: true — the\n Function Calling page\n says \"While we recommend you start with this model, every model in our API\n supports the tools interface.\"\nTools while streaming: true — the\n Streaming and Parallel Calls page\n shows a streamed chat completion with tools on zai-org/GLM-5.3-Flash\nStructured output: true — the\n JSON Mode page\n documents response_format with json_schema and with json_object\nStructured output + tools together: not declared (false) — no combined\n probe was run without credentials\nEmbeddings: not declared on this catalog entry. The models page lists\n three embedding models on POST /v2/ai/openai/embeddings, but NeuroLink's\n generic ConfiguredOpenAICompatProvider (which every Tier-2 catalog entry\n uses) does not implement embed()/embedMany(), so this flag tracks that,\n not the vendor's own API surface\nThinking: not declared — the\n Chat Completions reference\n documents reasoning_effort and the Quickstart documents a reasoning_content\n response field, but this entry sets no reasoning request parameter\nMax output tokens: models.defaultMaxOutputTokens is 8192, the\n max_tokens default the Chat Completions reference states. The reference also\n says \"Reasoning models consume this budget across reasoning and answer tokens\n combined.\"\nVision: each model's vision field is false, a placeholder for a\n boolean the catalog schema requires; it is not a vendor statement\nBilling: see Billing below\nKey format: none declared\n\nQuick Start\nGet an API key\nVisit: https://telnyx.com/sign-up and create a Telnyx account — the Inference API Quickstart (https://developers.telnyx.com/docs/inference/getting-started) lists a \"Telnyx account\" and an \"API Key\" under Prerequisites\nCreate an API key at https://portal.telnyx.com/#/app/auth/v2, the link the Quickstart gives for the API Key\nAuthentication is HTTP Bearer: the Service tiers page (https://developers.telnyx.com/docs/inference/service-tiers) shows a curl request to https://api.telnyx.com/v2/ai/openai/models with the header Authorization: Bearer $
|
|
6636
|
+
{"objectID":"072e186cf310a05c6cbfe1c00fe2900a3e93ebb2e86d53a93a5b4aa8bfbc3c71","title":"Telnyx Provider Guide","url":"/docs/getting-started/providers/telnyx","content":"Telnyx Provider Guide\n\nTelnyx is a Tier-2 catalog provider: its integration is one JSON file\n(src/lib/providers/catalog/telnyx.json) rather than hand-written code.\nThat file is the source of truth for this page.\n\nVerification status: this entry is docs-verified only, not yet\nlive-verified. Telnyx's GET /v2/ai/openai/models needs a key (it answers\nHTTP 401 without one), so the model ids come from Telnyx's public models page\nand the roster has not been checked. No account was created and no API key\nwas used to build this entry. evidence.liveMatrix is null until someone\nruns the live capability matrix with a real key (see\nVerification status below).\n\nKey Facts\nProvider id: telnyx\nProtocol: OpenAI-compatible (/chat/completions) — the\n Quickstart\n says \"The Inference API is OpenAI-compatible.\"\nBase URL: https://api.telnyx.com/v2/ai/openai\nDefault model: zai-org/GLM-5.3-Flash — NeuroLink default. The\n models page tags it\n \"(Recommended)\", and the Quickstart's first chat-completions example uses it\nModels in catalog: 9 — the nine chat models the models page lists on\n 2026-09-29\nStreaming: supported — the Quickstart's Streaming section says\n \"Server-sent events, same as OpenAI.\"\nTool calling: true — the\n Function Calling page\n says \"While we recommend you start with this model, every model in our API\n supports the tools interface.\"\nTools while streaming: true — the\n Streaming and Parallel Calls page\n shows a streamed chat completion with tools on zai-org/GLM-5.3-Flash\nStructured output: true — the\n JSON Mode page\n documents response_format with json_schema and with json_object\nStructured output + tools together: not declared (false) — no combined\n probe was run without credentials\nEmbeddings: not declared on this catalog entry. The models page lists\n three embedding models on POST /v2/ai/openai/embeddings, but NeuroLink's\n generic ConfiguredOpenAICompatProvider (which every Tier-2 catalog entry\n uses) does not implement embed()/embedMany(), so this flag tracks that,\n not the vendor's own API surface\nThinking: not declared — the\n Chat Completions reference\n documents reasoning_effort and the Quickstart documents a reasoning_content\n response field, but this entry sets no reasoning request parameter\nMax output tokens: models.defaultMaxOutputTokens is 8192, the\n max_tokens default the Chat Completions reference states. The reference also\n says \"Reasoning models consume this budget across reasoning and answer tokens\n combined.\"\nVision: each model's vision field is false, a placeholder for a\n boolean the catalog schema requires; it is not a vendor statement\nBilling: see Billing below\nKey format: none declared\n\nQuick Start\nGet an API key\nVisit: https://telnyx.com/sign-up and create a Telnyx account — the Inference API Quickstart (https://developers.telnyx.com/docs/inference/getting-started) lists a \"Telnyx account\" and an \"API Key\" under Prerequisites\nCreate an API key at https://portal.telnyx.com/#/app/auth/v2, the link the Quickstart gives for the API Key\nAuthentication is HTTP Bearer: the Service tiers page (https://developers.telnyx.com/docs/inference/service-tiers) shows a curl request to https://api.telnyx.com/v2/ai/openai/models with the header Authorization: Bearer $TELNYX_API_KEY\nBilling as the vendor states it: see Billing below\nSet TELNYX_API_KEY in your .env file (the docs' examples read TELNYX_API_KEY)\nConfigure\nUse it\n\nPer-request credentials work as they do for every provider:\n\nBilling\n\nbillingPolicy in the catalog file is recorded as unknown in the growth queue;\nthe catalog schema has no unknown value, so the file holds no-free-tier as a\nplaceholder. It is not a vendor statement of signup terms.\n\nWhat the vendor's pages say:\nThe Inference pricing page shows\n a plan named PAY AS YOU GO described as \"Standard rates. Card on file.\n Automatic tier discounts as usage crosses thresholds, no contract needed.\"\nThe docs pricing page\n says \"Pay-per-token. No minimums, no commitments.\" and points to\n telnyx.com/pricing/inference-api for current per-model pricing.\n\nModels\n\n| Model | Context | Vision | $/M in · out (cached) | Notes |\n| ------------------------------------ | ------- | ----------------- | -------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |\n| zai-org/GLM-5.3-Flash ⭐ | 1M | false placeholder | $0.135 / $0.450 (cached $0.027) | NeuroLink default. Best For \"Efficient multimodal coding and agentic workflows\", tagged \"(Recommended)\"; the Quickstart's example model. |\n| zai-org/GLM-5.3 | 1M | false placeholder | $1.250 / $4.000 (cached $0.240) | Fallback. Best For \"Complex coding and long-horizon agent tasks\"; pricing row \"GLM-5.3 — Flagship","hierarchy":{"lvl0":"Getting Started","lvl1":"Telnyx Provider Guide","lvl2":"","lvl3":""}},
|
|
6637
6637
|
{"objectID":"2045f8976971b0c3b654fdccf085704516ae3fc240255cc23b96e63687a27c53","title":"Telnyx Provider Guide","url":"/docs/getting-started/providers/telnyx#telnyx-provider-guide","content":"Telnyx is a Tier-2 catalog provider: its integration is one JSON file\n(src/lib/providers/catalog/telnyx.json) rather than hand-written code.\nThat file is the source of truth for this page.\n\nVerification status: this entry is docs-verified only, not yet\nlive-verified. Telnyx's GET /v2/ai/openai/models needs a key (it answers\nHTTP 401 without one), so the model ids come from Telnyx's public models page\nand the roster has not been checked. No account was created and no API key\nwas used to build this entry. evidence.liveMatrix is null until someone\nruns the live capability matrix with a real key (see\nVerification status below).","hierarchy":{"lvl0":"Getting Started","lvl1":"Telnyx Provider Guide","lvl2":"Telnyx Provider Guide","lvl3":""}},
|
|
6638
6638
|
{"objectID":"a92e959d3465234bc896cd925ce67f19f84cd5e3b96eb65b8a25b10ed56a9e1c","title":"Key Facts","url":"/docs/getting-started/providers/telnyx#key-facts","content":"Provider id: telnyx\nProtocol: OpenAI-compatible (/chat/completions) — the\n Quickstart\n says \"The Inference API is OpenAI-compatible.\"\nBase URL: https://api.telnyx.com/v2/ai/openai\nDefault model: zai-org/GLM-5.3-Flash — NeuroLink default. The\n models page tags it\n \"(Recommended)\", and the Quickstart's first chat-completions example uses it\nModels in catalog: 9 — the nine chat models the models page lists on\n 2026-09-29\nStreaming: supported — the Quickstart's Streaming section says\n \"Server-sent events, same as OpenAI.\"\nTool calling: true — the\n Function Calling page\n says \"While we recommend you start with this model, every model in our API\n supports the tools interface.\"\nTools while streaming: true — the\n Streaming and Parallel Calls page\n shows a streamed chat completion with tools on zai-org/GLM-5.3-Flash\nStructured output: true — the\n JSON Mode page\n documents response_format with json_schema and with json_object\nStructured output + tools together: not declared (false) — no combined\n probe was run without credentials\nEmbeddings: not declared on this catalog entry. The models page lists\n three embedding models on POST /v2/ai/openai/embeddings, but NeuroLink's\n generic ConfiguredOpenAICompatProvider (which every Tier-2 catalog entry\n uses) does not implement embed()/embedMany(), so this flag tracks that,\n not the vendor's own API surface\nThinking: not declared — the\n Chat Completions reference\n documents reasoning_effort and the Quickstart documents a reasoning_content\n response field, but this entry sets no reasoning request parameter\nMax output tokens: models.defaultMaxOutputTokens is 8192, the\n max_tokens default the Chat Completions reference states. The reference also\n says \"Reasoning models consume this budget across reasoning and answer tokens\n combined.\"","hierarchy":{"lvl0":"Getting Started","lvl1":"Telnyx Provider Guide","lvl2":"Key Facts","lvl3":""}},
|
|
6639
|
-
{"objectID":"6d63ef9dd34304f9672431ad4e381853fd33b34a945d6885be49691f41ccc1f4","title":"1. Get an API key","url":"/docs/getting-started/providers/telnyx#1-get-an-api-key","content":"Visit: https://telnyx.com/sign-up and create a Telnyx account — the Inference API Quickstart (https://developers.telnyx.com/docs/inference/getting-started) lists a \"Telnyx account\" and an \"API Key\" under Prerequisites\nCreate an API key at https://portal.telnyx.com/#/app/auth/v2, the link the Quickstart gives for the API Key\nAuthentication is HTTP Bearer: the Service tiers page (https://developers.telnyx.com/docs/inference/service-tiers) shows a curl request to https://api.telnyx.com/v2/ai/openai/models with the header Authorization: Bearer $
|
|
6639
|
+
{"objectID":"6d63ef9dd34304f9672431ad4e381853fd33b34a945d6885be49691f41ccc1f4","title":"1. Get an API key","url":"/docs/getting-started/providers/telnyx#1-get-an-api-key","content":"Visit: https://telnyx.com/sign-up and create a Telnyx account — the Inference API Quickstart (https://developers.telnyx.com/docs/inference/getting-started) lists a \"Telnyx account\" and an \"API Key\" under Prerequisites\nCreate an API key at https://portal.telnyx.com/#/app/auth/v2, the link the Quickstart gives for the API Key\nAuthentication is HTTP Bearer: the Service tiers page (https://developers.telnyx.com/docs/inference/service-tiers) shows a curl request to https://api.telnyx.com/v2/ai/openai/models with the header Authorization: Bearer $TELNYX_API_KEY\nBilling as the vendor states it: see Billing below\nSet TELNYX_API_KEY in your .env file (the docs' examples read TELNYX_API_KEY)","hierarchy":{"lvl0":"Getting Started","lvl1":"Telnyx Provider Guide","lvl2":"1. Get an API key","lvl3":""}},
|
|
6640
6640
|
{"objectID":"8b299896b4623945cea7aeb783599ef60f8d67a8f61fe8d862e1cfb7db476670","title":"2. Configure","url":"/docs/getting-started/providers/telnyx#2-configure","content":"2. Configure","hierarchy":{"lvl0":"Getting Started","lvl1":"Telnyx Provider Guide","lvl2":"2. Configure","lvl3":""}},
|
|
6641
6641
|
{"objectID":"456ef8325b76a46baf8298e328deeea262fff2e201efde3b7623ff5fece4ba6d","title":"3. Use it","url":"/docs/getting-started/providers/telnyx#3-use-it","content":"Per-request credentials work as they do for every provider:","hierarchy":{"lvl0":"Getting Started","lvl1":"Telnyx Provider Guide","lvl2":"3. Use it","lvl3":""}},
|
|
6642
6642
|
{"objectID":"5d538d5574bcf7709655425807ee2cdf19460cbceb53f5099bf22c9891b03d57","title":"Billing","url":"/docs/getting-started/providers/telnyx#billing","content":"billingPolicy in the catalog file is recorded as unknown in the growth queue;\nthe catalog schema has no unknown value, so the file holds no-free-tier as a\nplaceholder. It is not a vendor statement of signup terms.\n\nWhat the vendor's pages say:\nThe Inference pricing page shows\n a plan named PAY AS YOU GO described as \"Standard rates. Card on file.\n Automatic tier discounts as usage crosses thresholds, no contract needed.\"\nThe docs pricing page\n says \"Pay-per-token. No minimums, no commitments.\" and points to\n telnyx.com/pricing/inference-api for current per-model pricing.","hierarchy":{"lvl0":"Getting Started","lvl1":"Telnyx Provider Guide","lvl2":"Billing","lvl3":""}},
|
|
@@ -6644,10 +6644,10 @@
|
|
|
6644
6644
|
{"objectID":"9e77dc1ef1b51ccf04d1e12bc2e7b0f16c1096e7d911a5721ef4840bb9204603","title":"Verification status","url":"/docs/getting-started/providers/telnyx#verification-status","content":"Tier-2 onboarding requires evidence before a provider is accepted, and\npnpm run verify:provider-onboarding gates it in CI. This is what the catalog\ncurrently records for Telnyx — docs-verified only, not live-verified:\n\n| Probe | Result |\n| ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Roster | unauthenticated GET https://api.telnyx.com/v2/ai/openai/models answers HTTP 401 without a key, 2026-09-29; model ids come from the models page and the roster has not been checked |\n| Auth-failure shape | unauthenticated GET /models: HTTP 401, header www-authenticate: Bearer resource_metadata=\"https://api.telnyx.com/.well-known/oauth-protected-resource\", JSON body errors[0] code 10009, title \"Authentication failed\",","hierarchy":{"lvl0":"Getting Started","lvl1":"Telnyx Provider Guide","lvl2":"Verification status","lvl3":""}},
|
|
6645
6645
|
{"objectID":"187152fc0334489ad01d53fd30b301f5299221b59baaf65f6a6252e46199f5c7","title":"Troubleshooting","url":"/docs/getting-started/providers/telnyx#troubleshooting","content":"| Symptom | Cause | Fix |\n| --------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------ |\n| HTTP 401, code 10009 | Telnyx's error catalog describes 10009 \"Authentication failed\" as \"The required authentication headers were either invalid or not included in the request.\" | Set TELNYX_API_KEY; the docs' examples read the same variable |\n| Structured output ignored with tools attached | structuredOutputWithTools is false on this entry — untested combination | NeuroLink omits response_format automatically whenever tools are present, before sending |","hierarchy":{"lvl0":"Getting Started","lvl1":"Telnyx Provider Guide","lvl2":"Troubleshooting","lvl3":""}},
|
|
6646
6646
|
{"objectID":"b9ba1cd5a30c554c43b28f72773e3f5f2c3050d8f0843d29db257388f9d074a3","title":"See also","url":"/docs/getting-started/providers/telnyx#see-also","content":"Provider setup overview\nAll providers\nTier-2 onboarding — how this provider's JSON becomes a working integration\nProvider feature compatibility","hierarchy":{"lvl0":"Getting Started","lvl1":"Telnyx Provider Guide","lvl2":"See also","lvl3":""}},
|
|
6647
|
-
{"objectID":"615902293f44b0c3e4f6cf153b2c2b02fc4d6a158fa2c002cd289ac8cad1754f","title":"Thinking Machines Provider Guide","url":"/docs/getting-started/providers/thinking-machines","content":"Thinking Machines Provider Guide\n\nThinking Machines is a Tier-2 catalog provider: OpenAI-wire-compatible with\nno behavioural quirks, so its entire integration is one JSON file\n(src/lib/providers/catalog/thinking-machines.json) rather than hand-written\ncode. That file is the source of truth for everything on this page.\n\nVerification status: this entry is docs-verified only, not yet\nlive-verified. The vendor's GET /models needs a key (an unauthenticated\nGET answered HTTP 401), so the model ids come from the vendor's public\nModels & Pricing page\nand the roster has not been checked. No API key was created or used to build\nthis entry. evidence.liveMatrix is null until someone runs the live\ncapability matrix with a real key (see\nVerification status below).\n\nKey Facts\nProvider id: thinking-machines (alias tinker)\nProtocol: OpenAI-compatible (/chat/completions). The vendor's\n OpenAI-compatible page\n is titled \"OpenAI API Compatible Inference (in beta)\" and says \"We support\n both /completions and /chat/completions endpoints.\"\nBase URL: https://tinker.thinkingmachines.dev/services/tinker-prod/oai/api/v1\nDefault model: moonshotai/Kimi-K2.6\nModels in catalog: 12 rows of the Training table on the\n Models & Pricing page,\n listed under Models\nVendor scope statement: \"Currently, OpenAI-compatible inference is meant\n for testing and internal use with low internal traffic, rather than large,\n high-throughput, user-facing deployments.\" (OpenAI-compatible page)\nStreaming: true — the OpenAI-compatible page says \"In streaming mode,\n reasoning_content and content arrive on separate SSE events\"\nThinking: true — the OpenAI-compatible page documents a separate_reasoning\n flag and a reasoning_effort parameter on /chat/completions, and says of\n the latter \"Not all models support this parameter.\"\nTool calling: not declared (false). With false, the provider's\n supportsTools() answers false, so no tools array is sent\nStructured output: not declared (false)\nStructured output + tools together: not declared (false) — no POST\n request was sent\nEmbeddings: not declared (false)\nBilling: the catalog field holds no-free-tier, a schema placeholder (the\n schema has no unknown value), not a vendor statement; see\n Billing for what the vendor says\nKey format: none declared, so NeuroLink applies no key-format check\n\nQuick Start\nGet an API key\nVisit: https://tinker.thinkingmachines.ai/keys — the Quickstart says \"Or create an API key in the Tinker Console and set it as the
|
|
6647
|
+
{"objectID":"615902293f44b0c3e4f6cf153b2c2b02fc4d6a158fa2c002cd289ac8cad1754f","title":"Thinking Machines Provider Guide","url":"/docs/getting-started/providers/thinking-machines","content":"Thinking Machines Provider Guide\n\nThinking Machines is a Tier-2 catalog provider: OpenAI-wire-compatible with\nno behavioural quirks, so its entire integration is one JSON file\n(src/lib/providers/catalog/thinking-machines.json) rather than hand-written\ncode. That file is the source of truth for everything on this page.\n\nVerification status: this entry is docs-verified only, not yet\nlive-verified. The vendor's GET /models needs a key (an unauthenticated\nGET answered HTTP 401), so the model ids come from the vendor's public\nModels & Pricing page\nand the roster has not been checked. No API key was created or used to build\nthis entry. evidence.liveMatrix is null until someone runs the live\ncapability matrix with a real key (see\nVerification status below).\n\nKey Facts\nProvider id: thinking-machines (alias tinker)\nProtocol: OpenAI-compatible (/chat/completions). The vendor's\n OpenAI-compatible page\n is titled \"OpenAI API Compatible Inference (in beta)\" and says \"We support\n both /completions and /chat/completions endpoints.\"\nBase URL: https://tinker.thinkingmachines.dev/services/tinker-prod/oai/api/v1\nDefault model: moonshotai/Kimi-K2.6\nModels in catalog: 12 rows of the Training table on the\n Models & Pricing page,\n listed under Models\nVendor scope statement: \"Currently, OpenAI-compatible inference is meant\n for testing and internal use with low internal traffic, rather than large,\n high-throughput, user-facing deployments.\" (OpenAI-compatible page)\nStreaming: true — the OpenAI-compatible page says \"In streaming mode,\n reasoning_content and content arrive on separate SSE events\"\nThinking: true — the OpenAI-compatible page documents a separate_reasoning\n flag and a reasoning_effort parameter on /chat/completions, and says of\n the latter \"Not all models support this parameter.\"\nTool calling: not declared (false). With false, the provider's\n supportsTools() answers false, so no tools array is sent\nStructured output: not declared (false)\nStructured output + tools together: not declared (false) — no POST\n request was sent\nEmbeddings: not declared (false)\nBilling: the catalog field holds no-free-tier, a schema placeholder (the\n schema has no unknown value), not a vendor statement; see\n Billing for what the vendor says\nKey format: none declared, so NeuroLink applies no key-format check\n\nQuick Start\nGet an API key\nVisit: https://tinker.thinkingmachines.ai/keys — the Quickstart says \"Or create an API key in the Tinker Console and set it as the TINKER_API_KEY environment variable.\" An unauthenticated GET of that URL redirects to a page titled \"Sign in\" (sign-in was not attempted while building this entry)\nAuthentication as the vendor states it: the OpenAI-compatible page says \"Authenticate with your Tinker API key, by passing the same key used for Tinker as the API key to the OpenAI client.\" Its code example reads the key from TINKER_API_KEY\nBilling as the vendor states it: see Billing\nSet THINKING_MACHINES_API_KEY in your .env file (the vendor's examples read TINKER_API_KEY, which NeuroLink accepts as a fallback)\nConfigure\nUse it\n\nPer-request credentials work as they do for every provider:\n\nSampler checkpoints\n\nThe OpenAI-compatible page says \"Use a Tinker sampler weight path as the model\nname.\" and shows a path that begins with tinker://. A tinker:// path passed\nas model is an id outside the catalog, so it uses models.defaultContextWindow\n(32768) and models.defaultMaxOutputTokens (8192).\n\nBilling\n\nThe vendor's Quickstart says: \"Set up payment info in Billing, and see Models &\nPricing for current training and sampling rates.\" The Billing link goes to\nhttps://tinker.thinkingmachines.ai/billing/; an unauthenticated GET of it\nredirects to the same \"Sign in\" page as the keys URL. The Models & Pricing page\nsays \"All prices are per million tokens.\" The catalog's billingPolicy field\nholds no-free-tier only because the schema requires one of three values; it is\nnot a vendor statement.\n\nModels\n\n| Model | Context | Vision | $/M in · out (cached in) | Vendor type | Notes |\n| ----------------------------------------------- | ------- | ------------ | ------------------------ | --------------- | --------------------------------------------------------------------------------------------------------- |\n| moonshotai/Kimi-K2.6 ⭐ | 32,768 | not declared | $2.205 / $5.49 ($0.441) | Hybrid + Vision | NeuroLink default. Named in the OpenCode tutorial's \"Using a base model (no fine-tuning)\" section. |\n| Qwen/Qwen3.8-27B | 65,536 | not declared | $1.86 / $5.595 ($0.372) | Hybrid + Vision | Fallback. Listed under \"Recommended replacement\" for Qwen3.6-27B. |\n| Qwen/Qwen3.6-35B-A3B | 65,536 | not declared | $0.54 / $1.335 ($0.108) | Hybrid + Vision | Listed un","hierarchy":{"lvl0":"Getting Started","lvl1":"Thinking Machines Provider Guide","lvl2":"","lvl3":""}},
|
|
6648
6648
|
{"objectID":"6d59bfa41822835f383ed2f1ed3d1dd299e6385816b3945d59736671204f4d53","title":"Thinking Machines Provider Guide","url":"/docs/getting-started/providers/thinking-machines#thinking-machines-provider-guide","content":"Thinking Machines is a Tier-2 catalog provider: OpenAI-wire-compatible with\nno behavioural quirks, so its entire integration is one JSON file\n(src/lib/providers/catalog/thinking-machines.json) rather than hand-written\ncode. That file is the source of truth for everything on this page.\n\nVerification status: this entry is docs-verified only, not yet\nlive-verified. The vendor's GET /models needs a key (an unauthenticated\nGET answered HTTP 401), so the model ids come from the vendor's public\nModels & Pricing page\nand the roster has not been checked. No API key was created or used to build\nthis entry. evidence.liveMatrix is null until someone runs the live\ncapability matrix with a real key (see\nVerification status below).","hierarchy":{"lvl0":"Getting Started","lvl1":"Thinking Machines Provider Guide","lvl2":"Thinking Machines Provider Guide","lvl3":""}},
|
|
6649
6649
|
{"objectID":"7b4679c9d473ec51dd9dbd783af3a55769da6816099c1fb1eb1fc39291327741","title":"Key Facts","url":"/docs/getting-started/providers/thinking-machines#key-facts","content":"Provider id: thinking-machines (alias tinker)\nProtocol: OpenAI-compatible (/chat/completions). The vendor's\n OpenAI-compatible page\n is titled \"OpenAI API Compatible Inference (in beta)\" and says \"We support\n both /completions and /chat/completions endpoints.\"\nBase URL: https://tinker.thinkingmachines.dev/services/tinker-prod/oai/api/v1\nDefault model: moonshotai/Kimi-K2.6\nModels in catalog: 12 rows of the Training table on the\n Models & Pricing page,\n listed under Models\nVendor scope statement: \"Currently, OpenAI-compatible inference is meant\n for testing and internal use with low internal traffic, rather than large,\n high-throughput, user-facing deployments.\" (OpenAI-compatible page)\nStreaming: true — the OpenAI-compatible page says \"In streaming mode,\n reasoning_content and content arrive on separate SSE events\"\nThinking: true — the OpenAI-compatible page documents a separate_reasoning\n flag and a reasoning_effort parameter on /chat/completions, and says of\n the latter \"Not all models support this parameter.\"\nTool calling: not declared (false). With false, the provider's\n supportsTools() answers false, so no tools array is sent\nStructured output: not declared (false)\nStructured output + tools together: not declared (false) — no POST\n request was sent\nEmbeddings: not declared (false)\nBilling: the catalog field holds no-free-tier, a schema placeholder (the\n schema has no unknown value), not a vendor statement; see\n Billing for what the vendor says\nKey format: none declared, so NeuroLink applies no key-format check","hierarchy":{"lvl0":"Getting Started","lvl1":"Thinking Machines Provider Guide","lvl2":"Key Facts","lvl3":""}},
|
|
6650
|
-
{"objectID":"cb6b793f646bed3982640d587e2f087a400d2bae90dbf500a4216a879dc8f685","title":"1. Get an API key","url":"/docs/getting-started/providers/thinking-machines#1-get-an-api-key","content":"Visit: https://tinker.thinkingmachines.ai/keys — the Quickstart says \"Or create an API key in the Tinker Console and set it as the
|
|
6650
|
+
{"objectID":"cb6b793f646bed3982640d587e2f087a400d2bae90dbf500a4216a879dc8f685","title":"1. Get an API key","url":"/docs/getting-started/providers/thinking-machines#1-get-an-api-key","content":"Visit: https://tinker.thinkingmachines.ai/keys — the Quickstart says \"Or create an API key in the Tinker Console and set it as the TINKER_API_KEY environment variable.\" An unauthenticated GET of that URL redirects to a page titled \"Sign in\" (sign-in was not attempted while building this entry)\nAuthentication as the vendor states it: the OpenAI-compatible page says \"Authenticate with your Tinker API key, by passing the same key used for Tinker as the API key to the OpenAI client.\" Its code example reads the key from TINKER_API_KEY\nBilling as the vendor states it: see Billing\nSet THINKING_MACHINES_API_KEY in your .env file (the vendor's examples read TINKER_API_KEY, which NeuroLink accepts as a fallback)","hierarchy":{"lvl0":"Getting Started","lvl1":"Thinking Machines Provider Guide","lvl2":"1. Get an API key","lvl3":""}},
|
|
6651
6651
|
{"objectID":"1512cb8d8ca41420e4a3a70bba13b981c169aa9f3be4a4f0eff6626f87d3d199","title":"2. Configure","url":"/docs/getting-started/providers/thinking-machines#2-configure","content":"2. Configure","hierarchy":{"lvl0":"Getting Started","lvl1":"Thinking Machines Provider Guide","lvl2":"2. Configure","lvl3":""}},
|
|
6652
6652
|
{"objectID":"081c89917e6dab39380a1a8ed7231f2f232f81ca6136dc3329ee37ed3ccc9dbf","title":"3. Use it","url":"/docs/getting-started/providers/thinking-machines#3-use-it","content":"Per-request credentials work as they do for every provider:","hierarchy":{"lvl0":"Getting Started","lvl1":"Thinking Machines Provider Guide","lvl2":"3. Use it","lvl3":""}},
|
|
6653
6653
|
{"objectID":"7c9d836127ef604489927114abdfc9f7d66ec38438ef41167f72336b954edd6b","title":"Sampler checkpoints","url":"/docs/getting-started/providers/thinking-machines#sampler-checkpoints","content":"The OpenAI-compatible page says \"Use a Tinker sampler weight path as the model\nname.\" and shows a path that begins with tinker://. A tinker:// path passed\nas model is an id outside the catalog, so it uses models.defaultContextWindow\n(32768) and models.defaultMaxOutputTokens (8192).","hierarchy":{"lvl0":"Getting Started","lvl1":"Thinking Machines Provider Guide","lvl2":"Sampler checkpoints","lvl3":""}},
|
|
@@ -6656,10 +6656,10 @@
|
|
|
6656
6656
|
{"objectID":"c58fa10816d9a9f4b7c94d1a8b876b284a6b87833b72b2588cd643568676c371","title":"Verification status","url":"/docs/getting-started/providers/thinking-machines#verification-status","content":"Tier-2 onboarding requires evidence before a provider is accepted, and\npnpm run verify:provider-onboarding gates it in CI. This is what the\ncatalog currently records for Thinking Machines — docs-verified only, not\nlive-verified:\n\n| Probe | Result |\n| ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n| Roster | unauthenticated GET /models answers HTTP 401 without a key (2026-09-29), so the twelve model ids are taken from the Models & Pricing page and the roster has not been checked |\n| Endpoint shape | unauthenticated GET /chat/completions answered HTTP 405 with header allow: POST and body {\"detail\":\"Method Not Allowed\"}; the base URL itself answered HTTP 404 with body {\"detail\":\"Not Found\"}; no POST request was sent |\n| Auth-failure shape | unauthenticated GET /models answered HTTP 401, content-type application/json, body {\"detail\":\"X-Api-Key token is empty\"}; the body has no code field, so no code is recorded and errorRules holds one rule, for status 401 |\n| Billing | the Quickstart's Billing section, quoted under Billing; no signup was performed |\n| Tools / structured output | not declared; no POST request was sent — structuredOutputWithTools stays false","hierarchy":{"lvl0":"Getting Started","lvl1":"Thinking Machines Provider Guide","lvl2":"Verification status","lvl3":""}},
|
|
6657
6657
|
{"objectID":"a333dba919b426ab885447d39bbb6fbaaec6a51acaa5778c9866b3c753ae7914","title":"Troubleshooting","url":"/docs/getting-started/providers/thinking-machines#troubleshooting","content":"Each row below is a statement from the vendor's own pages.\n\n| Symptom | What the vendor says | Source |\n| ----------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------ |\n| HTTP 400 when a request sets reasoning_effort | \"Not all models support this parameter. Requests against a model that doesn't support it return HTTP 400.\" | OpenAI-compatible page |\n| Reasoning trace missing from content | \"separate_reasoning defaults to true; set it to false to keep the reasoning trace inlined in content.\" | OpenAI-compatible page |\n| Prompt formatting differs from the checkpoint | On /chat/completions \"the server renders them with the model’s default Hugging Face chat template\"; \"If your checkpoint expects a different renderer, render the prompt to token IDs yourself\" | OpenAI-compatible page |\n| Latency or throughput varies | \"Latency and throughput may vary by model and may change without notice during the beta.\" and \"If you need higher or more stable throughput, contact the Tinker team in our Discord for guidance on larger-scale setups.\"","hierarchy":{"lvl0":"Getting Started","lvl1":"Thinking Machines Provider Guide","lvl2":"Troubleshooting","lvl3":""}},
|
|
6658
6658
|
{"objectID":"08dc3a265ca7fd4eefbfc00ba41e61832e547e173b87b05534ab249df374611d","title":"See also","url":"/docs/getting-started/providers/thinking-machines#see-also","content":"Provider setup overview\nAll providers\nTier-2 onboarding — how this provider's JSON becomes a working integration\nProvider feature compatibility","hierarchy":{"lvl0":"Getting Started","lvl1":"Thinking Machines Provider Guide","lvl2":"See also","lvl3":""}},
|
|
6659
|
-
{"objectID":"823f5e16f43c75de89ea1f12d99dd4ca0e84299fe2372730cbc3d17169a00417","title":"Tinfoil Provider Guide","url":"/docs/getting-started/providers/tinfoil","content":"Tinfoil Provider Guide\n\nTinfoil is a Tier-2 catalog provider: its integration is one JSON file\n(src/lib/providers/catalog/tinfoil.json) rather than hand-written code.\nThat file is the source of truth for this page.\n\nVerification status: this entry is docs- and roster-verified, not yet\nlive-verified. The fields below come from Tinfoil's own public pages and\ntwo unauthenticated GET requests (/v1/models and /v1/chat/completions) —\nno account was created and no API key was used to build it.\nevidence.liveMatrix is null until someone runs the live capability matrix\nwith a real key (see Verification status below).\n\nKey Facts\nProvider id: tinfoil (no alias)\nProtocol: OpenAI-compatible (/chat/completions). The homepage says\n \"Our API is OpenAI-compatible, open-source, and fully verifiable.\"\n (tinfoil.sh) and the chat models page says \"Chat models\n use the OpenAI chat completions API.\"\n (docs)\nBase URL: https://inference.tinfoil.sh/v1\nDefault model: kimi-k3\nModels in catalog: 7 (the seven entries whose roster type is chat,\n taken from a 17-entry roster)\nStreaming: supported — the structured outputs guide shows a request with\n stream=True that reads chunk.choices[0].delta.content, under the heading\n \"Enable Streaming for Large Responses\"\n (docs)\nTool calling: supported (true) — the tool-calling guide documents\n function calling (docs), and\n the roster's tool_calling field is true on the seven catalog models\nTools while streaming: not declared (false) — no combined\n tools-and-streaming request was sent (no credentials were used)\nStructured output: supported — the structured outputs guide documents a\n response_format of type json_schema\n (docs), and the seven\n chat model cards carry a \"Structured Outputs\" line\n (docs)\nStructured output + tools together: not declared (false) — no\n combined probe was run without credentials\nEmbeddings: not declared (false) on this catalog entry. The roster lists\n nomic-embed-text with type embedding\n (docs); it is not one of the seven\n catalog models\nThinking: declared (true) — the reasoning guide documents a\n reasoning_effort request parameter and says the model's thinking is returned\n in the reasoning field of the response message\n (docs); the accepted values differ\n by model (see Reasoning effort)\nVision: four catalog models (kimi-k3, gemma4-31b, glm-5-3-flash,\n deepseek-v4-1-flash) — see Models\nBilling: free-with-card — see Billing below\nKey format: none validated (apiKeyFormat is null)\nConnection security: NeuroLink calls the endpoint directly over HTTPS —\n see Direct HTTPS access\n\nQuick Start\nGet an API key\nVisit: https://dash.tinfoil.sh?tab=api-keys and sign in or sign up — https://docs.tinfoil.sh/get-api-key says \"Create an account with your email or one of the social connections.\"\nOn the dashboard Products page, click Activate on the Private Inference card. Per https://docs.tinfoil.sh/get-api-key, if no payment method is on file you are redirected to a checkout page to enter your card details, and \"You’re only charged based on usage.\"\nThe activation dialog creates a \"Default API key\" and, per the same page, \"adds $1 in API credits to your account\"; additional keys are created from API Keys in the sidebar\nSet TINFOIL_API_KEY in your .env file (the examples on https://docs.tinfoil.sh/quickstart read
|
|
6659
|
+
{"objectID":"823f5e16f43c75de89ea1f12d99dd4ca0e84299fe2372730cbc3d17169a00417","title":"Tinfoil Provider Guide","url":"/docs/getting-started/providers/tinfoil","content":"Tinfoil Provider Guide\n\nTinfoil is a Tier-2 catalog provider: its integration is one JSON file\n(src/lib/providers/catalog/tinfoil.json) rather than hand-written code.\nThat file is the source of truth for this page.\n\nVerification status: this entry is docs- and roster-verified, not yet\nlive-verified. The fields below come from Tinfoil's own public pages and\ntwo unauthenticated GET requests (/v1/models and /v1/chat/completions) —\nno account was created and no API key was used to build it.\nevidence.liveMatrix is null until someone runs the live capability matrix\nwith a real key (see Verification status below).\n\nKey Facts\nProvider id: tinfoil (no alias)\nProtocol: OpenAI-compatible (/chat/completions). The homepage says\n \"Our API is OpenAI-compatible, open-source, and fully verifiable.\"\n (tinfoil.sh) and the chat models page says \"Chat models\n use the OpenAI chat completions API.\"\n (docs)\nBase URL: https://inference.tinfoil.sh/v1\nDefault model: kimi-k3\nModels in catalog: 7 (the seven entries whose roster type is chat,\n taken from a 17-entry roster)\nStreaming: supported — the structured outputs guide shows a request with\n stream=True that reads chunk.choices[0].delta.content, under the heading\n \"Enable Streaming for Large Responses\"\n (docs)\nTool calling: supported (true) — the tool-calling guide documents\n function calling (docs), and\n the roster's tool_calling field is true on the seven catalog models\nTools while streaming: not declared (false) — no combined\n tools-and-streaming request was sent (no credentials were used)\nStructured output: supported — the structured outputs guide documents a\n response_format of type json_schema\n (docs), and the seven\n chat model cards carry a \"Structured Outputs\" line\n (docs)\nStructured output + tools together: not declared (false) — no\n combined probe was run without credentials\nEmbeddings: not declared (false) on this catalog entry. The roster lists\n nomic-embed-text with type embedding\n (docs); it is not one of the seven\n catalog models\nThinking: declared (true) — the reasoning guide documents a\n reasoning_effort request parameter and says the model's thinking is returned\n in the reasoning field of the response message\n (docs); the accepted values differ\n by model (see Reasoning effort)\nVision: four catalog models (kimi-k3, gemma4-31b, glm-5-3-flash,\n deepseek-v4-1-flash) — see Models\nBilling: free-with-card — see Billing below\nKey format: none validated (apiKeyFormat is null)\nConnection security: NeuroLink calls the endpoint directly over HTTPS —\n see Direct HTTPS access\n\nQuick Start\nGet an API key\nVisit: https://dash.tinfoil.sh?tab=api-keys and sign in or sign up — https://docs.tinfoil.sh/get-api-key says \"Create an account with your email or one of the social connections.\"\nOn the dashboard Products page, click Activate on the Private Inference card. Per https://docs.tinfoil.sh/get-api-key, if no payment method is on file you are redirected to a checkout page to enter your card details, and \"You’re only charged based on usage.\"\nThe activation dialog creates a \"Default API key\" and, per the same page, \"adds $1 in API credits to your account\"; additional keys are created from API Keys in the sidebar\nSet TINFOIL_API_KEY in your .env file (the examples on https://docs.tinfoil.sh/quickstart read TINFOIL_API_KEY)\nNeuroLink sends requests straight to https://inference.tinfoil.sh/v1. https://docs.tinfoil.sh/sdk/direct-api-access says \"but this is not recommended in production\" and \"Direct access skips the automatic attestation verification our SDKs perform\". https://docs.tinfoil.sh/local-proxy/cli documents a local proxy that verifies enclave attestations and serves http://127.0.0.1:3301/v1 for OpenAI-compatible clients (not exercised with NeuroLink)\nConfigure\nUse it\n\nPer-request credentials work as they do for the other catalog providers:\n\nDirect HTTPS access\n\nThe catalog's base URL, https://inference.tinfoil.sh/v1, is the endpoint the\nTinfoil docs call \"direct\" access. The docs page for it\n(Direct API Access) says \"but\nthis is not recommended in production\" and \"Direct access skips the automatic\nattestation verification our SDKs perform, so you have no cryptographic proof\nyour data is processed in a secure enclave and no protection against\nman-in-the-middle attacks.\" It also says \"We maintain direct HTTPS\ncompatibility for debugging and simple testing (e.g., inference requests via\ncURL).\"\n\nThe coding-agents tutorial says \"OpenAI-compatible clients don’t perform\nconnection-time attestation themselves.\"\n(docs) and the\nTinfoil Proxy CLI page describes a\nlocal proxy that listens on http://127.0.0.1:3301, verifies the enclave's\nattestation, and takes that address as the base URL for any OpenAI-compatible\nclient. Pointing TINFOIL_BASE_URL at it follows those docs; NeuroLink through\nthat proxy was not exercised.\n\nBilling\n\nTinfoil's key guide (docs) describes the\nflow: sign up, click Activate on the Private Inference card, enter card details\nat checkout when no ","hierarchy":{"lvl0":"Getting Started","lvl1":"Tinfoil Provider Guide","lvl2":"","lvl3":""}},
|
|
6660
6660
|
{"objectID":"553cdc414eaa87c755098d10deaaadad4af926e106a7330741e0c44d7352308d","title":"Tinfoil Provider Guide","url":"/docs/getting-started/providers/tinfoil#tinfoil-provider-guide","content":"Tinfoil is a Tier-2 catalog provider: its integration is one JSON file\n(src/lib/providers/catalog/tinfoil.json) rather than hand-written code.\nThat file is the source of truth for this page.\n\nVerification status: this entry is docs- and roster-verified, not yet\nlive-verified. The fields below come from Tinfoil's own public pages and\ntwo unauthenticated GET requests (/v1/models and /v1/chat/completions) —\nno account was created and no API key was used to build it.\nevidence.liveMatrix is null until someone runs the live capability matrix\nwith a real key (see Verification status below).","hierarchy":{"lvl0":"Getting Started","lvl1":"Tinfoil Provider Guide","lvl2":"Tinfoil Provider Guide","lvl3":""}},
|
|
6661
6661
|
{"objectID":"59d2d8b0523c0312969cc9fd6bae755b259f60fdfdad2912f120e07be9818836","title":"Key Facts","url":"/docs/getting-started/providers/tinfoil#key-facts","content":"Provider id: tinfoil (no alias)\nProtocol: OpenAI-compatible (/chat/completions). The homepage says\n \"Our API is OpenAI-compatible, open-source, and fully verifiable.\"\n (tinfoil.sh) and the chat models page says \"Chat models\n use the OpenAI chat completions API.\"\n (docs)\nBase URL: https://inference.tinfoil.sh/v1\nDefault model: kimi-k3\nModels in catalog: 7 (the seven entries whose roster type is chat,\n taken from a 17-entry roster)\nStreaming: supported — the structured outputs guide shows a request with\n stream=True that reads chunk.choices[0].delta.content, under the heading\n \"Enable Streaming for Large Responses\"\n (docs)\nTool calling: supported (true) — the tool-calling guide documents\n function calling (docs), and\n the roster's tool_calling field is true on the seven catalog models\nTools while streaming: not declared (false) — no combined\n tools-and-streaming request was sent (no credentials were used)\nStructured output: supported — the structured outputs guide documents a\n response_format of type json_schema\n (docs), and the seven\n chat model cards carry a \"Structured Outputs\" line\n (docs)\nStructured output + tools together: not declared (false) — no\n combined probe was run without credentials\nEmbeddings: not declared (false) on this catalog entry. The roster lists\n nomic-embed-text with type embedding\n (docs); it is not one of the seven\n catalog models\nThinking: declared (true) — the reasoning guide documents a\n reasoning_effort request parameter and says the model's thinking is returned\n in the reasoning field of the response message\n (docs); the accepted values differ\n by model (see Reasoning effort)\nVision: four catalog models (kimi-k3, gemma4-31b, glm-5-3-flash,\n deepseek-v4-1-flash) — see Models\nBilling: free-with-card — see Billing below\nKey format: none validated (apiKeyFormat is null)\nConnection security: NeuroLink calls the endpoint directly over HTTPS —\n see Direct HTTPS access","hierarchy":{"lvl0":"Getting Started","lvl1":"Tinfoil Provider Guide","lvl2":"Key Facts","lvl3":""}},
|
|
6662
|
-
{"objectID":"64eeac36b5ae35215cc28ff72e49b7b092d03750bf91d76bac0c923b60ec5be1","title":"1. Get an API key","url":"/docs/getting-started/providers/tinfoil#1-get-an-api-key","content":"Visit: https://dash.tinfoil.sh?tab=api-keys and sign in or sign up — https://docs.tinfoil.sh/get-api-key says \"Create an account with your email or one of the social connections.\"\nOn the dashboard Products page, click Activate on the Private Inference card. Per https://docs.tinfoil.sh/get-api-key, if no payment method is on file you are redirected to a checkout page to enter your card details, and \"You’re only charged based on usage.\"\nThe activation dialog creates a \"Default API key\" and, per the same page, \"adds $1 in API credits to your account\"; additional keys are created from API Keys in the sidebar\nSet TINFOIL_API_KEY in your .env file (the examples on https://docs.tinfoil.sh/quickstart read
|
|
6662
|
+
{"objectID":"64eeac36b5ae35215cc28ff72e49b7b092d03750bf91d76bac0c923b60ec5be1","title":"1. Get an API key","url":"/docs/getting-started/providers/tinfoil#1-get-an-api-key","content":"Visit: https://dash.tinfoil.sh?tab=api-keys and sign in or sign up — https://docs.tinfoil.sh/get-api-key says \"Create an account with your email or one of the social connections.\"\nOn the dashboard Products page, click Activate on the Private Inference card. Per https://docs.tinfoil.sh/get-api-key, if no payment method is on file you are redirected to a checkout page to enter your card details, and \"You’re only charged based on usage.\"\nThe activation dialog creates a \"Default API key\" and, per the same page, \"adds $1 in API credits to your account\"; additional keys are created from API Keys in the sidebar\nSet TINFOIL_API_KEY in your .env file (the examples on https://docs.tinfoil.sh/quickstart read TINFOIL_API_KEY)\nNeuroLink sends requests straight to https://inference.tinfoil.sh/v1. https://docs.tinfoil.sh/sdk/direct-api-access says \"but this is not recommended in production\" and \"Direct access skips the automatic attestation verification our SDKs perform\". https://docs.tinfoil.sh/local-proxy/cli documents a local proxy that verifies enclave attestations and serves http://127.0.0.1:3301/v1 for OpenAI-compatible clients (not exercised with NeuroLink)","hierarchy":{"lvl0":"Getting Started","lvl1":"Tinfoil Provider Guide","lvl2":"1. Get an API key","lvl3":""}},
|
|
6663
6663
|
{"objectID":"738e16a81a387dee3ef27e7122f1fe56ea6dec9a8c5bac5483186212da715d8b","title":"2. Configure","url":"/docs/getting-started/providers/tinfoil#2-configure","content":"2. Configure","hierarchy":{"lvl0":"Getting Started","lvl1":"Tinfoil Provider Guide","lvl2":"2. Configure","lvl3":""}},
|
|
6664
6664
|
{"objectID":"e77ccbe5289fedd27b75acc8d00d8a41f635687137d6f843b39239419a3879d3","title":"3. Use it","url":"/docs/getting-started/providers/tinfoil#3-use-it","content":"Per-request credentials work as they do for the other catalog providers:","hierarchy":{"lvl0":"Getting Started","lvl1":"Tinfoil Provider Guide","lvl2":"3. Use it","lvl3":""}},
|
|
6665
6665
|
{"objectID":"34cea170933e2d95eb131d757c636b548cde978ed07e255ed9860eb749127880","title":"Direct HTTPS access","url":"/docs/getting-started/providers/tinfoil#direct-https-access","content":"The catalog's base URL, https://inference.tinfoil.sh/v1, is the endpoint the\nTinfoil docs call \"direct\" access. The docs page for it\n(Direct API Access) says \"but\nthis is not recommended in production\" and \"Direct access skips the automatic\nattestation verification our SDKs perform, so you have no cryptographic proof\nyour data is processed in a secure enclave and no protection against\nman-in-the-middle attacks.\" It also says \"We maintain direct HTTPS\ncompatibility for debugging and simple testing (e.g., inference requests via\ncURL).\"\n\nThe coding-agents tutorial says \"OpenAI-compatible clients don’t perform\nconnection-time attestation themselves.\"\n(docs) and the\nTinfoil Proxy CLI page describes a\nlocal proxy that listens on http://127.0.0.1:3301, verifies the enclave's\nattestation, and takes that address as the base URL for any OpenAI-compatible\nclient. Pointing TINFOIL_BASE_URL at it follows those docs; NeuroLink through\nthat proxy was not exercised.","hierarchy":{"lvl0":"Getting Started","lvl1":"Tinfoil Provider Guide","lvl2":"Direct HTTPS access","lvl3":""}},
|
|
@@ -6717,21 +6717,21 @@
|
|
|
6717
6717
|
{"objectID":"265aa7c2b637784ce5f41281eb2722eba47ad69e34cb7d1e0dae84001bbdb311","title":"Verification status","url":"/docs/getting-started/providers/upstage#verification-status","content":"Tier-2 onboarding requires evidence before a provider is accepted, and\npnpm run verify:provider-onboarding gates it in CI. This is what the\ncatalog records for Upstage:\n\n| Probe | Result |\n| --------------------- | -------------------------------------------------- |\n| Roster | authenticated GET /v1/models, HTTP 200, 2026-09-03 |\n| Auth rejection | HTTP 401 invalid_api_key, 2026-09-03 |\n| Live capability sweep | not run |\n\n⚠️ No live capability sweep is recorded for Upstage. The roster and auth\nbehaviour were verified against the real API on the date above, but the\ncapability flags come from the catalog declaration rather than from a\nmeasured end-to-end run. Treat them as the provider's stated behaviour.","hierarchy":{"lvl0":"Getting Started","lvl1":"Upstage Provider Guide","lvl2":"Verification status","lvl3":""}},
|
|
6718
6718
|
{"objectID":"5afd1579083c6815ad76bf7e81bffa1ecf55c035c581074fc15639829011ccea","title":"Troubleshooting","url":"/docs/getting-started/providers/upstage#troubleshooting","content":"| Symptom | Cause | Fix |\n| ------------------------- | ----------------------------------- | ----------------------------------------------------------------- |\n| Invalid Upstage API key | UPSTAGE_API_KEY unset or wrong | Check the key at https://console.upstage.ai/api-keys |\n| Model not found | The roster changed since 2026-09-03 | Pick a current id; catalog providers retire models without notice |","hierarchy":{"lvl0":"Getting Started","lvl1":"Upstage Provider Guide","lvl2":"Troubleshooting","lvl3":""}},
|
|
6719
6719
|
{"objectID":"e0ad5535a3205cb65674e5d16560f2013f10c14074a8e974022a1b7a1e074330","title":"See also","url":"/docs/getting-started/providers/upstage#see-also","content":"Provider setup overview\nAll providers\nTier-2 onboarding — how this provider's JSON becomes a working integration\nProvider feature compatibility","hierarchy":{"lvl0":"Getting Started","lvl1":"Upstage Provider Guide","lvl2":"See also","lvl3":""}},
|
|
6720
|
-
{"objectID":"aec295443237d26c0e4380147c6facec9348e2151d45b9399a817c374b40f4d5","title":"Venice AI Provider Guide","url":"/docs/getting-started/providers/venice-ai","content":"Venice AI Provider Guide\n\nVenice AI is a Tier-2 catalog provider: its integration is one JSON file\n(src/lib/providers/catalog/venice-ai.json) rather than hand-written code.\nThat file is the source of truth for everything on this page.\n\nVerification status: this entry is docs- and roster-verified, not yet\nlive-verified. The catalog fields below were taken from Venice's own public pages and\nunauthenticated GET requests to /models, /models/traits and\n/chat/completions — no account was created and no API key was used to\nbuild it. evidence.liveMatrix is\nnull until someone runs the live capability matrix with a real key (see\nVerification status below).\n\nKey Facts\nProvider id: venice-ai (alias venice)\nProtocol: OpenAI-compatible (/chat/completions) — the\n chat-completions reference\n says \"This endpoint is OpenAI-compatible\"\nBase URL: https://api.venice.ai/api/v1\nDefault model: zai-org-glm-5-2\nModels in catalog: 10 (curated from a 126-model live roster)\nStreaming: supported — the chat-completions reference documents a\n stream parameter: \"Whether to stream back partial progress. Defaults to\n false.\"\nTool calling: model-dependent — the\n function-calling guide\n says \"Function calling support is model-specific.\" and points to the\n supportsFunctionCalling field of the models API\nTools while streaming: not declared (false) — no streamed tool-call\n request was made\nStructured output: supported — the\n structured-responses guide\n documents response_format with json_schema; it says \"This functionality is\n not natively available for all models.\" and points to the\n supportsResponseSchema field of the models API\nStructured output + tools together: not declared (false) — the\n structured-responses guide says \"Structured Outputs via response_format are\n not compatible with parallel function calls\", and no combined request was\n made\nEmbeddings: not declared on this catalog entry. Venice's\n API index (https://docs.venice.ai/llms.txt) lists an Embeddings endpoint, but\n NeuroLink's generic ConfiguredOpenAICompatProvider (the class Tier-2\n catalog entries use) does not implement embed()/embedMany(), so this flag\n tracks that, not the vendor's own API surface\nThinking: declared (true) — the\n reasoning-models guide\n documents a reasoning_content output field and a reasoning_effort\n parameter, and the roster carries a supportsReasoning flag per model\nBilling: no-free-tier — see Billing below\nKey format: none declared by Venice\n\nQuick Start\nGet an API key\nVisit: https://venice.ai/settings/api and select Generate New API Key; the API key guide lists \"Sign in to your Venice account.\" under Before you start (https://docs.venice.ai/guides/getting-started/generating-api-key)\nCopy the key when it is shown — the API key guide states \"Venice will show the full API key one time.\" (https://docs.venice.ai/guides/getting-started/generating-api-key) — and paste it without a Bearer prefix or quotes (https://docs.venice.ai/getting-started/quick-start)\nFund the account before calling models: the docs state \"model requests will not succeed until the account can consume DIEM, bundled credits, or USD\" (https://docs.venice.ai/guides/getting-started/generating-api-key); payment options are listed at https://docs.venice.ai/overview/pricing\nSet VENICE_AI_API_KEY in your .env file (VENICE_API_KEY, the variable Venice's own docs use, is also read)\nConfigure\nUse it\n\nPer-request credentials work the same way as on the other catalog providers:\n\nBilling\n\nWhat the pages opened on 2026-09-29 say:\nThe API key guide\n says \"You can create a key before funding the account, but model requests will\n not succeed until the account can consume DIEM, bundled credits, or USD.\"\nThe pricing page lists three\n payment options. The USD card says \"Buy Venice credits with credit card.\n Credits never expire.\" The Stake DIEM card says \"Each Diem = $1/day of credits that\n refresh daily.\"\nVenice's plan page lists \"API Access (pay with\n credits)\" under the Free plan.\nVenice's API page shows the tag \"Free tier,\n no card\" in its hero section, and a Pay as you go card that lists \"Add funds only\n when needed\".\n\nThe entry records no-free-tier, following the documented balance requirement\nin the first bullet.\n\nModels\n\n| Model | Context | Max output | Vision | $/M in · out (cache read) | Notes |\n| ----------------------- | --------- | ---------- | ------ | ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| zai-org-glm-5-2 ⭐ | 1,000,000 | 131,072 | no | $1.4 / $4.4 ($0.26) | NeuroLink default. Roster traits \"default\" and \"
|
|
6720
|
+
{"objectID":"aec295443237d26c0e4380147c6facec9348e2151d45b9399a817c374b40f4d5","title":"Venice AI Provider Guide","url":"/docs/getting-started/providers/venice-ai","content":"Venice AI Provider Guide\n\nVenice AI is a Tier-2 catalog provider: its integration is one JSON file\n(src/lib/providers/catalog/venice-ai.json) rather than hand-written code.\nThat file is the source of truth for everything on this page.\n\nVerification status: this entry is docs- and roster-verified, not yet\nlive-verified. The catalog fields below were taken from Venice's own public pages and\nunauthenticated GET requests to /models, /models/traits and\n/chat/completions — no account was created and no API key was used to\nbuild it. evidence.liveMatrix is\nnull until someone runs the live capability matrix with a real key (see\nVerification status below).\n\nKey Facts\nProvider id: venice-ai (alias venice)\nProtocol: OpenAI-compatible (/chat/completions) — the\n chat-completions reference\n says \"This endpoint is OpenAI-compatible\"\nBase URL: https://api.venice.ai/api/v1\nDefault model: zai-org-glm-5-2\nModels in catalog: 10 (curated from a 126-model live roster)\nStreaming: supported — the chat-completions reference documents a\n stream parameter: \"Whether to stream back partial progress. Defaults to\n false.\"\nTool calling: model-dependent — the\n function-calling guide\n says \"Function calling support is model-specific.\" and points to the\n supportsFunctionCalling field of the models API\nTools while streaming: not declared (false) — no streamed tool-call\n request was made\nStructured output: supported — the\n structured-responses guide\n documents response_format with json_schema; it says \"This functionality is\n not natively available for all models.\" and points to the\n supportsResponseSchema field of the models API\nStructured output + tools together: not declared (false) — the\n structured-responses guide says \"Structured Outputs via response_format are\n not compatible with parallel function calls\", and no combined request was\n made\nEmbeddings: not declared on this catalog entry. Venice's\n API index (https://docs.venice.ai/llms.txt) lists an Embeddings endpoint, but\n NeuroLink's generic ConfiguredOpenAICompatProvider (the class Tier-2\n catalog entries use) does not implement embed()/embedMany(), so this flag\n tracks that, not the vendor's own API surface\nThinking: declared (true) — the\n reasoning-models guide\n documents a reasoning_content output field and a reasoning_effort\n parameter, and the roster carries a supportsReasoning flag per model\nBilling: no-free-tier — see Billing below\nKey format: none declared by Venice\n\nQuick Start\nGet an API key\nVisit: https://venice.ai/settings/api and select Generate New API Key; the API key guide lists \"Sign in to your Venice account.\" under Before you start (https://docs.venice.ai/guides/getting-started/generating-api-key)\nCopy the key when it is shown — the API key guide states \"Venice will show the full API key one time.\" (https://docs.venice.ai/guides/getting-started/generating-api-key) — and paste it without a Bearer prefix or quotes (https://docs.venice.ai/getting-started/quick-start)\nFund the account before calling models: the docs state \"model requests will not succeed until the account can consume DIEM, bundled credits, or USD\" (https://docs.venice.ai/guides/getting-started/generating-api-key); payment options are listed at https://docs.venice.ai/overview/pricing\nSet VENICE_AI_API_KEY in your .env file (VENICE_API_KEY, the variable Venice's own docs use, is also read)\nConfigure\nUse it\n\nPer-request credentials work the same way as on the other catalog providers:\n\nBilling\n\nWhat the pages opened on 2026-09-29 say:\nThe API key guide\n says \"You can create a key before funding the account, but model requests will\n not succeed until the account can consume DIEM, bundled credits, or USD.\"\nThe pricing page lists three\n payment options. The USD card says \"Buy Venice credits with credit card.\n Credits never expire.\" The Stake DIEM card says \"Each Diem = $1/day of credits that\n refresh daily.\"\nVenice's plan page lists \"API Access (pay with\n credits)\" under the Free plan.\nVenice's API page shows the tag \"Free tier,\n no card\" in its hero section, and a Pay as you go card that lists \"Add funds only\n when needed\".\n\nThe entry records no-free-tier, following the documented balance requirement\nin the first bullet.\n\nModels\n\n| Model | Context | Max output | Vision | $/M in · out (cache read) | Notes |\n| ----------------------- | --------- | ---------- | ------ | ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| zai-org-glm-5-2 ⭐ | 1,000,000 | 131,072 | no | $1.4 / $4.4 ($0.26) | NeuroLink default. Roster traits \"default\" and \"function_calling_default\"; the /models/traits GET returned \"default\":\"zai-org-glm-5-2\". ","hierarchy":{"lvl0":"Getting Started","lvl1":"Venice AI Provider Guide","lvl2":"","lvl3":""}},
|
|
6721
6721
|
{"objectID":"2ae56d41e58960c80a562da94412be2435078a7cf7a58995e958b077f2bf1617","title":"Venice AI Provider Guide","url":"/docs/getting-started/providers/venice-ai#venice-ai-provider-guide","content":"Venice AI is a Tier-2 catalog provider: its integration is one JSON file\n(src/lib/providers/catalog/venice-ai.json) rather than hand-written code.\nThat file is the source of truth for everything on this page.\n\nVerification status: this entry is docs- and roster-verified, not yet\nlive-verified. The catalog fields below were taken from Venice's own public pages and\nunauthenticated GET requests to /models, /models/traits and\n/chat/completions — no account was created and no API key was used to\nbuild it. evidence.liveMatrix is\nnull until someone runs the live capability matrix with a real key (see\nVerification status below).","hierarchy":{"lvl0":"Getting Started","lvl1":"Venice AI Provider Guide","lvl2":"Venice AI Provider Guide","lvl3":""}},
|
|
6722
6722
|
{"objectID":"50d023694e05f3d8f9e15e9824c246a872c5e4e7feb23b123c80ac0e17e84a10","title":"Key Facts","url":"/docs/getting-started/providers/venice-ai#key-facts","content":"Provider id: venice-ai (alias venice)\nProtocol: OpenAI-compatible (/chat/completions) — the\n chat-completions reference\n says \"This endpoint is OpenAI-compatible\"\nBase URL: https://api.venice.ai/api/v1\nDefault model: zai-org-glm-5-2\nModels in catalog: 10 (curated from a 126-model live roster)\nStreaming: supported — the chat-completions reference documents a\n stream parameter: \"Whether to stream back partial progress. Defaults to\n false.\"\nTool calling: model-dependent — the\n function-calling guide\n says \"Function calling support is model-specific.\" and points to the\n supportsFunctionCalling field of the models API\nTools while streaming: not declared (false) — no streamed tool-call\n request was made\nStructured output: supported — the\n structured-responses guide\n documents response_format with json_schema; it says \"This functionality is\n not natively available for all models.\" and points to the\n supportsResponseSchema field of the models API\nStructured output + tools together: not declared (false) — the\n structured-responses guide says \"Structured Outputs via response_format are\n not compatible with parallel function calls\", and no combined request was\n made\nEmbeddings: not declared on this catalog entry. Venice's\n API index (https://docs.venice.ai/llms.txt) lists an Embeddings endpoint, but\n NeuroLink's generic ConfiguredOpenAICompatProvider (the class Tier-2\n catalog entries use) does not implement embed()/embedMany(), so this flag\n tracks that, not the vendor's own API surface\nThinking: declared (true) — the\n reasoning-models guide\n documents a reasoning_content output field and a reasoning_effort\n parameter, and the roster carries a supportsReasoning flag per model\nBilling: no-free-tier — see Billing below\nKey format: none declared by Venice","hierarchy":{"lvl0":"Getting Started","lvl1":"Venice AI Provider Guide","lvl2":"Key Facts","lvl3":""}},
|
|
6723
6723
|
{"objectID":"43964765d378148aba31938dd123bd78285ed9a3f1b65e7c9deb1f087b5373a2","title":"1. Get an API key","url":"/docs/getting-started/providers/venice-ai#1-get-an-api-key","content":"Visit: https://venice.ai/settings/api and select Generate New API Key; the API key guide lists \"Sign in to your Venice account.\" under Before you start (https://docs.venice.ai/guides/getting-started/generating-api-key)\nCopy the key when it is shown — the API key guide states \"Venice will show the full API key one time.\" (https://docs.venice.ai/guides/getting-started/generating-api-key) — and paste it without a Bearer prefix or quotes (https://docs.venice.ai/getting-started/quick-start)\nFund the account before calling models: the docs state \"model requests will not succeed until the account can consume DIEM, bundled credits, or USD\" (https://docs.venice.ai/guides/getting-started/generating-api-key); payment options are listed at https://docs.venice.ai/overview/pricing\nSet VENICE_AI_API_KEY in your .env file (VENICE_API_KEY, the variable Venice's own docs use, is also read)","hierarchy":{"lvl0":"Getting Started","lvl1":"Venice AI Provider Guide","lvl2":"1. Get an API key","lvl3":""}},
|
|
6724
6724
|
{"objectID":"ed207738a15a77ab5a936b75067fe331cea5fb1d6643ba9821920507ed242262","title":"2. Configure","url":"/docs/getting-started/providers/venice-ai#2-configure","content":"2. Configure","hierarchy":{"lvl0":"Getting Started","lvl1":"Venice AI Provider Guide","lvl2":"2. Configure","lvl3":""}},
|
|
6725
6725
|
{"objectID":"52d0c4cc72d2478a3f0b474336ad99ae1933a39b587df66f82b9fdd459dac09d","title":"3. Use it","url":"/docs/getting-started/providers/venice-ai#3-use-it","content":"Per-request credentials work the same way as on the other catalog providers:","hierarchy":{"lvl0":"Getting Started","lvl1":"Venice AI Provider Guide","lvl2":"3. Use it","lvl3":""}},
|
|
6726
6726
|
{"objectID":"0156f225c798d22af4b312990863ab98b2f05abd35a71097f9de2027b1799253","title":"Billing","url":"/docs/getting-started/providers/venice-ai#billing","content":"What the pages opened on 2026-09-29 say:\nThe API key guide\n says \"You can create a key before funding the account, but model requests will\n not succeed until the account can consume DIEM, bundled credits, or USD.\"\nThe pricing page lists three\n payment options. The USD card says \"Buy Venice credits with credit card.\n Credits never expire.\" The Stake DIEM card says \"Each Diem = $1/day of credits that\n refresh daily.\"\nVenice's plan page lists \"API Access (pay with\n credits)\" under the Free plan.\nVenice's API page shows the tag \"Free tier,\n no card\" in its hero section, and a Pay as you go card that lists \"Add funds only\n when needed\".\n\nThe entry records no-free-tier, following the documented balance requirement\nin the first bullet.","hierarchy":{"lvl0":"Getting Started","lvl1":"Venice AI Provider Guide","lvl2":"Billing","lvl3":""}},
|
|
6727
|
-
{"objectID":"5fee506a5c4d2aac4c680b58823a81ea036798d91f7c64e9db233584f9419f67","title":"Models","url":"/docs/getting-started/providers/venice-ai#models","content":"| Model | Context | Max output | Vision | $/M in · out (cache read) | Notes |\n| ----------------------- | --------- | ---------- | ------ | ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| zai-org-glm-5-2 ⭐ | 1,000,000 | 131,072 | no | $1.4 / $4.4 ($0.26) | NeuroLink default. Roster traits \"default\" and \"
|
|
6727
|
+
{"objectID":"5fee506a5c4d2aac4c680b58823a81ea036798d91f7c64e9db233584f9419f67","title":"Models","url":"/docs/getting-started/providers/venice-ai#models","content":"| Model | Context | Max output | Vision | $/M in · out (cache read) | Notes |\n| ----------------------- | --------- | ---------- | ------ | ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| zai-org-glm-5-2 ⭐ | 1,000,000 | 131,072 | no | $1.4 / $4.4 ($0.26) | NeuroLink default. Roster traits \"default\" and \"function_calling_default\"; the /models/traits GET returned \"default\":\"zai-org-glm-5-2\". |\n| zai-org-glm-5 | 198,000 | 32,000 | no | $1 / $3.2 ($0.2) | Fallback. The quick-start page lists it with the text \"Default model for most use cases\". |\n| zai-org-glm-5-1 | 200,000 | 80,000 | no | $1.54 / $4.84 ($0.286) | Fallback. The model in the reasoning-models examples. |\n| deepseek-v4-pro-0813 | 1,000,000 | 32,768 | no | $1.65 / $4.95 ($0.165) | Fallback. Roster trait \"default_code\". |\n| kimi-k3 | 1,000,000 | 131,072 | yes | $3.75 / $18.75 ($0.375) | Roster trait \"default_reasoning\". |\n| kimi-k2-6 | 256,000 | 65,536 | yes | $0.75 / $3.5 ($0.16) | The quick-start page lists it with the text \"Strong reasoning for more complex tasks\".","hierarchy":{"lvl0":"Getting Started","lvl1":"Venice AI Provider Guide","lvl2":"Models","lvl3":""}},
|
|
6728
6728
|
{"objectID":"5e9e6668f1675d4256502fb8630f9bf1df48b4047dd465f774ea0590ea22e90d","title":"Verification status","url":"/docs/getting-started/providers/venice-ai#verification-status","content":"Tier-2 onboarding requires evidence before a provider is accepted, and\npnpm run verify:provider-onboarding gates it in CI. This is what the\ncatalog currently records for Venice AI — docs- and roster-verified, not\nlive-verified:\n\n| Probe | Result |\n| ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Roster | unauthenticated GET /models, HTTP 200, 126 text models, 2026-09-29 — no key used |\n| Default model | unauthenticated GET /models/traits, HTTP 200, 2026-09-29 — returned \"default\":\"zai-org-glm-5-2\" |\n| Billing | public pages quoted in Billing above, 2026-09-29 — recorded as","hierarchy":{"lvl0":"Getting Started","lvl1":"Venice AI Provider Guide","lvl2":"Verification status","lvl3":""}},
|
|
6729
6729
|
{"objectID":"f22e358b5c6033ae66d4fe4f1e34d99f0ee243e821d695933209d5ca584f9830","title":"Troubleshooting","url":"/docs/getting-started/providers/venice-ai#troubleshooting","content":"Each row is what a Venice page states; none was reproduced live.\n\n| Symptom | Cause | Fix |\n| --------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| HTTP 401 | The API key guide says a 401 with AUTHENTICATION_FAILED means the key itself was rejected, and lists a partial copy, a Bearer prefix or quotes captured into the value, or a stray space or newline as the usual causes | The quick-start page says to paste the key exactly as Venice issued it, with no Bearer prefix, on a single line with no quotes |\n| HTTP 402 | The error-codes page lists INSUFFICIENT_BALANCE and two per-key spend-limit codes under 402; the API key guide says that with a spend-limit code \"the cause is the key's own limit rather than your account balance\" | For INSUFFICIENT_BALANCE the error-codes page points to","hierarchy":{"lvl0":"Getting Started","lvl1":"Venice AI Provider Guide","lvl2":"Troubleshooting","lvl3":""}},
|
|
6730
6730
|
{"objectID":"47b9d2873035ce5df7122eda69ae954cde0cadb9cecd4e9978ae2d6b4080f07e","title":"See also","url":"/docs/getting-started/providers/venice-ai#see-also","content":"Provider setup overview\nAll providers\nTier-2 onboarding — how this provider's JSON becomes a working integration\nProvider feature compatibility","hierarchy":{"lvl0":"Getting Started","lvl1":"Venice AI Provider Guide","lvl2":"See also","lvl3":""}},
|
|
6731
|
-
{"objectID":"4d57bb4076cc1ea55086e17053d2784d81d777b2e0a8934f463aea2df3cfbe21","title":"Vispark Provider Guide","url":"/docs/getting-started/providers/vispark","content":"Vispark Provider Guide\n\nVispark is a Tier-2 catalog provider: its integration is one JSON file\n(src/lib/providers/catalog/vispark.json) rather than hand-written code.\nThe catalog values on this page come from that file.\n\nVerification status: this entry is docs- and roster-verified, not yet\nlive-verified. The fields below come from the text of Vispark's public\nsite (https://lab.vispark.in/) and unauthenticated GET requests to\nhttps://api.lab.vispark.in/v1 — no account was created and no API key was\nused to build it. evidence.liveMatrix is null until someone runs the live\ncapability matrix with a real key (see\nVerification status below).\n\nKey Facts\nProvider id: vispark\nProtocol: OpenAI-compatible (/chat/completions) — the site's OpenAI\n Compatibility panel says \"This model is compatible with OpenAI-compatible\n clients.\"\nBase URL: https://api.lab.vispark.in/v1 — that panel gives the Base URL\n https://api.lab.vispark.in. Unauthenticated GETs made 2026-09-29:\n https://api.lab.vispark.in/v1/models and https://api.lab.vispark.in/models\n returned the same 3-model body; https://api.lab.vispark.in/v1/chat/completions\n and https://api.lab.vispark.in/chat/completions both answered HTTP 405\nDefault model: vispark/vision-large (NeuroLink default)\nModels in catalog: 3 — the roster returned 3 models on 2026-09-29\nStreaming: true — the Vision entry on the site reads \"Supports up to 1\n million tokens per request with real-time streaming capabilities.\"\nTool calling: true — the Vision entry reads \"Supports Tool Calling and\n Continual Learning; updates weights in real-time.\", and the roster lists\n tools in supported_features for the three models. No POST request was sent\nTools while streaming: false in the catalog — the site's \"Tool Calling\n Guide\" has a \"Streaming with Tool Calls\" section whose sample chunk shows\n \"type\": \"tool_calls\" and \"finished\": true. No POST request was sent\nStructured output: false in the catalog — the roster lists json_mode\n and structured_outputs in supported_features. No POST request was sent\nStructured output + tools together: false in the catalog. No POST request\n was sent\nEmbeddings: false in the catalog — the roster's output_modalities for\n the three models is text\nThinking: false in the catalog — the roster lists reasoning in\n supported_features. No POST request was sent\nBilling policy field: no-free-tier is a schema placeholder (the schema\n has no unknown value), not a vendor statement; the unit strings the site\n shows are quoted under Billing\nKey format: apiKeyFormat is null in the catalog\n\nQuick Start\nGet an API key\nVisit: https://lab.vispark.in/profile and sign in — the playground text reads \"Sign in to run this model.\", and the site links the Vispark account system at https://account.vispark.in\nOpen API Keys in the profile sidebar (the panel is titled \"API Keys\" with the subtitle \"Manage your API keys\"), choose \"Add Key\" and complete the \"Create New API Key\" dialog\nAuthentication is HTTP Bearer: the OpenAI Compatibility panel says \"Use your standard API Key as a Bearer Token.\" and shows Authorization: Bearer <your_api_key>. The site's developer-guide text for the Vision model also lists \"Endpoint: /model/text/vision\" and \"Authentication: X-API-Key:
|
|
6731
|
+
{"objectID":"4d57bb4076cc1ea55086e17053d2784d81d777b2e0a8934f463aea2df3cfbe21","title":"Vispark Provider Guide","url":"/docs/getting-started/providers/vispark","content":"Vispark Provider Guide\n\nVispark is a Tier-2 catalog provider: its integration is one JSON file\n(src/lib/providers/catalog/vispark.json) rather than hand-written code.\nThe catalog values on this page come from that file.\n\nVerification status: this entry is docs- and roster-verified, not yet\nlive-verified. The fields below come from the text of Vispark's public\nsite (https://lab.vispark.in/) and unauthenticated GET requests to\nhttps://api.lab.vispark.in/v1 — no account was created and no API key was\nused to build it. evidence.liveMatrix is null until someone runs the live\ncapability matrix with a real key (see\nVerification status below).\n\nKey Facts\nProvider id: vispark\nProtocol: OpenAI-compatible (/chat/completions) — the site's OpenAI\n Compatibility panel says \"This model is compatible with OpenAI-compatible\n clients.\"\nBase URL: https://api.lab.vispark.in/v1 — that panel gives the Base URL\n https://api.lab.vispark.in. Unauthenticated GETs made 2026-09-29:\n https://api.lab.vispark.in/v1/models and https://api.lab.vispark.in/models\n returned the same 3-model body; https://api.lab.vispark.in/v1/chat/completions\n and https://api.lab.vispark.in/chat/completions both answered HTTP 405\nDefault model: vispark/vision-large (NeuroLink default)\nModels in catalog: 3 — the roster returned 3 models on 2026-09-29\nStreaming: true — the Vision entry on the site reads \"Supports up to 1\n million tokens per request with real-time streaming capabilities.\"\nTool calling: true — the Vision entry reads \"Supports Tool Calling and\n Continual Learning; updates weights in real-time.\", and the roster lists\n tools in supported_features for the three models. No POST request was sent\nTools while streaming: false in the catalog — the site's \"Tool Calling\n Guide\" has a \"Streaming with Tool Calls\" section whose sample chunk shows\n \"type\": \"tool_calls\" and \"finished\": true. No POST request was sent\nStructured output: false in the catalog — the roster lists json_mode\n and structured_outputs in supported_features. No POST request was sent\nStructured output + tools together: false in the catalog. No POST request\n was sent\nEmbeddings: false in the catalog — the roster's output_modalities for\n the three models is text\nThinking: false in the catalog — the roster lists reasoning in\n supported_features. No POST request was sent\nBilling policy field: no-free-tier is a schema placeholder (the schema\n has no unknown value), not a vendor statement; the unit strings the site\n shows are quoted under Billing\nKey format: apiKeyFormat is null in the catalog\n\nQuick Start\nGet an API key\nVisit: https://lab.vispark.in/profile and sign in — the playground text reads \"Sign in to run this model.\", and the site links the Vispark account system at https://account.vispark.in\nOpen API Keys in the profile sidebar (the panel is titled \"API Keys\" with the subtitle \"Manage your API keys\"), choose \"Add Key\" and complete the \"Create New API Key\" dialog\nAuthentication is HTTP Bearer: the OpenAI Compatibility panel says \"Use your standard API Key as a Bearer Token.\" and shows Authorization: Bearer <your_api_key>. The site's developer-guide text for the Vision model also lists \"Endpoint: /model/text/vision\" and \"Authentication: X-API-Key: your_api_key_here\", and the ephemeral-key panel \"Using on Model Endpoints\" shows an X-API-Key header and lists \"POST /chat/completions\" under \"Supported endpoints:\". Neither header scheme was exercised: no POST request was sent\nBilling as the site shows it: the Account tab of the profile page has a \"Buy More Units\" panel with the strings \"₹1 (INR) = 1 unit\" and \"$1 (USD) = ~95 units\"\nSet VISPARK_API_KEY in your .env file\nConfigure\nUse it\n\nPer-request credentials are passed like this:\n\nBilling\n\nThe Account tab of https://lab.vispark.in/profile has a \"Buy More Units\" panel\nwith the strings \"₹1 (INR) = 1 unit\" and \"$1 (USD) = ~95 units\", and the\nInsufficient Units dialog carries the text \"~$0.01 = ₹1 = 1 unit.\" The Vision model's price text\nis quoted in Models. The no-free-tier value in the catalog is a\nschema placeholder, not a vendor statement.\n\nModels\n\n| Model | Context | Max output | Vision | $/M in · out | Notes |\n| ------------------------- | --------- | ---------- | ------ | -------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| vispark/vision-large ⭐ | 1,000,000 | 65,536 | yes | $7.37 / $22.11 | NeuroLink default. Roster description: \"Vision Large: India's most advanced foundational intelligence.\" The site's size entry reads \"Slowest processing but highest intelligence and accuracy\". |\n| vispark/vision-medium | 1,000,00","hierarchy":{"lvl0":"Getting Started","lvl1":"Vispark Provider Guide","lvl2":"","lvl3":""}},
|
|
6732
6732
|
{"objectID":"058095deb707ccac0ce5ef385d9f7b90e47fdb58ea3c24d1f9906ad654721d3b","title":"Vispark Provider Guide","url":"/docs/getting-started/providers/vispark#vispark-provider-guide","content":"Vispark is a Tier-2 catalog provider: its integration is one JSON file\n(src/lib/providers/catalog/vispark.json) rather than hand-written code.\nThe catalog values on this page come from that file.\n\nVerification status: this entry is docs- and roster-verified, not yet\nlive-verified. The fields below come from the text of Vispark's public\nsite (https://lab.vispark.in/) and unauthenticated GET requests to\nhttps://api.lab.vispark.in/v1 — no account was created and no API key was\nused to build it. evidence.liveMatrix is null until someone runs the live\ncapability matrix with a real key (see\nVerification status below).","hierarchy":{"lvl0":"Getting Started","lvl1":"Vispark Provider Guide","lvl2":"Vispark Provider Guide","lvl3":""}},
|
|
6733
6733
|
{"objectID":"81b81d8850b95a64740c6a1716e877b8095b6d9ad856e2eaaf756af7c4a9cc51","title":"Key Facts","url":"/docs/getting-started/providers/vispark#key-facts","content":"Provider id: vispark\nProtocol: OpenAI-compatible (/chat/completions) — the site's OpenAI\n Compatibility panel says \"This model is compatible with OpenAI-compatible\n clients.\"\nBase URL: https://api.lab.vispark.in/v1 — that panel gives the Base URL\n https://api.lab.vispark.in. Unauthenticated GETs made 2026-09-29:\n https://api.lab.vispark.in/v1/models and https://api.lab.vispark.in/models\n returned the same 3-model body; https://api.lab.vispark.in/v1/chat/completions\n and https://api.lab.vispark.in/chat/completions both answered HTTP 405\nDefault model: vispark/vision-large (NeuroLink default)\nModels in catalog: 3 — the roster returned 3 models on 2026-09-29\nStreaming: true — the Vision entry on the site reads \"Supports up to 1\n million tokens per request with real-time streaming capabilities.\"\nTool calling: true — the Vision entry reads \"Supports Tool Calling and\n Continual Learning; updates weights in real-time.\", and the roster lists\n tools in supported_features for the three models. No POST request was sent\nTools while streaming: false in the catalog — the site's \"Tool Calling\n Guide\" has a \"Streaming with Tool Calls\" section whose sample chunk shows\n \"type\": \"tool_calls\" and \"finished\": true. No POST request was sent\nStructured output: false in the catalog — the roster lists json_mode\n and structured_outputs in supported_features. No POST request was sent\nStructured output + tools together: false in the catalog. No POST request\n was sent\nEmbeddings: false in the catalog — the roster's output_modalities for\n the three models is text\nThinking: false in the catalog — the roster lists reasoning in\n supported_features. No POST request was sent\nBilling policy field: no-free-tier is a schema placeholder (the schema\n has no unknown value), not a vendor statement; the unit strings the site\n shows are quoted under Billing\nKey format: apiKeyFormat is null in the catalog","hierarchy":{"lvl0":"Getting Started","lvl1":"Vispark Provider Guide","lvl2":"Key Facts","lvl3":""}},
|
|
6734
|
-
{"objectID":"c293b1a7209ba40dd45d264dfdeb30c74adac5ceafa614d073e5310dd3047c8f","title":"1. Get an API key","url":"/docs/getting-started/providers/vispark#1-get-an-api-key","content":"Visit: https://lab.vispark.in/profile and sign in — the playground text reads \"Sign in to run this model.\", and the site links the Vispark account system at https://account.vispark.in\nOpen API Keys in the profile sidebar (the panel is titled \"API Keys\" with the subtitle \"Manage your API keys\"), choose \"Add Key\" and complete the \"Create New API Key\" dialog\nAuthentication is HTTP Bearer: the OpenAI Compatibility panel says \"Use your standard API Key as a Bearer Token.\" and shows Authorization: Bearer <your_api_key>. The site's developer-guide text for the Vision model also lists \"Endpoint: /model/text/vision\" and \"Authentication: X-API-Key:
|
|
6734
|
+
{"objectID":"c293b1a7209ba40dd45d264dfdeb30c74adac5ceafa614d073e5310dd3047c8f","title":"1. Get an API key","url":"/docs/getting-started/providers/vispark#1-get-an-api-key","content":"Visit: https://lab.vispark.in/profile and sign in — the playground text reads \"Sign in to run this model.\", and the site links the Vispark account system at https://account.vispark.in\nOpen API Keys in the profile sidebar (the panel is titled \"API Keys\" with the subtitle \"Manage your API keys\"), choose \"Add Key\" and complete the \"Create New API Key\" dialog\nAuthentication is HTTP Bearer: the OpenAI Compatibility panel says \"Use your standard API Key as a Bearer Token.\" and shows Authorization: Bearer <your_api_key>. The site's developer-guide text for the Vision model also lists \"Endpoint: /model/text/vision\" and \"Authentication: X-API-Key: your_api_key_here\", and the ephemeral-key panel \"Using on Model Endpoints\" shows an X-API-Key header and lists \"POST /chat/completions\" under \"Supported endpoints:\". Neither header scheme was exercised: no POST request was sent\nBilling as the site shows it: the Account tab of the profile page has a \"Buy More Units\" panel with the strings \"₹1 (INR) = 1 unit\" and \"$1 (USD) = ~95 units\"\nSet VISPARK_API_KEY in your .env file","hierarchy":{"lvl0":"Getting Started","lvl1":"Vispark Provider Guide","lvl2":"1. Get an API key","lvl3":""}},
|
|
6735
6735
|
{"objectID":"0fd8f139c7e0addc567c5ac7fbd1ab73b2326becf68d646d3fe0ccca408090cd","title":"2. Configure","url":"/docs/getting-started/providers/vispark#2-configure","content":"2. Configure","hierarchy":{"lvl0":"Getting Started","lvl1":"Vispark Provider Guide","lvl2":"2. Configure","lvl3":""}},
|
|
6736
6736
|
{"objectID":"db6688b3a02a56f1bbfa9d81388e5c51e2a54cda4dd6a44cb18cf5f2439b92fc","title":"3. Use it","url":"/docs/getting-started/providers/vispark#3-use-it","content":"Per-request credentials are passed like this:","hierarchy":{"lvl0":"Getting Started","lvl1":"Vispark Provider Guide","lvl2":"3. Use it","lvl3":""}},
|
|
6737
6737
|
{"objectID":"8600718c64918cd42149d5c287105367581e242511d81edc02ade1c711e4225a","title":"Billing","url":"/docs/getting-started/providers/vispark#billing","content":"The Account tab of https://lab.vispark.in/profile has a \"Buy More Units\" panel\nwith the strings \"₹1 (INR) = 1 unit\" and \"$1 (USD) = ~95 units\", and the\nInsufficient Units dialog carries the text \"~$0.01 = ₹1 = 1 unit.\" The Vision model's price text\nis quoted in Models. The no-free-tier value in the catalog is a\nschema placeholder, not a vendor statement.","hierarchy":{"lvl0":"Getting Started","lvl1":"Vispark Provider Guide","lvl2":"Billing","lvl3":""}},
|
|
@@ -6850,10 +6850,10 @@
|
|
|
6850
6850
|
{"objectID":"d3945a40a2095e352b8f5f71228a59bbcb1cb60823696dbe20f3fafffe6b7c29","title":"Errors","url":"/docs/getting-started/providers/xor#errors","content":"| Reply | Kind | Retried |\n| ------------------------------------------------------------ | --------------------------------------------------------- | --------- |\n| 401 | authentication — the provider instance stops retrying | no |\n| 403 / 402 | invalid_request — fixable; the instance is not disabled | no |\n| 413, or a 5xx other than 503 saying the context was exceeded | max_tokens_exceeded | no |\n| any other 4xx (for example 422, 404) | invalid_request | no |\n| 429 | rate_limit | yes, once |\n| 503 | overloaded | yes, once |\n| other 5xx | server | yes, once |\n| state over the window (local) | max_tokens_exceeded, with no network call | no |\n| unusable media (local) | invalid_request, with no network call | no |\n| no base URL configured (local) | invalid_request, with no network call | no |\n\nA 403 or 402 is deliberately not authentication. On a LiteLLM proxy a 403\nmeans the key's team does not allow the model you asked for\n(team_model_access_denied), and\na 402 means the team has no budget. An admin can fix either, so the provider\ninstance keeps working once it is fixed and is not disabled.","hierarchy":{"lvl0":"Getting Started","lvl1":"XOR Provider Guide","lvl2":"Errors","lvl3":""}},
|
|
6851
6851
|
{"objectID":"37466cda852e51cad898009d283cae74e18a20774a3ca0fad9f146e3efb8a5a9","title":"Troubleshooting","url":"/docs/getting-started/providers/xor#troubleshooting","content":"XOR requires a base URL — set XOR_BASE_URL, or pass\n credentials.xor.baseURL. There is no default endpoint.\nThe XOR base URL must not carry credentials… — the base URL has a user\n name, a password, a query string or a fragment. Set it to the origin only, for\n example https://your-proxy.example.com, and give the key through\n XOR_API_KEY or credentials.xor.apiKey.\nThe XOR base URL must start with https:// or http:// — the value has no\n scheme (for example xor.internal:8080) or uses another scheme. Add\n https://, or http:// for a server on this machine.\nThe XOR base URL must use https:// unless it points at this machine — the\n value is an http:// URL whose host is not localhost, 127.0.0.1 or [::1].\n A plain-http request would send the key and the state unencrypted. Put an\n https:// front on the deployment, or reach it through a port-forward to\n localhost.\nXOR answered with a redirect — the endpoint replied 301, 302, 307 or 308.\n The provider does not follow it and does not retry. Set the base URL to the\n address the redirect leads to.\nThe XOR base URL is not a valid absolute URL — the value cannot be\n parsed as a URL. Set it to an absolute origin.\nXOR requires an API key — set XOR_API_KEY, or pass\n credentials.xor.apiKey.\nA 401 — the endpoint rejected the key. The provider instance stops\n retrying after a rejection, so fix the key and construct a new one.\nA 403 with team_model_access_denied — the LiteLLM proxy's team for this\n key does not allow the model you asked for (XOR_MODEL, or xor-latest by\n default; xor-omni for media). Add the model to the team; the instance works again without a\n restart.\nmax_tokens_exceeded — the state is over about 200,000 estimated tokens,\n or the state, the questions and the media together are more than the\n deployment's prefill. Shorten the state, or send fewer or smaller images or a\n shorter video.","hierarchy":{"lvl0":"Getting Started","lvl1":"XOR Provider Guide","lvl2":"Troubleshooting","lvl3":""}},
|
|
6852
6852
|
{"objectID":"cdd6e7c83dfa23afa5cf0bb7d23081881600f72a5ac64ca56d383736c209f285","title":"See also","url":"/docs/getting-started/providers/xor#see-also","content":"TypeSafe (Jev) Provider Guide\nLaya Provider Guide\nPerplexity Decisions Provider Guide\nCloudflare Clef Provider Guide\nSubQ Provider Guide\nOpenAI Decisions Provider Guide\nScaleDown Provider Guide\nThe decide inference type\nXOR on Hugging Face","hierarchy":{"lvl0":"Getting Started","lvl1":"XOR Provider Guide","lvl2":"See also","lvl3":""}},
|
|
6853
|
-
{"objectID":"b62066defb7f4f21e315563cc367d3573fb4aacd3fa38685f76f1a3b110c0437","title":"Z.AI Provider Guide","url":"/docs/getting-started/providers/z-ai","content":"Z.AI Provider Guide\n\nZ.AI is a Tier-2 catalog provider: OpenAI-wire-compatible, so its entire\nintegration is one JSON file (src/lib/providers/catalog/z-ai.json) rather\nthan hand-written code. That file is the source of truth for everything on this\npage.\n\nVerification status: this entry is docs-verified only, not yet\nlive-verified. The vendor's GET https://api.z.ai/api/paas/v4/models needs\na key (it answers HTTP 401 without one), so the model ids come from Z.AI's\npublic docs and the roster has not been checked. No account was created and no\nAPI key was used to build this entry. evidence.liveMatrix is null until\nsomeone runs the live capability matrix with a real key (see\nVerification status below).\n\nKey Facts\nProvider id: z-ai (alias zai)\nProtocol: OpenAI-compatible (/chat/completions). The\n OpenAI Python SDK page\n says \"Z.AI provides interfaces compatible with OpenAI API\" and adds \"In some\n scenarios, there are still differences between Z.AI and OpenAI interfaces, but\n this does not affect overall compatibility.\"\nBase URL: https://api.z.ai/api/paas/v4 — the\n Introduction page calls it\n \"Z.ai Platform's general API endpoint\". Its warning says GLM Coding Plan users\n follow the Coding Plan tutorial to configure a dedicated endpoint, and the\n Coding Plan Endpoint Guide lists\n https://api.z.ai/api/coding/paas/v4 for OpenAI Chat Completions. This entry\n uses the general endpoint; Z_AI_BASE_URL overrides it.\nDefault model: glm-5.3 — the default of the model parameter in the\n Chat Completion reference\n and the model in its request examples\nModels in catalog: 12, curated from the 21 ids the Chat Completion\n reference lists (14 in its text-model enum, 7 in its vision-model enum). The\n nine ids left out to stay inside the 12-model cap are glm-4.5-x,\n glm-4.5-airx, glm-4.5-flash, glm-4-32b-0414-128k, glm-4.6v,\n glm-4.6v-flash, glm-4.6v-flashx, glm-4.5v and\n autoglm-phone-multilingual\nStreaming: supported — the\n Streaming Messages page\n documents stream=True with Server-Sent Events, and the Chat Completion\n reference says the Event Stream ends with a data: [DONE] message\nTool calling: model-dependent — the\n Function Calling page\n documents tools and a returned tool_calls array, and the Chat Completion\n reference says of tool_choice \"The default value is auto, and only auto is\n supported.\" For vision models it says tools are \"Only supported by\n GLM-5.3-Flash series, the GLM-4.6V series, and autoglm-phone-multilingual\"\nTools while streaming: supported (true) — the\n Thinking Mode page\n gives an Interleaved Thinking + Tool Calling example that sends tools with\n stream=True and reads tool_calls from the streamed deltas. The\n Tool Streaming Output page\n documents a separate tool_stream parameter, which this entry does not set.\n The Thinking Mode page also says \"thinking blocks should be explicitly\n preserved and returned together with the tool results.\", and its example\n appends an assistant message carrying reasoning_content and tool_calls\n before the tool message; this entry does not set\n quirks.replayReasoningContent\nStructured output: supported — the\n Structured Output page\n documents response_format set to {\"type\": \"json_object\"}. The Chat\n Completion reference lists text and json_object as the response_format\n type values, so the entry sets quirks.responseFormatDowngrade to send\n json_object for schema requests; generate({ schema }) still validates the\n result client-side. No request with json_schema was sent. The Chat\n Completion reference says of response_format \"Only text models support this\n field.\", and the\n GLM-5.3-Flash/FlashX page\n lists Structured Output among its Capabilities (\"Supports structured output\n formats such as JSON for seamless system integration.\")\nStructured output + tools together: not declared (false) — no combined\n probe was possible without credentials\nVision: glm-5.3-flash and glm-5.3-flashx — the\n GLM-5.3-Flash/FlashX page\n shows Input Modality \"Video / Image / Text / File\". The GLM-5.3 page says\n \"text-only inputs\", and the pages for the other nine catalog models show\n Input Modalities \"Text\"\nEmbeddings: not declared on this catalog entry\nThinking: not declared (false) — the entry sets none of the thinking\n or reasoning_effort request parameters. The Chat Completion reference\n documents both, and the\n GLM-5.3 page says \"GLM-5.3 always\n operates with reasoning enabled\"\nBilling: schema value free-tier, see Billing below\nKey format: none declared. The Introduction page shows the header\n Authorization: Bearer ZAI_API_KEY\n\nQuick Start\nGet an API key\nVisit: https://z.ai/manage-apikey/apikey-list — the Quick Start says to access the Z.AI Open Platform (https://z.ai/model-api) and \"Register or Login.\", then to \"Create an API Key\" in the API Keys management page and \"Copy your API Key for use.\"\nAuthentication is HTTP Bearer: the Introduction page (https://docs.z.ai/api-reference/introduction.md) shows the header Authorization: Bearer
|
|
6853
|
+
{"objectID":"b62066defb7f4f21e315563cc367d3573fb4aacd3fa38685f76f1a3b110c0437","title":"Z.AI Provider Guide","url":"/docs/getting-started/providers/z-ai","content":"Z.AI Provider Guide\n\nZ.AI is a Tier-2 catalog provider: OpenAI-wire-compatible, so its entire\nintegration is one JSON file (src/lib/providers/catalog/z-ai.json) rather\nthan hand-written code. That file is the source of truth for everything on this\npage.\n\nVerification status: this entry is docs-verified only, not yet\nlive-verified. The vendor's GET https://api.z.ai/api/paas/v4/models needs\na key (it answers HTTP 401 without one), so the model ids come from Z.AI's\npublic docs and the roster has not been checked. No account was created and no\nAPI key was used to build this entry. evidence.liveMatrix is null until\nsomeone runs the live capability matrix with a real key (see\nVerification status below).\n\nKey Facts\nProvider id: z-ai (alias zai)\nProtocol: OpenAI-compatible (/chat/completions). The\n OpenAI Python SDK page\n says \"Z.AI provides interfaces compatible with OpenAI API\" and adds \"In some\n scenarios, there are still differences between Z.AI and OpenAI interfaces, but\n this does not affect overall compatibility.\"\nBase URL: https://api.z.ai/api/paas/v4 — the\n Introduction page calls it\n \"Z.ai Platform's general API endpoint\". Its warning says GLM Coding Plan users\n follow the Coding Plan tutorial to configure a dedicated endpoint, and the\n Coding Plan Endpoint Guide lists\n https://api.z.ai/api/coding/paas/v4 for OpenAI Chat Completions. This entry\n uses the general endpoint; Z_AI_BASE_URL overrides it.\nDefault model: glm-5.3 — the default of the model parameter in the\n Chat Completion reference\n and the model in its request examples\nModels in catalog: 12, curated from the 21 ids the Chat Completion\n reference lists (14 in its text-model enum, 7 in its vision-model enum). The\n nine ids left out to stay inside the 12-model cap are glm-4.5-x,\n glm-4.5-airx, glm-4.5-flash, glm-4-32b-0414-128k, glm-4.6v,\n glm-4.6v-flash, glm-4.6v-flashx, glm-4.5v and\n autoglm-phone-multilingual\nStreaming: supported — the\n Streaming Messages page\n documents stream=True with Server-Sent Events, and the Chat Completion\n reference says the Event Stream ends with a data: [DONE] message\nTool calling: model-dependent — the\n Function Calling page\n documents tools and a returned tool_calls array, and the Chat Completion\n reference says of tool_choice \"The default value is auto, and only auto is\n supported.\" For vision models it says tools are \"Only supported by\n GLM-5.3-Flash series, the GLM-4.6V series, and autoglm-phone-multilingual\"\nTools while streaming: supported (true) — the\n Thinking Mode page\n gives an Interleaved Thinking + Tool Calling example that sends tools with\n stream=True and reads tool_calls from the streamed deltas. The\n Tool Streaming Output page\n documents a separate tool_stream parameter, which this entry does not set.\n The Thinking Mode page also says \"thinking blocks should be explicitly\n preserved and returned together with the tool results.\", and its example\n appends an assistant message carrying reasoning_content and tool_calls\n before the tool message; this entry does not set\n quirks.replayReasoningContent\nStructured output: supported — the\n Structured Output page\n documents response_format set to {\"type\": \"json_object\"}. The Chat\n Completion reference lists text and json_object as the response_format\n type values, so the entry sets quirks.responseFormatDowngrade to send\n json_object for schema requests; generate({ schema }) still validates the\n result client-side. No request with json_schema was sent. The Chat\n Completion reference says of response_format \"Only text models support this\n field.\", and the\n GLM-5.3-Flash/FlashX page\n lists Structured Output among its Capabilities (\"Supports structured output\n formats such as JSON for seamless system integration.\")\nStructured output + tools together: not declared (false) — no combined\n probe was possible without credentials\nVision: glm-5.3-flash and glm-5.3-flashx — the\n GLM-5.3-Flash/FlashX page\n shows Input Modality \"Video / Image / Text / File\". The GLM-5.3 page says\n \"text-only inputs\", and the pages for the other nine catalog models show\n Input Modalities \"Text\"\nEmbeddings: not declared on this catalog entry\nThinking: not declared (false) — the entry sets none of the thinking\n or reasoning_effort request parameters. The Chat Completion reference\n documents both, and the\n GLM-5.3 page says \"GLM-5.3 always\n operates with reasoning enabled\"\nBilling: schema value free-tier, see Billing below\nKey format: none declared. The Introduction page shows the header\n Authorization: Bearer ZAI_API_KEY\n\nQuick Start\nGet an API key\nVisit: https://z.ai/manage-apikey/apikey-list — the Quick Start says to access the Z.AI Open Platform (https://z.ai/model-api) and \"Register or Login.\", then to \"Create an API Key\" in the API Keys management page and \"Copy your API Key for use.\"\nAuthentication is HTTP Bearer: the Introduction page (https://docs.z.ai/api-reference/introduction.md) shows the header Authorization: Bearer ZAI_API_KE","hierarchy":{"lvl0":"Getting Started","lvl1":"Z.AI Provider Guide","lvl2":"","lvl3":""}},
|
|
6854
6854
|
{"objectID":"ca9f10745365c71403f5bcba388684ac70aeb8f48c3d7b3fac85b832a4eead37","title":"Z.AI Provider Guide","url":"/docs/getting-started/providers/z-ai#zai-provider-guide","content":"Z.AI is a Tier-2 catalog provider: OpenAI-wire-compatible, so its entire\nintegration is one JSON file (src/lib/providers/catalog/z-ai.json) rather\nthan hand-written code. That file is the source of truth for everything on this\npage.\n\nVerification status: this entry is docs-verified only, not yet\nlive-verified. The vendor's GET https://api.z.ai/api/paas/v4/models needs\na key (it answers HTTP 401 without one), so the model ids come from Z.AI's\npublic docs and the roster has not been checked. No account was created and no\nAPI key was used to build this entry. evidence.liveMatrix is null until\nsomeone runs the live capability matrix with a real key (see\nVerification status below).","hierarchy":{"lvl0":"Getting Started","lvl1":"Z.AI Provider Guide","lvl2":"Z.AI Provider Guide","lvl3":""}},
|
|
6855
6855
|
{"objectID":"d509ecad3c62c73f008d7e2f88de10168c19308f90c63101973f3ae4983a7318","title":"Key Facts","url":"/docs/getting-started/providers/z-ai#key-facts","content":"Provider id: z-ai (alias zai)\nProtocol: OpenAI-compatible (/chat/completions). The\n OpenAI Python SDK page\n says \"Z.AI provides interfaces compatible with OpenAI API\" and adds \"In some\n scenarios, there are still differences between Z.AI and OpenAI interfaces, but\n this does not affect overall compatibility.\"\nBase URL: https://api.z.ai/api/paas/v4 — the\n Introduction page calls it\n \"Z.ai Platform's general API endpoint\". Its warning says GLM Coding Plan users\n follow the Coding Plan tutorial to configure a dedicated endpoint, and the\n Coding Plan Endpoint Guide lists\n https://api.z.ai/api/coding/paas/v4 for OpenAI Chat Completions. This entry\n uses the general endpoint; Z_AI_BASE_URL overrides it.\nDefault model: glm-5.3 — the default of the model parameter in the\n Chat Completion reference\n and the model in its request examples\nModels in catalog: 12, curated from the 21 ids the Chat Completion\n reference lists (14 in its text-model enum, 7 in its vision-model enum). The\n nine ids left out to stay inside the 12-model cap are glm-4.5-x,\n glm-4.5-airx, glm-4.5-flash, glm-4-32b-0414-128k, glm-4.6v,\n glm-4.6v-flash, glm-4.6v-flashx, glm-4.5v and\n autoglm-phone-multilingual\nStreaming: supported — the\n Streaming Messages page\n documents stream=True with Server-Sent Events, and the Chat Completion\n reference says the Event Stream ends with a data: [DONE] message\nTool calling: model-dependent — the\n Function Calling page\n documents tools and a returned tool_calls array, and the Chat Completion\n reference says of tool_choice \"The default value is auto, and only auto is\n supported.\" For vision models it says tools are \"Only supported by\n GLM-5.3-Flash series, the GLM-4.6V series, and autoglm-phone-multilingual\"\nTools while streaming: supported (true) — the\n Thinking Mode page\n gives an Interleaved Thinking + Tool Calling example that sends tools with\n stream=True and reads tool_calls from the streamed deltas.","hierarchy":{"lvl0":"Getting Started","lvl1":"Z.AI Provider Guide","lvl2":"Key Facts","lvl3":""}},
|
|
6856
|
-
{"objectID":"21edd1dd95f482dff78075a0dc5aa5b26dda6e3a6a69782ee82cafa5ed94d402","title":"1. Get an API key","url":"/docs/getting-started/providers/z-ai#1-get-an-api-key","content":"Visit: https://z.ai/manage-apikey/apikey-list — the Quick Start says to access the Z.AI Open Platform (https://z.ai/model-api) and \"Register or Login.\", then to \"Create an API Key\" in the API Keys management page and \"Copy your API Key for use.\"\nAuthentication is HTTP Bearer: the Introduction page (https://docs.z.ai/api-reference/introduction.md) shows the header Authorization: Bearer
|
|
6856
|
+
{"objectID":"21edd1dd95f482dff78075a0dc5aa5b26dda6e3a6a69782ee82cafa5ed94d402","title":"1. Get an API key","url":"/docs/getting-started/providers/z-ai#1-get-an-api-key","content":"Visit: https://z.ai/manage-apikey/apikey-list — the Quick Start says to access the Z.AI Open Platform (https://z.ai/model-api) and \"Register or Login.\", then to \"Create an API Key\" in the API Keys management page and \"Copy your API Key for use.\"\nAuthentication is HTTP Bearer: the Introduction page (https://docs.z.ai/api-reference/introduction.md) shows the header Authorization: Bearer ZAI_API_KEY\nBilling as the vendor states it: the Quick Start says to open the Billing Page (https://z.ai/manage-apikey/billing) \"to top up if needed\"; the pricing page (https://docs.z.ai/guides/overview/pricing.md) lists per-1M-token prices and reads \"Free\" for GLM-4.7-Flash, GLM-4.5-Flash and GLM-4.6V-Flash; the Errors page (https://docs.z.ai/api-reference/api-code.md) lists error 1113 as \"Insufficient balance or no resource package. Please recharge.\"\nSet Z_AI_API_KEY in your .env file","hierarchy":{"lvl0":"Getting Started","lvl1":"Z.AI Provider Guide","lvl2":"1. Get an API key","lvl3":""}},
|
|
6857
6857
|
{"objectID":"314da16e3241c8fb7c63fbd0bd97551a1845f49e7c9f9677cf228bdd43f6d90b","title":"2. Configure","url":"/docs/getting-started/providers/z-ai#2-configure","content":"2. Configure","hierarchy":{"lvl0":"Getting Started","lvl1":"Z.AI Provider Guide","lvl2":"2. Configure","lvl3":""}},
|
|
6858
6858
|
{"objectID":"843ff2a713876256ad9fc0c038019dfabb096b5d24643b846946a34cdfdb3127","title":"3. Use it","url":"/docs/getting-started/providers/z-ai#3-use-it","content":"Per-request credentials use the same shape as the other catalog providers:","hierarchy":{"lvl0":"Getting Started","lvl1":"Z.AI Provider Guide","lvl2":"3. Use it","lvl3":""}},
|
|
6859
6859
|
{"objectID":"1eb07f5bbd381a52caead836ae0eb7ee93a8c55fa78d03c7a438d5a8fb114a95","title":"Billing","url":"/docs/getting-started/providers/z-ai#billing","content":"The Quick Start says to open\nthe Billing Page (https://z.ai/manage-apikey/billing) \"to top up if needed\". The\npricing page lists per-1M-token\nprices, and its Text Models and Vision Models tables read \"Free\" in the Input,\nCached Input, Cached Input Storage and Output cells for GLM-4.7-Flash,\nGLM-4.5-Flash and GLM-4.6V-Flash. The\nErrors page lists error 1113\n(HTTP 429) as \"Insufficient balance or no resource package. Please recharge.\"\n\nThe catalog schema has no unknown billing value, so billingPolicy holds\nfree-tier. It is a schema value, not a vendor statement of signup terms.","hierarchy":{"lvl0":"Getting Started","lvl1":"Z.AI Provider Guide","lvl2":"Billing","lvl3":""}},
|
|
@@ -8238,7 +8238,7 @@
|
|
|
8238
8238
|
{"objectID":"b86890482d83907c803cf17326aca634144a6fe23b371cec124b27811e3f6f18","title":"Auto-Discovery Priority","url":"/docs/mcp/configuration#auto-discovery-priority","content":"When multiple configurations exist, tools typically prioritize in this order:\nWorkspace/project-specific configurations (highest priority)\nTool-specific global configurations\nGeneric project configurations (lowest priority)","hierarchy":{"lvl0":"Mcp","lvl1":"MCP Configuration Locations Across AI Development Tools","lvl2":"Auto-Discovery Priority","lvl3":""}},
|
|
8239
8239
|
{"objectID":"b74d9e176151f93803af23fd779423a3edf03fcfc79822b72fae1257749ea7d8","title":"Best Practices","url":"/docs/mcp/configuration#best-practices","content":"Project-Specific Servers: Use .vscode/mcp.json or similar for project-specific MCP servers\nGlobal Servers: Configure frequently-used servers in your tool's global config\nEnvironment Variables: Store sensitive data (API keys) in environment variables\nVersion Control: Commit project-specific configs, exclude global configs with API keys","hierarchy":{"lvl0":"Mcp","lvl1":"MCP Configuration Locations Across AI Development Tools","lvl2":"Best Practices","lvl3":""}},
|
|
8240
8240
|
{"objectID":"7352c4511bcb51ccc7b9a3d44de4259274756be1a0e6888a39504b63eaa7dacd","title":"NeuroLink Auto-Discovery","url":"/docs/mcp/configuration#neurolink-auto-discovery","content":"NeuroLink's MCP auto-discovery system automatically searches all these locations and can discover MCP servers configured in any of these tools. Use the CLI command:\n\nThis will find and list all MCP servers configured across your system, regardless of which tool configured them.","hierarchy":{"lvl0":"Mcp","lvl1":"MCP Configuration Locations Across AI Development Tools","lvl2":"NeuroLink Auto-Discovery","lvl3":""}},
|
|
8241
|
-
{"objectID":"40327fae10ce1d58da815f061b2799603065640cf8667fab88829d284519a036","title":"NeuroLink Docs MCP Server","url":"/docs/mcp/docs-server","content":"NeuroLink Docs MCP Server\n\nThe NeuroLink Docs MCP Server makes the entire NeuroLink documentation (360+ pages across 27 sections) queryable by AI assistants through the Model Context Protocol. Instead of copy-pasting docs into your prompt, your AI assistant can search, browse, and read NeuroLink documentation on demand.\n\nWhat it provides:\n6 tools — full-text search, page retrieval, section browsing, API reference lookup, example search, and changelog\nPre-built search index — generated at build time with MiniSearch for instant results\nDual transport — stdio for local use, HTTP for remote/hosted deployments\nZero configuration — runs via npx with no API keys required\n\nQuick Start\n\nAdd the NeuroLink docs server to your AI development tool:\n\nEdit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\\Claude\\claude_desktop_config.json (Windows):\n\nRestart Claude Desktop after saving.\n\nCreate or edit .cursor/mcp.json in your project root:\n\nCursor will detect the config automatically.\n\nRun this command in your terminal:\n\nThe server will be available in your next Claude Code session.\n\nCreate or edit .vscode/mcp.json in your project root:\n\nVS Code will detect the MCP server on next reload.\n\nEdit ~/.codeium/windsurf/mcp_config.json:\n\nRestart Windsurf after saving.\n\nAll clients use the same npx -y @juspay/neurolink docs command. The only difference is the config file location and JSON key format (mcpServers vs servers).\n\nAvailable Tools\n\nThe docs server exposes 6 tools to your AI assistant:\n\n| Tool | Description | Parameters |\n| ------------------- | ---------------------------------------------------- | ---------------------------------------- |\n| search_docs | Full-text search across all documentation | query (required), limit?, section? |\n| get_page | Get the full content of a specific doc page | path (required) |\n| list_sections | List all documentation sections and their pages | none |\n| get_api_reference | Get SDK API reference, optionally filtered by method | method? |\n| get_examples | Get code examples by topic or provider | topic?, provider? |\n| get_changelog | Get recent changelog entries | limit? |\n\nTool Examples\n\nsearch_docs\n\nSearch across all NeuroLink documentation with optional section filtering.\n\nRequest:\n\nResponse:\n\nget_page\n\nRetrieve the full content of a specific documentation page by its path.\n\nRequest:\n\nResponse:\n\nlist_sections\n\nList all documentation sections and the pages they contain.\n\nRequest: (no parameters)\n\nResponse:\n\
|
|
8241
|
+
{"objectID":"40327fae10ce1d58da815f061b2799603065640cf8667fab88829d284519a036","title":"NeuroLink Docs MCP Server","url":"/docs/mcp/docs-server","content":"NeuroLink Docs MCP Server\n\nThe NeuroLink Docs MCP Server makes the entire NeuroLink documentation (360+ pages across 27 sections) queryable by AI assistants through the Model Context Protocol. Instead of copy-pasting docs into your prompt, your AI assistant can search, browse, and read NeuroLink documentation on demand.\n\nWhat it provides:\n6 tools — full-text search, page retrieval, section browsing, API reference lookup, example search, and changelog\nPre-built search index — generated at build time with MiniSearch for instant results\nDual transport — stdio for local use, HTTP for remote/hosted deployments\nZero configuration — runs via npx with no API keys required\n\nQuick Start\n\nAdd the NeuroLink docs server to your AI development tool:\n\nEdit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\\Claude\\claude_desktop_config.json (Windows):\n\nRestart Claude Desktop after saving.\n\nCreate or edit .cursor/mcp.json in your project root:\n\nCursor will detect the config automatically.\n\nRun this command in your terminal:\n\nThe server will be available in your next Claude Code session.\n\nCreate or edit .vscode/mcp.json in your project root:\n\nVS Code will detect the MCP server on next reload.\n\nEdit ~/.codeium/windsurf/mcp_config.json:\n\nRestart Windsurf after saving.\n\nAll clients use the same npx -y @juspay/neurolink docs command. The only difference is the config file location and JSON key format (mcpServers vs servers).\n\nAvailable Tools\n\nThe docs server exposes 6 tools to your AI assistant:\n\n| Tool | Description | Parameters |\n| ------------------- | ---------------------------------------------------- | ---------------------------------------- |\n| search_docs | Full-text search across all documentation | query (required), limit?, section? |\n| get_page | Get the full content of a specific doc page | path (required) |\n| list_sections | List all documentation sections and their pages | none |\n| get_api_reference | Get SDK API reference, optionally filtered by method | method? |\n| get_examples | Get code examples by topic or provider | topic?, provider? |\n| get_changelog | Get recent changelog entries | limit? |\n\nTool Examples\n\nsearch_docs\n\nSearch across all NeuroLink documentation with optional section filtering.\n\nRequest:\n\nResponse:\n\nget_page\n\nRetrieve the full content of a specific documentation page by its path.\n\nRequest:\n\nResponse:\n\nlist_sections\n\nList all documentation sections and the pages they contain.\n\nRequest: (no parameters)\n\nResponse:\n\nget_api_reference\n\nGet SDK API reference documentation. Pass a method name to filter results.\n\nRequest:\n\nResponse:\n\nget_examples\n\nFind code examples by topic or AI provider.\n\nRequest:\n\nResponse:\n\nget_changelog\n\nGet recent NeuroLink release notes and changelog entries.\n\nRequest:\n\nResponse:\n\nHTTP Transport\n\nFor remote or hosted deployments, start the server with HTTP transport:\n\nThe HTTP server exposes:\nPOST /mcp — MCP endpoint (Streamable HTTP transport)\nGET /health — Health check endpoint\n\nConfigure your MCP client to connect via HTTP:\n\nThe hosted version is available at https://docs.neurolink.ink/mcp -- no local installation required.\n\nProgrammatic Usage\n\nYou can also add the docs server programmatically via the NeuroLink SDK:\n\nOr connect to the HTTP transport:\n\nBuilding the Search Index\n\nThe search index is generated automatically during the docs site build:\n\nThis runs the docusaurus-plugin-search-index plugin which:\nScans all docs/**/*.md and docs/**/*.mdx files\nParses frontmatter (title, description, tags)\nExtracts and indexes content with MiniSearch\nWrites static/search-index.json\n\nThe index is bundled with the npm package, so end users don't need to build it themselves.\n\nTroubleshooting\n\n\"search-index.json not found\"\n\nThe search index hasn't been built yet. Run:\n\nThis generates docs-site/static/search-index.json which the MCP server needs to function.\n\nOutdated search results\n\nThe search index is generated at build time. To get the latest docs:\n\nIf using the npm package, update to the latest version:\n\nServer not appearing in Claude Desktop / Cursor\nVerify the config file is in the correct location (see Quick Start above)\nEnsure the JSON is valid — a trailing comma or missing bracket will silently fail\nRestart the application after saving the config\nCheck that npx is available in your PATH\n\nConnection timeout\n\nIf the server takes too long to start:\nThe first run downloads @juspay/neurolink via npx — this may take 10-30 seconds\nSubsequent runs use the npm cache and start faster\nFor faster startup, install globally: npm install -g @juspay/neurolink\n\nTools not returning results\n\nIf search returns empty results:\nVerify the search index ","hierarchy":{"lvl0":"Mcp","lvl1":"NeuroLink Docs MCP Server","lvl2":"","lvl3":""}},
|
|
8242
8242
|
{"objectID":"ed5e7279c6359dfca34301518451fa4addbd9362be58c4b017d308b6aea00585","title":"NeuroLink Docs MCP Server","url":"/docs/mcp/docs-server#neurolink-docs-mcp-server","content":"The NeuroLink Docs MCP Server makes the entire NeuroLink documentation (360+ pages across 27 sections) queryable by AI assistants through the Model Context Protocol. Instead of copy-pasting docs into your prompt, your AI assistant can search, browse, and read NeuroLink documentation on demand.\n\nWhat it provides:\n6 tools — full-text search, page retrieval, section browsing, API reference lookup, example search, and changelog\nPre-built search index — generated at build time with MiniSearch for instant results\nDual transport — stdio for local use, HTTP for remote/hosted deployments\nZero configuration — runs via npx with no API keys required","hierarchy":{"lvl0":"Mcp","lvl1":"NeuroLink Docs MCP Server","lvl2":"NeuroLink Docs MCP Server","lvl3":""}},
|
|
8243
8243
|
{"objectID":"f89905151e2ab2d1657712d5feb6f7aa5292d8533e2233fa76eaeabb0d2ef5cf","title":"Quick Start","url":"/docs/mcp/docs-server#quick-start","content":"Add the NeuroLink docs server to your AI development tool:\n\nEdit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\\Claude\\claude_desktop_config.json (Windows):\n\nRestart Claude Desktop after saving.\n\nCreate or edit .cursor/mcp.json in your project root:\n\nCursor will detect the config automatically.\n\nRun this command in your terminal:\n\nThe server will be available in your next Claude Code session.\n\nCreate or edit .vscode/mcp.json in your project root:\n\nVS Code will detect the MCP server on next reload.\n\nEdit ~/.codeium/windsurf/mcp_config.json:\n\nRestart Windsurf after saving.\n\nAll clients use the same npx -y @juspay/neurolink docs command. The only difference is the config file location and JSON key format (mcpServers vs servers).","hierarchy":{"lvl0":"Mcp","lvl1":"NeuroLink Docs MCP Server","lvl2":"Quick Start","lvl3":""}},
|
|
8244
8244
|
{"objectID":"8d32270e8a9fe3275974a033aaac44c4137d094301d7d709de02fd68f55c12c3","title":"Available Tools","url":"/docs/mcp/docs-server#available-tools","content":"The docs server exposes 6 tools to your AI assistant:\n\n| Tool | Description | Parameters |\n| ------------------- | ---------------------------------------------------- | ---------------------------------------- |\n| search_docs | Full-text search across all documentation | query (required), limit?, section? |\n| get_page | Get the full content of a specific doc page | path (required) |\n| list_sections | List all documentation sections and their pages | none |\n| get_api_reference | Get SDK API reference, optionally filtered by method | method? |\n| get_examples | Get code examples by topic or provider | topic?, provider? |\n| get_changelog | Get recent changelog entries | limit? |","hierarchy":{"lvl0":"Mcp","lvl1":"NeuroLink Docs MCP Server","lvl2":"Available Tools","lvl3":""}},
|
|
@@ -8553,7 +8553,7 @@
|
|
|
8553
8553
|
{"objectID":"41233755f52aa21991106fc8bcfd3e542c7d57d21105ccbf6be700dd7c098d7a","title":"Circuit Breaker Pattern","url":"/docs/observability/provider-status#circuit-breaker-pattern","content":"Circuit Breaker Pattern","hierarchy":{"lvl0":"Observability","lvl1":"Provider Status Monitoring and Health Management","lvl2":"Circuit Breaker Pattern","lvl3":""}},
|
|
8554
8554
|
{"objectID":"2eb16d9488d640bf677089898df6cc33bc2cba8b30817733570bd59e2277f294","title":"1. No Providers Available","url":"/docs/observability/provider-status#1-no-providers-available","content":"Solution: Set up the required environment variables for at least one provider.","hierarchy":{"lvl0":"Observability","lvl1":"Provider Status Monitoring and Health Management","lvl2":"1. No Providers Available","lvl3":""}},
|
|
8555
8555
|
{"objectID":"483203eae419b4871e56092c51602c8ac3c1285b2d1c324390b09be4f2e7a81c","title":"2. Slow Response Times","url":"/docs/observability/provider-status#2-slow-response-times","content":"Solution: Use the faster providers (like google-ai in this example) for time-sensitive applications.","hierarchy":{"lvl0":"Observability","lvl1":"Provider Status Monitoring and Health Management","lvl2":"2. Slow Response Times","lvl3":""}},
|
|
8556
|
-
{"objectID":"ce9a217a697d608230d795d2d3fdaf830ae8e403667bbab2280a9fd82c0c3702","title":"3. Authentication Failures","url":"/docs/observability/provider-status#3-authentication-failures","content":"Solution: Verify and update the API key environment variable (
|
|
8556
|
+
{"objectID":"ce9a217a697d608230d795d2d3fdaf830ae8e403667bbab2280a9fd82c0c3702","title":"3. Authentication Failures","url":"/docs/observability/provider-status#3-authentication-failures","content":"Solution: Verify and update the API key environment variable (OPENAI_API_KEY in this case).","hierarchy":{"lvl0":"Observability","lvl1":"Provider Status Monitoring and Health Management","lvl2":"3. Authentication Failures","lvl3":""}},
|
|
8557
8557
|
{"objectID":"baa7998e7800a556b1f9c93a93974de4b5796fdb60415881e25a1d033ca1706d","title":"Debugging Commands","url":"/docs/observability/provider-status#debugging-commands","content":"Debugging Commands","hierarchy":{"lvl0":"Observability","lvl1":"Provider Status Monitoring and Health Management","lvl2":"Debugging Commands","lvl3":""}},
|
|
8558
8558
|
{"objectID":"e938db7055d0bdcf6a8aae0a76a7fc8aa1dc9496409d6c457136e5765a1cc5cc","title":"Conclusion","url":"/docs/observability/provider-status#conclusion","content":"NeuroLink's Provider Status Monitoring system provides enterprise-grade health management for AI provider infrastructure. With real-time monitoring, intelligent recommendations, and comprehensive analytics, it ensures optimal provider selection and proactive issue resolution.\n\nKey benefits include:\nProactive Issue Detection: Identify problems before they impact production\nIntelligent Provider Selection: Automatic optimization for performance and cost\nOperational Excellence: Complete visibility into AI infrastructure health\nDeveloper Productivity: Actionable recommendations reduce debugging time\n\nThis system transforms AI provider management from reactive troubleshooting to proactive optimization, ensuring reliable and efficient AI operations at enterprise scale.","hierarchy":{"lvl0":"Observability","lvl1":"Provider Status Monitoring and Health Management","lvl2":"Conclusion","lvl3":""}},
|
|
8559
8559
|
{"objectID":"3abc8984be035e0f7eaeeee65f8d8f2fab3f41ecc96355a2456d62170d25c333","title":"📊 Enterprise Telemetry Guide","url":"/docs/observability/telemetry","content":"📊 Enterprise Telemetry Guide\n\nAdvanced OpenTelemetry Integration for NeuroLink\n\n📋 Overview\n\nNeuroLink includes optional OpenTelemetry integration for enterprise monitoring and observability. The telemetry system provides comprehensive insights into AI operations, performance metrics, and system health with zero overhead when disabled.\n\n🚀 Key Features\n✅ Zero Overhead by Default - Telemetry disabled unless explicitly configured\n🤖 AI Operation Tracking - Monitor text generation, token usage, costs, and response times\n🔧 MCP Tool Monitoring - Track tool calls, execution time, and success rates\n📈 Performance Metrics - Response times, error rates, throughput monitoring\n🔍 Distributed Tracing - Full request tracing across AI providers and services\n📊 Custom Dashboards - Grafana, Jaeger, and Prometheus integration\n🎯 Production Ready - Enterprise-grade monitoring for production deployments\n\nLangfuse Integration\n\nSet LANGFUSE_PUBLIC_KEY and LANGFUSE_SECRET_KEY and NeuroLink exports every AI operation to Langfuse. Pass observability: { langfuse: false } to disable. Full input and output are captured by default; use mask for sensitive data.\n\nIf your application already registers an OpenTelemetry TracerProvider, NeuroLink creates no provider but registers its Langfuse exporter when keys are configured; add createExporterSpanProcessor() to your provider (recommended), or add new LangfuseSpanProcessor() from @langfuse/otel with its own keys (no custom filter is needed because every NeuroLink observation span carries gen_ai.observation.type and infrastructure spans are not exported; NeuroLink's mask, chunking and retry do not apply to it). In serverless, call flushOpenTelemetry() before exit.\n\nThe full guide, including the migration table for removed fields and exports, is Observability.\n\nBasic Setup\n\nEnvironment Variables\n\n| Variable | Description | Default |\n| ----------------------------- | ---------------------------------------------------- | -------------- |\n| LANGFUSE_PUBLIC_KEY | Langfuse public key; with the secret key, enables it | - |\n| LANGFUSE_SECRET_KEY | Langfuse secret key | - |\n| LANGFUSE_BASE_URL | Langfuse host | Langfuse Cloud |\n| OTEL_EXPORTER_OTLP_ENDPOINT | OTLP collector endpoint for traces and metrics | - |\n| OTEL_SERVICE_NAME | Service name | neurolink-ai |\n\n🔭 Proxy Telemetry (OTLP Triple-Signal Export)\n\nWhen running the NeuroLink proxy (neurolink proxy start), OpenTelemetry is automatically initialized. If OTEL_EXPORTER_OTLP_ENDPOINT is set, the proxy exports three signal types via OTLP HTTP:\n\n| Signal | Endpoint | What it captures |\n| ------- | ----------------------------------------- | ------------------------------------------------------------------ |\n| Traces | $OTEL_EXPORTER_OTLP_ENDPOINT/v1/traces | Per-request spans: receive → account selection → upstream → stream |\n| Metrics | $OTEL_EXPORTER_OTLP_ENDPOINT/v1/metrics | Request counters, latency histograms, token usage gauges |\n| Logs | $OTEL_EXPORTER_OTLP_ENDPOINT/v1/logs | Structured request log records with traceId/spanId correlation |\n\nConfiguration: Set OTEL_EXPORTER_OTLP_ENDPOINT (e.g., http://localhost:4318) before starting the proxy. The proxy defaults to service.name=neurolink-proxy.\n\nTrace correlation: Every JSONL request log entry includes traceId and spanId fields, enabling cross-signal correlation in backends like Jaeger, Grafana Tempo, or OpenObserve.\n\nCaller trace linkage: When a calling SDK already has an active trace, NeuroLink forwards W3C traceparent/tracestate headers and x-neurolink-session-id / x-neurolink-user-id / x-neurolink-conversation-id headers into the proxy so proxy spans can attach to the caller trace and preserve session-level attribution.\n\nProvider reuse: If a global TracerProvider is already registered (e.g., by the host application), NeuroLink registers nothing and uses it, avoiding \"already registered\" errors.\n\nOpenObserve dashboard: The maintained proxy dashboard definition lives in docs/assets/dashboards/neurolink-proxy-observability-dashboard.json. For how to read that dashboard and which streams it should use, see Claude Proxy Observability.\n\nLocal OpenObserve Setup For The Proxy\n\nFor a new local setup, use the repo-owned files in scripts/observability/ so the proxy dashboard does not depend on the Curator repo.\nOptional: copy scripts/observability/proxy-observability.env.example to scripts/observability/proxy-observability.env if the default ports or credentials clash with your machine.\nStart OpenObserve, start the OTEL collector, and import the dashboard:\nStart the proxy with the collector endpoint printed by the setup script. W","hierarchy":{"lvl0":"Observability","lvl1":"📊 Enterprise Telemetry Guide","lvl2":"","lvl3":""}},
|
|
@@ -8631,7 +8631,7 @@
|
|
|
8631
8631
|
{"objectID":"1c47756e94074edc971a80261131a33ac5db639c93c04c8432021b9054f03db9","title":"Task 10: MCP docs server — server entry point","url":"/docs/plans/2026-02-25-og-images-mcp-docs-server#task-10-mcp-docs-server-server-entry-point","content":"Files:\nCreate: $WORKSPACE/neurolink-fork/fix/documentation-issues/docs-site/mcp-server/index.ts\n\nStep 1: Create the server entry point\n\nThis is the main MCP server file. It loads the search index, creates the MiniSearch instance, registers 6 tools, and starts either a stdio or HTTP transport based on command-line args.\n\nStep 2: Commit","hierarchy":{"lvl0":"Plans","lvl1":"Dynamic OG Images + MCP Docs Server — Implementation Plan","lvl2":"Task 10: MCP docs server — server entry point","lvl3":""}},
|
|
8632
8632
|
{"objectID":"51d3370d8d591ff5379ea49ba970dafeb1b3a7aec50c76609ffa0b46e2e92b75","title":"Task 11: CLI neurolink docs command","url":"/docs/plans/2026-02-25-og-images-mcp-docs-server#task-11-cli-neurolink-docs-command","content":"Files:\nCreate: $WORKSPACE/neurolink-fork/fix/documentation-issues/src/cli/commands/docs.ts\nModify: $WORKSPACE/neurolink-fork/fix/documentation-issues/src/cli/parser.ts (add import + .command() call)\n\nStep 1: Create docs.ts command\n\nFollow the existing CLI command pattern (yargs CommandModule, static factory method, chalk + ora for UX).\n\nStep 2: Register in parser.ts\n\nAdd import at the top of src/cli/parser.ts (after the existing imports, around line 12):\n\nAdd command registration (after the ragCommand line, around line 208):\n\nStep 3: Verify TypeScript compiles\n\nRun:\n\nExpected: No errors related to docs.ts\n\nStep 4: Commit","hierarchy":{"lvl0":"Plans","lvl1":"Dynamic OG Images + MCP Docs Server — Implementation Plan","lvl2":"Task 11: CLI neurolink docs command","lvl3":""}},
|
|
8633
8633
|
{"objectID":"1057bd2e5b4af617fe8fcc6a7e844c3e67afda8aebbf011bf2d6e0e8efbde72e","title":"Task 12: Integration test — build index + verify search","url":"/docs/plans/2026-02-25-og-images-mcp-docs-server#task-12-integration-test-build-index-verify-search","content":"Step 1: Build the docs site to generate search-index.json\n\nRun:\n\nExpected: Build succeeds, [search-index] log lines appear if debug=true\n\nStep 2: Verify the index\n\nRun:\n\nExpected: Shows document count (180+), sections list, sample document title\n\nStep 3: Test search module directly\n\nRun:\n\nExpected: Search returns relevant results, getPage finds the installation page, sections lists all 25+ sections\n\nStep 4: Commit test results (if search-index.json should be tracked)\n\nNote: The search index is generated at build time and should not be committed.","hierarchy":{"lvl0":"Plans","lvl1":"Dynamic OG Images + MCP Docs Server — Implementation Plan","lvl2":"Task 12: Integration test — build index + verify search","lvl3":""}},
|
|
8634
|
-
{"objectID":"ae817272f0ac28614cf7d2bb2429fddd8454e9481734651f339a3bd97a14b800","title":"Task 13: End-to-end test — stdio MCP server","url":"/docs/plans/2026-02-25-og-images-mcp-docs-server#task-13-end-to-end-test-stdio-mcp-server","content":"Step 1: Test the MCP server starts and responds to tool calls\n\nThe MCP stdio protocol uses JSON-RPC over stdin/stdout. We can test by sending an initialization message and a tool list request.\n\nRun:\n\nExpected: JSON-RPC response with server capabilities, including tools capability\n\nStep 2: Test tool listing\n\nRun:\n\nExpected: Response includes all 6 tools:
|
|
8634
|
+
{"objectID":"ae817272f0ac28614cf7d2bb2429fddd8454e9481734651f339a3bd97a14b800","title":"Task 13: End-to-end test — stdio MCP server","url":"/docs/plans/2026-02-25-og-images-mcp-docs-server#task-13-end-to-end-test-stdio-mcp-server","content":"Step 1: Test the MCP server starts and responds to tool calls\n\nThe MCP stdio protocol uses JSON-RPC over stdin/stdout. We can test by sending an initialization message and a tool list request.\n\nRun:\n\nExpected: JSON-RPC response with server capabilities, including tools capability\n\nStep 2: Test tool listing\n\nRun:\n\nExpected: Response includes all 6 tools: search_docs, get_page, list_sections, get_api_reference, get_examples, get_changelog\n\nStep 3: Final commit","hierarchy":{"lvl0":"Plans","lvl1":"Dynamic OG Images + MCP Docs Server — Implementation Plan","lvl2":"Task 13: End-to-end test — stdio MCP server","lvl3":""}},
|
|
8635
8635
|
{"objectID":"a13a1095799701998f859dc708ab749875d0abd91b9a5da2353631711b56cff8","title":"Summary","url":"/docs/plans/2026-02-25-og-images-mcp-docs-server#summary","content":"| Task | Feature | What |\n| ---- | --------- | ---------------------------------------------------- |\n| 1 | OG Images | Install satori, satori-html, @resvg/resvg-wasm |\n| 2 | OG Images | Font loading utility (Inter 400/600/700) |\n| 3 | OG Images | 4 templates (home, docs, sdk, examples) |\n| 4 | OG Images | API endpoint /api/og with satori + resvg rendering |\n| 5 | OG Images | Update meta tags to use dynamic endpoint |\n| 6 | MCP Docs | Install minisearch, gray-matter |\n| 7 | MCP Docs | Docusaurus search index plugin |\n| 8 | MCP Docs | Types + MiniSearch wrapper |\n| 9 | MCP Docs | 6 MCP tool definitions |\n| 10 | MCP Docs | Server entry (stdio + HTTP) |\n| 11 | MCP Docs | CLI neurolink docs command |\n| 12 | MCP Docs | Integration test — build + verify search |\n| 13 | MCP Docs | E2E test — stdio MCP server |","hierarchy":{"lvl0":"Plans","lvl1":"Dynamic OG Images + MCP Docs Server — Implementation Plan","lvl2":"Summary","lvl3":""}},
|
|
8636
8636
|
{"objectID":"c50bf4233837e38f8002b3306912ad1d3be2daf7c159cf58bfdf1a38a597e90a","title":"Observability API Wiring Implementation Plan","url":"/docs/plans/2026-03-07-observability-api-wiring","content":"Observability API Wiring Implementation Plan\n\nFor Claude: REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.\n\nGoal: Wire the existing observability infrastructure (MetricsAggregator, ExporterRegistry, TokenTracker, SpanSerializer) to the NeuroLink class so the CLI commands (observability status/metrics/exporters/costs and telemetry status/stats) work.\n\nArchitecture: The upstream (v9.17.0) built comprehensive observability infrastructure but never exposed it through the NeuroLink public API. The CLI commands call neurolink.getTelemetryStatus() and neurolink.getMetrics() which don't exist yet. We add these methods, instantiate MetricsAggregator as a singleton, and feed it span data via event listeners on the existing emitter events (generation:end, stream:complete, tool:end).\n\nTech Stack: TypeScript, OpenTelemetry API, NeuroLink event emitter, MetricsAggregator, SpanSerializer\n\nTask 1: Add MetricsAggregator Property and Import\n\nFiles:\nModify: src/lib/neurolink.ts:1-10 (imports), src/lib/neurolink.ts:629 (properties)\n\nStep 1: Add imports\n\nAt the top of src/lib/neurolink.ts, add these imports alongside the existing observability imports:\n\nStep 2: Add private property\n\nAfter private observabilityConfig?: ObservabilityConfig; (line 629), add:\n\nStep 3: Verify build\n\nRun: pnpm run build 2>&1 | grep -c \"error TS\"\nExpected: Errors decrease (getTelemetryStatus/getMetrics still missing, but import errors gone)\n\nStep 4: Commit\n\nTask 2: Implement getTelemetryStatus()\n\nFiles:\nModify: src/lib/neurolink.ts (after isTelemetryEnabled() method, around line 2135)\n\nStep 1: Add the method\n\nAfter the isTelemetryEnabled() method (line 2135), add:\n\nStep 2: Verify build\n\nRun: pnpm run build 2>&1 | grep \"getTelemetryStatus\"\nExpected: No errors for getTelemetryStatus\n\nStep 3: Commit\n\nTask 3: Implement getMetrics()\n\nFiles:\nModify: src/lib/neurolink.ts (after getTelemetryStatus method)\n\nStep 1: Add the method\n\nStep 2: Verify build\n\nRun: pnpm run build 2>&1 | grep \"getMetrics\"\nExpected: No errors for getMetrics\n\nStep 3: Commit\n\nNote (2026-03-30): TelemetryService now automatically detects and reuses an existing global TracerProvider instead of creating a duplicate. If a NodeTracerProvider is already registered (e.g., by the proxy's initializeOpenTelemetry()), TelemetryService adopts it via hasExternalTracerProvider() + adoptExternalTracerProvider(), avoiding \"already registered\" errors.\n\nTask 4: Implement getSpans(), getTraces(), resetMetrics(), recordMetricsSpan()\n\nFiles:\nModify: src/lib/neurolink.ts (after getMetrics method)\n\nStep 1: Add the methods\n\nStep 2: Check MetricsAggregator has these methods\n\nRun: grep -n \"getSpans\\|getTraces\\|reset()\" src/lib/observability/metricsAggregator.ts\n\nIf getSpans() or getTraces() don't exist, add them to MetricsAggregator:\n\nStep 3: Verify build\n\nRun: pnpm run build 2>&1 | grep -c \"error TS\"\nExpected: 0 errors\n\nStep 4: Commit\n\nTask 5: Wire Event Listeners to Feed MetricsAggregator\n\nFiles:\nModify: src/lib/neurolink.ts — constructor (around line 679) and new private method\n\nStep 1: Add private method to create span from event data\n\nAdd this method to the NeuroLink class:\n\nStep 2: Call from constructor\n\nIn the constructor (after this.initializeLangfuse(...) at line 679), add:\n\nStep 3: Verify build\n\nRun: pnpm run build 2>&1 | grep -c \"error TS\"\nExpected: 0 errors\n\nStep 4: Commit\n\nTask 6: Export Observability Types from SDK Index\n\nFiles:\nModify: src/lib/index.ts\n\nStep 1: Add exports\n\nAdd after the existing observability exports (around buildObservabilityConfigFromEnv):\n\nStep 2: Verify build\n\nRun: pnpm run build 2>&1 | grep -c \"error TS\"\nExpected: 0 errors\n\nStep 3: Commit\n\nTask 7: Verify Everything End-to-End\n\nStep 1: Full build\n\nRun: pnpm run build 2>&1 | tail -5\nExpected: \"All good!\" — 0 errors\n\nStep 2: Unit tests\n\nRun: pnpm run test:run 2>&1 | tail -10\nExpected: All tests pass (may have pre-existing TTS timeout)\n\nStep 3: CLI observability commands\n\nExpected: All commands return output without crashing\n\nStep 4: SDK API test\n\nCreate and run test/audit/agent-test-api-wiring.ts:\n\nRun: npx tsx test/audit/agent-test-api-wiring.ts 2>/dev/null\nExpected: All assertions pass\n\nStep 5: Final commit\n\nSummary\n\n| Task | What | Files | Complexity |\n| ---- | ----------------------------------------------------------- | ---------------------------------- | ------------ |\n| 1 | Add imports + MetricsAggregator property | neurolink.ts | Trivial |\n| 2 | Implement getTelemetryStatus() | neurolink.ts | Simple |\n| 3 | Implement getMetrics() | neurolink.ts | Trivial |\n| 4 | Implement getSpans/getTraces/resetMetrics/recordMetricsSpan | neurolink.ts, metricsAggregator.ts | Medium |\n| 5 | Wire event listeners to feed spans ","hierarchy":{"lvl0":"Plans","lvl1":"Observability API Wiring Implementation Plan","lvl2":"","lvl3":""}},
|
|
8637
8637
|
{"objectID":"07d3e814f8e6747915b55e47ff9a2d105764b9cba835a8b1836a429b46e37cc3","title":"Observability API Wiring Implementation Plan","url":"/docs/plans/2026-03-07-observability-api-wiring#observability-api-wiring-implementation-plan","content":"For Claude: REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.\n\nGoal: Wire the existing observability infrastructure (MetricsAggregator, ExporterRegistry, TokenTracker, SpanSerializer) to the NeuroLink class so the CLI commands (observability status/metrics/exporters/costs and telemetry status/stats) work.\n\nArchitecture: The upstream (v9.17.0) built comprehensive observability infrastructure but never exposed it through the NeuroLink public API. The CLI commands call neurolink.getTelemetryStatus() and neurolink.getMetrics() which don't exist yet. We add these methods, instantiate MetricsAggregator as a singleton, and feed it span data via event listeners on the existing emitter events (generation:end, stream:complete, tool:end).\n\nTech Stack: TypeScript, OpenTelemetry API, NeuroLink event emitter, MetricsAggregator, SpanSerializer","hierarchy":{"lvl0":"Plans","lvl1":"Observability API Wiring Implementation Plan","lvl2":"Observability API Wiring Implementation Plan","lvl3":""}},
|
|
@@ -8874,7 +8874,7 @@
|
|
|
8874
8874
|
{"objectID":"9eadab72b198cf6124a2b0027f553a525072d7ef1070eb44b240b8a3ce0712bd","title":"4c. package.json — add test:new-providers","url":"/docs/provider-integration/09-test-suite-spec#4c-packagejson-add-testnew-providers","content":"Optional: extend test:ci:\n\n(Tests skip cleanly when env vars are absent, so adding to CI is safe.)","hierarchy":{"lvl0":"Provider Integration","lvl1":"09 · Test Suite Specification","lvl2":"4c. package.json — add test:new-providers","lvl3":""}},
|
|
8875
8875
|
{"objectID":"0a9d11e9251d213e6349cc6fa8928b16274fe164b6078012e1c3c039536fe6b8","title":"5. Smoke vs. full-suite distinction","url":"/docs/provider-integration/09-test-suite-spec#5-smoke-vs-full-suite-distinction","content":"Smoke tests = single-feature CLI invocations (in 06-testing.md §smoke scripts).\nFull suite = continuous-test-suite-new-providers.ts covering A-L sections.\n\nRun smoke after each milestone for fast feedback. Run the full suite before merging.","hierarchy":{"lvl0":"Provider Integration","lvl1":"09 · Test Suite Specification","lvl2":"5. Smoke vs. full-suite distinction","lvl3":""}},
|
|
8876
8876
|
{"objectID":"11b98289c2b3c40083c15d714a6d38cc1f6cd670434006927bb24b42a81e2837","title":"6. Result-recording workflow","url":"/docs/provider-integration/09-test-suite-spec#6-result-recording-workflow","content":"After running the full suite:\nOpen 08-feature-matrix.md\nFor each [providerName] feature.name PASS, tick ☐ → ☒\nFor each FAIL or unexpected SKIP, add a footnote explaining why\nCommit the updated matrix as part of the test PR — it becomes the project's living \"what works\" document","hierarchy":{"lvl0":"Provider Integration","lvl1":"09 · Test Suite Specification","lvl2":"6. Result-recording workflow","lvl3":""}},
|
|
8877
|
-
{"objectID":"253ee1a2774cc5b0ae63a499e3772b4b35c2543eb716e8bf6882b7bb90e608dd","title":"7. CI considerations","url":"/docs/provider-integration/09-test-suite-spec#7-ci-considerations","content":"Cloud-provider tests (DeepSeek, NIM) cost money. Default CI: env vars unset → suite skips clean.\nNightly: GitHub secrets provide
|
|
8877
|
+
{"objectID":"253ee1a2774cc5b0ae63a499e3772b4b35c2543eb716e8bf6882b7bb90e608dd","title":"7. CI considerations","url":"/docs/provider-integration/09-test-suite-spec#7-ci-considerations","content":"Cloud-provider tests (DeepSeek, NIM) cost money. Default CI: env vars unset → suite skips clean.\nNightly: GitHub secrets provide DEEPSEEK_API_KEY, NVIDIA_NIM_API_KEY for full coverage.\nLocal provider tests (LM Studio, llama.cpp): only run if those servers are running — typical CI runners won't have them. Provide opt-in flag RUN_LOCAL_PROVIDERS=1 if you want to enforce them on a self-hosted runner.","hierarchy":{"lvl0":"Provider Integration","lvl1":"09 · Test Suite Specification","lvl2":"7. CI considerations","lvl3":""}},
|
|
8878
8878
|
{"objectID":"d85a072efd0e44e8de43f9f1a6fbe0b9b0416304663edb958840c8a7198fafac","title":"8. What this suite does NOT cover (out of scope for v1)","url":"/docs/provider-integration/09-test-suite-spec#8-what-this-suite-does-not-cover-out-of-scope-for-v1","content":"| Out of scope | Reason | Future task |\n| --------------------------- | ----------------------------------------------- | ---------------------------------- |\n| Embeddings (F1, F2) | Not implemented in any of the 4 providers in v1 | Add when embed is wired up |\n| Multi-region failover | Not provider-specific | covered by existing failover tests |\n| Cost-budget enforcement | Not provider-specific | exists in evaluation suite |\n| Image generation (output) | None of the 4 providers generate images | n/a |\n| Audio I/O | None of the 4 do TTS/STT | n/a |\n| Workflow engine integration | Provider-agnostic; covered by test:workflow | exists |","hierarchy":{"lvl0":"Provider Integration","lvl1":"09 · Test Suite Specification","lvl2":"8. What this suite does NOT cover (out of scope for v1)","lvl3":""}},
|
|
8879
8879
|
{"objectID":"9e0a9c6c9d4cbe48106df9b195fb87bd431013fce21480562aa85a9da0db233c","title":"9. Cross-references","url":"/docs/provider-integration/09-test-suite-spec#9-cross-references","content":"Provider × feature matrix: 08-feature-matrix.md\nPer-provider test specs: 06-testing.md\nImplementation order (test milestones): 07-implementation-order.md\nTest code: test/continuous-test-suite-new-providers.ts (created in §3)","hierarchy":{"lvl0":"Provider Integration","lvl1":"09 · Test Suite Specification","lvl2":"9. Cross-references","lvl3":""}},
|
|
8880
8880
|
{"objectID":"b7c366e7ad26b97a26621b7dad576d81209c9980b265e940f54323c205511401","title":"FINAL — After exhaustive 13-iteration debugging","url":"/docs/provider-integration/10-test-results-final","content":"FINAL — After exhaustive 13-iteration debugging\n\nGenerated: 2026-04-28\nBranch: feat/provider-intgeration (yes, the typo is the actual branch name; rebased onto origin/release @ 2e09a7c8)\nTotal cells run: 70+ across 17 test suites × 4 new providers\n\nThe Test Infrastructure Bugs Found and Fixed (the user was right)\n\nThe user said \"99% sure these are bugs, not capability issues.\" They were correct.\n\nBug #1 — Tests import from dist/ not src/\nAll my pricing.ts and provider.ts code fixes for iters 5-8 had zero effect because tests load dist/\nRequired full pnpm run build after each src change\nOnce dist was rebuilt: llamacpp/tracing Cost on Spans flipped FAIL → PASS, lm-studio/observability flipped FAIL → PASS, etc.\n\nBug #2 — Budget = 0 on memory/context/mcp tests for unknown providers\n\n12 test suite files had this exact pattern:\n\nFor our new providers (lm-studio, llamacpp, deepseek, nvidia-nim) that aren't in the local PROVIDER_MAX_TOKENS map, fallback was 8192. For LM Studio's 8192 context window, this set maxTokens = contextWindow → availableInputTokens = contextWindow - outputReserve = 8192 - 8192 = 0 → every single generate immediately fails with \"Budget: 0 tokens\".\n\nFix shipped to 12 test files:\nLowered fallback to 1024 instead of 8192\nAdded explicit entries for the 4 new providers\n\nFiles fixed: continuous-test-suite-{context,evaluation,evaluation-scoring,mcp,mcp-http,media-gen,memory,observability,ppt,session-memory-bugs,tts,workflow}.ts\n\nBug #3 — _default sentinel in pricing.ts not used as fallback\n\nThe pricing lookup used _default as a literal map key for prefix-matching, never as a \"no model matched\" fallback. For local providers that only have _default pricing entry, this returned undefined → cost = 0.\nFixed: filter _default from prefix matches, use it as provider-level fallback.\n\nBug #4 — Pricing rates for local providers rounded to 0\n\nWith rate 1e-12 per token, Math.round(cost * 1e6) / 1e6 rounded to 0 for any reasonable token count.\nIteration history: an earlier round bumped the rates to $1/M tokens so a symbolic non-zero cost would survive the 6-decimal rounding.\nFinal shipped: lm-studio and llamacpp provider-level _default rates are set to 0. Local inference has no upstream USD price, so any non-zero rate would fabricate spend in analytics/spans. calculateCost() returns 0 for zero rates and the CLI / span renderers already treat 0 as \"no billable cost\" (no $ shown).\n\nBug #5 — Provider model name not persisting after auto-discovery\n\nWhen TEST_MODEL=\"\", llamaCpp/lmStudio's auto-discovery set this.discoveredModel but NOT this.modelName. Since TelemetryHandler and other handlers were constructed BEFORE auto-discovery and cached the empty modelName, pricing lookup failed and result.model came back as \"\" or undefined.\nFixed: BaseProvider.modelName was made writable, and a new protected refreshHandlersForModel(model) rebuilds the composed handlers (MessageBuilder, StreamHandler, TelemetryHandler, GenerationHandler, Utilities) and pushes the resolved model onto the active OTEL span. Both lmStudio.ts and llamaCpp.ts call it after /v1/models discovery, so pricing / span / log metadata always reports the actual loaded model. No TS-cast escape — direct field assignment, no readonly.\n\nBug #6 — Hono test server using undocumented 30s default timeout\n\ntest/continuous-test-suite-client.ts created a Hono server without explicit timeout → silently used 30s default → all generate calls with system prompt + tools (6000+ tokens) hit Gateway Timeout for local providers.\nFixed: pass timeout: TEST_CONFIG.timeout to createServer config.\n\nBug #7 — js-yaml runtime dep missing\n\nproxy Config Loading test does require(\"js-yaml\") but it wasn't in package.json. Fixed: added js-yaml and @types/js-yaml as devDeps.\n\nBug #8 — Missing test scripts in package.json\n\ntest:dynamic, test:proxy, test:bugfixes test files existed but had no pnpm scripts. Fixed: added all 3.\n\nBug #9 — Hardcoded provider: \"vertex\" in generic tests\nGemini 3 - DisableTools test: hardcoded provider: \"vertex\", model: \"gemini-3-flash-preview\". Fixed: uses TEST_PROVIDER, renamed to DisableTools.\nContext Compaction Vertex Flash/Pro tests: hardcoded provider: \"vertex\" inside the loop. Fixed: uses TEST_PROVIDER if set, falls back to vertex.\n\nBug #10 — Observability Spans test only validated Pipeline B\n\nThe test failed for OpenAI-compat providers because they intentionally use Pipeline A (AI SDK + Langfuse OTEL) and skip Pipeline B span emission. Fixed: test now SKIPs gracefully with explanatory message instead of failing.\n\nFinal Sub-test Pass Rates (best-of-iterations across all matrix runs)\n\nAggregation method: per-provider sub-test counts are the union across every\nmatrix iteration recorded during validation. A sub-test counts as PASS if it\npassed in any iteration; FAIL only when it never passed. This is why totals\nper provider exceed the 96-test cells in a single matrix run and why pass-rates\nhere may differ from the headline 380/386 reported in a single PR-summary ru","hierarchy":{"lvl0":"Provider Integration","lvl1":"FINAL — After exhaustive 13-iteration debugging","lvl2":"","lvl3":""}},
|
|
@@ -8891,7 +8891,7 @@
|
|
|
8891
8891
|
{"objectID":"bcf5e90a383d63f33af487ff7e04c1f729ee0e8157710df56bcc94bf7f3dc0e9","title":"Bug #9 — Hardcoded provider: \"vertex\" in generic tests","url":"/docs/provider-integration/10-test-results-final#bug-9-hardcoded-provider-vertex-in-generic-tests","content":"Gemini 3 - DisableTools test: hardcoded provider: \"vertex\", model: \"gemini-3-flash-preview\". Fixed: uses TEST_PROVIDER, renamed to DisableTools.\nContext Compaction Vertex Flash/Pro tests: hardcoded provider: \"vertex\" inside the loop. Fixed: uses TEST_PROVIDER if set, falls back to vertex.","hierarchy":{"lvl0":"Provider Integration","lvl1":"FINAL — After exhaustive 13-iteration debugging","lvl2":"Bug #9 — Hardcoded provider: \"vertex\" in generic tests","lvl3":""}},
|
|
8892
8892
|
{"objectID":"1da4b8125c6db4b5aa4849dba3c8056d069904631489f0ab03c416711644f319","title":"Bug #10 — Observability Spans test only validated Pipeline B","url":"/docs/provider-integration/10-test-results-final#bug-10-observability-spans-test-only-validated-pipeline-b","content":"The test failed for OpenAI-compat providers because they intentionally use Pipeline A (AI SDK + Langfuse OTEL) and skip Pipeline B span emission. Fixed: test now SKIPs gracefully with explanatory message instead of failing.","hierarchy":{"lvl0":"Provider Integration","lvl1":"FINAL — After exhaustive 13-iteration debugging","lvl2":"Bug #10 — Observability Spans test only validated Pipeline B","lvl3":""}},
|
|
8893
8893
|
{"objectID":"f1500e489ff969c23892313e068b8389f9b6a1f700ef351820919c50f3ffc119","title":"Final Sub-test Pass Rates (best-of-iterations across all matrix runs)","url":"/docs/provider-integration/10-test-results-final#final-sub-test-pass-rates-best-of-iterations-across-all-matrix-runs","content":"Aggregation method: per-provider sub-test counts are the union across every\nmatrix iteration recorded during validation. A sub-test counts as PASS if it\npassed in any iteration; FAIL only when it never passed. This is why totals\nper provider exceed the 96-test cells in a single matrix run and why pass-rates\nhere may differ from the headline 380/386 reported in a single PR-summary run\n(which counts only the latest iteration per cell).\n\nPass-rate is computed as PASS / (PASS + FAIL) (i.e. attempted sub-tests only;\nSKIPs are excluded from the denominator because they don't represent a\nprovider-level pass/fail signal). The \"Total sub-tests\" column is PASS + FAIL +\nSKIP so it can exceed PASS + FAIL.\n\n| Provider | Total sub-tests | PASS | FAIL | SKIP | Pass-rate (PASS / PASS+FAIL) |\n| -------------- | --------------- | ---- | ---- | ---- | --------------------------------------- |\n| DeepSeek | 219 | 217 | 2 | 0 | 99.1% |\n| NVIDIA NIM | 202 | 184 | 1 | 17 | 99.5% (excluding env-blocked proxy) |\n| LM Studio | 233 | 218 | 2 | 13 | 99.1% |\n| llama.cpp | 220 | 213 | 1 | 6 | 99.5% |\n\nSub-test fail breakdown — historical snapshot from the iter-13 matrix run. The companion investigation page (11-test-failure-investigation.md) records the root cause and shipped fix for each entry below; that doc is the canonical state. Re-running the matrix today reproduces a different (smaller) failure set. The table is retained as evidence of the iteration trail.","hierarchy":{"lvl0":"Provider Integration","lvl1":"FINAL — After exhaustive 13-iteration debugging","lvl2":"Final Sub-test Pass Rates (best-of-iterations across all matrix runs)","lvl3":""}},
|
|
8894
|
-
{"objectID":"ef060ef123376c87959d44ac3bd808d7f23d4667d4b8475b2c9c394e674999be","title":"Test infrastructure issues that block additional cells","url":"/docs/provider-integration/10-test-results-final#test-infrastructure-issues-that-block-additional-cells","content":"These are NOT provider-integration bugs:\n600s gtimeout/timeout too short for local model memory/context tests — they need 1200s+ for 15 multi-turn tests. Tests are passing individually (logs show 11+ ✅ markers before timeout) but cumulative wall time exceeds budget. (run-provider-matrix.sh auto-detects whichever of gtimeout / timeout is on PATH.)\nCross-provider tests in providers suite fail because Ollama/Anthropic/Bedrock environments aren't configured.\nSome test files spawn the model in their own SDK instance — these don't respect the loaded LM Studio context length and crash with \"
|
|
8894
|
+
{"objectID":"ef060ef123376c87959d44ac3bd808d7f23d4667d4b8475b2c9c394e674999be","title":"Test infrastructure issues that block additional cells","url":"/docs/provider-integration/10-test-results-final#test-infrastructure-issues-that-block-additional-cells","content":"These are NOT provider-integration bugs:\n600s gtimeout/timeout too short for local model memory/context tests — they need 1200s+ for 15 multi-turn tests. Tests are passing individually (logs show 11+ ✅ markers before timeout) but cumulative wall time exceeds budget. (run-provider-matrix.sh auto-detects whichever of gtimeout / timeout is on PATH.)\nCross-provider tests in providers suite fail because Ollama/Anthropic/Bedrock environments aren't configured.\nSome test files spawn the model in their own SDK instance — these don't respect the loaded LM Studio context length and crash with \"n_keep > n_ctx\".","hierarchy":{"lvl0":"Provider Integration","lvl1":"FINAL — After exhaustive 13-iteration debugging","lvl2":"Test infrastructure issues that block additional cells","lvl3":""}},
|
|
8895
8895
|
{"objectID":"7373e4607cba383bfb78814fd86fcec8c243b0cc30ac68e4bdbdc83f283f5790","title":"New code","url":"/docs/provider-integration/10-test-results-final#new-code","content":"New code","hierarchy":{"lvl0":"Provider Integration","lvl1":"FINAL — After exhaustive 13-iteration debugging","lvl2":"New code","lvl3":""}},
|
|
8896
8896
|
{"objectID":"fd234cc810ed25f36cc4a92fcd3c23a4c034be4d22b3e1514dddce6eec3cd269","title":"Modified core","url":"/docs/provider-integration/10-test-results-final#modified-core","content":"Modified core","hierarchy":{"lvl0":"Provider Integration","lvl1":"FINAL — After exhaustive 13-iteration debugging","lvl2":"Modified core","lvl3":""}},
|
|
8897
8897
|
{"objectID":"eacbe80ee9954bf9bfcfd8e043f6b62dd8f751a43acff8d1ad5aacb772fa88f3","title":"Test infrastructure fixes","url":"/docs/provider-integration/10-test-results-final#test-infrastructure-fixes","content":"Test infrastructure fixes","hierarchy":{"lvl0":"Provider Integration","lvl1":"FINAL — After exhaustive 13-iteration debugging","lvl2":"Test infrastructure fixes","lvl3":""}},
|
|
@@ -9239,7 +9239,7 @@
|
|
|
9239
9239
|
{"objectID":"87e58d57ec2c73d698a7d8c3f3fe75cfc3267d0b0cfebea19bb03cdeaa59cfa4","title":"Context and output","url":"/docs/provider-integration/pilots/runinfra-source-pilot#context-and-output","content":"The model page states \"Context window 262,144 tokens\" and \"Maximum generated\noutput 262,144 tokens\" for this exact model. The chat-completions reference\ngives the per-request cap as \"the model's remaining context, that is its\ncontext window minus your prompt\" and says oversized values are clamped, never\nrefused. So 262,144 is a ceiling, not 262,144 usable output beside a full\nprompt. The schema accepts equal context and output values, and other catalog\nentries already declare them. This SDK path sends neither ceiling on the wire,\nso the owned endpoint in the suite below cannot observe them.","hierarchy":{"lvl0":"Provider Integration","lvl1":"RunInfra text and streaming source pilot","lvl2":"Context and output","lvl3":""}},
|
|
9240
9240
|
{"objectID":"5df66b1ea84ba2e6902cfa35233a51fce0cbe1ed4588587bc7216704fbeb68b9","title":"Billing","url":"/docs/provider-integration/pilots/runinfra-source-pilot#billing","content":"The model page lists \"USD, pay per token\" rates: $0.05 per 1M input tokens,\n$0.01 per 1M cached input tokens and $0.15 per 1M output tokens. They were read\non 2026-10-12, are not recorded in the catalog JSON and may change. The plans\npage lists a credit as worth $1, a minimum top-up of $5, top-up credit that\nlasts one year from purchase, and a $1 credit \"Free on signup\", \"once per\naccount, never expires\".\n\nThe catalog therefore uses promotional-credit, whose type comment in\nsrc/lib/types/providerCatalog.ts says a promotional allowance is conditional\nand that setup text must describe eligibility, activation and expiry without\nimplying current account entitlement. A credit given once per account is not a\nfree tier, and this entry does not claim one. no-free-tier would drop a\ncredit the vendor lists, free-tier and free-with-card would claim more than\nwas read, and the xiaomi-mimo and NAVER CLOVA Studio entries use\npromotional-credit for conditional bonus or signup credit. Whether a\nparticular account receives the credit, and what a signup asks of the account,\nwas not established.","hierarchy":{"lvl0":"Provider Integration","lvl1":"RunInfra text and streaming source pilot","lvl2":"Billing","lvl3":""}},
|
|
9241
9241
|
{"objectID":"e69517ed7b2771cf0c85dfdcd2b3ecd0ef47363b1d02980940f7d5e80a1bab43","title":"Availability","url":"/docs/provider-integration/pilots/runinfra-source-pilot#availability","content":"Availability is a runtime field. The model page said \"Available\" on\n2026-10-12, but the vendor changelog says the model was listed ahead of its\npublic opening. The chat-completions reference says a hosted model can be\ntemporarily paused and then answers 503 with code hosted_model_paused.\nNo API call was made, so availability to any account is unverified.","hierarchy":{"lvl0":"Provider Integration","lvl1":"RunInfra text and streaming source pilot","lvl2":"Availability","lvl3":""}},
|
|
9242
|
-
{"objectID":"c44a6f29a351e862c3dcea298b1cbc52129fe85426e9e2e861169977e59d80e8","title":"Evidence caveats","url":"/docs/provider-integration/pilots/runinfra-source-pilot#evidence-caveats","content":"Context window 262144 and maximum generated output 262144 are both stated on\n the vendor's model page for this exact model. The chat-completions reference\n says per-request output is capped at the model's remaining context (window\n minus prompt) and that oversized values are clamped, so 262144 output is a\n ceiling, not capacity beside a full prompt. This SDK path does not send either\n ceiling on the wire; the owned endpoint cannot observe them.\nAvailability is a runtime field. The model page said Available on\n 2026-10-12; the vendor changelog says the model was listed ahead of its public\n opening and a paused model answers 503
|
|
9242
|
+
{"objectID":"c44a6f29a351e862c3dcea298b1cbc52129fe85426e9e2e861169977e59d80e8","title":"Evidence caveats","url":"/docs/provider-integration/pilots/runinfra-source-pilot#evidence-caveats","content":"Context window 262144 and maximum generated output 262144 are both stated on\n the vendor's model page for this exact model. The chat-completions reference\n says per-request output is capped at the model's remaining context (window\n minus prompt) and that oversized values are clamped, so 262144 output is a\n ceiling, not capacity beside a full prompt. This SDK path does not send either\n ceiling on the wire; the owned endpoint cannot observe them.\nAvailability is a runtime field. The model page said Available on\n 2026-10-12; the vendor changelog says the model was listed ahead of its public\n opening and a paused model answers 503 hosted_model_paused. No API call was\n made, so availability to any account is unverified.\nBilling is usage-priced (USD per token) with prepaid $1 credits, a $5 minimum\n top-up and a one-time $1 signup credit per account. Prices and credit terms\n were read from vendor pages and not tried on an account; they may change.\nThe vendor documents a reasoning_effort default for this model under JSON\n response formats, and says usage.outputTokenDetails.reasoningTokens reports\n 0 even when the model reasoned. Thinking, tools, structured output and vision\n are declared off here as a scope limit; none was probed, and whether streamed\n output carries reasoning text was never observed.\nThe chat-completions reference says this model reasons by default, that\n reasoning tokens count toward max_tokens before the answer, and that a\n smaller budget can be spent entirely on reasoning and return a completion\n whose content is empty. The suite's max_tokens: 32 is a wire marker for\n the owned endpoint, not a recommendation, and the empty-content behavior was\n not observed.","hierarchy":{"lvl0":"Provider Integration","lvl1":"RunInfra text and streaming source pilot","lvl2":"Evidence caveats","lvl3":""}},
|
|
9243
9243
|
{"objectID":"83c82bf158f29ba1c9e527fe1e693bdc703cdd750f10c3e7380b6d7ae2f9777c","title":"Local public contract","url":"/docs/provider-integration/pilots/runinfra-source-pilot#local-public-contract","content":"test/continuous-test-suite-runinfra-pilot.ts runs twelve cases through the\nbuilt public SDK and built CLI, with optional --package-root support for a\nlater installed consumer:\n\n| Cases | Count | Required observation |\n| ---------------------------------------------- | ----: | ------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| SDK/CLI generate/stream default | 4 | Actual catalog default, /v1/chat/completions, Bearer header, unique user prompt, max_tokens: 32, stream mode, no tools/tool choice, answer |\n| SDK/CLI generate/stream invalid explicit model | 4 | All wire preconditions pass before HTTP 400 rejection; no fallback or successful reply |\n| Key variables | 4 | RUNINFRA_API_KEY alone reaches the wire (SDK and CLI), RUNINFRA_GATEWAY_KEY wins when both are set, and no key refuses before the wire and names it |\n\nThe fixture strips real credentials before imports, uses temporary homes and\npoints the provider at an owned random-port listener. Public MODEL_CONFIG_URL\nuses that same listener's HEAD /health and GET /api/v1/models; a\nschema-valid empty registry keeps the provider's actual catalog default in\ncontrol. The listener is the only server involved: no vendor host is contacted.","hierarchy":{"lvl0":"Provider Integration","lvl1":"RunInfra text and streaming source pilot","lvl2":"Local public contract","lvl3":""}},
|
|
9244
9244
|
{"objectID":"d10202fe001113e5e0487518b154b04756ccb490eeb5a1800a8262aecfcf4936","title":"Provenance and remaining gates","url":"/docs/provider-integration/pilots/runinfra-source-pilot#provenance-and-remaining-gates","content":"The legacy evidence.rosterVerified slot carries the explicit\nVENDOR_DOCS_ONLY_NOT_ROSTER_VERIFIED marker and evidence.billingProbe\ncarries PUBLIC_DOCS_ONLY_ACCOUNT_NOT_TESTED; there is no HTTP status or auth\nprobe, and liveMatrix is null. evidence.addedInPR is the introduction pull\nrequest URL (https://github.com/juspay/neurolink/pull/1983), set after the pull\nrequest existed; it was PENDING_PR while the work was local. Source-stage admission does not certify current account or API\navailability.\n\nStill pending and separate: an authenticated GET /v1/models roster (the\nvendor's chat-completions reference says a temporarily paused model is\nreported there), a funded-account\nlive matrix, installed-consumer acceptance and any delivery claim.","hierarchy":{"lvl0":"Provider Integration","lvl1":"RunInfra text and streaming source pilot","lvl2":"Provenance and remaining gates","lvl3":""}},
|
|
9245
9245
|
{"objectID":"a2a1b3f3eace26df9887f72342446b632c131c811f5b8d9a34eea9f58c1c1ae8","title":"Xiaomi MiMo text and streaming pilot","url":"/docs/provider-integration/pilots/xiaomi-mimo-source-pilot","content":"Xiaomi MiMo text and streaming pilot\n\nThis local source pilot selects Xiaomi MiMo's usage-priced mimo-v2.6-flash\nmodel through https://api.xiaomimimo.com/v1/chat/completions. Its declared\nscope is text generation and streaming. Source preparation, public contract\nacceptance, installed-package acceptance, current account/API availability and\ndelivery are separate gates. This draft gives no live, delivered-provider or\nprovider-target credit.\n\nExact source facts\n\nAll pages below are on the vendor's own documentation host, mimo.mi.com, and\nwere retrieved on 2026-10-10 (hashes at the end).\nContext and output integers. The model table (model.md) shows only the\n rounded labels 1M and 128K, so nothing was expanded from it. The integers\n come from two vendor-authored client configurations that bind them to the\n exact id mimo-v2.6-flash: the OpenClaw guide (\"contextWindow\": 1048576,\n \"maxTokens\": 131072) and the OpenCode guide (\"limit\": { \"context\": 1048576,\n\"output\": 131072 }). Both name https://api.xiaomimimo.com/v1 as the\n pay-as-you-go base URL. The two pages use different client schemas and agree.\n The API reference independently gives [1, 131072] as the required range of\n max_completion_tokens and a default of 131072 for mimo-v2.6-flash; that\n parameter covers visible plus reasoning tokens. No first-party prose or spec\n table states the context integer; the OpenClaw and OpenCode snippets are the\n only bindings, and 1048576 equals 1024 * 1024.\nRoute and auth. The API reference documents\n https://api.xiaomimimo.com/v1/chat/completions and two alternative headers,\n api-key: $MIMO_API_KEY and Authorization: Bearer $MIMO_API_KEY. This entry\n uses the Bearer form.\nLifecycle. mimo-v2.6-flash is current and is the named replacement for\n the retiring mimo-v2.5; it is not itself on a retirement schedule. The\n deprecation page gives mimo-v2.5 and mimo-v2.5-pro a 10:00 (UTC+8)\n switch on 2026-10-14 in its table and 18:00 (UTC+8) in a note on the same page.\n The discrepancy is preserved here; no exact switch instant is certified.\n\nBilling\n\nThe API is usage-priced: the pay-as-you-go page says it \"consumes the account\nbalance based on the actual Token usage\". The promotions page describes bonus\ncredit, obtained through Refer & Earn or new-user registration, that \"can be\nused to offset pay-as-you-go API usage\" and is \"currently valid for 40 days\".\nIt also says eligibility, credit amounts and payout rules vary by campaign. The\ncatalog therefore uses promotional-credit, following the\nNAVER CLOVA Studio profile (src/lib/providers/catalog/naver-clova-studio.json).\nThis is not a free tier. Whether a payment method or identity verification is\nrequired to obtain a working key was not established for the real-time API, the\ncredit amount and eligibility were not checked on an account, and prices are\nnot recorded (the pay-as-you-go page lists CNY and USD and they were not\nconverted).\n\nScope that is deliberately not declared\n\nThe capability booleans limit the pilot's declared scope; false is not\nevidence that the vendor lacks a feature. Tools, vision, structured output and\nSDK thinking controls are not declared because none has been probed. The\ndeprecation page notes that in thinking mode mimo-v2.6-flash ignores custom\ntemperature and top_p, so a thinking mode exists; this entry exposes no\ncontrol for it. Token Plan keys and base URLs are a separate subscription\nproduct and are out of scope.\n\nKnown gaps the local contract cannot close\nOutput-budget field name. The vendor's request reference lists only\n max_completion_tokens. The profile's quirks.maxTokensField maps the\n caller's fitted maxTokens budget to that field and omits max_tokens on\n generate and stream requests. An owned endpoint refuses the obsolete field\n and requires the exact requested budget before answering. This proves the\n emitted local wire contract; actual vendor acceptance and enforcement remain\n unverified. The parameter includes visible plus reasoning tokens.\nStreaming usage option. The vendor's reference documents stream but\n not stream_options. The profile's quirks.omitStreamOptions therefore omits\n that extension, preserving ordinary SSE streaming. Returned usage is still\n consumed if the vendor supplies it; no streaming usage completeness is claimed.\nEnvironment variable. The vendor's own examples name MIMO_API_KEY. The\n catalog's derived primary variable is XIAOMI_MIMO_API_KEY, and MIMO_API_KEY\n is read as a fallback through wire.apiKeyFallbackEnvVars, the mechanism the\n Sakana AI entry also uses. Removing the fallback is a one-line change if the\n maintainers prefer the pure convention.\nCeilings are source-bound only. The shared wire builder fits the output\n budget only to runtime-discovered ceilings, so the catalog's contextWindow and\n maxOutputTokens never appear on the wire, and no public CLI command or SDK\n export was found that reads them back. The owned endpoint cannot observe\n them; they rest on the cited source bindings ","hierarchy":{"lvl0":"Provider Integration","lvl1":"Xiaomi MiMo text and streaming pilot","lvl2":"","lvl3":""}},
|
|
@@ -9739,7 +9739,7 @@
|
|
|
9739
9739
|
{"objectID":"5850b5e6ab599e2c9e2952653e0db0616ccd777c908edd1b43dd4381d0d1eab7","title":"12. OpenAI Compatible","url":"/docs/reference/provider-comparison#12-openai-compatible","content":"Provider ID: openai-compatible\nDefault Model: Auto-discovered\n\nStrengths:\nWorks with any OpenAI-compatible endpoint\nvLLM, FastChat, LocalAI support\nCustom deployment flexibility\nAuto-discovers available models\n\nWeaknesses:\nCapabilities entirely backend-dependent\nNo standardized capability detection\nConfiguration varies by provider\nAuthentication varies\n\nBest For:\nCustom deployments (vLLM, FastChat)\nInternal model serving\nPrivate cloud deployments\nWhen you control the backend\n\nPricing:\nDepends entirely on backend provider\nSelf-hosted: Infrastructure costs only\nCloud-hosted: Provider-specific pricing","hierarchy":{"lvl0":"Reference","lvl1":"AI Provider Comparison Guide","lvl2":"12. OpenAI Compatible","lvl3":""}},
|
|
9740
9740
|
{"objectID":"260fb153eca401bd1ca6ed426b7f594aba2907dd9389b79d0bfe62380fc8a7be","title":"13. OpenRouter","url":"/docs/reference/provider-comparison#13-openrouter","content":"Provider ID: openrouter\nDefault Model: anthropic/claude-3-5-sonnet\n\nStrengths:\nAccess to 300+ models from 60+ providers\nMany FREE models available\nAutomatic failover\nUnified API for all models\nCost tracking\n\nWeaknesses:\nTool support varies by model\nVision support varies by model\nCredit-based pricing system\nModel availability can change\n\nBest For:\nAccess to many providers via one API\nCost optimization (free models available)\nRapid prototyping\nWhen you want provider flexibility\n\nPricing:\nFree models available:\nGoogle Gemini 2.0 Flash: FREE\nMeta Llama 3.3 70B: FREE\nQwen models: FREE\nPaid models:\nClaude 3.5 Sonnet: $3.00/$15.00 per 1M tokens\nGPT-4o: $2.50/$10.00 per 1M tokens","hierarchy":{"lvl0":"Reference","lvl1":"AI Provider Comparison Guide","lvl2":"13. OpenRouter","lvl3":""}},
|
|
9741
9741
|
{"objectID":"e3aa53a228f2eb44916ad3d765c881b2565668588e1c94e1df543232a78413f6","title":"14. DeepSeek","url":"/docs/reference/provider-comparison#14-deepseek","content":"Provider ID: deepseek\nDefault Model: deepseek-chat\nAliases: ds\n\nStrengths:\nVery competitive pricing (among the cheapest frontier-quality models)\ndeepseek-reasoner (R1) — strong open-weight reasoning model\nOpenAI-compatible API — minimal integration overhead\nTool calling supported on both models\n\nWeaknesses:\nNo vision / multimodal support\nCloud-only (data sent to DeepSeek servers in China — consider for compliance)\nNo PDF support\n\nBest For:\nCost-sensitive text and reasoning workloads\nAgentic tool-calling pipelines where budget matters\nExperimenting with open-weight-quality reasoning at low cost\n\nPricing:\ndeepseek-chat (V3): ~$0.14/$0.28 per 1M tokens\ndeepseek-reasoner (R1): ~$0.55/$2.19 per 1M tokens","hierarchy":{"lvl0":"Reference","lvl1":"AI Provider Comparison Guide","lvl2":"14. DeepSeek","lvl3":""}},
|
|
9742
|
-
{"objectID":"6e5ecdf1db31b0952ff3e3ab0758af1a084052e528319de6bc88f64cef9c3d97","title":"15. NVIDIA NIM","url":"/docs/reference/provider-comparison#15-nvidia-nim","content":"Provider ID: nvidia-nim\nDefault Model: meta/llama-3.3-70b-instruct\nAliases: nvidia, nim\n\nStrengths:\nAccess to NVIDIA-hosted Llama, Mistral, Nemotron, DeepSeek models\nThinking/reasoning supported on Nemotron-Reasoning and DeepSeek-R1 models\nVision supported on vision-capable models (Phi-3-vision, Llama 3.2 Vision)\nOpenAI-compatible API with NIM-specific extras (
|
|
9742
|
+
{"objectID":"6e5ecdf1db31b0952ff3e3ab0758af1a084052e528319de6bc88f64cef9c3d97","title":"15. NVIDIA NIM","url":"/docs/reference/provider-comparison#15-nvidia-nim","content":"Provider ID: nvidia-nim\nDefault Model: meta/llama-3.3-70b-instruct\nAliases: nvidia, nim\n\nStrengths:\nAccess to NVIDIA-hosted Llama, Mistral, Nemotron, DeepSeek models\nThinking/reasoning supported on Nemotron-Reasoning and DeepSeek-R1 models\nVision supported on vision-capable models (Phi-3-vision, Llama 3.2 Vision)\nOpenAI-compatible API with NIM-specific extras (top_k, min_p, reasoning_budget)\nGraceful retry on 400 errors — drops unsupported extras automatically\n\nWeaknesses:\nTool and vision capability depends entirely on the specific hosted model\nRequires NVIDIA NGC API key\nNo PDF support\n\nBest For:\nRunning NVIDIA-optimized Llama/Mistral/Nemotron models in the cloud\nReasoning workloads via hosted DeepSeek-R1 or Nemotron\nDevelopers already in the NVIDIA ecosystem (NGC, DGX Cloud)\n\nPricing:\nVaries by model; new accounts receive free credits\nSee https://build.nvidia.com/models for per-model pricing","hierarchy":{"lvl0":"Reference","lvl1":"AI Provider Comparison Guide","lvl2":"15. NVIDIA NIM","lvl3":""}},
|
|
9743
9743
|
{"objectID":"3d848b89e6f368d83d5eb4c1857ca90c4fa81391f9da441b10fb82227632408f","title":"16. LM Studio","url":"/docs/reference/provider-comparison#16-lm-studio","content":"Provider ID: lm-studio\nDefault Model: Auto-discovered from running server\nAliases: lmstudio, lms\n\nStrengths:\nCompletely FREE (local execution via LM Studio desktop app)\nMaximum privacy — no data sent to cloud\nAuto-discovers the currently loaded model via /v1/models\nVision supported on compatible models (LLaVA, Llama 3.2 Vision, Qwen-VL, etc.)\nTool calling supported on compatible models\n\nWeaknesses:\nRequires LM Studio app and a loaded model\nModel quality and capability depend entirely on what is loaded\nNo PDF support\nSmall local models may give inconsistent structured output\n\nBest For:\nPrivacy-critical local inference\nOffline / air-gapped environments\nDevelopment and experimentation without cloud costs\nTesting multiple open-weight models via a GUI\n\nPricing:\nFREE (hardware costs only)\nRequires local GPU for best performance","hierarchy":{"lvl0":"Reference","lvl1":"AI Provider Comparison Guide","lvl2":"16. LM Studio","lvl3":""}},
|
|
9744
9744
|
{"objectID":"a0f05ec8e14d9e4fb69779c0c25f1e732ae384b506c5be585c5089cd457f293f","title":"17. llama.cpp","url":"/docs/reference/provider-comparison#17-llamacpp","content":"Provider ID: llamacpp\nDefault Model: Auto-discovered from running llama-server\nAliases: llama.cpp, llama-cpp\n\nStrengths:\nCompletely FREE (local execution via llama-server)\nMaximum privacy — no data sent to cloud\nGGUF model support — run quantized models on CPU or GPU\nAuto-discovers loaded model via /v1/models\nVision supported on compatible models (LLaVA, Llama 3.2 Vision)\nTool calling supported when server started with --jinja flag\n\nWeaknesses:\nRequires building / downloading llama-server and a GGUF model\nTool calling requires --jinja flag at server startup\nModel quality depends on the GGUF model loaded\nNo PDF support\nSmall local models may give inconsistent structured output\n\nBest For:\nMaximum privacy and air-gapped deployments\nCPU inference without a GPU\nRunning heavily quantized models at low resource cost\nPower users who want direct control over model serving\n\nPricing:\nFREE (hardware costs only)\nNo API costs or rate limits","hierarchy":{"lvl0":"Reference","lvl1":"AI Provider Comparison Guide","lvl2":"17. llama.cpp","lvl3":""}},
|
|
9745
9745
|
{"objectID":"7a70d0d5fafc012db75fd708bf54e3db3a35a71ce61eb67049e87218bbc874d4","title":"Voice Providers","url":"/docs/reference/provider-comparison#voice-providers","content":"Voice providers handle audio I/O and are distinct from LLM text-generation providers. They are categorised by function: Text-to-Speech (TTS), Speech-to-Text (STT), and Realtime (bidirectional audio over WebSocket).\n\n| Provider | Type | Protocol | Streaming | Formats | Auth |\n| ------------------- | -------- | ---------------- | --------- | ----------------------------------------------------- | -------------------------------------------------- |\n| google-ai (TTS) | TTS | REST (gRPC SDK) | No | MP3, WAV, OGG | Service Account (GOOGLE_APPLICATION_CREDENTIALS) |\n| openai-tts | TTS | REST | No | MP3, WAV, OGG, Opus | API Key |\n| elevenlabs | TTS | REST | No | MP3, WAV (PCM), Opus | API Key |\n| azure-tts | TTS | REST | No | MP3, WAV (PCM), Opus | API Key + Region |\n| whisper | STT | REST | No | WAV, MP3, M4A, FLAC, OGG, Opus, WebM, MP4, MPEG, MPGA | API Key |\n| google-stt | STT | REST | No | WAV, FLAC, MP3, OGG | API Key or Service Account |\n| deepgram | STT | REST + WebSocket | Yes | WAV, MP3, OGG, FLAC | API Key |\n| azure-stt | STT | REST | No | WAV¹, OGG, Opus | API Key + Region |\n| openai-realtime | Realtime | WebSocket | Yes | PCM16,","hierarchy":{"lvl0":"Reference","lvl1":"AI Provider Comparison Guide","lvl2":"Voice Providers","lvl3":""}},
|
|
@@ -9924,13 +9924,13 @@
|
|
|
9924
9924
|
{"objectID":"ca34f307c204381b1904fe62e5762d2451f439c5f2c8d47083804d9e9ca1f361","title":"Factory Functions","url":"/docs/reference/server-configuration#factory-functions","content":"For quick OpenAPI generation without instantiating the class:","hierarchy":{"lvl0":"Reference","lvl1":"Srvr Cofiguratio Rfrc []","lvl2":"Factory Functions","lvl3":""}},
|
|
9925
9925
|
{"objectID":"8e5b75ed2dd85636a125c03319a725a2c10669870a925448135351aa81e49df9","title":"All Available Schemas","url":"/docs/reference/server-configuration#all-available-schemas","content":"The OpenAPISchemas registry provides access to all built-in schemas:","hierarchy":{"lvl0":"Reference","lvl1":"Srvr Cofiguratio Rfrc []","lvl2":"All Available Schemas","lvl3":""}},
|
|
9926
9926
|
{"objectID":"50b633e0ff979961fac99435d14bff5b692d058757f69642edd9efc0db8c050f","title":"Related Documentation","url":"/docs/reference/server-configuration#related-documentation","content":"Server Adapters Overview - Introduction to server adapters\nSecurity Guide - Security best practices\nDeployment Guide - Deployment strategies and configurations","hierarchy":{"lvl0":"Reference","lvl1":"Srvr Cofiguratio Rfrc []","lvl2":"Related Documentation","lvl3":""}},
|
|
9927
|
-
{"objectID":"efd7e891fd4b311148a6006fb8a03a36f7702832577266f8e750ec6d79d4dd25","title":"NeuroLink Troubleshooting Guide","url":"/docs/reference/troubleshooting","content":"NeuroLink Troubleshooting Guide\n\nVersion: v9.26.1\nLast Updated: March 2026\n\nOverview\n\nThis guide helps diagnose and resolve common issues with NeuroLink, including AI provider connectivity, MCP integration, CLI usage problems, streaming issues, and the generate function migration.\n\nQuick Diagnostics\n\nBefore diving into specific issues, try these quick diagnostics:\n\nQuick Fixes\n\n| Symptom | Resolution |\n| -------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ |\n| Image not found when using --image | Provide an absolute path or run the command from the directory containing the asset. URLs must be HTTPS. |\n| Evaluation model not configured | Set NEUROLINK_EVALUATION_PROVIDER/NEUROLINK_EVALUATION_MODEL, or disable --enableEvaluation until credentials are added. |\n| Redis connection failed in loop mode | Export REDIS_URL before running neurolink loop or start the session with --no-auto-redis. |\n| Model not available in region | Confirm the model supports the requested region and update AWS_REGION / GOOGLE_VERTEX_LOCATION accordingly. |\n| CLI exits after error inside loop | Upgrade to latest @juspay/neurolink and restart the loop; new builds catch errors without exiting. |\n\nQ4 2025 Features -- Common Issues\n\nHuman-in-the-Loop (HITL)\n\n| Issue | Solution |\n| --------------------------------------- | ----------------------------------------------------------------------------------------------------------- |\n| Tool executes without asking permission | Add requiresConfirmation: true to tool definition. See HITL Guide |\n| Confirmation dialog doesn't appear | Handle USER_CONFIRMATION_REQUIRED error in your UI. See HITL Guide |\n| Permission flag not resetting | Call setUserConfirmation(false) after tool execution. See HITL Guide |\n\nGuardrails Middleware\n\n| Issue | Solution
|
|
9927
|
+
{"objectID":"efd7e891fd4b311148a6006fb8a03a36f7702832577266f8e750ec6d79d4dd25","title":"NeuroLink Troubleshooting Guide","url":"/docs/reference/troubleshooting","content":"NeuroLink Troubleshooting Guide\n\nVersion: v9.26.1\nLast Updated: March 2026\n\nOverview\n\nThis guide helps diagnose and resolve common issues with NeuroLink, including AI provider connectivity, MCP integration, CLI usage problems, streaming issues, and the generate function migration.\n\nQuick Diagnostics\n\nBefore diving into specific issues, try these quick diagnostics:\n\nQuick Fixes\n\n| Symptom | Resolution |\n| -------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ |\n| Image not found when using --image | Provide an absolute path or run the command from the directory containing the asset. URLs must be HTTPS. |\n| Evaluation model not configured | Set NEUROLINK_EVALUATION_PROVIDER/NEUROLINK_EVALUATION_MODEL, or disable --enableEvaluation until credentials are added. |\n| Redis connection failed in loop mode | Export REDIS_URL before running neurolink loop or start the session with --no-auto-redis. |\n| Model not available in region | Confirm the model supports the requested region and update AWS_REGION / GOOGLE_VERTEX_LOCATION accordingly. |\n| CLI exits after error inside loop | Upgrade to latest @juspay/neurolink and restart the loop; new builds catch errors without exiting. |\n\nQ4 2025 Features -- Common Issues\n\nHuman-in-the-Loop (HITL)\n\n| Issue | Solution |\n| --------------------------------------- | ----------------------------------------------------------------------------------------------------------- |\n| Tool executes without asking permission | Add requiresConfirmation: true to tool definition. See HITL Guide |\n| Confirmation dialog doesn't appear | Handle USER_CONFIRMATION_REQUIRED error in your UI. See HITL Guide |\n| Permission flag not resetting | Call setUserConfirmation(false) after tool execution. See HITL Guide |\n\nGuardrails Middleware\n\n| Issue | Solution |\n| -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Content not being filtered | preset: \"security\" only turns guardrails on; also set badWords (with enabled: true and a list) or modelFilter. See Guardrails Guide |\n| Too many false positives | Terms match as substrings, so a short term catches unrelated words. Use specific terms, or regexPatterns with \\b word boundaries. See Guardrails Guide |\n| Model-based filter is slow | Switch to openai:gpt-4o-mini for faster filtering. See Guardrails Guide |\n\nRedis Conversation Export\n\n| Issue | Solution |\n| -------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- |\n| Export returns empty history | Verify Redis connection and session ID exists. See Conversation History Guide |\n| getConversationHistory returns empty array | Ensure conversationMemory.enabled: true is configured. See Conversation History Guide |\n| Missing metadata in export | Set includeMetadata: true in export options. See Conversation History Guide |\n\nVideo Generation (Veo 3.1)\n\n| Issue | Solution |\n| -------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| PROVIDER_NOT_CONFIGURED error | Set GOOGLE_APPLICATION_CREDENTIALS to your service account JSON path. See Video Generation Guide |\n| VIDEO_POLL_TIMEOUT after 3 minutes | Video generation can take 1-2 minutes; increase timeout or check Vertex AI quota. Se","hierarchy":{"lvl0":"Reference","lvl1":"NeuroLink Troubleshooting Guide","lvl2":"","lvl3":""}},
|
|
9928
9928
|
{"objectID":"f18cd128c5fcffdd4422033accb929756a0ed04e990d54c0915a2270fc99b7bb","title":"NeuroLink Troubleshooting Guide","url":"/docs/reference/troubleshooting#neurolink-troubleshooting-guide","content":"Version: v9.26.1\nLast Updated: March 2026","hierarchy":{"lvl0":"Reference","lvl1":"NeuroLink Troubleshooting Guide","lvl2":"NeuroLink Troubleshooting Guide","lvl3":""}},
|
|
9929
9929
|
{"objectID":"16da6024adabd6a43133f9085cea031c955dbe961369e449b1e36739585501f9","title":"Overview","url":"/docs/reference/troubleshooting#overview","content":"This guide helps diagnose and resolve common issues with NeuroLink, including AI provider connectivity, MCP integration, CLI usage problems, streaming issues, and the generate function migration.","hierarchy":{"lvl0":"Reference","lvl1":"NeuroLink Troubleshooting Guide","lvl2":"Overview","lvl3":""}},
|
|
9930
9930
|
{"objectID":"989cb831fb47ad94f3f9469ca199da828c0d637b2acc3d200ffea2a2a3ae563a","title":"Quick Diagnostics","url":"/docs/reference/troubleshooting#quick-diagnostics","content":"Before diving into specific issues, try these quick diagnostics:","hierarchy":{"lvl0":"Reference","lvl1":"NeuroLink Troubleshooting Guide","lvl2":"Quick Diagnostics","lvl3":""}},
|
|
9931
9931
|
{"objectID":"9875cf71575de93b4835f39b84e856f4a94df8899571e70f3dfc8336d16f69d7","title":"Quick Fixes","url":"/docs/reference/troubleshooting#quick-fixes","content":"| Symptom | Resolution |\n| -------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ |\n| Image not found when using --image | Provide an absolute path or run the command from the directory containing the asset. URLs must be HTTPS. |\n| Evaluation model not configured | Set NEUROLINK_EVALUATION_PROVIDER/NEUROLINK_EVALUATION_MODEL, or disable --enableEvaluation until credentials are added. |\n| Redis connection failed in loop mode | Export REDIS_URL before running neurolink loop or start the session with --no-auto-redis. |\n| Model not available in region | Confirm the model supports the requested region and update AWS_REGION / GOOGLE_VERTEX_LOCATION accordingly. |\n| CLI exits after error inside loop | Upgrade to latest @juspay/neurolink and restart the loop; new builds catch errors without exiting. |","hierarchy":{"lvl0":"Reference","lvl1":"NeuroLink Troubleshooting Guide","lvl2":"Quick Fixes","lvl3":""}},
|
|
9932
9932
|
{"objectID":"519835175f0f4ba411dbe92426eeb603aa23a38ec149913ac19bca7682b3adec","title":"Human-in-the-Loop (HITL)","url":"/docs/reference/troubleshooting#human-in-the-loop-hitl","content":"| Issue | Solution |\n| --------------------------------------- | ----------------------------------------------------------------------------------------------------------- |\n| Tool executes without asking permission | Add requiresConfirmation: true to tool definition. See HITL Guide |\n| Confirmation dialog doesn't appear | Handle USER_CONFIRMATION_REQUIRED error in your UI. See HITL Guide |\n| Permission flag not resetting | Call setUserConfirmation(false) after tool execution. See HITL Guide |","hierarchy":{"lvl0":"Reference","lvl1":"NeuroLink Troubleshooting Guide","lvl2":"Human-in-the-Loop (HITL)","lvl3":""}},
|
|
9933
|
-
{"objectID":"3e08d9134df8755f7ff0cd9382ee0a4151ff1a1ff6c13f60494e8b5206dea416","title":"Guardrails Middleware","url":"/docs/reference/troubleshooting#guardrails-middleware","content":"| Issue | Solution
|
|
9933
|
+
{"objectID":"3e08d9134df8755f7ff0cd9382ee0a4151ff1a1ff6c13f60494e8b5206dea416","title":"Guardrails Middleware","url":"/docs/reference/troubleshooting#guardrails-middleware","content":"| Issue | Solution |\n| -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Content not being filtered | preset: \"security\" only turns guardrails on; also set badWords (with enabled: true and a list) or modelFilter. See Guardrails Guide |\n| Too many false positives | Terms match as substrings, so a short term catches unrelated words. Use specific terms, or regexPatterns with \\b word boundaries. See Guardrails Guide |\n| Model-based filter is slow | Switch to openai:gpt-4o-mini for faster filtering. See Guardrails Guide |","hierarchy":{"lvl0":"Reference","lvl1":"NeuroLink Troubleshooting Guide","lvl2":"Guardrails Middleware","lvl3":""}},
|
|
9934
9934
|
{"objectID":"13407b41e672f252dd093443b23887d95a5d464a743ab992713dc63bbcf42cc2","title":"Redis Conversation Export","url":"/docs/reference/troubleshooting#redis-conversation-export","content":"| Issue | Solution |\n| -------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- |\n| Export returns empty history | Verify Redis connection and session ID exists. See Conversation History Guide |\n| getConversationHistory returns empty array | Ensure conversationMemory.enabled: true is configured. See Conversation History Guide |\n| Missing metadata in export | Set includeMetadata: true in export options. See Conversation History Guide |","hierarchy":{"lvl0":"Reference","lvl1":"NeuroLink Troubleshooting Guide","lvl2":"Redis Conversation Export","lvl3":""}},
|
|
9935
9935
|
{"objectID":"6cf2bc5f5079c8e4490e3d9a2b8d687e06ef94abedb94924e0e92788ed85256a","title":"Video Generation (Veo 3.1)","url":"/docs/reference/troubleshooting#video-generation-veo-31","content":"| Issue | Solution |\n| -------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| PROVIDER_NOT_CONFIGURED error | Set GOOGLE_APPLICATION_CREDENTIALS to your service account JSON path. See Video Generation Guide |\n| VIDEO_POLL_TIMEOUT after 3 minutes | Video generation can take 1-2 minutes; increase timeout or check Vertex AI quota. See Video Generation Guide |\n| VIDEO_INVALID_INPUT for image format | Ensure image is PNG, JPEG, or WebP under 20MB; check aspect ratio compatibility. See Video Generation Guide |\n| Video generation uses wrong provider | Video gen only supports Vertex AI; provider auto-switches to vertex when output.mode: \"video\" |\n| Project not found error | Set GOOGLE_VERTEX_PROJECT or GOOGLE_CLOUD_PROJECT environment variable |\n| Audio missing from generated video | Set output.video.audio: true (enabled by default) and ensure Veo 3.1 model is used |","hierarchy":{"lvl0":"Reference","lvl1":"NeuroLink Troubleshooting Guide","lvl2":"Video Generation (Veo 3.1)","lvl3":""}},
|
|
9936
9936
|
{"objectID":"a92a4e02183ff63c57c4e6477e15e48f9bc4b2ae17fd61849e537bd592dad0d9","title":"PPT Generation (PowerPoint Presentations)","url":"/docs/reference/troubleshooting#ppt-generation-powerpoint-presentations","content":"PPT_PLANNING_FAILED -- Check AI provider connection and ensure valid prompt. See PPT Generation Guide\nPPT_INVALID_AI_RESPONSE during generation -- Simplify prompt/topic and retry. See PPT Generation Guide\nPPT_FILE_WRITE_FAILED -- Check write permissions for output directory and disk space. See PPT Generation Guide\nEmpty slides in presentation -- Ensure content plan has enough detail; try more specific prompts\nImages not generating -- Set generateAIImages: true in output.ppt (SDK) or avoid --pptNoImages (CLI), and configure VERTEX_IMAGE_MODEL. See PPT Generation Guide\nTheme not applying correctly -- Verify theme name: modern, corporate, creative, minimal, or dark","hierarchy":{"lvl0":"Reference","lvl1":"NeuroLink Troubleshooting Guide","lvl2":"PPT Generation (PowerPoint Presentations)","lvl3":""}},
|
|
@@ -10228,7 +10228,7 @@
|
|
|
10228
10228
|
{"objectID":"c0e29f05b6bbdb92260def3c4300be461f94885d8dd9b3d0b9d4b77f7b718f93","title":"Risk Level: HIGH","url":"/docs/research/devdeps-research#risk-level-high","content":"This is a massive jump spanning 10 minor versions over 2.5 years. Key risks:\nAlways-truthy/nullish checks (5.6): Will likely flag existing code patterns that need review\nStricter type inference: Multiple versions tighten inference; some existing code may need type annotations\nlib.d.ts changes: DOM and standard library type changes across 10 versions could affect code\nDeclaration emit changes: The isolatedDeclarations work changed declaration emit behavior\nUninitialized variable checks (5.7): May flag variables that were previously allowed\nGeneric constraint null checks (5.9): May surface new errors in generic code\nArrayBuffer/Buffer relationship (5.9): Could affect Node.js buffer handling code\n\nRecommended Migration Strategy:\nUpdate TypeScript to 5.9.3\nRun tsc --noEmit to identify all new errors\nFix errors in order of severity (type errors first, then new warnings)\nRun full test suite\nThe --noCheck flag (5.6) can be used as a temporary escape hatch during migration if needed","hierarchy":{"lvl0":"Research","lvl1":"Dev Dependencies Upgrade Research","lvl2":"Risk Level: HIGH","lvl3":""}},
|
|
10229
10229
|
{"objectID":"3c38c53f4877f3efc0d764962eb592d731234061b18e9d738ca81764bb646cd2","title":"Overall Risk Assessment Summary","url":"/docs/research/devdeps-research#overall-risk-assessment-summary","content":"| Package | Version Jump | Risk | Notes |\n| --------------------- | ---------------- | ---------- | --------------------------------------------------------------- |\n| @semantic-release/npm | 13.1.2 -> 13.1.4 | LOW | Internal dependency bumps only |\n| @sveltejs/kit | 2.53.2 -> 2.53.3 | LOW | Single bug fix |\n| @types/node | 25.3.1 -> 25.3.2 | LOW | Type refinements only |\n| fastify | 5.7.2 -> 5.7.4 | LOW | Security patch (important to apply) |\n| svelte-check | 4.4.3 -> 4.4.4 | LOW | Bug fixes for TS detection and path aliases |\n| tslib | 2.4.1 -> 2.8.1 | MEDIUM | Large jump; decorator hook order changed; new exports structure |\n| typescript | 5.0.0 -> 5.9.3 | HIGH | Massive jump; many new type checks will surface errors |","hierarchy":{"lvl0":"Research","lvl1":"Dev Dependencies Upgrade Research","lvl2":"Overall Risk Assessment Summary","lvl3":""}},
|
|
10230
10230
|
{"objectID":"02fe919206bdd55ac5f80980dadfe529ee26ea45bdfeba75259910c6381240be","title":"Recommended Upgrade Order","url":"/docs/research/devdeps-research#recommended-upgrade-order","content":"First (safe, quick wins): @semantic-release/npm, @sveltejs/kit, @types/node, fastify, svelte-check\nSecond (test after): tslib 2.8.1\nLast (needs dedicated effort): TypeScript 5.9.3 -- expect to fix type errors after upgrading","hierarchy":{"lvl0":"Research","lvl1":"Dev Dependencies Upgrade Research","lvl2":"Recommended Upgrade Order","lvl3":""}},
|
|
10231
|
-
{"objectID":"cb12d543885356b4a31e1d973cdb56ff89e01e4b9fe2a0f4de001b54e62e442b","title":"NeuroLink Review Fixes Documentation","url":"/docs/review-fixes-documentation","content":"NeuroLink Review Fixes Documentation\n\nBranch: feat/models-observability-rag-landing-review-fixes\nDate: 2026-02-28\nTotal Files Changed: 26\nTotal Lines Changed: +2,876 / -1,524\nExecutive Summary\n\nThis document covers 11 implementation tasks addressing 4 P0 critical bugs, 5 P1 high-priority improvements, and 2 P2 medium-priority refactors identified during code review of the NeuroLink SDK. All fixes were implemented across 26 source files spanning the core SDK, 11 provider implementations, 5 MCP modules, and utility layers.\n\nKey outcomes:\nP0 bugs: Double process spawn eliminated, restart timer leak fixed, cost estimation accuracy improved from ~5x error to per-model pricing, tool I/O size reporting corrected, SSE/WebSocket headers now forwarded, and validateClientConfig no longer rejects valid HTTP configs.\nP1 improvements: Typed error hierarchy added to 3 providers (Azure, Mistral, HuggingFace), maxRetries:0 added to 5 providers, ENOTFOUND marked non-retryable, stream timeout composition + abort differentiation implemented, OTel stream/generate parity achieved, circuit breaker timer + signal handler leaks fixed.\nP2 refactors: resolveTools() extracted to BaseProvider eliminating 14 duplicated code blocks across providers, dead code and debug artifacts removed.\nP0 Bug Fixes (Critical)\n\nP0-1: Double Process Spawn in stdio Transport\n\nIssue: MCPClientFactory.createClient() spawned a child process via spawn() and then StdioClientTransport spawned a second one internally, resulting in orphaned zombie processes.\n\nRoot Cause: The factory manually called spawn() before passing the config to StdioClientTransport, which also calls spawn() internally. This created two child processes for every stdio MCP server.\n\nFix Applied: Removed the manual spawn() call from MCPClientFactory. Now only StdioClientTransport spawns the process. The factory accesses the process reference from the transport instance after connection via transport.stderr for logging.\n\nFiles Changed:\nsrc/lib/mcp/mcpClientFactory.ts (+449/-449 total with OTel changes)\n\nVerification: PASS\n\nP0-2: Restart Timer Never Cleared\n\nIssue: When ExternalServerManager.scheduleRestart() fired, the restartTimer reference was never cleared (= undefined), causing the guard if (instance.restartTimer) return to permanently block future restarts.\n\nRoot Cause: The setTimeout callback did not reset instance.restartTimer = undefined at the start of execution. After the timer fires, the reference remains set to the expired timer ID.\n\nFix Applied: Added instance.restartTimer = undefined; as the first line inside the setTimeout callback in scheduleRestart().\n\nFiles Changed:\nsrc/lib/mcp/externalServerManager.ts (line ~491 in diff)\n\nVerification: PASS\n\nP0-3: Inaccurate Cost Estimation (5x Error)\n\nIssue: Cost estimation used rough multipliers that could be off by 5x or more for some models. There was no per-model pricing table.\n\nRoot Cause: The estimateCost() function used generic provider-level multipliers rather than accurate per-model pricing data.\n\nFix Applied: Introduced calculateCost() from a new src/lib/utils/pricing.ts module with per-model pricing tables. Integrated into both BaseProvider.generate() and GenerationHandler to record accurate gen_ai.cost_usd span attributes.\n\nFiles Changed:\nsrc/lib/core/baseProvider.ts (lines ~1095-1112) -- calculateCost() integration in generate path\nsrc/lib/core/modules/GenerationHandler.ts (lines ~444-473) -- calculateCost() integration in GenerationHandler\n\nKey Code:\n\nVerification: PASS\n\nP0-4a: tool.
|
|
10231
|
+
{"objectID":"cb12d543885356b4a31e1d973cdb56ff89e01e4b9fe2a0f4de001b54e62e442b","title":"NeuroLink Review Fixes Documentation","url":"/docs/review-fixes-documentation","content":"NeuroLink Review Fixes Documentation\n\nBranch: feat/models-observability-rag-landing-review-fixes\nDate: 2026-02-28\nTotal Files Changed: 26\nTotal Lines Changed: +2,876 / -1,524\nExecutive Summary\n\nThis document covers 11 implementation tasks addressing 4 P0 critical bugs, 5 P1 high-priority improvements, and 2 P2 medium-priority refactors identified during code review of the NeuroLink SDK. All fixes were implemented across 26 source files spanning the core SDK, 11 provider implementations, 5 MCP modules, and utility layers.\n\nKey outcomes:\nP0 bugs: Double process spawn eliminated, restart timer leak fixed, cost estimation accuracy improved from ~5x error to per-model pricing, tool I/O size reporting corrected, SSE/WebSocket headers now forwarded, and validateClientConfig no longer rejects valid HTTP configs.\nP1 improvements: Typed error hierarchy added to 3 providers (Azure, Mistral, HuggingFace), maxRetries:0 added to 5 providers, ENOTFOUND marked non-retryable, stream timeout composition + abort differentiation implemented, OTel stream/generate parity achieved, circuit breaker timer + signal handler leaks fixed.\nP2 refactors: resolveTools() extracted to BaseProvider eliminating 14 duplicated code blocks across providers, dead code and debug artifacts removed.\nP0 Bug Fixes (Critical)\n\nP0-1: Double Process Spawn in stdio Transport\n\nIssue: MCPClientFactory.createClient() spawned a child process via spawn() and then StdioClientTransport spawned a second one internally, resulting in orphaned zombie processes.\n\nRoot Cause: The factory manually called spawn() before passing the config to StdioClientTransport, which also calls spawn() internally. This created two child processes for every stdio MCP server.\n\nFix Applied: Removed the manual spawn() call from MCPClientFactory. Now only StdioClientTransport spawns the process. The factory accesses the process reference from the transport instance after connection via transport.stderr for logging.\n\nFiles Changed:\nsrc/lib/mcp/mcpClientFactory.ts (+449/-449 total with OTel changes)\n\nVerification: PASS\n\nP0-2: Restart Timer Never Cleared\n\nIssue: When ExternalServerManager.scheduleRestart() fired, the restartTimer reference was never cleared (= undefined), causing the guard if (instance.restartTimer) return to permanently block future restarts.\n\nRoot Cause: The setTimeout callback did not reset instance.restartTimer = undefined at the start of execution. After the timer fires, the reference remains set to the expired timer ID.\n\nFix Applied: Added instance.restartTimer = undefined; as the first line inside the setTimeout callback in scheduleRestart().\n\nFiles Changed:\nsrc/lib/mcp/externalServerManager.ts (line ~491 in diff)\n\nVerification: PASS\n\nP0-3: Inaccurate Cost Estimation (5x Error)\n\nIssue: Cost estimation used rough multipliers that could be off by 5x or more for some models. There was no per-model pricing table.\n\nRoot Cause: The estimateCost() function used generic provider-level multipliers rather than accurate per-model pricing data.\n\nFix Applied: Introduced calculateCost() from a new src/lib/utils/pricing.ts module with per-model pricing tables. Integrated into both BaseProvider.generate() and GenerationHandler to record accurate gen_ai.cost_usd span attributes.\n\nFiles Changed:\nsrc/lib/core/baseProvider.ts (lines ~1095-1112) -- calculateCost() integration in generate path\nsrc/lib/core/modules/GenerationHandler.ts (lines ~444-473) -- calculateCost() integration in GenerationHandler\n\nKey Code:\n\nVerification: PASS\n\nP0-4a: tool.input_size/output_size Reporting Truncated Length\n\nIssue: Tool input/output size OTel attributes were reporting the length of truncated strings rather than actual full size.\n\nRoot Cause: The tool.result_size and tool.args attributes were recorded after .substring(0, 4096) truncation.\n\nFix Applied: In GenerationHandler.ts, tool result events now capture tool.result_size from the full result string length before truncation, and tool.args is truncated separately for the attribute value while preserving full size.\n\nFiles Changed:\nsrc/lib/core/modules/GenerationHandler.ts (lines ~205-236 in onStepFinish)\n\nKey Code:\n\nVerification: PASS\n\nP0-4b: SSE/WebSocket Headers Silently Ignored\n\nIssue: When configuring SSE or WebSocket MCP transports, custom headers (e.g., Authorization: Bearer ...) were silently ignored, causing authentication failures.\n\nRoot Cause: The MCPClientFactory.createHTTPTransport() and related methods did not forward config.headers to the underlying SSE/WebSocket transport constructors.\n\nFix Applied: Headers are now properly forwarded from the config to all HTTP-based transport types (SSE, WebSocket, Streamable HTTP) in mcpClientFactory.ts.\n\nFiles Changed:\nsrc/lib/mcp/mcpClientFactory.ts\n\nVerification: PASS\n\nP0-4c: validateClientConfig Rejecting Valid HTTP Configs\n\nIssue: The validateClientConfig() function required command for all transport types, incorrectly rejecting valid HTTP/SSE/WebSocket configs that only have url.\n\nRoot Cause: Valid","hierarchy":{"lvl0":"Review Fixes Documentation","lvl1":"NeuroLink Review Fixes Documentation","lvl2":"","lvl3":""}},
|
|
10232
10232
|
{"objectID":"ac5070b20c1599b301ff965fd311102f318c9c57e55edcb88659b881ce2b6d39","title":"NeuroLink Review Fixes Documentation","url":"/docs/review-fixes-documentation#neurolink-review-fixes-documentation","content":"Branch: feat/models-observability-rag-landing-review-fixes\nDate: 2026-02-28\nTotal Files Changed: 26\nTotal Lines Changed: +2,876 / -1,524","hierarchy":{"lvl0":"Review Fixes Documentation","lvl1":"NeuroLink Review Fixes Documentation","lvl2":"NeuroLink Review Fixes Documentation","lvl3":""}},
|
|
10233
10233
|
{"objectID":"76fa55d8939b923b2014ed5a75b7182487715c96157669c43ff76985b2f0367b","title":"1. Executive Summary","url":"/docs/review-fixes-documentation#1-executive-summary","content":"This document covers 11 implementation tasks addressing 4 P0 critical bugs, 5 P1 high-priority improvements, and 2 P2 medium-priority refactors identified during code review of the NeuroLink SDK. All fixes were implemented across 26 source files spanning the core SDK, 11 provider implementations, 5 MCP modules, and utility layers.\n\nKey outcomes:\nP0 bugs: Double process spawn eliminated, restart timer leak fixed, cost estimation accuracy improved from ~5x error to per-model pricing, tool I/O size reporting corrected, SSE/WebSocket headers now forwarded, and validateClientConfig no longer rejects valid HTTP configs.\nP1 improvements: Typed error hierarchy added to 3 providers (Azure, Mistral, HuggingFace), maxRetries:0 added to 5 providers, ENOTFOUND marked non-retryable, stream timeout composition + abort differentiation implemented, OTel stream/generate parity achieved, circuit breaker timer + signal handler leaks fixed.\nP2 refactors: resolveTools() extracted to BaseProvider eliminating 14 duplicated code blocks across providers, dead code and debug artifacts removed.","hierarchy":{"lvl0":"Review Fixes Documentation","lvl1":"NeuroLink Review Fixes Documentation","lvl2":"1. Executive Summary","lvl3":""}},
|
|
10234
10234
|
{"objectID":"1e7e7927778cfccadb320c23aa385e23ae778c3abd96118279dff79df56fb10d","title":"P0-1: Double Process Spawn in stdio Transport","url":"/docs/review-fixes-documentation#p0-1-double-process-spawn-in-stdio-transport","content":"Issue: MCPClientFactory.createClient() spawned a child process via spawn() and then StdioClientTransport spawned a second one internally, resulting in orphaned zombie processes.\n\nRoot Cause: The factory manually called spawn() before passing the config to StdioClientTransport, which also calls spawn() internally. This created two child processes for every stdio MCP server.\n\nFix Applied: Removed the manual spawn() call from MCPClientFactory. Now only StdioClientTransport spawns the process. The factory accesses the process reference from the transport instance after connection via transport.stderr for logging.\n\nFiles Changed:\nsrc/lib/mcp/mcpClientFactory.ts (+449/-449 total with OTel changes)\n\nVerification: PASS","hierarchy":{"lvl0":"Review Fixes Documentation","lvl1":"NeuroLink Review Fixes Documentation","lvl2":"P0-1: Double Process Spawn in stdio Transport","lvl3":""}},
|
|
@@ -10243,7 +10243,7 @@
|
|
|
10243
10243
|
{"objectID":"e471e5caaa770a214f40fbe24489ae53375fc8e574b3413f96b5e08e6c76aaff","title":"P1-4: OTel Stream/Generate Parity","url":"/docs/review-fixes-documentation#p1-4-otel-streamgenerate-parity","content":"Issue: The stream path was missing many OTel span attributes and child spans that the generate path had, creating an observability gap. Specifically: middleware count, generation config (temperature/maxTokens/maxSteps), cache tokens, cost estimates, TTFC (Time-To-First-Chunk), chunk metrics, input preview, generate path indicator, mem0 spans, conversation store spans, budget check spans, compaction spans, provider fallback chain recording.\n\nRoot Cause: Stream support was added after the generate path, and OTel instrumentation was not mirrored.\n\nFix Applied: Comprehensive OTel additions across multiple files:\n\nBaseProvider (stream):\nAdded gen_ai.middleware.count attribute\nAdded gen_ai.request.temperature, gen_ai.request.max_tokens, gen_ai.request.max_steps attributes\nAdded gen_ai.cache.input_tokens and gen_ai.cache.read_input_tokens\nAdded gen_ai.cost_usd via calculateCost()\nAdded wrapStreamWithMetrics() -- wraps the async generator with a child span (neurolink.provider.stream.consumption) that records TTFC, chunk count, total content size, and stream duration\nAdded gen_ai.stream.error_recovery events for fallback scenarios\n\nGenerationHandler:\nAdded gen_ai.message.total_chars, gen_ai.messages_preview with system/user message previews\nAdded gen_ai.tool.call and gen_ai.tool.result events in onStepFinish\nAdded cache token attributes and cost calculation in both primary and fallback paths\n\nneurolink.ts:\nAdded gen_ai.input_preview on generate span\nWrapped mem0 search/store in neurolink.mem0.search / neurolink.mem0.store spans\nWrapped conversation store in neurolink.conversation.store spans (both MCP and direct paths)\nWrapped conversation fetch in neurolink.conversation.fetch span\nWrapped budget check in neurolink.context.budget_check span with per-component token breakdown (M16)\nWrapped context compaction in neurolink.context.compact span\nAdded neurolink.generate.path attribute (\"mcp\" or \"direct\")\nAdded provider selection chain: gen_ai.provider.candidates,","hierarchy":{"lvl0":"Review Fixes Documentation","lvl1":"NeuroLink Review Fixes Documentation","lvl2":"P1-4: OTel Stream/Generate Parity","lvl3":""}},
|
|
10244
10244
|
{"objectID":"f92a99a29a7fba93eddf29e3e62d2ac81974a4e890cc3f41bba789ec0b92554f","title":"P1-5: Circuit Breaker Timer Leak + Signal Handler Leak + Debug Artifact","url":"/docs/review-fixes-documentation#p1-5-circuit-breaker-timer-leak-signal-handler-leak-debug-artifact","content":"Issue: Three separate resource leaks / cleanup issues:\nCircuit breaker cleanup timers were never destroyed during shutdown, leaking setInterval timers.\nProcess signal handlers (SIGINT, SIGTERM, beforeExit) were registered as anonymous arrow functions, making them impossible to remove during shutdown.\nA hardcoded debug filter for \"SuccessRateSRByTime\" / \"juspay-analytics\" tool was left in the generateTextInternal() method's logging.\n\nRoot Cause:\nglobalCircuitBreakerManager.destroyAll() was never called in ExternalServerManager.shutdown().\nAnonymous arrow functions passed to process.on() cannot be referenced for process.removeListener().\nDebug artifact from development was not removed before merge.\n\nFix Applied:\nAdded globalCircuitBreakerManager.destroyAll() call in ExternalServerManager.shutdown().\nStored the shutdown handler as a named instance field (private shutdownHandler = () => { void this.shutdown(); }), used it for process.on() registration, and added matching process.removeListener() calls in shutdown().\nRemoved the hardcoded targetTool debug filter block from neurolink.ts.\n\nFiles Changed:\nsrc/lib/mcp/externalServerManager.ts:\nLines ~224-226: Added shutdownHandler field\nLines ~262-264: Use this.shutdownHandler for signal registration\nLines ~1595-1603: Added process.removeListener() calls and globalCircuitBreakerManager.destroyAll()\nsrc/lib/neurolink.ts (lines ~3752-3765 removed debug artifact)\n\nVerification: PASS","hierarchy":{"lvl0":"Review Fixes Documentation","lvl1":"NeuroLink Review Fixes Documentation","lvl2":"P1-5: Circuit Breaker Timer Leak + Signal Handler Leak + Debug Artifact","lvl3":""}},
|
|
10245
10245
|
{"objectID":"9482748db8088c55077d71d610addd8ec69a04ab44b8eb9991972d6d847094b8","title":"P2-1: Extract resolveTools() to BaseProvider (Eliminate 14 Copies)","url":"/docs/review-fixes-documentation#p2-1-extract-resolvetools-to-baseprovider-eliminate-14-copies","content":"Issue: Every provider had a duplicated 3-4 line pattern for tool resolution:\n\nRoot Cause: When providers were developed independently, each copied the same tool resolution logic. No shared method existed in BaseProvider.\n\nFix Applied: Added a protected resolveTools() method to BaseProvider and replaced the duplicated blocks in all 11 providers that had them.\n\nNew Method in BaseProvider:\n\nProviders Updated (14 occurrences across 11 files):\nsrc/lib/providers/anthropic.ts -- Replaced 3-line block with this.resolveTools(options)\nsrc/lib/providers/anthropicBaseProvider.ts -- Same\nsrc/lib/providers/azureOpenai.ts -- Same\nsrc/lib/providers/googleAiStudio.ts -- Same (was 4 lines with separate baseTools variable)\nsrc/lib/providers/googleVertex.ts -- Same (was 4 lines)\nsrc/lib/providers/huggingFace.ts -- Same\nsrc/lib/providers/litellm.ts -- Same\nsrc/lib/providers/mistral.ts -- Same\nsrc/lib/providers/openAI.ts -- Same\nsrc/lib/providers/openRouter.ts -- Same\nsrc/lib/providers/openaiCompatible.ts -- Same\n\nSecondary Change: All providers also updated their toolChoice logic from shouldUseTools ? \"auto\" : \"none\" to Object.keys(tools).length > 0 ? \"auto\" : \"none\", which is more correct (checks actual tool availability rather than just the configuration flag).\n\nFiles Changed:\nsrc/lib/core/baseProvider.ts (lines ~625-637) -- New resolveTools() method\nAll 11 provider files listed above\n\nVerification: PASS","hierarchy":{"lvl0":"Review Fixes Documentation","lvl1":"NeuroLink Review Fixes Documentation","lvl2":"P2-1: Extract resolveTools() to BaseProvider (Eliminate 14 Copies)","lvl3":""}},
|
|
10246
|
-
{"objectID":"48685b34a0bde8cd7b67d93237fb5246c1f4e0370e077b95e35b362ab0e403e1","title":"P2-2: Misc Cleanups (Tracer Name, Dead Code, Unsafe Casts, Debug Artifacts)","url":"/docs/review-fixes-documentation#p2-2-misc-cleanups-tracer-name-dead-code-unsafe-casts-debug-artifacts","content":"Issue: Several small code quality issues across the codebase:\nLogger mismatch in httpRetryHandler.ts: Used logger (general) instead of mcpLogger (MCP-specific).\nRemoved unused Tool type import from 6 provider files (cleaned up after resolveTools() extraction).\nRemoved unused TransportWithProcessResult type import from mcpClientFactory.ts.\nRemoved unused estimateTokens() private method from ConversationMemoryManager.\nAdded unbounded queue protection in HTTPRateLimiter (
|
|
10246
|
+
{"objectID":"48685b34a0bde8cd7b67d93237fb5246c1f4e0370e077b95e35b362ab0e403e1","title":"P2-2: Misc Cleanups (Tracer Name, Dead Code, Unsafe Casts, Debug Artifacts)","url":"/docs/review-fixes-documentation#p2-2-misc-cleanups-tracer-name-dead-code-unsafe-casts-debug-artifacts","content":"Issue: Several small code quality issues across the codebase:\nLogger mismatch in httpRetryHandler.ts: Used logger (general) instead of mcpLogger (MCP-specific).\nRemoved unused Tool type import from 6 provider files (cleaned up after resolveTools() extraction).\nRemoved unused TransportWithProcessResult type import from mcpClientFactory.ts.\nRemoved unused estimateTokens() private method from ConversationMemoryManager.\nAdded unbounded queue protection in HTTPRateLimiter (MAX_QUEUE_SIZE = 1000).\nUpdated httpRetryHandler.ts documentation to remove ENOTFOUND from the retryable list in the JSDoc comment.\n\nFiles Changed:\nsrc/lib/mcp/httpRetryHandler.ts -- Switched logger to mcpLogger (3 occurrences), updated JSDoc\nsrc/lib/mcp/httpRateLimiter.ts -- Added queue size limit\nsrc/lib/mcp/mcpClientFactory.ts -- Removed unused spawn and TransportWithProcessResult imports, added LATEST_PROTOCOL_VERSION import\nsrc/lib/providers/anthropic.ts, anthropicBaseProvider.ts, azureOpenai.ts, huggingFace.ts, litellm.ts, mistral.ts, openAI.ts, openRouter.ts, openaiCompatible.ts -- Removed unused type Tool import\nsrc/lib/core/conversationMemoryManager.ts -- Removed unused estimateTokens() method\nsrc/lib/core/modules/TelemetryHandler.ts -- Minor fix (2 lines)\n\nVerification: PASS","hierarchy":{"lvl0":"Review Fixes Documentation","lvl1":"NeuroLink Review Fixes Documentation","lvl2":"P2-2: Misc Cleanups (Tracer Name, Dead Code, Unsafe Casts, Debug Artifacts)","lvl3":""}},
|
|
10247
10247
|
{"objectID":"c65811710cfad5a6aa37cf81dd2b554056fa6d3db0aa847b4365a7abc45d3146","title":"Provider Impact","url":"/docs/review-fixes-documentation#provider-impact","content":"| Provider | P1-1 Typed Errors | P1-2 maxRetries:0 | P2-1 resolveTools | Other |\n| ----------------- | ----------------- | ----------------- | ----------------- | --------------------- |\n| OpenAI | -- | Already had | Yes | Unused import cleanup |\n| Anthropic | Already had | Already had | Yes | Unused import cleanup |\n| AnthropicV2 | Already had | Already had | Yes | Unused import cleanup |\n| Azure OpenAI | Added | Added | Yes | -- |\n| Google AI Studio | -- | Added | Yes | -- |\n| Google Vertex | -- | Already had | Yes | -- |\n| Mistral | Added | Added | Yes | Unused import cleanup |\n| HuggingFace | Added | Added | Yes | Unused import cleanup |\n| LiteLLM | -- | Already had | Yes | Unused import cleanup |\n| OpenRouter | -- | Already had | Yes | Unused import cleanup |\n| OpenAI Compatible | -- | Added | Yes | Unused import cleanup |\n| Ollama | -- | N/A (local) | -- | -- |","hierarchy":{"lvl0":"Review Fixes Documentation","lvl1":"NeuroLink Review Fixes Documentation","lvl2":"Provider Impact","lvl3":""}},
|
|
10248
10248
|
{"objectID":"c4b4b1e204fb9a975f3644c46e6539ffd1c0731c43e9b0f4b20984829f7278cc","title":"SDK Path Impact","url":"/docs/review-fixes-documentation#sdk-path-impact","content":"| Fix | generate() | stream() | Both |\n| ------------------------ | ---------- | ---------------- | -------------------------- |\n| P0-3 Cost Estimation | Yes | -- | -- |\n| P1-3 Timeout Composition | -- | Yes | -- |\n| P1-4 OTel Parity | -- | Yes | Converged |\n| P2-1 resolveTools | -- | Yes | -- |\n| P1-1 Typed Errors | -- | -- | Both (formatProviderError) |\n| P1-2 maxRetries:0 | -- | Yes (streamText) | -- |","hierarchy":{"lvl0":"Review Fixes Documentation","lvl1":"NeuroLink Review Fixes Documentation","lvl2":"SDK Path Impact","lvl3":""}},
|
|
10249
10249
|
{"objectID":"83b846129657c59d54cf84dd28979c246d04c550ed88c6010749ed7e02558842","title":"MCP Module Impact","url":"/docs/review-fixes-documentation#mcp-module-impact","content":"| Fix | externalServerManager | mcpClientFactory | mcpCircuitBreaker | toolDiscoveryService | httpRetryHandler | httpRateLimiter |\n| ------------------ | --------------------- | ---------------- | -------------------- | -------------------- | ---------------- | --------------- |\n| P0-1 Double Spawn | -- | Yes | -- | -- | -- | -- |\n| P0-2 Restart Timer | Yes | -- | -- | -- | -- | -- |\n| P0-4b Headers | -- | Yes | -- | -- | -- | -- |\n| P0-4c Validation | -- | Yes | -- | -- | -- | -- |\n| P1-2 ENOTFOUND | -- | -- | -- | -- | Yes | -- |\n| P1-4 OTel | Yes | Yes | Yes | Yes | -- | -- |\n| P1-5 Leaks | Yes | -- | Yes (via destroyAll) | -- | -- | -- |\n| P2-2 Cleanups | -- | Yes | -- | -- | Yes | Yes |","hierarchy":{"lvl0":"Review Fixes Documentation","lvl1":"NeuroLink Review Fixes Documentation","lvl2":"MCP Module Impact","lvl3":""}},
|
|
@@ -10683,7 +10683,7 @@
|
|
|
10683
10683
|
{"objectID":"524f4e26be21986fb8f605f8a2d76d2c5dc7e02a0ecaaff3b6ac3bcae16242e0","title":"Task 1: Complete the Cost & Budget tab JSON (add 3 panels + stacked-area flip)","url":"/docs/superpowers/plans/2026-07-05-proxy-cost-budget-dashboard-completion#task-1-complete-the-cost-budget-tab-json-add-3-panels-stacked-area-flip","content":"Files:\nModify: docs/assets/dashboards/neurolink-proxy-observability-dashboard.json (the \"Cost & Budget\" tab panels array only)\n\nInterfaces:\nConsumes: existing panels Panel_cost_04 (bar template — its query holds the reusable pricing CASE) and Panel_cost_06 (the Cost Trend line panel to flip).\nProduces: panels Panel_cost_09 (7-day Quota Utilization, bar), Panel_cost_10 (5-hour Quota Utilization, bar), Panel_cost_11 (Top Sessions by Cost, table); Panel_cost_06.type = \"area-stacked\".\n[ ] Step 1: Write the failing validation check\n\nSave as /tmp/validate-cost-tab.mjs (scratch, not committed):\n[ ] Step 2: Run it to confirm it fails\n\nRun: node /tmp/validate-cost-tab.mjs\nExpected: FAIL: expected 11 panels, got 8 (and the area-stacked / missing-panel lines).\n[ ] Step 3: Write the panel-surgery script and apply it\n\nSave as /tmp/add-cost-panels.mjs and run it — it clones existing panels so the pricing CASE and config boilerplate are reused verbatim:\n\nRun: node /tmp/add-cost-panels.mjs\nExpected: added Panel_cost_09/10/11; Panel_cost_06 -> area-stacked\n[ ] Step 4: Run validation + prettier to confirm the edit is well-formed\n\nRun: node /tmp/validate-cost-tab.mjs && npx prettier --write docs/assets/dashboards/neurolink-proxy-observability-dashboard.json && npx prettier --check docs/assets/dashboards/neurolink-proxy-observability-dashboard.json\nExpected: PASS: 11 Cost & Budget panels, area-stacked trend, 49 baseline untouched then All matched files use Prettier code style!\n[ ] Step 5: Confirm only the dashboard file is modified, then commit through the hook\n\nRun: git status --short\nExpected: exactly M docs/assets/dashboards/neurolink-proxy-observability-dashboard.json (plus the untracked memory-bank/openai-compat-verification/, which the hook ignores).\n\nExpected: pre-commit hook prints All pre-commit checks passed! and COMMIT VALIDATION PASSED!.","hierarchy":{"lvl0":"Superpowers","lvl1":"Proxy Cost & Budget Dashboard — Completion Implementation Plan","lvl2":"Task 1: Complete the Cost & Budget tab JSON (add 3 panels + stacked-area flip)","lvl3":""}},
|
|
10684
10684
|
{"objectID":"7cde805a16b3498c26e8c666088ffdc86a1df8f2559125cc224416c7a33947e6","title":"Task 2: Validate the new panels against live OpenObserve data","url":"/docs/superpowers/plans/2026-07-05-proxy-cost-budget-dashboard-completion#task-2-validate-the-new-panels-against-live-openobserve-data","content":"Files:\nModify (only if a panel's SQL needs correcting): docs/assets/dashboards/neurolink-proxy-observability-dashboard.json\n\nInterfaces:\nConsumes: panels from Task 1; scripts scripts/observability/import-openobserve-dashboard.mjs, scripts/observability/check-proxy-telemetry.mjs, and the neurolink proxy telemetry CLI.\nProduces: a dashboard whose 11 Cost & Budget panels + 9 Trace panels all render with real data; the 3 new-idiom panels (quota ×2, table) confirmed or corrected.\n[ ] Step 1: Bring up the stack\n\nRun: podman machine start || true then pnpm run build:cli && node dist/cli/index.js proxy telemetry setup\n(Equivalent: bash scripts/observability/manage-local-openobserve.sh setup.)\nExpected: OpenObserve reachable at http://localhost:5080; the setup step imports the current dashboard.\n[ ] Step 2: Generate proxy traffic (must include Anthropic OAuth requests)\n\nRoute several requests through the proxy so neurolink_proxy spans and proxy_* metrics populate. The quota panels need proxy_ratelimit_after_5h/_7d, which only Anthropic OAuth responses carry — so at least a few requests must hit an Anthropic OAuth account.\nExpected: traffic returns 200s; a few seconds later data is queryable.\n[ ] Step 3: Confirm streams + the quota columns exist\n\nRun: node scripts/observability/check-proxy-telemetry.mjs\nExpected: neurolink_proxy stream present, non-zero doc_num, recent latest age.\nThen confirm the exact column names in the OpenObserve UI (http://localhost:5080, <local-user> / <local-password>) by running in the neurolink_proxy stream:\nSELECT proxy_account, proxy_ratelimit_after_7d, proxy_ratelimit_after_5h, session_id FROM neurolink_proxy WHERE proxy_ratelimit_after_7d IS NOT NULL LIMIT 5\nExpected: rows returned. If a column name differs (e.g. dotted → different underscore form) or ROW_NUMBER() OVER errors, note the correction for Step 4.","hierarchy":{"lvl0":"Superpowers","lvl1":"Proxy Cost & Budget Dashboard — Completion Implementation Plan","lvl2":"Task 2: Validate the new panels against live OpenObserve data","lvl3":""}},
|
|
10685
10685
|
{"objectID":"17ea044e95cf81e7046613dda70623ddeac9ab3b2e01d6f44e94f7abd300ebda","title":"Self-Review","url":"/docs/superpowers/plans/2026-07-05-proxy-cost-budget-dashboard-completion#self-review","content":"Spec coverage:\nAdd 3 panels (7d quota, 5h quota, Top Sessions) → Task 1 Step 3. ✓\nCost Trend line → stacked area → Task 1 Step 3 (Panel_cost_06.type = \"area-stacked\"). ✓\n(est., USD) labels / inline pricing CASE → Task 1 reuses Panel_cost_04's query; Top Sessions title keeps (est., USD). ✓\nBring up stack, generate traffic, validate proxy_ratelimit_after_*, re-import, verify render → Task 2 Steps 1–4. ✓\nBaseline 49 panels unaffected → validation asserts base === 49. ✓\nNo push/PR without OK → not in plan; deferred to a later explicit step. ✓\n\nPlaceholder scan: Queries are concrete; the quota latest-row query is spelled out, not \"TBD\". Live-validation gates are real verification steps, not deferred implementation. ✓\n\nType consistency: ids Panel_cost_09/10/11 and layout i 9009/10/11 used consistently; area-stacked used in both the script and the validation check. ✓\n\nNote on new idioms: table and area-stacked have no existing example in this dashboard and ROW_NUMBER() OVER is unverified in this OpenObserve build — these are exactly the items Task 2 Step 4 confirms/corrects live, per the spec's \"validate new idioms first.\"","hierarchy":{"lvl0":"Superpowers","lvl1":"Proxy Cost & Budget Dashboard — Completion Implementation Plan","lvl2":"Self-Review","lvl3":""}},
|
|
10686
|
-
{"objectID":"af9ab12f46b26343ca6e74e4c49e9119434f01b30c3dc72ceafb23cd24f93714","title":"Provider Redesign Program — Roadmap","url":"/docs/superpowers/plans/2026-08-15-00-roadmap","content":"Provider Redesign Program — Roadmap\n\nThis is the master index. It orders and connects the ten implementation plans in this directory. Each plan is independently executable (via superpowers:subagent-driven-development or superpowers:executing-plans) and produces working, testable software on its own — but the wave order below exists because later plans consume contracts earlier plans produce.\n\nProgram goal: Make NeuroLink's provider integration scale from 31 providers to 230+, by (a) fixing the bugs and installing a CI safety net first, (b) collapsing the 30+ hand-maintained provider lists and 5 metadata stores into single sources of truth, (c) extracting the machinery the expensive providers each hand-rolled (agentic loop, error classification, streaming primitives), and (d) turning \"add a provider\" into a config entry with a scaffold and a merge gate.\n\nSpec: The Provider Atlas audit (published artifact: https://claude.ai/code/artifact/3083b1e5-9647-456a-8609-fa4cf4eb5c10) plus the 15 per-area audit reports it was synthesized from. Each plan's header lists the specific area reports it argues from.\n\nThe ten plans\n\n| # | Plan | What it ships | Depends on |\n| --- | ----------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- |\n| 01 | 2026-08-15-01-tier-a-bug-fixes.md | The nine reachable bug fixes (together-ai credential drop, setup command, public isValidProvider, HuggingFace sdk forwarding, llama.cpp health probe, image-dispatch matcher, export-default violations, replicate credential naming, wasted health probe) | — |\n| 02 | 2026-08-15-02-ci-safety-net.md | First real merge gates: mocked-contract + structural suites wired into CI, fixed branch-protection contexts, pre-push hook, nightly live matrix, doc-truth fixes | — |\n| 03 | 2026-08-15-03-dead-code-purge.md | Deletion of all grep-verified dead code (9 provider dirs' orphaned siblings, static barrel, Vertex diagnostics, universalProviderOptions, unused config factories, duplicate zod schemas, stale comments) | — |\n| 04 | 2026-08-15-04-provider-descriptor.md | ProviderDescriptor + PROVIDER_DESCRIPTORS pure-data module as the single source of truth; every hardcoded provider list (CLI choices, health switches, status arrays, env validation, credentialKeyMap, PROMPT_ONLY_TOOL_PROVIDERS) derived from it; completeness test suite | 03 (less surface to migrate) |\n| 05 | 2026-08-15-05-openai-compat-catalog.md | The config-driven tier prototype: ConfiguredOpenAICompatProvider + OPENAI_COMPAT_CATALOG; the 7 zero-quirk providers ported with byte-parity mocked contract proofs; the adjustBodyAfter400 compose fix | 04, 07 |\n| 06 | 2026-08-15-06-model-metadata-consolidation.md | One per-provider model manifest replacing the 5 disagreeing stores (context windows, pricing,
|
|
10686
|
+
{"objectID":"af9ab12f46b26343ca6e74e4c49e9119434f01b30c3dc72ceafb23cd24f93714","title":"Provider Redesign Program — Roadmap","url":"/docs/superpowers/plans/2026-08-15-00-roadmap","content":"Provider Redesign Program — Roadmap\n\nThis is the master index. It orders and connects the ten implementation plans in this directory. Each plan is independently executable (via superpowers:subagent-driven-development or superpowers:executing-plans) and produces working, testable software on its own — but the wave order below exists because later plans consume contracts earlier plans produce.\n\nProgram goal: Make NeuroLink's provider integration scale from 31 providers to 230+, by (a) fixing the bugs and installing a CI safety net first, (b) collapsing the 30+ hand-maintained provider lists and 5 metadata stores into single sources of truth, (c) extracting the machinery the expensive providers each hand-rolled (agentic loop, error classification, streaming primitives), and (d) turning \"add a provider\" into a config entry with a scaffold and a merge gate.\n\nSpec: The Provider Atlas audit (published artifact: https://claude.ai/code/artifact/3083b1e5-9647-456a-8609-fa4cf4eb5c10) plus the 15 per-area audit reports it was synthesized from. Each plan's header lists the specific area reports it argues from.\n\nThe ten plans\n\n| # | Plan | What it ships | Depends on |\n| --- | ----------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- |\n| 01 | 2026-08-15-01-tier-a-bug-fixes.md | The nine reachable bug fixes (together-ai credential drop, setup command, public isValidProvider, HuggingFace sdk forwarding, llama.cpp health probe, image-dispatch matcher, export-default violations, replicate credential naming, wasted health probe) | — |\n| 02 | 2026-08-15-02-ci-safety-net.md | First real merge gates: mocked-contract + structural suites wired into CI, fixed branch-protection contexts, pre-push hook, nightly live matrix, doc-truth fixes | — |\n| 03 | 2026-08-15-03-dead-code-purge.md | Deletion of all grep-verified dead code (9 provider dirs' orphaned siblings, static barrel, Vertex diagnostics, universalProviderOptions, unused config factories, duplicate zod schemas, stale comments) | — |\n| 04 | 2026-08-15-04-provider-descriptor.md | ProviderDescriptor + PROVIDER_DESCRIPTORS pure-data module as the single source of truth; every hardcoded provider list (CLI choices, health switches, status arrays, env validation, credentialKeyMap, PROMPT_ONLY_TOOL_PROVIDERS) derived from it; completeness test suite | 03 (less surface to migrate) |\n| 05 | 2026-08-15-05-openai-compat-catalog.md | The config-driven tier prototype: ConfiguredOpenAICompatProvider + OPENAI_COMPAT_CATALOG; the 7 zero-quirk providers ported with byte-parity mocked contract proofs; the adjustBodyAfter400 compose fix | 04, 07 |\n| 06 | 2026-08-15-06-model-metadata-consolidation.md | One per-provider model manifest replacing the 5 disagreeing stores (context windows, pricing, MODEL_REGISTRY, vision tables, PROVIDER_MAX_TOKENS); ClassifierRouter observability + ranking fix; fuzzy-match tightening | 03 |\n| 07 | 2026-08-15-07-error-retry-unification.md | classifyProviderError + per-provider rule tables replacing ~30 hand-rolled formatProviderError bodies; one retry primitive (down from 4); deduplicated error classes; streaming 429/5xx retry parity; structured-output policy consolidation | — |\n| 08 | 2026-08-15-08-agentic-loop-engine.md | One adapter-parameterized agentic loop engine replacing the 9 hand-rolled native loops (Anthropic, AI Studio ×2, Vertex ×4, Bedrock ×2); merged stream-channel primitive; shared native tool-format converter; SageMaker streaming recovery; SPI hardening against the dual-shape trap | 07 |\n| 09 | 2026-08-15-09-media-registry-consolidation.md | Generic HandlerRegistry<T> behind the six media processors; single registration path; one resolveRequestKind() dispatch decision; CLI media choices der","hierarchy":{"lvl0":"Superpowers","lvl1":"Provider Redesign Program — Roadmap","lvl2":"","lvl3":""}},
|
|
10687
10687
|
{"objectID":"21570ff7e2282823c3480cd1c19fb678abb7513b1fc420dfbb580796baa0b2cb","title":"Provider Redesign Program — Roadmap","url":"/docs/superpowers/plans/2026-08-15-00-roadmap#provider-redesign-program-roadmap","content":"This is the master index. It orders and connects the ten implementation plans in this directory. Each plan is independently executable (via superpowers:subagent-driven-development or superpowers:executing-plans) and produces working, testable software on its own — but the wave order below exists because later plans consume contracts earlier plans produce.\n\nProgram goal: Make NeuroLink's provider integration scale from 31 providers to 230+, by (a) fixing the bugs and installing a CI safety net first, (b) collapsing the 30+ hand-maintained provider lists and 5 metadata stores into single sources of truth, (c) extracting the machinery the expensive providers each hand-rolled (agentic loop, error classification, streaming primitives), and (d) turning \"add a provider\" into a config entry with a scaffold and a merge gate.\n\nSpec: The Provider Atlas audit (published artifact: https://claude.ai/code/artifact/3083b1e5-9647-456a-8609-fa4cf4eb5c10) plus the 15 per-area audit reports it was synthesized from. Each plan's header lists the specific area reports it argues from.","hierarchy":{"lvl0":"Superpowers","lvl1":"Provider Redesign Program — Roadmap","lvl2":"Provider Redesign Program — Roadmap","lvl3":""}},
|
|
10688
10688
|
{"objectID":"12b640aef90e2b6ad0f29db33844c5904395354bc6637b76909247bca0cf14ca","title":"The ten plans","url":"/docs/superpowers/plans/2026-08-15-00-roadmap#the-ten-plans","content":"| # | Plan | What it ships | Depends on |\n| --- | ----------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- |\n| 01 | 2026-08-15-01-tier-a-bug-fixes.md | The nine reachable bug fixes (together-ai credential drop, setup command, public isValidProvider, HuggingFace sdk forwarding, llama.cpp health probe, image-dispatch matcher, export-default violations, replicate credential naming, wasted health probe) | — |\n| 02 | 2026-08-15-02-ci-safety-net.md | First real merge gates: mocked-contract + structural suites wired into CI, fixed branch-protection contexts, pre-push hook, nightly live matrix, doc-truth fixes | — |\n| 03 | 2026-08-15-03-dead-code-purge.md | Deletion of all grep-verified dead code (9 provider dirs' orphaned siblings, static barrel, Vertex diagnostics, universalProviderOptions, unused config factories, duplicate zod schemas, stale comments) | — |\n| 04 | 2026-08-15-04-provider-descriptor.md | ProviderDescriptor + PROVIDER_DESCRIPTORS pure-data module as the single source of truth; every","hierarchy":{"lvl0":"Superpowers","lvl1":"Provider Redesign Program — Roadmap","lvl2":"The ten plans","lvl3":""}},
|
|
10689
10689
|
{"objectID":"00db104694922ba67c7c552a9895a0bfd19d07a3e97362d1098c07e54a4fe39f","title":"Execution waves","url":"/docs/superpowers/plans/2026-08-15-00-roadmap#execution-waves","content":"Wave 1 first, always. It installs the safety net (02) the later refactors rely on, removes the dead surface (03) the migrations would otherwise carry, and lands user-visible fixes (01) with zero architectural risk.\n04 and 07 are the keystone plans. They produce the shared contracts (ProviderDescriptor, classifyProviderError) that plans 05, 08, 09, and 10 consume. Do not start wave 3 before both land.\nWithin wave 3, plans are independent of each other (05 touches the compat family, 06 touches metadata, 08 touches native loops, 09 touches media) — they can run as parallel worktrees with low conflict risk. Two shared files to watch: providerRegistry.ts (05 rewrites 7 factory blocks; 09 rewires the media handler blocks) and baseProvider.ts (08's Task 8 SPI default executeStream vs 09's Tasks 14–16 dispatch/video edits — different methods, but rebase deliberately). Conflicts are mechanical in either order.\n10 is deliberately last: the playbook documents the end-state, not the transition.","hierarchy":{"lvl0":"Superpowers","lvl1":"Provider Redesign Program — Roadmap","lvl2":"Execution waves","lvl3":""}},
|
|
@@ -10738,7 +10738,7 @@
|
|
|
10738
10738
|
{"objectID":"5482f40b4ea627aa36e04ffbb6b1d04e76cf544d4c8dc5e7e35f7ca7e2f8a56d","title":"Task 10: Unreachable class-constructor fallback branch in providerFactory.ts","url":"/docs/superpowers/plans/2026-08-15-03-dead-code-purge#task-10-unreachable-class-constructor-fallback-branch-in-providerfactoryts","content":"Files:\nEdit: src/lib/factories/providerFactory.ts — simplify createProvider's inner try/catch (lines 127-172) to remove the unreachable constructor-retry branch\n\nInterfaces: None — the outer catch (error) block (line 175, unchanged) already formats and rethrows any error from the inner block identically to how the dead branch's else { throw factoryError; } did, so this is a behavior-preserving simplification, not a behavior change.\n[ ] Verify the branch is unreachable: every registered factory is an arrow function (arrow functions have no .prototype, so the guard registration.constructor.prototype && ... is always falsy), and confirm the outer catch already handles the rethrow identically.\n\n \n\n Expected: the read confirms the if (registration.constructor.prototype && registration.constructor.prototype.constructor === registration.constructor) guard at lines 144-148, whose if body (the new (registration.constructor as new (...) => AIProvider)(...) constructor-retry attempt, lines 149-168) can never execute because every one of the 30 registerProvider( calls in providerRegistry.ts passes an async (modelName?, ...) => {...} arrow function as the factory — arrow functions have no .prototype property per the JS spec, so the guard is always false and execution always falls to the else { throw factoryError; } at line 170. The outer catch (error) at line 175 formats and rethrows any error identically regardless of which inner path produced it.\n[ ] Edit src/lib/factories/providerFactory.ts, replacing lines 125-172 (the let result: AIProvider; declaration plus the whole inner try/catch) with a direct, non-wrapped call — letting any factory error propagate straight to the existing outer catch (error) at line 175 unchanged:\n\n \n\n (The surrounding outer try { ... } catch (error) { logger.error(...); throw new Error(...); } at lines 118/175-181 stays exactly as-is; only the inner try/catch and its dead branch are removed.)\n[ ] Run the full verification gate.","hierarchy":{"lvl0":"Superpowers","lvl1":"Dead Code Purge Implementation Plan","lvl2":"Task 10: Unreachable class-constructor fallback branch in providerFactory.ts","lvl3":""}},
|
|
10739
10739
|
{"objectID":"3ce37c13b59060572fffb4c9f0aa07daa3b1cd846ceafa9bc28d4acbc2408b73","title":"Verification Checklist","url":"/docs/superpowers/plans/2026-08-15-03-dead-code-purge#verification-checklist","content":"[ ] All 10 tasks' grep-verification steps were re-run against the current tree (not copy-pasted from this plan's cached line numbers) immediately before each deletion.\n[ ] pnpm run check && pnpm run lint && pnpm run build passes after every single task, not just at the end.\n[ ] Every provider directory's index.ts barrel exports exactly the files that still exist in that directory — no barrel line points at a deleted file.\n[ ] src/lib/types/index.ts no longer exports universalProviderOptions.js; every other barrel line is untouched.\n[ ] AnthropicModelMetadata's supportsVision field is confirmed still present in the type (src/lib/types/subscription.ts) and in all 9 MODEL_METADATA entries — this task deliberately did NOT touch it.\n[ ] modelConfiguration.ts's ModelConfigurationManager class and modelConfig singleton are confirmed still present and functioning — this task deliberately did NOT delete the file.\n[ ] npx tsx test/continuous-test-suite-providers.ts passes after Tasks 1, 2, 3, 5, 8, 10 (the tasks that touch provider-instantiation-adjacent code).\n[ ] npx tsx test/continuous-test-suite-model-capabilities.ts and test:credentials pass after Task 6.\n[ ] npx tsx test/continuous-test-suite-dynamic.ts passes after Task 7.\n[ ] npx tsx test/continuous-test-suite-observability.ts and test:evaluation pass after Task 8.\n[ ] git log shows one commit per task (10 commits), each a conventional-commit message, none pushed.\n[ ] A final grep -rn \"TODO\\|FIXME\" <touched files> sanity check shows no leftover markers from the edits.","hierarchy":{"lvl0":"Superpowers","lvl1":"Dead Code Purge Implementation Plan","lvl2":"Verification Checklist","lvl3":""}},
|
|
10740
10740
|
{"objectID":"ce6285548f3f943b4f4852c398391b4ab34e8996b9492a8c992b21c0659827cd","title":"Risks & Rollback","url":"/docs/superpowers/plans/2026-08-15-03-dead-code-purge#risks-rollback","content":"Risk — Task 3 (googleVertex) is the largest single edit (12 functions across a 9,966-line file, deleted in two blocks whose line numbers shift relative to each other). Mitigation: delete bottom-to-top (second block, i.e. the higher line numbers, first) so the first block's line numbers never move out from under you mid-edit; re-run the grep-verification step after the first deletion to get fresh line numbers before the second.\nRisk — Task 4 (universalProviderOptions.ts) is a nominal breaking change. It's reachable via the package's main . export today, even though nothing internally or externally (per repo-wide grep) consumes it. If semantic-release / commit-message conventions in this repo treat a !-suffixed conventional commit as a major-version trigger, confirm that's the intended signal before merging — a chore!: may need to become a plain chore: with a note in the PR description instead, depending on how strictly this repo's release automation reads commit types. Outcome: it did trigger a major release, v11.0.0 (see the note under Task 4). Rollback: git revert the single Task 4 commit; the deleted file's content is fully captured in this plan's Task 4 section if it needs reconstructing without a git history dive.\nRisk — Task 6 deliberately does LESS than originally assigned (keeps the supportsVision field). If the team intended a genuine breaking change to AnthropicModelMetadata's shape as part of a larger model-metadata consolidation (out of scope here, see below), this task's conservative choice may need revisiting once that consolidation plan exists — at that point deleting the field becomes a deliberate, coordinated breaking change rather than an accidental one, which is a different decision than this task is scoped to make alone.\nRisk — Task 8 deliberately does LESS than originally assigned (keeps the file).","hierarchy":{"lvl0":"Superpowers","lvl1":"Dead Code Purge Implementation Plan","lvl2":"Risks & Rollback","lvl3":""}},
|
|
10741
|
-
{"objectID":"d7635687ba3b43659146bab3bec3bdb978676dd95699f9567a879808b692c004","title":"Out of Scope","url":"/docs/superpowers/plans/2026-08-15-03-dead-code-purge#out-of-scope","content":"SageMaker orphaned streaming code — flagged in the audit as a separate dead/orphaned pattern in the SageMaker provider; whether to wire it up or delete it is a design decision, not a mechanical dead-code deletion. Covered by Plan 08.\nVertex's duplicated live loops (the live code paths that duplicate logic across executeNativeGemini3Stream/Generate and executeNativeAnthropicStream/Generate, as opposed to this plan's Task 3, which only removes the fully-dead legacy call tree those live paths replaced) — a refactor of working code, not a deletion of dead code. Covered by Plan 08.\nMODEL_REGISTRY consolidation — merging the anthropicModels.ts /
|
|
10741
|
+
{"objectID":"d7635687ba3b43659146bab3bec3bdb978676dd95699f9567a879808b692c004","title":"Out of Scope","url":"/docs/superpowers/plans/2026-08-15-03-dead-code-purge#out-of-scope","content":"SageMaker orphaned streaming code — flagged in the audit as a separate dead/orphaned pattern in the SageMaker provider; whether to wire it up or delete it is a design decision, not a mechanical dead-code deletion. Covered by Plan 08.\nVertex's duplicated live loops (the live code paths that duplicate logic across executeNativeGemini3Stream/Generate and executeNativeAnthropicStream/Generate, as opposed to this plan's Task 3, which only removes the fully-dead legacy call tree those live paths replaced) — a refactor of working code, not a deletion of dead code. Covered by Plan 08.\nMODEL_REGISTRY consolidation — merging the anthropicModels.ts / MODEL_REGISTRY / MODEL_CONTEXT_WINDOWS / VISION_CAPABILITIES model-metadata stores into one source of truth, including any future decision to reshape AnthropicModelMetadata itself (which would supersede this plan's conservative Task 6 choice to keep supportsVision as-is). Covered by Plan 06.\nOLLAMA_OPENAI_COMPATIBLE doc/behavior mismatch — discovered incidentally during Task 1's ollama verification (the env var is documented as live in docs/getting-started/providers/ollama.md and docs/reference/provider-capabilities-audit.md, but the code path that would read it is dead and client.ts's docstring says the provider now always uses the OpenAI-compatible API unconditionally). This is a docs-accuracy issue adjacent to, but distinct from, the dead-code deletion this plan performs — worth a follow-up docs fix, not bundled into Task 1 here.\nevaluationProviders.ts's barrel re-export from src/lib/types/index.ts — noted during Task 8's consumer trace as a pre-existing Critical Rule 12 violation (a non-type file's content re-exported from the types barrel). Not part of this plan's scope; flagged for whichever plan owns general Rule-12 cleanup, if one exists.","hierarchy":{"lvl0":"Superpowers","lvl1":"Dead Code Purge Implementation Plan","lvl2":"Out of Scope","lvl3":""}},
|
|
10742
10742
|
{"objectID":"6d4673ae8eff94c51ccbaac4634e74ba6ab12328879b77eb05ad90ea339abc09","title":"ProviderDescriptor Single Source of Truth Implementation Plan","url":"/docs/superpowers/plans/2026-08-15-04-provider-descriptor","content":"ProviderDescriptor Single Source of Truth Implementation Plan\n\nFor agentic workers: REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (- [ ]) syntax for tracking.\n\nGoal: Replace five independently-drifted provider-identity tables (CLI choices, CREDENTIAL_KEY_MAP, env-var checks, health-check switches, tool-support sets) with one ProviderDescriptor record per provider and a single PROVIDER_DESCRIPTORS array, so every consumer derives its view from one source instead of hand-maintaining its own copy.\n\nArchitecture: A new pure-data module (src/lib/factories/providerDescriptors.ts) declares one ProviderDescriptor object per of the 30 real AIProviderName values (everything except AUTO), plus a name→descriptor map and an alias→canonical-name index, all computed once at module load with zero imports of provider classes or dynamic import(). ProviderFactory (src/lib/factories/providerFactory.ts) gains getDescriptor()/getAllDescriptors() reading from that module, and registerProvider() gains an optional 5th parameter so a live registration can carry its descriptor too. Nine existing consumers (CLI provider choices, provider env-var checks, health-check dispatch, auto-select priority, getProviderStatus(), environmentManager.ts, setup.ts, the prompt-only-tools set, and CREDENTIAL_KEY_MAP/resolveCredentialKey) are each migrated, one task at a time, to read from PROVIDER_DESCRIPTORS instead of their own hand-written table. Plan 01 (Tier A Bug Fixes, landed on this branch first) already fixed two of the originally-confirmed bugs — the missing together-ai credential mapping and getAvailableProviders()/isValidProvider() only recognizing 10 of 30 providers — ahead of this plan; this plan's remaining fixes are hasProviderEnvVars() silently returning false for 20 of 30 providers and the missing nvidia/lms CLI completions, plus it re-derives Plan 01's two already-fixed spots from the same PROVIDER_DESCRIPTORS source (rather than their now-separate hand-written fixes) so all nine consumers genuinely share one source instead of nine independently-correct ones.\n\nTech Stack: TypeScript (strict, ESM, NodeNext module resolution), pnpm, tsx for direct TS execution of test suites and CLI-only consumers, the repo's defineSuite/test/assert/runSuite harness (test/helpers/harness.ts) for regression suites, ESLint with this repo's custom neurolink/* rules for the type-placement/naming constraints.\n\nSpec:\n$SCRATCH/47d64fa8-f94f-404c-b134-3e117deddba3/scratchpad/areas/00-provider-registration-instantiation-chain.md\n$SCRATCH/47d64fa8-f94f-404c-b134-3e117deddba3/scratchpad/areas/02-sdk-entry-orchestration-src-lib-neurolink-ts-gener.md\n$SCRATCH/47d64fa8-f94f-404c-b134-3e117deddba3/scratchpad/areas/07-cli-env-config-surface-for-ai-providers.md\n$SCRATCH/47d64fa8-f94f-404c-b134-3e117deddba3/scratchpad/areas/11-types-models-config.md\n\nGlobal Constraints\npnpm ONLY. pnpm run check / pnpm run lint / pnpm run build. Tests via npx tsx test/continuous-test-suite-<name>.ts + package.json test:<name> scripts.\nTEST HARNESS SKIP HAZARD: NEVER interpolate payloads into assertion messages (SKIP-not-FAIL downgrade); new suites include a break-one-assertion sanity step.\nRepo rules: dynamic imports only in providerRegistry.ts factory closures; ALL types in src/lib/types/; no interface (type + intersection only); unique exported type names; types barrel only export *; barrel-only internal type imports; no double assertions; named exports only; no export default. Public SDK API must not break.\nConventional commits; commit per task; NEVER git push.\n\nTesting convention for this plan specifically: Task 6's completeness suite (test/continuous-test-suite-provider-descriptors.ts) is the one place this plan tests the public contract — it imports PROVIDER_DESCRIPTORS, ProviderFactory (getDescriptor/getAllDescriptors) from ../dist/index.js, matching the repo convention that test:* suites exercise the built package. Tasks 7–15 migrate internal consumer functions (CLI option builders, env-var checkers, health-check switches) that are not part of the public SDK barrel; those tasks add test() blocks to the same suite file but import the consumer functions directly from their src/ .ts files via tsx (no build step required to iterate on them), consistent with how test:mcp:bash and test:mcp:infra mix build-artifact and source-level checks in this repo. This split is called out again at the top of each task's Files section.\n\nTask 1: ProviderDescriptor type\n\nFiles:\nsrc/lib/types/providers.ts — add new type after the existing ProviderRegistration type (currently lines 1967-1971).\n\nInterfaces:\nProduces: type ProviderDescriptor (exported).\n\nSteps:\n[ ] Before-grep: confirm the type doesn't exist yet.\n\n \n\n Expected: no output (empty).\n[ ] Add the type immediately after ProviderRegistration (after line 1971) in src/lib/types/providers.ts:\n[ ] Run typecheck and lint, verify t","hierarchy":{"lvl0":"Superpowers","lvl1":"ProviderDescriptor Single Source of Truth Implementation Plan","lvl2":"","lvl3":""}},
|
|
10743
10743
|
{"objectID":"a5ddcd24b0db1523d7658e18c8ff8a584edb89a87e5167b4bf394afbc8ee6978","title":"ProviderDescriptor Single Source of Truth Implementation Plan","url":"/docs/superpowers/plans/2026-08-15-04-provider-descriptor#providerdescriptor-single-source-of-truth-implementation-plan","content":"For agentic workers: REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (- [ ]) syntax for tracking.\n\nGoal: Replace five independently-drifted provider-identity tables (CLI choices, CREDENTIAL_KEY_MAP, env-var checks, health-check switches, tool-support sets) with one ProviderDescriptor record per provider and a single PROVIDER_DESCRIPTORS array, so every consumer derives its view from one source instead of hand-maintaining its own copy.\n\nArchitecture: A new pure-data module (src/lib/factories/providerDescriptors.ts) declares one ProviderDescriptor object per of the 30 real AIProviderName values (everything except AUTO), plus a name→descriptor map and an alias→canonical-name index, all computed once at module load with zero imports of provider classes or dynamic import(). ProviderFactory (src/lib/factories/providerFactory.ts) gains getDescriptor()/getAllDescriptors() reading from that module, and registerProvider() gains an optional 5th parameter so a live registration can carry its descriptor too. Nine existing consumers (CLI provider choices, provider env-var checks, health-check dispatch, auto-select priority, getProviderStatus(), environmentManager.ts, setup.ts, the prompt-only-tools set, and CREDENTIAL_KEY_MAP/resolveCredentialKey) are each migrated, one task at a time, to read from PROVIDER_DESCRIPTORS instead of their own hand-written table.","hierarchy":{"lvl0":"Superpowers","lvl1":"ProviderDescriptor Single Source of Truth Implementation Plan","lvl2":"ProviderDescriptor Single Source of Truth Implementation Plan","lvl3":""}},
|
|
10744
10744
|
{"objectID":"9d40d2b7b78ff040bc5e1fa46f1a9a85295c354ff6f1e1ebda7abf99cbf881fc","title":"Global Constraints","url":"/docs/superpowers/plans/2026-08-15-04-provider-descriptor#global-constraints","content":"pnpm ONLY. pnpm run check / pnpm run lint / pnpm run build. Tests via npx tsx test/continuous-test-suite-<name>.ts + package.json test:<name> scripts.\nTEST HARNESS SKIP HAZARD: NEVER interpolate payloads into assertion messages (SKIP-not-FAIL downgrade); new suites include a break-one-assertion sanity step.\nRepo rules: dynamic imports only in providerRegistry.ts factory closures; ALL types in src/lib/types/; no interface (type + intersection only); unique exported type names; types barrel only export *; barrel-only internal type imports; no double assertions; named exports only; no export default. Public SDK API must not break.\nConventional commits; commit per task; NEVER git push.\n\nTesting convention for this plan specifically: Task 6's completeness suite (test/continuous-test-suite-provider-descriptors.ts) is the one place this plan tests the public contract — it imports PROVIDER_DESCRIPTORS, ProviderFactory (getDescriptor/getAllDescriptors) from ../dist/index.js, matching the repo convention that test:* suites exercise the built package. Tasks 7–15 migrate internal consumer functions (CLI option builders, env-var checkers, health-check switches) that are not part of the public SDK barrel; those tasks add test() blocks to the same suite file but import the consumer functions directly from their src/ .ts files via tsx (no build step required to iterate on them), consistent with how test:mcp:bash and test:mcp:infra mix build-artifact and source-level checks in this repo. This split is called out again at the top of each task's Files section.","hierarchy":{"lvl0":"Superpowers","lvl1":"ProviderDescriptor Single Source of Truth Implementation Plan","lvl2":"Global Constraints","lvl3":""}},
|
|
@@ -10821,8 +10821,8 @@
|
|
|
10821
10821
|
{"objectID":"a7d50bf9d508f9d645c914e10ba610200a2531855f8d44b7dc20a263e1bbbc34","title":"Verification Checklist","url":"/docs/superpowers/plans/2026-08-15-07-error-retry-unification#verification-checklist","content":"[ ] pnpm run check — 0 errors\n[ ] pnpm run lint — 0 errors\n[ ] pnpm run build — clean\n[ ] pnpm run test:error-classifier — all pass (Task 1 + Task 5's collision regression)\n[ ] pnpm run test:error-classifier-openai-compat — all pass (Tasks 2-3, 19 providers)\n[ ] pnpm run test:error-classifier-native — all pass (Task 4, anthropic/vertex/bedrock)\n[ ] pnpm run test:openai-compat-streaming-retry — all pass (Task 8)\n[ ] pnpm run test:anthropic-streaming-retry — all pass (Task 9)\n[ ] pnpm run test:gemini-tools-schema-policy — all pass (Task 10)\n[ ] pnpm run test:context — unchanged pass count (Task 7's fileDetector migration)\n[ ] npx tsx test/continuous-test-suite-providers-mocked.ts — still green (program-level gate; must not have regressed from any provider's formatProviderError rewrite)\n[ ] npx tsx test/continuous-test-suite-anthropic-guard.ts — still green (Task 9 didn't disturb the in-turn context guard)\n[ ] npx tsx test/continuous-test-suite-gemini-guard.ts — still green (Task 10 didn't disturb Gemini's other loop-guard behavior)\n[ ] pnpm test — main continuous suite green\n[ ] grep -c \"protected formatProviderError\" src/lib/providers/*.ts src/lib/providers/*/client.ts — every migrated provider still has exactly one formatProviderError override (structural sanity: nobody accidentally duplicated the method during a merge)\n[ ] grep -rn \"class NetworkError\\|class TemporaryError\" src/lib/utils/retryHandler.ts — returns nothing (Task 6)\n[ ] grep -rn \"^export class TimeoutError\" src/lib/server/errors.ts — returns nothing; grep -n \"class ServerTimeoutError\" src/lib/server/errors.ts returns one line (Task 5)\n[ ] Deliberately break one assertion in test/continuous-test-suite-error-classifier.ts (per Global Constraints' skip-hazard rule), confirm it reports ✗ and exits non-zero, then revert — run once across this plan's work, not once per suite.","hierarchy":{"lvl0":"Superpowers","lvl1":"Error & Retry Unification Implementation Plan","lvl2":"Verification Checklist","lvl3":""}},
|
|
10822
10822
|
{"objectID":"a5c830d73810f2310b926752109beaf92ff27e47a0db291cf2e84a953b0f54e3","title":"Risks & Rollback","url":"/docs/superpowers/plans/2026-08-15-07-error-retry-unification#risks-rollback","content":"azureOpenai.ts's migration in Task 3 is a deliberate behavior change, not a pure refactor — 429/404/network/5xx errors that previously always surfaced as a generic ProviderError will now surface as RateLimitError/InvalidModelError/NetworkError. Any caller doing error instanceof ProviderError (not a subclass check) is unaffected, since every subclass still extends ProviderError. A caller doing !(error instanceof RateLimitError) to gate some Azure-specific fallback logic could start taking a different branch. Mitigated: this plan found no such caller via grep of src/ for instanceof.*RateLimitError combined with azure in the same file; the change is treated as a latent-bug fix, and Task 3's Step 1 explicitly names it as a \"behavior-change check\" test rather than hiding it inside a plain parity assertion. Rollback: revert Task 3's azureOpenai.ts commit alone (it's its own file in a multi-file commit — git revert with a partial-path checkout, or cherry-pick the other 10 providers' changes onto a fresh commit) and keep azureOpenai.ts's original single-401-check body.\nTask 8/9's streaming-retry wrap could interact badly with maxSteps/timeout budgets — retrying a 429 with backoff inside a streaming loop consumes wall-clock time that used to fail fast; a caller with a tight AbortSignal timeout could now time out mid-retry instead of getting an immediate 429 error to handle themselves. withProviderRetry's existing MAX_PROVIDER_RETRIES = 2 (3 total attempts) and capped backoff (MAX_RETRY_AFTER_MS = 60_000, NO_HINT_FLOOR_MS = 10_000) bound the worst case to roughly the same envelope the non-streaming path already accepts today, so this is consistency, not a new unbounded risk — but it IS a new latency characteristic for streaming callers who never experienced retry delay before.","hierarchy":{"lvl0":"Superpowers","lvl1":"Error & Retry Unification Implementation Plan","lvl2":"Risks & Rollback","lvl3":""}},
|
|
10823
10823
|
{"objectID":"427ecd2ddb8183d6c7dc0beab5466ab87e2bb9d3e68e0d52a81cd2101575bced","title":"Out of Scope","url":"/docs/superpowers/plans/2026-08-15-07-error-retry-unification#out-of-scope","content":"Implementing ProviderDescriptor, PROVIDER_DESCRIPTORS, ProviderFactory.getDescriptor/getAllDescriptors — Plan 04.\nConsuming classifyProviderError/DEFAULT_ERROR_RULES from a config-driven catalog entry (OpenAICompatCatalogEntry) instead of a hand-written subclass — Plan 05. This plan migrates the EXISTING 19 hand-written subclasses' formatProviderError bodies in place; it does not collapse the subclasses themselves into catalog rows.\nThe agentic loop engine (runAgenticLoop, the merged stream channel, toNativeToolDeclarations) that Plan 08 builds on top of this plan's error-classification and retry primitives — Plan 08. This plan's Tasks 8-9 add retry to the TWO existing hand-rolled streaming loops (OpenAI-compat, Anthropic) as they exist today; it does not touch the other seven native loops (AI Studio ×2, Vertex ×4, Bedrock ×2) the audit identified, since those are Plan 08's consolidation target and adding retry twice (once here, once during Plan 08's rewrite) would be wasted work.\nModel-metadata/context-window/timeout-table consolidation — Plan 06. This plan's TimeoutError work (Task 5) is a naming-collision fix only; it does not touch DEFAULT_TIMEOUTS, getDefaultTimeout, or any per-provider timeout value.\nRetrofitting classifyProviderError onto providers outside the 22 covered by Tasks 2-4 (the remaining ~8 of the ~30 total providers the audit counted — TTS/STT/media/embedding-only providers with their own error-handling shape, and any provider not part of the OpenAI-compat family or the three native-SDK providers this plan named). Those providers' error handling was not characterized by this plan's research and is left for a follow-up pass once this plan's pattern is proven in production.\nThe 200-provider onboarding playbook, scaffolding tool, and CI completeness gate that reference classifyProviderError/ProviderErrorRule/DEFAULT_ERROR_RULES by name as a Tier 2/3 onboarding requirement — Plan 10.","hierarchy":{"lvl0":"Superpowers","lvl1":"Error & Retry Unification Implementation Plan","lvl2":"Out of Scope","lvl3":""}},
|
|
10824
|
-
{"objectID":"08e2b561e2806aab982ae3432f5c3f32369c3c3456ede176353241a690ceb3d3","title":"Shared Agentic Loop Engine Implementation Plan","url":"/docs/superpowers/plans/2026-08-15-08-agentic-loop-engine","content":"Shared Agentic Loop Engine Implementation Plan\n\nFor agentic workers: REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (- [ ]) syntax for tracking.\n\nGoal: Replace the nine independently hand-rolled agentic tool-calling loops living inside four native providers (direct Anthropic, Google AI Studio, Google Vertex ×4, Amazon Bedrock ×2) with one adapter-parameterized engine (runAgenticLoop) plus two merged low-level primitives (a unified stream channel, a unified native tool-declaration converter), migrating each provider one commit at a time behind a characterization test that pins its current, provider-specific behavior before the code moves.\n\nArchitecture: runAgenticLoop(adapter, options) in src/lib/core/loopEngine.ts owns everything that is genuinely shared across all native loops — the maxSteps-bounded step loop, generic tool dispatch with an opt-in
|
|
10825
|
-
{"objectID":"6f922da78a7fab96f095233d0661c50281ab50316097fbb56cb9e68995fe0a0f","title":"Shared Agentic Loop Engine Implementation Plan","url":"/docs/superpowers/plans/2026-08-15-08-agentic-loop-engine#shared-agentic-loop-engine-implementation-plan","content":"For agentic workers: REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (- [ ]) syntax for tracking.\n\nGoal: Replace the nine independently hand-rolled agentic tool-calling loops living inside four native providers (direct Anthropic, Google AI Studio, Google Vertex ×4, Amazon Bedrock ×2) with one adapter-parameterized engine (runAgenticLoop) plus two merged low-level primitives (a unified stream channel, a unified native tool-declaration converter), migrating each provider one commit at a time behind a characterization test that pins its current, provider-specific behavior before the code moves.\n\nArchitecture: runAgenticLoop(adapter, options) in src/lib/core/loopEngine.ts owns everything that is genuinely shared across all native loops — the maxSteps-bounded step loop, generic tool dispatch with an opt-in
|
|
10824
|
+
{"objectID":"08e2b561e2806aab982ae3432f5c3f32369c3c3456ede176353241a690ceb3d3","title":"Shared Agentic Loop Engine Implementation Plan","url":"/docs/superpowers/plans/2026-08-15-08-agentic-loop-engine","content":"Shared Agentic Loop Engine Implementation Plan\n\nFor agentic workers: REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (- [ ]) syntax for tracking.\n\nGoal: Replace the nine independently hand-rolled agentic tool-calling loops living inside four native providers (direct Anthropic, Google AI Studio, Google Vertex ×4, Amazon Bedrock ×2) with one adapter-parameterized engine (runAgenticLoop) plus two merged low-level primitives (a unified stream channel, a unified native tool-declaration converter), migrating each provider one commit at a time behind a characterization test that pins its current, provider-specific behavior before the code moves.\n\nArchitecture: runAgenticLoop(adapter, options) in src/lib/core/loopEngine.ts owns everything that is genuinely shared across all native loops — the maxSteps-bounded step loop, generic tool dispatch with an opt-in TOOL_NOT_FOUND/failure-strike breaker, per-step usage accumulation, stop-reason resolution, chunk emission through the new streamChannel.ts primitive, an optional malformed-call retry budget, and a pre-first-chunk 429/5xx withProviderRetry wrap around every adapter.executeStep() call (unconditional, adapter-agnostic — see Task 3 Step 3). Everything that is genuinely provider-specific — building the wire request, issuing the SDK/HTTP call and parsing its response incrementally, serializing tool results back into the provider's conversation format, mapping the provider's raw stop/finish reason, and (for Anthropic-family adapters) prompt-cache breakpoints and in-turn context reclaim — lives behind a small AgenticLoopAdapter interface, with one adapter implementation per wire protocol (AnthropicLoopAdapter, GeminiLoopAdapter, BedrockLoopAdapter), each adapter reused across every client that speaks that protocol (native Anthropic AND Vertex+Claude share AnthropicLoopAdapter; Google AI Studio AND Vertex+Gemini share GeminiLoopAdapter).\n\nTech Stack: TypeScript (strict, ESM/NodeNext), @anthropic-ai/sdk (Messages streaming), @google/genai (native Gemini 3 SDK), @aws-sdk/client-bedrock-runtime (ConverseCommand/ConverseStreamCommand), Vercel AI SDK Tool/LanguageModel types, test harness test/helpers/harness.ts run via npx tsx.\n\nSpec: This plan argues from ground-truth code reads (file:line citations throughout) plus four audit-area reports (session scratchpad, not repo-tracked — copy alongside this plan or re-derive from the cited code if the scratchpad has been cleaned up by the time this plan is executed):\n$SCRATCH/47d64fa8-f94f-404c-b134-3e117deddba3/scratchpad/areas/04-cloud-enterprise-provider-family-googlevertex-amaz.md (googleVertex, amazonBedrock, amazonSagemaker, azureOpenai)\n$SCRATCH/47d64fa8-f94f-404c-b134-3e117deddba3/scratchpad/areas/03-native-sdk-provider-family-anthropic-openai-google.md (anthropic, openai, googleAiStudio, googleNativeGemini3)\n$SCRATCH/47d64fa8-f94f-404c-b134-3e117deddba3/scratchpad/areas/09-cross-cutting-provider-concerns-tools-mcp-injectio.md (tool merging, structuredOutputPolicy, error normalization, retries)\n$SCRATCH/47d64fa8-f94f-404c-b134-3e117deddba3/scratchpad/areas/01-baseprovider-the-abstract-contract-every-provider-.md (BaseProvider's abstract contract and stream() orchestration)\n\nEvery claim about \"current behavior\" below was verified by reading the actual file at the cited line, not by trusting the spec summaries — several spec-stated facts were corrected during that verification (noted inline where it matters: the createChunkQueue importer count, the location of the TOOL_NOT_FOUND breaker, and the discovery of two additional bespoke streaming primitives the spec didn't mention).\n\nGlobal Constraints\npnpm ONLY. pnpm run check / pnpm run lint / pnpm run build. Tests via npx tsx test/continuous-test-suite-<name>.ts + test:<name> scripts.\nTEST HARNESS SKIP HAZARD: NEVER interpolate payloads into assertion messages; break-one-assertion sanity step for new suites.\nRepo rules: ALL types in src/lib/types/ (the adapter type goes there); no interface; unique exported type names; types barrel export * only; barrel-only internal type imports; no double assertions; named exports only. Public SDK behavior must not change (stream chunk shapes, tool events, usage fields, finishReason values all preserved).\nConventional commits; commit per migration; NEVER git push.\nCONSUMED contract (plan 07, lands first): classifyProviderError in src/lib/utils/errorClassifier.ts + ProviderErrorRule in types/errors.ts (each migrated provider's formatProviderError, already on this contract from plan 07, keeps wrapping whatever runAgenticLoop throws — untouched by this plan). withProviderRetry (utils/providerRetry.ts:169 — real positional signature (operation, span, label, sleep?), NOT an options object) is built into runAgenticLoop itself: every adapter.executeStep() call is wrapped by the engine (Task 3 Step 3), gated by a per-step hasEmitted flag","hierarchy":{"lvl0":"Superpowers","lvl1":"Shared Agentic Loop Engine Implementation Plan","lvl2":"","lvl3":""}},
|
|
10825
|
+
{"objectID":"6f922da78a7fab96f095233d0661c50281ab50316097fbb56cb9e68995fe0a0f","title":"Shared Agentic Loop Engine Implementation Plan","url":"/docs/superpowers/plans/2026-08-15-08-agentic-loop-engine#shared-agentic-loop-engine-implementation-plan","content":"For agentic workers: REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (- [ ]) syntax for tracking.\n\nGoal: Replace the nine independently hand-rolled agentic tool-calling loops living inside four native providers (direct Anthropic, Google AI Studio, Google Vertex ×4, Amazon Bedrock ×2) with one adapter-parameterized engine (runAgenticLoop) plus two merged low-level primitives (a unified stream channel, a unified native tool-declaration converter), migrating each provider one commit at a time behind a characterization test that pins its current, provider-specific behavior before the code moves.\n\nArchitecture: runAgenticLoop(adapter, options) in src/lib/core/loopEngine.ts owns everything that is genuinely shared across all native loops — the maxSteps-bounded step loop, generic tool dispatch with an opt-in TOOL_NOT_FOUND/failure-strike breaker, per-step usage accumulation, stop-reason resolution, chunk emission through the new streamChannel.ts primitive, an optional malformed-call retry budget, and a pre-first-chunk 429/5xx withProviderRetry wrap around every adapter.executeStep() call (unconditional, adapter-agnostic — see Task 3 Step 3). Everything that is genuinely provider-specific — building the wire request, issuing the SDK/HTTP call and parsing its response incrementally, serializing tool results back into the provider's conversation format, mapping the provider's raw stop/finish reason, and (for Anthropic-family adapters) prompt-cache breakpoints and in-turn context reclaim — lives behind a small AgenticLoopAdapter interface, with one adapter implementation per wire protocol (AnthropicLoopAdapter, GeminiLoopAdapter, BedrockLoopAdapter), each adapter reused across every client that speaks that protocol (native Anthropic AND Vertex+Claude share AnthropicLoopAdapter; Google AI Studio AND Vertex+Gemini share GeminiLoopAdapter).","hierarchy":{"lvl0":"Superpowers","lvl1":"Shared Agentic Loop Engine Implementation Plan","lvl2":"Shared Agentic Loop Engine Implementation Plan","lvl3":""}},
|
|
10826
10826
|
{"objectID":"933f6495ee5dc1c06905c80ca4f020b24989c1ce92ad520bfe5fc8de493fb4e6","title":"Global Constraints","url":"/docs/superpowers/plans/2026-08-15-08-agentic-loop-engine#global-constraints","content":"pnpm ONLY. pnpm run check / pnpm run lint / pnpm run build. Tests via npx tsx test/continuous-test-suite-<name>.ts + test:<name> scripts.\nTEST HARNESS SKIP HAZARD: NEVER interpolate payloads into assertion messages; break-one-assertion sanity step for new suites.\nRepo rules: ALL types in src/lib/types/ (the adapter type goes there); no interface; unique exported type names; types barrel export * only; barrel-only internal type imports; no double assertions; named exports only. Public SDK behavior must not change (stream chunk shapes, tool events, usage fields, finishReason values all preserved).\nConventional commits; commit per migration; NEVER git push.\nCONSUMED contract (plan 07, lands first): classifyProviderError in src/lib/utils/errorClassifier.ts + ProviderErrorRule in types/errors.ts (each migrated provider's formatProviderError, already on this contract from plan 07, keeps wrapping whatever runAgenticLoop throws — untouched by this plan). withProviderRetry (utils/providerRetry.ts:169 — real positional signature (operation, span, label, sleep?), NOT an options object) is built into runAgenticLoop itself: every adapter.executeStep() call is wrapped by the engine (Task 3 Step 3), gated by a per-step hasEmitted flag so a step that has already pushed at least one chunk to the stream channel is never retried, even if the eventual error is otherwise retryable. This is engine-owned, adapter-agnostic logic — no adapter implements or opts into it individually. See Task 3 Step 3 and Task 4 Step 1's retry characterization test.","hierarchy":{"lvl0":"Superpowers","lvl1":"Shared Agentic Loop Engine Implementation Plan","lvl2":"Global Constraints","lvl3":""}},
|
|
10827
10827
|
{"objectID":"2a47f7b2449982f154b07535171f022d7770b8c5a294a2cf738172da80289a3a","title":"Verified Facts This Plan Relies On","url":"/docs/superpowers/plans/2026-08-15-08-agentic-loop-engine#verified-facts-this-plan-relies-on","content":"Read directly from source (not inferred from the spec docs) during planning. Every task below cites the specific line again inline where it edits that code, but the cross-cutting facts that shaped the adapter design are collected here once:\ncreateChunkQueue is defined at src/lib/providers/openaiChatCompletionsClient.ts:804 — { pushChunk, nextChunk }, single-producer/single-consumer, {done:true}-in-band sentinel. It has three importers, not the eight the spec estimated: openaiChatCompletionsClient.ts (its own definition), openaiChatCompletionsBase.ts, and src/lib/providers/anthropic/client.ts.\ncreateTextChannel is defined at src/lib/providers/googleNativeGemini3/utils.ts:886 — { push, close, error, iterable }, out-of-band close/error signaling (no sentinel value flows through iterable). Imported by googleAiStudio/client.ts and by googleVertex/client.ts for its Vertex+Claude loops only (googleVertex/client.ts:119,4942).\nTwo additional bespoke streaming primitives exist that neither original spec mentioned, discovered while reading the loop bodies directly:\nAmazon Bedrock's streamingConversationLoop (amazonBedrock/client.ts:1449) builds its own new ReadableStream({ start: async (controller) => {...} }) by hand — a third independently-invented primitive.\nVertex+Gemini's executeNativeGemini3Stream (googleVertex/client.ts:1854) does not use createTextChannel at all despite importing it (that import is used only by the sibling Vertex+Claude functions). It instead buffers every text part into a plain const incrementalTextChunks: string[] = [] array (client.ts:2293, appended at :2443) for the entire tool loop, and only after the whole loop finishes wraps the array in a trivial async function* createTextStream() (client.ts:3050-3056) that replays it. This means Vertex+Gemini's \"stream\" today is not actually concurrent with a consumer — the caller's await this.executeStream(...)","hierarchy":{"lvl0":"Superpowers","lvl1":"Shared Agentic Loop Engine Implementation Plan","lvl2":"Verified Facts This Plan Relies On","lvl3":""}},
|
|
10828
10828
|
{"objectID":"6f9f29dfbc0b6442e96dbfb6712712360259402fc596c5b95872ec4b1d1705e8","title":"Loop-Feature × Provider Mapping Table","url":"/docs/superpowers/plans/2026-08-15-08-agentic-loop-engine#loop-feature-provider-mapping-table","content":"The ground truth the AgenticLoopAdapter design is built from. \"Engine (opt-in)\" means the feature moves into loopEngine.ts as generic logic gated by an adapter-supplied flag/hook so migrated behavior is bit-for-bit identical to today; \"Adapter\" means the feature is provider-specific wire logic that stays behind a hook.\n\n| Feature | Anthropic (native) | Vertex+Claude | Google AI Studio | Vertex+Gemini | Amazon Bedrock (generate) | Amazon Bedrock (stream) | Lands as |\n| --------------------------------------- | ------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |","hierarchy":{"lvl0":"Superpowers","lvl1":"Shared Agentic Loop Engine Implementation Plan","lvl2":"Loop-Feature × Provider Mapping Table","lvl3":""}},
|
|
@@ -10832,7 +10832,7 @@
|
|
|
10832
10832
|
{"objectID":"d2a7cc7b51dc0aa5ed193c6ae081908df7e42ad11c3c5f73930efc79b5c26f6b","title":"Task 4: Migrate Amazon Bedrock's two loops onto the engine","url":"/docs/superpowers/plans/2026-08-15-08-agentic-loop-engine#task-4-migrate-amazon-bedrocks-two-loops-onto-the-engine","content":"Files:\nCreate: test/continuous-test-suite-bedrock-loop-characterization.ts\nCreate: src/lib/providers/amazonBedrock/loopAdapter.ts\nModify: src/lib/providers/amazonBedrock/client.ts (streamingConversationLoop, and the hardcoded-10-iteration generate-path loop)\nModify: package.json (add test:bedrock-loop-characterization)\nModify: eslint.config.js (add the new suite to neurolink/e2e-tests-only's allow list)\n\nBedrock is unaffected by all three architectural blockers (no discovery/hydration code, no originalNameMap, no final_result mechanism — see the findings doc's blocker-3 scoping) and has no ordering dependency on any other task, so it migrates first as the engine's proving ground against real production code.\n\nInterfaces:\n\nConsumes (from Task 3):\n\nProduces:\n\nBedrockMessage and BedrockContentBlock are NeuroLink's own canonical types, already exported from ../../types/index.js (used today by amazonBedrock/client.ts). Not reused by any later task — Bedrock's loop shape (AWS Converse events) is unrelated to the Anthropic/Gemini families.\n[ ] Step 1: Write the characterization suite against current code\n\n Create test/continuous-test-suite-bedrock-loop-characterization.ts:\n\n \n\n Add to package.json scripts:\n\n \n\n In eslint.config.js, add the new file to the neurolink/e2e-tests-only allow array and extend the comment above it:\n\n \n\n Run against unmigrated code:\n\n \n\n Expected: all 3 tests pass (this is characterizing the CURRENT hand-rolled loop, which already honors options.maxSteps in streamingConversationLoop — the third test's call-count assertion is meaningful proof of that, not a tautology).","hierarchy":{"lvl0":"Superpowers","lvl1":"Shared Agentic Loop Engine Implementation Plan","lvl2":"Task 4: Migrate Amazon Bedrock's two loops onto the engine","lvl3":""}},
|
|
10833
10833
|
{"objectID":"a10176f38c03da3f8321b12492b88f133bb946ab546e8fe4a9d1b1fa770810c2","title":"Task 5: SPI hardening — default executeStream on BaseProvider","url":"/docs/superpowers/plans/2026-08-15-08-agentic-loop-engine#task-5-spi-hardening-default-executestream-on-baseprovider","content":"Files:\nModify: src/lib/core/baseProvider.ts (executeStream becomes a concrete default method instead of protected abstract)\nModify: test/continuous-test-suite-loop-engine.ts (append a new section; extend the file's rule-15 header comment to a 4th exempted module)\n\nIndependent of Task 4 and every other migration — exists to structurally prevent a repeat of the SageMaker dual-shape trap (Task 6): a provider that implements the newer doStream(options: StreamOptions): Promise<{stream: AsyncIterable<...>, finishReason: Promise<string>, usage: Promise<AgenticLoopUsage>, warnings: string[]}> shape should get a working executeStream for free instead of every such provider re-implementing (or forgetting to implement) the adapter glue.\n\nInterfaces:\n\nConsumes (from BaseProvider's existing surface — unchanged by this task):\n\nProduces:\n[ ] Step 1: Write the failing test against two fake providers\n\n Append to test/continuous-test-suite-loop-engine.ts. First extend the file's own header comment (it currently scopes the rule-15 exception to exactly three modules — streamChannel, nativeToolFormat, loopEngine):\n\n \n\n Add a new section with two fake provider classes and two tests:\n\n \n\n Add import { BaseProvider } from \"../src/lib/core/baseProvider.js\"; and import type { StreamOptions } from \"../src/lib/types/index.js\"; and import type { AIProviderName } from \"../src/lib/constants/enums.js\"; to the file's existing imports (it already imports from src/ per its determinism exception).","hierarchy":{"lvl0":"Superpowers","lvl1":"Shared Agentic Loop Engine Implementation Plan","lvl2":"Task 5: SPI hardening — default executeStream on BaseProvider","lvl3":""}},
|
|
10834
10834
|
{"objectID":"90bd64e3005e32e0719f09798a767082704fa0c55c4eecaa0b0f5a303e2d2b9c","title":"Task 6: Migrate SageMaker streaming onto the engine","url":"/docs/superpowers/plans/2026-08-15-08-agentic-loop-engine#task-6-migrate-sagemaker-streaming-onto-the-engine","content":"Files:\nCreate: test/continuous-test-suite-sagemaker-loop-characterization.ts\nModify: src/lib/providers/amazonSagemaker.ts (delete the stub executeStream override; add a doStream implementation)\n\nDepends on Task 5 — AmazonSageMakerProvider.executeStream() today is a stub that unconditionally throws (\"SageMaker streaming not yet fully implemented\"); there is no existing hand-rolled loop to migrate. This task's entire migration path is: delete the stub, implement doStream, and let Task 5's new BaseProvider default supply executeStream.\n\nInterfaces:\n\nConsumes (from Task 5):\n\nProduces: nothing consumed by a later task — SageMaker's doStream is provider-specific and not shared.\n[ ] Step 1: Write the characterization suite against the public dist surface\n\n AmazonSageMakerProvider's constructor accepts credentials?.endpoint, which the real chain (AmazonSageMakerProvider → SageMakerLanguageModel → SageMakerRuntimeClient, at src/lib/providers/sagemaker/client.ts:115) wires straight into the underlying AWS SDK client's endpoint override — and NeurolinkCredentials[\"sagemaker\"] (src/lib/types/providers.ts:183-189) exposes endpoint all the way through NeuroLink's public credentials option. So unlike Bedrock, this suite needs no rule-15 exception: it drives NeuroLink.stream() from ../dist/index.js against a real local HTTP server, exactly like continuous-test-suite-anthropic-streaming-retry.ts.\n\n SageMaker's streaming path (invokeEndpointWithStreaming, client.ts:203) uses AWS's InvokeEndpointWithResponseStreamCommand, whose response body is framed in AWS's binary event-stream wire format — reproducing that framing by hand (or via @smithy/eventstream-codec, which is only a transitive, non-hoisted dependency here and cannot be imported without adding a new direct dependency) is out of scope for a test file.","hierarchy":{"lvl0":"Superpowers","lvl1":"Shared Agentic Loop Engine Implementation Plan","lvl2":"Task 6: Migrate SageMaker streaming onto the engine","lvl3":""}},
|
|
10835
|
-
{"objectID":"5724bb3f4e0bb0e55c2efdc6e7aaa7746f6a2b53b91a2045c3b469ca2364df20","title":"Task 7: Engine contract extension — tool-miss hydration hook, and design decisions for the other two blockers","url":"/docs/superpowers/plans/2026-08-15-08-agentic-loop-engine#task-7-engine-contract-extension-tool-miss-hydration-hook-and-design-decisions-for-the-other-two-blockers","content":"Files:\nModify: src/lib/types/loopEngine.ts (add resolveToolOnMiss to AgenticLoopAdapter; add design-decision doc comments)\nModify: src/lib/core/loopEngine.ts (one-line dispatch change to consult resolveToolOnMiss)\nModify: test/continuous-test-suite-loop-engine.ts (two new tests, appended within the file's existing rule-15 exception scope)\n\nThis is the only one of the three architectural blockers that needs a real engine-contract change. The other two are resolved by not changing the contract at all — this task states both resolutions in writing, with reasoning, so Tasks 8-11 can cite them instead of re-deriving them.\n\nInterfaces:\n\nConsumes (from Task 3, unchanged):\n\nProduces (consumed by Tasks 8, 9, 10, 11):\n[ ] Step 1: Design decision — mid-turn tool-discovery hydration (blocker 2)\n\n Add this doc comment directly above the AgenticLoopAdapter type in src/lib/types/loopEngine.ts, immediately above the existing export type AgenticLoopAdapter<...> = { line:\n\n \n\n Then add the field itself to the type body, immediately after the existing toolFailureBreaker field:\n[ ] Step 2: Write the failing hydration test\n\n Append to test/continuous-test-suite-loop-engine.ts:\n\n \n\n Run — expect FAIL (resolveToolOnMiss does not exist on the type yet, and even if cast around, the engine never consults it, so the first test's hydrated tool never executes):\n[ ] Step 3: Wire the one-line dispatch change\n\n In src/lib/core/loopEngine.ts, change:\n\n \n\n to:\n\n \n\n This is the entire runtime change — the fallback lookup sits exactly at the point the engine decides a call is unresolvable, before the
|
|
10835
|
+
{"objectID":"5724bb3f4e0bb0e55c2efdc6e7aaa7746f6a2b53b91a2045c3b469ca2364df20","title":"Task 7: Engine contract extension — tool-miss hydration hook, and design decisions for the other two blockers","url":"/docs/superpowers/plans/2026-08-15-08-agentic-loop-engine#task-7-engine-contract-extension-tool-miss-hydration-hook-and-design-decisions-for-the-other-two-blockers","content":"Files:\nModify: src/lib/types/loopEngine.ts (add resolveToolOnMiss to AgenticLoopAdapter; add design-decision doc comments)\nModify: src/lib/core/loopEngine.ts (one-line dispatch change to consult resolveToolOnMiss)\nModify: test/continuous-test-suite-loop-engine.ts (two new tests, appended within the file's existing rule-15 exception scope)\n\nThis is the only one of the three architectural blockers that needs a real engine-contract change. The other two are resolved by not changing the contract at all — this task states both resolutions in writing, with reasoning, so Tasks 8-11 can cite them instead of re-deriving them.\n\nInterfaces:\n\nConsumes (from Task 3, unchanged):\n\nProduces (consumed by Tasks 8, 9, 10, 11):\n[ ] Step 1: Design decision — mid-turn tool-discovery hydration (blocker 2)\n\n Add this doc comment directly above the AgenticLoopAdapter type in src/lib/types/loopEngine.ts, immediately above the existing export type AgenticLoopAdapter<...> = { line:\n\n \n\n Then add the field itself to the type body, immediately after the existing toolFailureBreaker field:\n[ ] Step 2: Write the failing hydration test\n\n Append to test/continuous-test-suite-loop-engine.ts:\n\n \n\n Run — expect FAIL (resolveToolOnMiss does not exist on the type yet, and even if cast around, the engine never consults it, so the first test's hydrated tool never executes):\n[ ] Step 3: Wire the one-line dispatch change\n\n In src/lib/core/loopEngine.ts, change:\n\n \n\n to:\n\n \n\n This is the entire runtime change — the fallback lookup sits exactly at the point the engine decides a call is unresolvable, before the TOOL_NOT_FOUND/breaker-strike branch below it.","hierarchy":{"lvl0":"Superpowers","lvl1":"Shared Agentic Loop Engine Implementation Plan","lvl2":"Task 7: Engine contract extension — tool-miss hydration hook, and design decisions for the other two blockers","lvl3":""}},
|
|
10836
10836
|
{"objectID":"d7dc8049b6e0f333049f35df8d97274920c6a18fb9ce98e76f66941d6164e1af","title":"Task 8: Migrate direct Anthropic's native loop onto the engine","url":"/docs/superpowers/plans/2026-08-15-08-agentic-loop-engine#task-8-migrate-direct-anthropics-native-loop-onto-the-engine","content":"Files:\nCreate: test/continuous-test-suite-anthropic-loop-characterization.ts\nCreate: src/lib/providers/anthropic/loopAdapter.ts\nModify: src/lib/providers/anthropic/client.ts (executeStreamInCaptureScope)\nModify: package.json (add test:anthropic-loop-characterization)\n\nDepends on Task 7 — uses resolveToolOnMiss (declared but a no-op today: direct Anthropic has mid-turn discovery-hydration code today, reproduced inside the adapter's buildStepRequest, same as the pre-migration loop; resolveToolOnMiss is wired for interface symmetry with the shared factory Task 11 also calls, not because Anthropic needs a second lookup path itself) and the terminal-call pattern from Task 7 Step 1's design decision (an adapter omits a detected final_result call from toolCalls).\n\nInterfaces:\n\nConsumes (from Task 3 and Task 7):\n\nConsumes (existing real helpers, unchanged by this task — src/lib/providers/anthropic/client.ts and neighbors):\n\nProduces (consumed by Task 11):\n\nVertexAnthropicCacheInput/VertexAnthropicCacheOutput come from the barrel (../../types/index.js) — already-existing types, unchanged by this task.\n[ ] Step 1: Write the characterization suite against current code\n\n This suite is fully dist+HTTP-mock compliant — no rule-15 exception needed. It follows test/continuous-test-suite-anthropic-streaming-retry.ts's exact established pattern (env-var snapshot/restore, ANTHROPIC_BASE_URL redirect, real SSE framing, \"synthetic throttle fixture\" instead of any phrase isExpectedProviderError() would match).\n\n Create test/continuous-test-suite-anthropic-loop-characterization.ts:\n\n \n\n Add test:anthropic-loop-characterization to package.json. Run against unmigrated code:\n\n \n\n Expected: all 3 tests pass against the current hand-rolled loop.\n[ ] Step 2: Write createAnthropicLoopAdapter and the local finish-reason mapper\n\n Create src/lib/providers/anthropic/loopAdapter.ts.","hierarchy":{"lvl0":"Superpowers","lvl1":"Shared Agentic Loop Engine Implementation Plan","lvl2":"Task 8: Migrate direct Anthropic's native loop onto the engine","lvl3":""}},
|
|
10837
10837
|
{"objectID":"45b50e0767524070e1ad5e643ae6e452f5b7a118b4ed4f90fa494d3f72c8f272","title":"Task 9: Migrate Google AI Studio's native Gemini loop onto the engine","url":"/docs/superpowers/plans/2026-08-15-08-agentic-loop-engine#task-9-migrate-google-ai-studios-native-gemini-loop-onto-the-engine","content":"Files:\nCreate: test/continuous-test-suite-aistudio-loop-characterization.ts\nCreate: src/lib/core/geminiLoopAdapter.ts\nModify: src/lib/providers/googleAiStudio/client.ts (executeStream, AND generate()'s own native loop — see scope note below)\nModify: package.json (add test:aistudio-loop-characterization)\n\nDepends on Task 7 — uses resolveToolOnMiss for real (AI Studio's mid-turn search_tools discovery hydrates new tools into toolsRecord between steps, exactly the case Task 7's design decision names) and the terminal-call pattern is not applicable here (AI Studio has no final_result mechanism — schema+tools is mutually exclusive on Gemini per CLAUDE.md rule 3, so this adapter never needs to suppress a terminal call).\n\nScope note — two loops, one adapter: Google AI Studio has TWO independently hand-rolled native loops sharing the exact same originalNameMap/failedTools pattern: the executeStream loop (client.ts:895-1154) and a near-duplicate loop inside generate() (client.ts:1499-1650, starting from while (step < maxSteps)). Both call the identical underlying SDK method (client.models.generateContentStream) — generate() simply collects the whole stream internally via collectStreamChunks before returning, rather than forwarding chunks incrementally to a caller-visible stream. Because both loops issue the same wire call and consume the same response shape, createGeminiLoopAdapter's executeStep is usable unmodified at both call sites — only the caller differs in whether it consumes runAgenticLoop's stream incrementally (executeStream) or simply awaits resultPromise and discards stream (generate()). This mirrors Task 4's Bedrock migration, which likewise reuses one adapter across its stream and generate call sites.","hierarchy":{"lvl0":"Superpowers","lvl1":"Shared Agentic Loop Engine Implementation Plan","lvl2":"Task 9: Migrate Google AI Studio's native Gemini loop onto the engine","lvl3":""}},
|
|
10838
10838
|
{"objectID":"59b788fdc51cf1a20c1cddadb655c7ddaab28f8e1be8f17d874c357a5cc22f1e","title":"Task 10: Migrate Vertex Gemini's two native loops onto the engine","url":"/docs/superpowers/plans/2026-08-15-08-agentic-loop-engine#task-10-migrate-vertex-geminis-two-native-loops-onto-the-engine","content":"Files:\nCreate: test/continuous-test-suite-vertex-gemini-loop-characterization.ts\nModify: src/lib/providers/googleVertex/client.ts (executeNativeGemini3Stream, executeNativeGemini3Generate)\nModify: eslint.config.js (add the new suite to neurolink/e2e-tests-only's allow list)\nModify: package.json (add test:vertex-gemini-loop-characterization)\n\nDepends on Task 9 — reuses createGeminiLoopAdapter from src/lib/core/geminiLoopAdapter.ts unchanged, passing enableMalformedRetry: true (Vertex Gemini's real, confirmed behavior: one retry per turn on MALFORMED_FUNCTION_CALL, at googleVertex/client.ts:1827-2032 for the stream path and the equivalent generate-path block at :3108-3307 — both already match isMalformedStep/buildMalformedRetryNote's contract as written in Task 9).\n\nInterfaces:\n\nConsumes (from Task 9, unchanged):\n\nProduces: nothing new consumed by a later task — Task 10 wires an existing shared factory into a second call site.\n[ ] Step 1: Write the characterization suite against current code\n\n Vertex has no public URL/endpoint override — createVertexGenAIClient (confirmed real, googleVertex/client.ts:1103-1137) always constructs new GoogleGenAI({ vertexai: true, project, location, httpOptions: { fetch: createProxyFetch() } }) with GCP project/location auth only. This suite takes the rule-15 determinism exception: it constructs AmazonVertex... rather, GoogleVertexProvider directly from src/ and overrides the private client field the same way Task 4's Bedrock suite overrides bedrockClient — monkey-patching the object createVertexGenAIClient returns (its .models.generateContentStream method) after construction, so GCP auth and the proxy-fetch plumbing are never exercised.","hierarchy":{"lvl0":"Superpowers","lvl1":"Shared Agentic Loop Engine Implementation Plan","lvl2":"Task 10: Migrate Vertex Gemini's two native loops onto the engine","lvl3":""}},
|
|
@@ -10872,8 +10872,8 @@
|
|
|
10872
10872
|
{"objectID":"e942a96e0ade47766b166f5c91921002bc93ef14bbabeb4f2136df30d6fef437","title":"Global Constraints","url":"/docs/superpowers/plans/2026-08-15-10-onboarding-playbook#global-constraints","content":"Package manager: pnpm ONLY (repo pins version via packageManager field). Build: pnpm run build. Typecheck: pnpm run check. Lint+format check: pnpm run lint. Auto-format: pnpm run format.\nTests run via tsx, NOT vitest (vitest.config.ts exists but is unused): npx tsx test/continuous-test-suite-<name>.ts. New suites need a matching test:<name> script in package.json.\nTEST HARNESS SKIP HAZARD: defineSuite's test() classifies a thrown error as SKIP (not FAIL) when the message matches isExpectedProviderError() — so NEVER interpolate payloads/actual values into assertion messages (describe the discrepancy, e.g. \"mismatch at <keyPath>\"). When adding a suite, include a step to deliberately break one assertion and confirm it reports ✗ and exits non-zero, then restore.\nRepo critical rules (ESLint-enforced): (1) dynamic imports only in providerRegistry.ts factory closures — never static-import provider classes there; (2) ALL type definitions go in src/lib/types/ — never create local types/ dirs or inline shared types; (7) zero interface — always type X = { ... }, intersection (&) not extends; (8) no \"Types\" suffix in type filenames; (9) globally unique exported type names across src/lib/types/ (use domain prefixes); (10) types barrel src/lib/types/index.ts contains only export * lines; (12) no type re-exports from non-type files; (13) code outside src/lib/types/ imports internal types from the barrel (../types or ../types/index.js), never from specific type files; (14) no double type assertions (x as unknown as T) in src/.\nNamed exports only. No export default.\nformatProviderError must RETURN the error object, never throw.\nBackward compatibility: the public SDK API must not break existing callers.\nConventional commits (feat:/fix:/refactor:/test:/docs:/chore:). Commit at the end of every task. NEVER git push.\nWorkflow per change: edit → pnpm run check → pnpm run lint → targeted test suite(s) → commit.","hierarchy":{"lvl0":"Superpowers","lvl1":"200-Provider Onboarding Playbook Implementation Plan","lvl2":"Global Constraints","lvl3":""}},
|
|
10873
10873
|
{"objectID":"0f958db3719fb0282e7abb8df0dfbd7f2d9a05b6759c2024484dd6268d644785","title":"Task 1: Architecture Decision Records","url":"/docs/superpowers/plans/2026-08-15-10-onboarding-playbook#task-1-architecture-decision-records","content":"Files:\nCreate: docs/provider-integration/adr/README.md\nCreate: docs/provider-integration/adr/0001-provider-descriptor-as-source-of-truth.md\nCreate: docs/provider-integration/adr/0002-catalog-over-subclass-default.md\nCreate: docs/provider-integration/adr/0003-mocked-contract-as-merge-gate.md\n\nInterfaces:\nConsumes: ProviderDescriptor (Plan 04, src/lib/types/providers.ts), OpenAICompatCatalogEntry / ConfiguredOpenAICompatProvider (Plan 05), test/continuous-test-suite-providers-mocked.ts's installMockFetch pattern (existing).\nProduces: three ADR documents other tasks in this plan (and future provider PRs) link back to for rationale.\n\nThis is a docs-only task; there is no code to test, so the verification step is a grep-based content check instead of TDD.\n[ ] Create the ADR directory and index.\n[ ] Write docs/provider-integration/adr/README.md:\n[ ] Write docs/provider-integration/adr/0001-provider-descriptor-as-source-of-truth.md:\n[ ] Write docs/provider-integration/adr/0002-catalog-over-subclass-default.md:\n[ ] Write docs/provider-integration/adr/0003-mocked-contract-as-merge-gate.md:\n[ ] Verify the ADRs render as expected Markdown (no broken relative links) and commit.","hierarchy":{"lvl0":"Superpowers","lvl1":"200-Provider Onboarding Playbook Implementation Plan","lvl2":"Task 1: Architecture Decision Records","lvl3":""}},
|
|
10874
10874
|
{"objectID":"6aa2608bc34f23d9f73b07a3a6bcb12791de65ab9330de3ac46e037064448894","title":"Task 2: Tier overview + Tier 1 (aggregator passthrough)","url":"/docs/superpowers/plans/2026-08-15-10-onboarding-playbook#task-2-tier-overview-tier-1-aggregator-passthrough","content":"Files:\nCreate: docs/provider-integration/tiers/README.md\nCreate: docs/provider-integration/tiers/tier-1-aggregator-passthrough.md\n\nInterfaces:\nConsumes: nothing from other plans (Tier 1 requires zero SDK code changes by design).\nProduces: the tier decision tree that Task 7 wires the top-level docs/provider-integration/README.md into, and that tools/scaffold-provider.ts (Task 8) references by file path.\n[ ] Create the tiers directory and write the overview.\n\n \n\n docs/provider-integration/tiers/README.md:\n\n text\n Is the model already served by an aggregator NeuroLink already speaks to\n (LiteLLM proxy, OpenRouter)?\n ├─ Yes → Tier 1 — zero code. → tier-1-aggregator-passthrough.md\n └─ No, it's a new backend.\n │\n Does it speak the OpenAI /v1/chat/completions wire format (Bearer\n auth, standard SSE) with NO behavioral quirks (no custom body\n mutation, no 400-retry dance, no nonstandard auth header)?\n ├─ Yes → Tier 2 — one catalog row, ~1 hour. → tier-2-catalog-entry.md\n └─ No.\n │\n Does it need custom wire-format handling but is still a normal\n HTTP+JSON API you can drive with a provider class (own SSE parser,\n own auth scheme, own error shapes)?\n ├─ Yes → Tier 3 — adapter-based native, days. → tier-3-adapter-native.md\n └─ No — non-HTTP protocol, SDK-mediated auth (e.g. AWS SigV4),\n or a genuinely bespoke multi-step lifecycle.\n → Tier 4 — full custom, justify it.","hierarchy":{"lvl0":"Superpowers","lvl1":"200-Provider Onboarding Playbook Implementation Plan","lvl2":"Task 2: Tier overview + Tier 1 (aggregator passthrough)","lvl3":""}},
|
|
10875
|
-
{"objectID":"318a91e536ad7e3d3d18d0996bc46fe17fed514446c2ce34e7aa4a7cc925fa1b","title":"Task 3: Tier 2 — catalog entry","url":"/docs/superpowers/plans/2026-08-15-10-onboarding-playbook#task-3-tier-2-catalog-entry","content":"Files:\nCreate: docs/provider-integration/tiers/tier-2-catalog-entry.md\n\nInterfaces:\nConsumes: type OpenAICompatCatalogEntry and class ConfiguredOpenAICompatProvider (Plan 05), type ProviderDescriptor and PROVIDER_DESCRIPTORS (Plan 04).\nProduces: the checklist tools/scaffold-provider.ts (Task 8) prints for --tier=2 and that tools/verify-provider-onboarding.ts (Task 9) enforces.\n[ ] Write docs/provider-integration/tiers/tier-2-catalog-entry.md:\n\n typescript\n {\n provider: AIProviderName.CEREBRAS,\n defaultBaseURL: \"https://api.cerebras.ai/v1\",\n envBaseURLVar: \"
|
|
10876
|
-
{"objectID":"4e9c8dc3698df89e5554d462c28605bcdbbe265c419514dc69c3c9a3569c36bb","title":"Task 4: Tier 3 — adapter-based native","url":"/docs/superpowers/plans/2026-08-15-10-onboarding-playbook#task-4-tier-3-adapter-based-native","content":"Files:\nCreate: docs/provider-integration/tiers/tier-3-adapter-native.md\n\nInterfaces:\nConsumes: type ProviderErrorRule, classifyProviderError, DEFAULT_ERROR_RULES (Plan 07, src/lib/utils/errorClassifier.ts), type ProviderDescriptor / PROVIDER_DESCRIPTORS (Plan 04), BaseProvider (existing, src/lib/core/baseProvider.ts).\nProduces: the checklist tools/scaffold-provider.ts (Task 8) prints for --tier=3.\n[ ] Write docs/provider-integration/tiers/tier-3-adapter-native.md:\n\n typescript\n import { AIProviderName } from \"../constants/enums.js\";\n import { BaseProvider } from \"../core/baseProvider.js\";\n import { classifyProviderError } from \"../utils/errorClassifier.js\";\n import {
|
|
10875
|
+
{"objectID":"318a91e536ad7e3d3d18d0996bc46fe17fed514446c2ce34e7aa4a7cc925fa1b","title":"Task 3: Tier 2 — catalog entry","url":"/docs/superpowers/plans/2026-08-15-10-onboarding-playbook#task-3-tier-2-catalog-entry","content":"Files:\nCreate: docs/provider-integration/tiers/tier-2-catalog-entry.md\n\nInterfaces:\nConsumes: type OpenAICompatCatalogEntry and class ConfiguredOpenAICompatProvider (Plan 05), type ProviderDescriptor and PROVIDER_DESCRIPTORS (Plan 04).\nProduces: the checklist tools/scaffold-provider.ts (Task 8) prints for --tier=2 and that tools/verify-provider-onboarding.ts (Task 9) enforces.\n[ ] Write docs/provider-integration/tiers/tier-2-catalog-entry.md:\n\n typescript\n {\n provider: AIProviderName.CEREBRAS,\n defaultBaseURL: \"https://api.cerebras.ai/v1\",\n envBaseURLVar: \"CEREBRAS_BASE_URL\",\n defaultModel: \"llama3.1-70b\",\n fallbackModels: [\"llama3.1-8b\"],\n },\n typescript\n {\n name: AIProviderName.CEREBRAS,\n aliases: [\"cerebras\"] as const,\n credentialsKey: \"cerebras\",\n envVars: {\n apiKey: \"CEREBRAS_API_KEY\",\n baseURL: \"CEREBRAS_BASE_URL\",\n model: \"CEREBRAS_MODEL\",\n },\n defaultModel: \"llama3.1-70b\",\n toolSupport: \"native\",\n localRuntime: false,\n healthCheck: \"env-only\",\n },\n typescript\n cerebras?: {\n apiKey?: string;\n baseURL?: string;\n };\n typescript\n ProviderFactory.registerProvider(\n AIProviderName.CEREBRAS,\n async (\n modelName?: string,\n _providerName?: string,\n sdk?: NeuroLink,\n _region?: string,\n credentials?: UnknownRecord,\n ) => {\n const { ConfiguredOpenAICompatProvider } =\n await import(\"../providers/configuredOpenAICompat.js\");\n const { OPENAI_COMPAT_CATALOG } =\n await import(\"../providers/openaiCompatCatalog.js\");\n const entry = OPENAI_COMPAT_CATALOG.find(\n (e) => e.provider === AIProviderName.CEREBRAS,\n )!;\n const cerebrasCreds = credentials as NeurolinkCredentials[\"cerebras\"];\n return new ConfiguredOpenAICompatProvider(\n entry,\n modelName,\n sdk,\n cerebrasCreds,\n );\n },\n process.env.CEREBRAS_MODEL ??","hierarchy":{"lvl0":"Superpowers","lvl1":"200-Provider Onboarding Playbook Implementation Plan","lvl2":"Task 3: Tier 2 — catalog entry","lvl3":""}},
|
|
10876
|
+
{"objectID":"4e9c8dc3698df89e5554d462c28605bcdbbe265c419514dc69c3c9a3569c36bb","title":"Task 4: Tier 3 — adapter-based native","url":"/docs/superpowers/plans/2026-08-15-10-onboarding-playbook#task-4-tier-3-adapter-based-native","content":"Files:\nCreate: docs/provider-integration/tiers/tier-3-adapter-native.md\n\nInterfaces:\nConsumes: type ProviderErrorRule, classifyProviderError, DEFAULT_ERROR_RULES (Plan 07, src/lib/utils/errorClassifier.ts), type ProviderDescriptor / PROVIDER_DESCRIPTORS (Plan 04), BaseProvider (existing, src/lib/core/baseProvider.ts).\nProduces: the checklist tools/scaffold-provider.ts (Task 8) prints for --tier=3.\n[ ] Write docs/provider-integration/tiers/tier-3-adapter-native.md:\n\n typescript\n import { AIProviderName } from \"../constants/enums.js\";\n import { BaseProvider } from \"../core/baseProvider.js\";\n import { classifyProviderError } from \"../utils/errorClassifier.js\";\n import { DEFAULT_ERROR_RULES } from \"../utils/errorClassifier.js\";\n import type {\n NeurolinkCredentials,\n ProviderErrorRule,\n StreamOptions,\n StreamResult,\n } from \"../types/index.js\";\n import type { NeuroLink } from \"../neurolink.js\";\n\n const ACME_ERROR_RULES: readonly ProviderErrorRule[] = [\n ...DEFAULT_ERROR_RULES,\n // Add vendor-specific rules only where the vendor's error shape\n // deviates from the defaults, e.g.:\n // { status: 422, errorClass: \"invalid-model\" },\n ];\n\n export class AcmeProvider extends BaseProvider {\n constructor(\n modelName?: string,\n sdk?: NeuroLink,\n _region?: string,\n credentials?: NeurolinkCredentials[\"acme\"],\n ) {\n const apiKey = credentials?.apiKey?.trim() || process.env.ACME_API_KEY;\n super(modelName ?? \"acme-default-model\", AIProviderName.ACME, sdk);\n // Store apiKey/baseURL on this, build the vendor's SDK client here.\n }\n\n formatProviderError(error: unknown): Error {\n // MUST return, never throw — Critical Rule 6.\n // classifyProviderError's real signature (Plan 07) is positional:\n // (error, rules, provider: string, modelName?: string) — NOT an\n // object third argument.","hierarchy":{"lvl0":"Superpowers","lvl1":"200-Provider Onboarding Playbook Implementation Plan","lvl2":"Task 4: Tier 3 — adapter-based native","lvl3":""}},
|
|
10877
10877
|
{"objectID":"725454c0764ffe3f9de679edd78863be7ce3cde9349f511b033a23631b55bcd0","title":"Task 5: Tier 4 — full custom","url":"/docs/superpowers/plans/2026-08-15-10-onboarding-playbook#task-5-tier-4-full-custom","content":"Files:\nCreate: docs/provider-integration/tiers/tier-4-full-custom.md\n\nInterfaces:\nConsumes: everything Tier 3 consumes, plus the existing src/lib/providers/amazonSagemaker.ts as the worked example.\nProduces: the checklist tools/scaffold-provider.ts (Task 8) prints for --tier=4, and the tier4Justification field tools/verify-provider-onboarding.ts (Task 9) requires in Tier-4 manifests.\n[ ] Write docs/provider-integration/tiers/tier-4-full-custom.md:\n\n json\n {\n \"provider\": \"acme-sdk\",\n \"tier\": 4,\n \"addedInPR\": \"https://github.com/juspay/neurolink/pull/\",\n \"addedDate\": \"2026-08-15\",\n \"filesTouched\": [\"...\"],\n \"mockedContractSection\": \"LLM acme-sdk\",\n \"manualTestStatus\": \"not-tested\",\n \"tier4Justification\": \"Auth is SDK-mediated request signing (proprietary HMAC scheme); cannot be replicated with plain fetch headers.\"\n }\n bash\n pnpm run check\n pnpm run lint\n pnpm run test:providers-mocked\n pnpm run build:cli && pnpm run cli --help\n pnpm run verify:provider-onboarding\n pnpm run build\n \n\n- [ ] Verify the file exists and mentions tier4Justification` (the field Task 9's tool checks for).\n[ ] Format and commit.","hierarchy":{"lvl0":"Superpowers","lvl1":"200-Provider Onboarding Playbook Implementation Plan","lvl2":"Task 5: Tier 4 — full custom","lvl3":""}},
|
|
10878
10878
|
{"objectID":"df98ed6d6cf1d00a9d892513c4457a942c970d9ba91fb8408896d3673b8f45c6","title":"Task 6: Provider manifest convention","url":"/docs/superpowers/plans/2026-08-15-10-onboarding-playbook#task-6-provider-manifest-convention","content":"Files:\nCreate: docs/provider-integration/manifests/README.md\nCreate: docs/provider-integration/manifests/_example-tier2-catalog.json\nCreate: docs/provider-integration/manifests/_example-tier3-adapter.json\n\nInterfaces:\nProduces: the ProviderManifest shape (documented here as plain JSON, formally typed as a local type ProviderManifest inside tools/verify-provider-onboarding.ts in Task 9 — deliberately not a src/lib/types/ type, see Global Constraints).\nConsumes: nothing from other plans.\n\nThe two example files are prefixed _example- so they can never collide\nwith a real provider's manifest filename (<provider>.json) and so\ntools/verify-provider-onboarding.ts (Task 9), which only looks up\n<enum-member>.json, never mistakes them for real entries.\n[ ] Create the manifests directory and write the README.\n\n \n\n docs/provider-integration/manifests/README.md:\n\n jsonc\n {\n // Must exactly equal the AIProviderName enum value.\n \"provider\": \"cerebras\",\n\n // 2, 3, or 4. (Tier 1 never gets a manifest — see tiers/tier-1-*.md.)\n \"tier\": 2,\n\n // Full PR URL. Leave \"\" until the PR exists, fill in before merge.\n \"addedInPR\": \"https://github.com/juspay/neurolink/pull/1234\",\n\n // YYYY-MM-DD.\n \"addedDate\": \"2026-08-15\",\n\n // Every file this provider's onboarding touched — used for PR review,\n // not machine-checked beyond \"the array exists\".\n \"filesTouched\": [\"src/lib/constants/enums.ts\", \"...\"],\n\n // Must match the section-name prefix used in\n // test/continuous-test-suite-providers-mocked.ts's record(results,\n // \\${section}: ...\\, ...) calls for this provider, e.g. \"LLM cerebras\".\n \"mockedContractSection\": \"LLM cerebras\",\n\n // One of: \"not-tested\" | \"manual-live-tested\" | \"ci-mocked-only\"\n \"manualTestStatus\": \"not-tested\",\n\n // REQUIRED when tier === 4 only. A sentence or two justifying why\n // this couldn't be Tier 2/3. See tiers/tier-4-full-custom.md.","hierarchy":{"lvl0":"Superpowers","lvl1":"200-Provider Onboarding Playbook Implementation Plan","lvl2":"Task 6: Provider manifest convention","lvl3":""}},
|
|
10879
10879
|
{"objectID":"f992a1e7d532f86ebc84ec238899de126b887cd6a116619056101ff3fd928860","title":"Task 7: Rewire the existing docs index into the tiered flow","url":"/docs/superpowers/plans/2026-08-15-10-onboarding-playbook#task-7-rewire-the-existing-docs-index-into-the-tiered-flow","content":"Files:\nModify: docs/provider-integration/README.md (decision tree + document index)\nModify: docs/provider-integration/15-adding-llm-provider.md (replace stale 12-file-checklist content with a redirect)\nModify: docs/provider-integration/CHECKLIST.md (§A section, lines 24–71)\nModify: docs/provider-integration/06-testing.md (fix the stale ALL_PROVIDERS reference)\n\nInterfaces:\nConsumes: Tasks 1–6's new files (this task links to them).\nProduces: nothing new consumed by later tasks; this is the \"make the new docs discoverable\" step.\n[ ] Update docs/provider-integration/README.md's decision tree to route the LLM path through the new tiers, and add pointers to the ADRs/manifests. Replace the \"Quick decision tree\" LLM branch:\n\n Find this block (current lines 18–40):\n\n \n\n Replace with:\n\n \n\n And add two rows to the \"How-to guides\" table (after the CHECKLIST.md\n row, before SAFETY-PRIMITIVES.md):\n[ ] Replace docs/provider-integration/15-adding-llm-provider.md's content\n entirely with a short redirect (the old 12-file checklist describes a\n pre-redesign world where every provider needed its own subclass, its\n own providerConfig.ts factory, and 3 separate commandFactory.ts\n edit spots — all superseded by the tiers):\n[ ] Rewrite docs/provider-integration/CHECKLIST.md's §A section (the\n block from ## §A — New LLM provider (12 files) through the line\n before ## §B — New TTS provider (6 files)) to point at the tiers\n instead of repeating the stale 12-file list:\n[ ] Fix docs/provider-integration/06-testing.md's stale\n ALL_PROVIDERS reference. Find:\n\n \n\n Replace with:\n[ ] Verify no file in docs/provider-integration/ still references the\n removed ALL_PROVIDERS array or the stale 12-file checklist framing.\n[ ] Format and commit.","hierarchy":{"lvl0":"Superpowers","lvl1":"200-Provider Onboarding Playbook Implementation Plan","lvl2":"Task 7: Rewire the existing docs index into the tiered flow","lvl3":""}},
|
|
@@ -10958,7 +10958,7 @@
|
|
|
10958
10958
|
{"objectID":"14cbc5f3540faabf424ac2eca3154c5a295e5b2d6238a5b2a9866db7d19c4ee3","title":"Task 5: Runtime loader (JSON → OpenAICompatCatalogEntry)","url":"/docs/superpowers/plans/2026-08-28-provider-json-catalog#task-5-runtime-loader-json-openaicompatcatalogentry","content":"Files:\nCreate: src/lib/providers/catalog/loader.ts\n\nInterfaces:\nConsumes: CATALOG_JSON_ENTRIES (Task 4), DEFAULT_ERROR_RULES + error classes.\nProduces: buildCatalogEntries(): OpenAICompatCatalogEntry[] and getCatalogJsonEntries(): ProviderCatalogJson[] — the two functions everything else consumes. Also catalogEnvVar(id, kind) helper.\n[ ] Step 1: Write the loader:\n\nAdjust the computedBaseURL.envVar derivation against Cloudflare's real current value (CLOUDFLARE_ACCOUNT_ID) when migrating it in Task 6 — the current entry in openaiCompatCatalog.ts is the authority; if the generic derivation doesn't produce it exactly, add wire.envOverrides-style explicit field wire.extraCredentialEnvVar to the schema instead of guessing.\n[ ] Step 2: pnpm run check passes (nothing consumes the loader yet). Sanity-run:\n\nExpected: [ \"cerebras\", \"sambanova\" ]. Commit.","hierarchy":{"lvl0":"Superpowers","lvl1":"Provider JSON Catalog Implementation Plan","lvl2":"Task 5: Runtime loader (JSON → OpenAICompatCatalogEntry)","lvl3":""}},
|
|
10959
10959
|
{"objectID":"fb820f6b6ac82cc3aea906091abae99505cd0220db756a245ed11d5439c20d69","title":"Task 6: Migrate the 7 legacy catalog providers to JSON","url":"/docs/superpowers/plans/2026-08-28-provider-json-catalog#task-6-migrate-the-7-legacy-catalog-providers-to-json","content":"Files:\nCreate: src/lib/providers/catalog/{groq,xai,together-ai,fireworks,perplexity,mistral,cloudflare}.json\nModify (generated regions only, via codegen): enums.ts, types/providers.ts\nModify: src/lib/constants/enums.ts — delete the 7 hand-written AIProviderName members and the 7 hand-written <Name>Models enums (they regenerate inside the marked regions)\nModify: src/lib/types/providers.ts — delete the 7 hand-written credential slices\n\nInterfaces:\nConsumes: the existing hand-written data — extraction sources per provider are: its openaiCompatCatalog.ts entry (wire, models default/fallbacks, error rules, quirks), its <Name>Models enum in enums.ts (full model roster + member names), contextWindows.ts, pricing.ts, providerConfig.ts factory (setup), providerImageAdapter.ts (vision), test/helpers/providerMatrix.ts (capabilities), docs/provider-integration/manifests/*.json where one exists (evidence).\nProduces: 9 total JSON files; the generated enums must satisfy the Task-3 snapshot.\n[ ] Step 1: For each of the 7 providers, transcribe every field. Rules that make this mechanical, not judgment:\nEvery member of the existing <Name>Models enum becomes a models.catalog key (the STRING VALUE is the key; the MEMBER NAME goes into enumMember whenever the derived constant differs — run both through toModelConstant and compare; e.g. Groq GEMMA_2_9B_IT = \"gemma2-9b-it\" derives to GEMMA2_9B_IT, so \"enumMember\": \"GEMMA_2_9B_IT\" is required).\ncontextWindow/pricingPerMTok copy from contextWindows.ts/pricing.ts where a per-model entry exists; omit the optional field otherwise (provider defaultContextWindow = the _default). NEVER invent a number a shipped file doesn't state.\nvision: true exactly for the models listed in VISION_CAPABILITIES.\nerrorRules: each existing match function decomposes into status (the ctx.statusCode === N clause) + pattern (the regex source). Groq's decommissioned rule keeps its dynamic message via the {model} template.","hierarchy":{"lvl0":"Superpowers","lvl1":"Provider JSON Catalog Implementation Plan","lvl2":"Task 6: Migrate the 7 legacy catalog providers to JSON","lvl3":""}},
|
|
10960
10960
|
{"objectID":"3b6c332b3c68add4b46462576f37a6e473d5bb70a9d3784fbc3b6f658b17e202","title":"Task 7: Switch the catalog + derive per-concern src consumers","url":"/docs/superpowers/plans/2026-08-28-provider-json-catalog#task-7-switch-the-catalog-derive-per-concern-src-consumers","content":"Files:\nModify: src/lib/providers/openaiCompatCatalog.ts — becomes export const OPENAI_COMPAT_CATALOG: readonly OpenAICompatCatalogEntry[] = buildCatalogEntries(); plus the header comment; delete the 9 hand entries and now-unused imports.\nModify: src/lib/utils/providerConfig.ts — the 9 create<Name>Config() bodies become one-line delegations (keep the exported names for compat): export function createGroqConfig(): ProviderConfigOptions { return catalogConfigOptions(\"groq\"); } where catalogConfigOptions(id) looks up the JSON entry and calls buildCatalogConfigOptions.\nModify: src/lib/factories/providerDescriptors.ts — delete the 9 catalog descriptors; export const PROVIDER_DESCRIPTORS = [...HAND_DESCRIPTORS, ...buildCatalogDescriptors()] where the builder maps JSON → descriptor (name: id, aliases, credentialsKey: camel(id), envVars from catalogEnvVar, defaultModel: models.default, toolSupport = capabilities.tools ? \"native\" : <the ProviderDescriptor toolSupport union's unsupported member — read the union in src/lib/types, do not invent a value> (all 9 current providers have tools:true, so runtime-identical today), localRuntime: false, healthCheck: \"env-only\", setupUrl, apiKeyFormatPattern from setup.apiKeyFormat when non-null).\nModify: src/cli/commands/setup.ts — delete the 9 entries from EXTRA_PROVIDER_CONFIGS; spread ...Object.fromEntries(getCatalogJsonEntries().map((e) => [e.id, buildCatalogConfigOptions(e)])).\nModify: src/lib/constants/contextWindows.ts — delete the 9 catalog blocks; spread derived blocks built from models.catalog[*].contextWindow + defaultContextWindow.\nModify: src/lib/utils/pricing.ts — same pattern for pricingPerMTok (+ the alias map entries derive from ids).\nModify: src/lib/adapters/providerImageAdapter.ts — delete catalog vision entries; derive {[id]: modelsWithVision} for entries with ≥1 vision model.\nModify: src/lib/utils/modelChoices.ts — delete the 9 catalog blocks from both tables.","hierarchy":{"lvl0":"Superpowers","lvl1":"Provider JSON Catalog Implementation Plan","lvl2":"Task 7: Switch the catalog + derive per-concern src consumers","lvl3":""}},
|
|
10961
|
-
{"objectID":"90cc8634c35c5c344a0e6bcf0265aa6ef581e9c16780ea906f49d344d37b570e","title":"Task 8: Data-driven tests (zero test edits per future provider)","url":"/docs/superpowers/plans/2026-08-28-provider-json-catalog#task-8-data-driven-tests-zero-test-edits-per-future-provider","content":"Files:\nModify: test/continuous-test-suite-providers-mocked.ts — OPENAI_COMPAT_PROVIDERS derives: for each dist catalog JSON entry build {provider: id, envVar, urlMatch: new URL(baseURL or template-with-dummy).host + \"/…/chat/completions\" path, authPrefix: \"Bearer \", model: models.default, authErrorMatch, rateLimitErrorMatch}. authErrorMatch = new RegExp(id + \"|401|unauthor|api key\", \"i\") (the invariant the suite actually asserts); import the entries from ../dist/providers/catalog/index.generated.js (all-dist, rule 15). Cloudflare keeps its existing bespoke handling if its computed URL doesn't fit the generic builder — preserve current coverage, never reduce it.\nModify: test/helpers/providerMatrix.ts — delete the 9 catalog rows; spread derived rows: capabilities from JSON capabilities + vision derived + defaultModel + envVars: [apiKeyEnvVar] — computed-URL providers additionally include their computedBaseURL.envVar (Cloudflare:
|
|
10961
|
+
{"objectID":"90cc8634c35c5c344a0e6bcf0265aa6ef581e9c16780ea906f49d344d37b570e","title":"Task 8: Data-driven tests (zero test edits per future provider)","url":"/docs/superpowers/plans/2026-08-28-provider-json-catalog#task-8-data-driven-tests-zero-test-edits-per-future-provider","content":"Files:\nModify: test/continuous-test-suite-providers-mocked.ts — OPENAI_COMPAT_PROVIDERS derives: for each dist catalog JSON entry build {provider: id, envVar, urlMatch: new URL(baseURL or template-with-dummy).host + \"/…/chat/completions\" path, authPrefix: \"Bearer \", model: models.default, authErrorMatch, rateLimitErrorMatch}. authErrorMatch = new RegExp(id + \"|401|unauthor|api key\", \"i\") (the invariant the suite actually asserts); import the entries from ../dist/providers/catalog/index.generated.js (all-dist, rule 15). Cloudflare keeps its existing bespoke handling if its computed URL doesn't fit the generic builder — preserve current coverage, never reduce it.\nModify: test/helpers/providerMatrix.ts — delete the 9 catalog rows; spread derived rows: capabilities from JSON capabilities + vision derived + defaultModel + envVars: [apiKeyEnvVar] — computed-URL providers additionally include their computedBaseURL.envVar (Cloudflare: CLOUDFLARE_ACCOUNT_ID) so the matrix skips rather than runs an unconstructible provider. Rows import from dist index (test helper — dist graph).\nModify: test/continuous-test-suite-provider-wiring.ts — KNOWN_CREDENTIAL_KEYS keeps hand keys for non-catalog providers typed as satisfies Record<Exclude<keyof NeurolinkCredentials, CatalogCredentialKey>, undefined>; the runtime set unions CATALOG_PROVIDER_IDS camelized. The wizard-count and provider-count assertions compute expected values from CATALOG_PROVIDER_IDS.length + named literals for the non-catalog roster (which changes rarely and intentionally).\nModify: test/continuous-test-suite-provider-descriptors.ts — getAllDescriptors expected length = non-catalog literal + CATALOG_PROVIDER_IDS.length; apiKeyFormatPattern-absent expectation derives from the JSON setup.apiKeyFormat null-count.\nModify: tools/verify-provider-onboarding.ts — the gate for a new AIProviderName member becomes: a catalog/<id>.json exists, parses against the schema, and evidence.rosterVerified + evidence.addedInPR are present.","hierarchy":{"lvl0":"Superpowers","lvl1":"Provider JSON Catalog Implementation Plan","lvl2":"Task 8: Data-driven tests (zero test edits per future provider)","lvl3":""}},
|
|
10962
10962
|
{"objectID":"5b3478e5ebc30d12bef90cba4ed32914731bcf802fb3377a7f4aff66aa8b8f29","title":"Task 9: Tooling + docs alignment","url":"/docs/superpowers/plans/2026-08-28-provider-json-catalog#task-9-tooling-docs-alignment","content":"Files:\nModify: tools/scaffold-provider.ts — Tier 2 now emits exactly TWO artifacts: <id>.json (pre-filled from flags, with TODO evidence fields) and MANUAL-CHECKLIST.md reduced to: live probes (roster/auth/billing), fill the JSON, pnpm run codegen:catalog, run gates, live matrix. Delete the now-dead tier-2 snippet generators (catalog-entry/descriptor/provider-config/models-enum/mocked-section snippets); Tier 3/4 paths keep theirs.\nModify: docs/provider-integration/tiers/tier-2-catalog-entry.md — rewrite: files-touched table becomes ONE row (catalog/<id>.json) + \"generated automatically\" note; Count-pins section becomes \"derived — nothing to bump\"; keep the Live-verification section unchanged.\nModify: docs/provider-integration/openai-compat-catalog.md — describe the JSON format, link the spec.\nModify: CLAUDE.md — \"Adding a New Provider\" how-to gains the Tier-2 fast path (one JSON + codegen), and the Key Files table adds src/lib/providers/catalog/.\n[ ] Step 1 Apply; dummy-run the scaffold for tier 2 and tier 3, verify outputs.\n[ ] Step 2: Commit.","hierarchy":{"lvl0":"Superpowers","lvl1":"Provider JSON Catalog Implementation Plan","lvl2":"Task 9: Tooling + docs alignment","lvl3":""}},
|
|
10963
10963
|
{"objectID":"b5bb870bd978bc9425ab98c4ec64d9e63ce5442671af462cb5274176a98b8ff5","title":"Task 10: Final gates + single-commit packaging","url":"/docs/superpowers/plans/2026-08-28-provider-json-catalog#task-10-final-gates-single-commit-packaging","content":"[ ] Step 1: Full sweep: pnpm run check && pnpm run check:tools-tests && pnpm run lint && pnpm run build && pnpm test plus every suite from Task 7 Step 2, plus pnpm run codegen:catalog --check.\n[ ] Step 2: Live smokes with the keys in .env: cerebras generate + stream via CLI; sambanova expected-402 friendly error via CLI (or live matrix if credits exist by then).\n[ ] Step 3: pnpm run docs:api + pnpm run format (last pre-commit step).\n[ ] Step 4: Squash to one commit: git reset --soft $(git merge-base HEAD origin/release) && git commit -m \"refactor(providers): drive the tier-2 catalog from per-provider JSON\" with a body summarizing spec rulings + the 16→1 file collapse. Push, open PR, merge under the full condition with the hard thread gate.","hierarchy":{"lvl0":"Superpowers","lvl1":"Provider JSON Catalog Implementation Plan","lvl2":"Task 10: Final gates + single-commit packaging","lvl3":""}},
|
|
10964
10964
|
{"objectID":"6e1edacd8c2907cdb0b53f51d8e2d1e43e829344b9f9246ae7d4e753915226ee","title":"Proxy history truncation — corrected implementation plan","url":"/docs/superpowers/plans/2026-09-20-codex-fallback-compaction","content":"Proxy history truncation — corrected implementation plan\n\nFor agentic workers: REQUIRED SUB-SKILL: superpowers:subagent-driven-development or\nsuperpowers:executing-plans. Steps use checkbox (- [ ]) syntax.\n\nGoal: Bound what the proxy actually sends upstream, per model, so long sessions stop\npaying for (and stop being refused for) full history — without trading a local refusal for\nan upstream 400.\n\nSpec: docs/superpowers/specs/2026-09-20-codex-fallback-compaction-design.md\n\nStatus of prior work: f6bda9ba4 implements the truncator and wires it into the shared\npreflight. That code is correct for the Codex shape and is not safe to enable on the\nVertex/Anthropic shape until Task 1 lands. The previous version of this plan assumed a\nsingle 700k/650k setting was right for every model. It is not.\n\nVerified facts (each checked in source or against the live host)\n\n| # | Fact | Evidence |\n| ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| F1 | All three dispatch paths call the shared preflight and dispatch prepared.body, so one hook covers them | claudeProxyRoutes.ts:384 (body swapped :392); proxyTranslationEngine.ts:665 (dispatched :756); codexProxyRoutes.ts:799 (body = preparedContext.body :805) |\n| F2 | The context-window refusal can only fire where a window was registered at runtime | getRuntimeContextWindow reads RUNTIME_CONTEXT_WINDOWS (contextWindows.ts:416); registered only by openaiChatCompletionsBase.ts:494, litellm/client.ts:222, codexProxyRoutes.ts:1463 |\n| F3 | Neither anthropic nor vertex ever registers a window → they were never refused locally. Only Codex was. | same as F2 — this is the full explanation of the original bug's blast radius |\n| F4 | The static MODEL_CONTEXT_WINDOWS table (which lists opus-4-6 at 1M) is not what preflight reads | contextWindows.ts:132,222 vs. :416 |\n| F5 | Installed 12.17.4 rejects compactAtTokens/compactToTokens; allowed model keys are [\"contextWindow\",\"maxOutputTokens\"] | proxy-packages/12.17.4/.../dist/proxy/proxyContextPreflight.js:74 ","hierarchy":{"lvl0":"Superpowers","lvl1":"Proxy history truncation — corrected implementation plan","lvl2":"","lvl3":""}},
|
|
@@ -11049,7 +11049,7 @@
|
|
|
11049
11049
|
{"objectID":"a5aa19ce68fa1175c4bade50ae303cc0a954bf1128588e294af993c049e2f466","title":"Build order","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#build-order","content":"Dependency-ordered; each step is one reviewable PR under the one-commit-per-PR policy. Default\noff at every step, so behaviour is byte-for-byte unchanged until the final enable.\n\n| # | PR | Depends on | Gate |\n| --- | ------------------------------------------------------------------- | ---------- | -------------------------------------------- |\n| 1 | IR types + codec contract (src/lib/types/proxyIR.ts) | — | typecheck; exhaustiveness is a compile error |\n| 2 | Request codec Codex → Anthropic (codexOutboundFallback.ts) | 1 | offline shape suite |\n| 3 | Response/stream codec Anthropic → Codex | 1 | offline event-order suite |\n| 4 | Tool fidelity + id correlation | 2, 3 | offline round-trip suite |\n| 5 | Cache breakpoints + prefix byte-stability (codexOutboundCache.ts) | 2 | byte-stability assertion across two turns |\n| 6 | Trigger policy, commitment rule, loop prevention, accounting | 2-4 | totality + commitment suites |\n| 7 | Config keys, kill switch, metrics | 6 | config validation suite |\n| 8 | Enable + live model matrix | all | live pass criteria |","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"Build order","lvl3":""}},
|
|
11050
11050
|
{"objectID":"db4fcb5c145b85c8e756be096fdda4d88c5f6fc576ec62653a8545735ff1a653","title":"Open questions gating the build","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#open-questions-gating-the-build","content":"Every one needs the same thing: real captured native Codex traffic. The repo has 4 synthetic\nfixtures, one real single-turn capture (~/.neurolink/reference/codex-cli-wire-sample.json,\ncaptured 2026-09-21), a real usage-frame capture (test/fixtures/codex-response-usage.sse,\ncaptured 2026-08-21), and one real controlled bisection experiment against the actual\ncodex_exec/0.155.1 binary (scripts/codex-replay-listener.ts, test/fixtures/sse-bisection-findings.md,\nrun 2026-09-27). Two questions are now settled; the rest are listed here because they can still\ninvalidate a whole section, so they should be settled before the PRs that depend on them are\nwritten.\n\n| Question | Blocks | Settled by |\n| ---------------------------------------------------------------------------------------------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Does the real Codex CLI accept a call_id it did not mint (a toolu_-shaped id)? | PR 4 | SETTLED (2026-09-27) — yes, verbatim.","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"Open questions gating the build","lvl3":""}},
|
|
11051
11051
|
{"objectID":"a85c34c0265b0c27d696611075427124ef72062ef3e1248bf75ddc2f859229d0","title":"Contents","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#contents","content":"Translation layer: canonical IR and codec contract\nRequest translation: Codex Responses → Anthropic Messages\nResponse translation: Anthropic → Codex wire format\nTool-call fidelity in both directions\nPreserving prompt caching across the hop\nTrigger policy, commitment safety, loop prevention, accounting\nConfiguration surface and staged rollout\nValidation plan","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"Contents","lvl3":""}},
|
|
11052
|
-
{"objectID":"62546125e30c54bebd2104e396943d1fb60478f7d22873e75792c81c408d2791","title":"Consolidated unresolved items","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#consolidated-unresolved-items","content":"ir-and-types — whether native Codex ever sends top-level reasoning/tools on a genuine inbound request — settled for reasoning by the 2026-09-21 capture, which is exactly the check this item asked for (see the gating table above): it is sent with a non-default effort ({\"effort\":\"xhigh\",\"context\":\"all_turns\"}). That captured request has no top-level tools field, only the nested additional_tools item, but one first-turn capture cannot show that no request ever carries one. Still open from the same gating row: whether it ever sends stream:false.\nir-and-types — whether Anthropic's live API ever rejects consecutive same-role messages in some edge case — the one check that would settle it is a probe request against the real API with two consecutive user messages.\nir-and-types — the storage/lifetime contract for a resumed session's id map spanning multiple proxy requests — the one check that would settle it is reading how originSessionId/originThreadId are persisted by the session-affinity\nir-and-types — above.\nrequest-translation — in §10. It converts an unknown into a loud, caller-visible failure instead of a silent one, which is what the \"nothing may break silently\" requirement demands even without live traffic.\nrequest-translation — whether additional_tools/developer items can appear anywhere other than before the first user item in real traffic — the one check that would settle it: capture one real Codex CLI multi-turn session with a mid-conv\nrequest-translation — whether a resumed-session request's input is genuinely full-history or incremental — the one check that would settle it: capture one real resumed-session Codex Responses request (the referenced ~/.neurolink/reference/\n- **request-translation** — whether
|
|
11052
|
+
{"objectID":"62546125e30c54bebd2104e396943d1fb60478f7d22873e75792c81c408d2791","title":"Consolidated unresolved items","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#consolidated-unresolved-items","content":"ir-and-types — whether native Codex ever sends top-level reasoning/tools on a genuine inbound request — settled for reasoning by the 2026-09-21 capture, which is exactly the check this item asked for (see the gating table above): it is sent with a non-default effort ({\"effort\":\"xhigh\",\"context\":\"all_turns\"}). That captured request has no top-level tools field, only the nested additional_tools item, but one first-turn capture cannot show that no request ever carries one. Still open from the same gating row: whether it ever sends stream:false.\nir-and-types — whether Anthropic's live API ever rejects consecutive same-role messages in some edge case — the one check that would settle it is a probe request against the real API with two consecutive user messages.\nir-and-types — the storage/lifetime contract for a resumed session's id map spanning multiple proxy requests — the one check that would settle it is reading how originSessionId/originThreadId are persisted by the session-affinity\nir-and-types — above.\nrequest-translation — in §10. It converts an unknown into a loud, caller-visible failure instead of a silent one, which is what the \"nothing may break silently\" requirement demands even without live traffic.\nrequest-translation — whether additional_tools/developer items can appear anywhere other than before the first user item in real traffic — the one check that would settle it: capture one real Codex CLI multi-turn session with a mid-conv\nrequest-translation — whether a resumed-session request's input is genuinely full-history or incremental — the one check that would settle it: capture one real resumed-session Codex Responses request (the referenced ~/.neurolink/reference/\n- **request-translation** — whether tool_choice or reasoning ever appear on genuine inbound requests at all (absent from all 4 fixtures) — **settled**: the 2026-09-21 capture carries both, tool_choice: \"auto\" and reasoning as quoted in the first item of this list.","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"Consolidated unresolved items","lvl3":""}},
|
|
11053
11053
|
{"objectID":"b890fc666ae87c04302cb9122b852c6e394f3a6eb3ad2c2a3b90aed60a49e057","title":"Decision (kept)","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#decision-kept","content":"Single canonical IR, not ClaudeRequest-as-hub, not pairwise codecs. Verified: openaiFormat.ts/geminiFormat.ts already use ClaudeRequest as an implicit hub only because it is also the literal Anthropic wire type; codexFallback.ts already needs a role cast ((message.role as string) !== \"system\", line 154) to special-case Claude Code's inline-system convention inside a converter meant to be neutral. A new file, src/lib/types/proxyIR.ts, holds a real wire-neutral IR. ClaudeRequest/ClaudeResponse (proxy.ts:154, :187) stay untouched — the Anthropic hot path (claudeProxyRoutes.ts) never changes.\n\nVertex needs no separate codec. Confirmed: executeVertexAnthropicFallback (vertexAnthropicFallback.ts:605-665) forwards the upstream body/stream untouched with a code comment that it is \"already Anthropic-shaped\"; buildVertexAnthropicPayload (line 399) only strips UNSUPPORTED_FIELDS = [\"model\", \"context_management\"] (line 42). Vertex reuses anthropicMessagesIRCodec.buildRequest's output as-is.","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"Decision (kept)","lvl3":""}},
|
|
11054
11054
|
{"objectID":"a1d8a0c721ce132a2ececad931143e90dddbb50e47f04652ec692c3c3e12a040","title":"codexFallback.ts: left unrefactored this PR","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#codexfallbackts-left-unrefactored-this-pr","content":"It already implements, in the new vocabulary, the codex-responses request builder (convertClaudeRequestToCodex, line 407) and response parser (parseCodexFallbackSSE line 592, createCodexFallbackStream line 719) — never a request parser or response renderer, since Codex there is a fallback target, not a served client. Deferred to a named follow-up PR (one-commit-per-PR; mixing a mechanical port with new functional work is out of scope). Coexistence cost: convertClaudeRequestToCodex and the new anthropicMessagesIRCodec/codexNativeRequestCodec independently implement the same tool_choice bijection (any↔required, tool↔function) and the same reasoning-effort concept in reverse; a fix to one will not propagate until the follow-up ports codexFallback.ts onto the same 4 capabilities, verified byte-for-byte against test/continuous-test-suite-codex.ts.","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"codexFallback.ts: left unrefactored this PR","lvl3":""}},
|
|
11055
11055
|
{"objectID":"6a41248b50b7d11345c624537be172f4317d8a583d937c841b1f804ccfe4397f","title":"Grounding notes from the fixtures (all 4 read in full)","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#grounding-notes-from-the-fixtures-all-4-read-in-full","content":"test/fixtures/codex-request-{exec-mode,interactive-mode,resumed-session,tool-result-turn}.json. Each fixture's body.input[0] is one {type:\"additional_tools\", role:\"developer\", tools:{functions:[...], collaboration:[...]}} item. Correction to the original design's blanket claim (\"no Anthropic tool shape maps to collaboration, genuinely unmappable\"): the collaboration bucket is not grammar-only. In all 4 fixtures it holds exactly two tools — exec (type:\"custom\", has a grammar string, no parameters) and request_review (no type tag, has a plain JSON-Schema parameters object, no grammar — structurally identical to a functions entry, just filed under the wrong bucket on the wire). Mappability is a per-tool fact keyed on presence of grammar, never inferable from which array a tool sits in.\n\nfunction_call.arguments is not guaranteed JSON: codex-request-tool-result-turn.json's function_call (call_id:\"call_synthetic_0001\", name:\"exec\") has arguments: \"ls -la\" — a bare string, since exec is grammar-typed. codexFallback.ts's parseFunctionArguments (line 466) throws today on exactly this input (JSON.parse(\"ls -la\") fails, hits catch, throws) — confirmed by reading the function. A tool-call IR part therefore needs argumentsRaw: string as the source of truth always, argumentsJson only when it happens to parse as an object.\n\nAll 4 fixtures: additional_tools is the single, first input item; 4 contiguous developer-role message items follow (indices 1-4); then 2 consecutive user-role message items (confirmed non-hypothetical — tool-result-turn's second user item carries an <environment_context> block, not a second real user turn); tool-result-turn additionally has one function_call/function_call_output pair. No fixture shows an assistant-role message item, even resumed-session. Top-level body keys across all 4: {model, stream, store, input} plus {session_id, thread_id} only on resumed-session — never top-level tools or reasoning.","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"Grounding notes from the fixtures (all 4 read in full)","lvl3":""}},
|
|
@@ -11103,7 +11103,7 @@
|
|
|
11103
11103
|
{"objectID":"e7488830efba84257b169f8aeb55da12214c3b226b65670de30cfb945bf5c1d6","title":"2. tool_choice + parallel_tool_calls — corrected as one mapping, not two","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#2-tool_choice-parallel_tool_calls-corrected-as-one-mapping-not-two","content":"Resolves major finding: the prior design called parallel_tool_calls: false unrepresentable and specified dropping it with a counter. That is factually wrong — confirmed directly in the installed SDK (messages.d.ts:1264,1277,1300): Anthropic's tool_choice carries disable_parallel_tool_use?: boolean on the auto/any/tool variants (inverted polarity: disable_parallel_tool_use: true ≡ parallel_tool_calls: false), just not on none. src/lib/types/proxy.ts's own ClaudeRequest.tool_choice doesn't model the field yet — a type-completeness gap in this repo, not evidence the protocol lacks it.\n\nType change, src/lib/types/proxy.ts:165-167 (replacing the existing 3-line union in place):\n\nmapCodexToolChoiceToClaude now takes both source fields, because the flag rides on the same object the bijection produces:\n\nBijection table (base cases, unchanged — matches codexFallback.ts:436-446 convertClaudeRequestToCodex's inverse and openaiFormat.ts:674-686 convertOpenAIToClaudeRequest's identical precedent, both confirmed verbatim this session):\n\n| Codex native | Claude tool_choice |\n| ------------------------- | --------------------- |\n| \"auto\" / absent | {type:\"auto\"} |\n| \"required\" | {type:\"any\"} |\n| \"none\" | {type:\"none\"} |\n| {type:\"function\", name} | {type:\"tool\", name} |\n\nNo counter fires for parallel_tool_calls any more — it is translated, not degraded, so proxy_codex_outbound_unsupported_field_total drops the parallel_tool_calls reason entirely (§6 shrinks by one label value).","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"2. tool_choice + parallel_tool_calls — corrected as one mapping, not two","lvl3":""}},
|
|
11104
11104
|
{"objectID":"57100b7a1b6caea08aedb70914bf077b92b81152d9cbe2faef8d60fd410e9397","title":"3. Model-emitted tool call / client tool result (unchanged, confirmed sound)","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#3-model-emitted-tool-call-client-tool-result-unchanged-confirmed-sound","content":"ClaudeToolUseBlock{type:\"tool_use\", id, name, input} ↔ Codex {type:\"function_call\", call_id, name, arguments: string}: id ↔ call_id verbatim, no re-minting (Design 1, §5). input → arguments: JSON.stringify(input) unless name was declared custom this turn, then bare String(input.input ?? \"\"), using the same per-request toolKindByName map built at request-translation time.\n\nClaudeToolResultBlock{tool_use_id, content: string | ClaudeContentBlock[]} ↔ Codex {type:\"function_call_output\", call_id, output: string} (confirmed hard string-only ceiling, codex.ts:161-165): call_id ↔ tool_use_id verbatim, output ↔ content as the identical string.","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"3. Model-emitted tool call / client tool result (unchanged, confirmed sound)","lvl3":""}},
|
|
11105
11105
|
{"objectID":"49a0e637681813144714917cfa9d862d8d7b8c1b6a17f793ee70a7f5d41497e4","title":"4. Parallel/multiple tool calls — corrected grouping (resolves the blocker)","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#4-parallelmultiple-tool-calls-corrected-grouping-resolves-the-blocker","content":"The finding: a per-item function convertCodexInputItemToClaudeMessages(item, toolKindByName): ClaudeMessage[] cannot produce test-required grouping — two sibling function_call items followed by two sibling function_call_output items must collapse into one assistant message (2 tool_use blocks) then one user message (2 tool_result blocks), not four separate messages. A per-item function can only emit 0-1 messages per call, i.e. four messages (assistant, assistant, user, user) for that shape.\n\nAdopted correction, mirroring convertClaudeMessage's flush-accumulator (codexFallback.ts:226-288) run in reverse (many-source-items → one-destination-message instead of one-source-message → many-destination-items):\n\nTwo further corrections (review findings, reconciled against the request-translation section's own §4, which solved both of these already for its own, differently-shaped function):\nAdjacent same-role plain messages must coalesce. The version below originally pushed each plain user/assistant item as its own ClaudeMessage. The real capture and every fixture send two consecutive user items (a real prompt, then a synthetic <environment_context> message) — exactly the shape assertClaudeMessagesAlternate (cache-preservation section) rejects. A third run buffer, messageRun, coalesces by role the same way the tool-call runs already do. It is flushed only when a tool-call run needs to start (the two kinds of run cannot coexist) — not on additional_tools/developer, for the same reason the tool-call runs are not flushed there either: a developer item never itself becomes a messages entry, so flushing early would only reopen a fresh, wrongly-separate group for the next same-role item.\nDeveloper text must stay in array form. systemTexts.push(flattenCodexContentParts(...)) joined every developer message into one string.","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"4. Parallel/multiple tool calls — corrected grouping (resolves the blocker)","lvl3":""}},
|
|
11106
|
-
{"objectID":"4db3603d29927aec3d3788b582f9716c855b573098d2ace819bddbc309a29743","title":"5. Empty/malformed arguments and oversized payloads (unchanged in substance, function renamed)","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#5-emptymalformed-arguments-and-oversized-payloads-unchanged-in-substance-function-renamed","content":"name resolves to custom this turn → arguments is opaque text, wrap {input: arguments}.\nname resolves to function, arguments === \"\" → {}.\nname resolves to function, JSON.parse fails → never throw; degrade to {input: <raw text>}, reason:\"malformed_arguments_wrapped\". This is deliberately asymmetric with parseFunctionArguments (codexFallback.ts:466, which throws): that function sits on the model-output-parsing hot path where a hard failure is correct; this sits on request-ingestion, where fabricating a well-formed fallback and continuing is correct, because failing here fails the whole incoming request pre-dispatch.\nname does not resolve to any currently-declared tool → still emit the best-guess wrapped pair; dropping produces an unbalanced
|
|
11106
|
+
{"objectID":"4db3603d29927aec3d3788b582f9716c855b573098d2ace819bddbc309a29743","title":"5. Empty/malformed arguments and oversized payloads (unchanged in substance, function renamed)","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#5-emptymalformed-arguments-and-oversized-payloads-unchanged-in-substance-function-renamed","content":"name resolves to custom this turn → arguments is opaque text, wrap {input: arguments}.\nname resolves to function, arguments === \"\" → {}.\nname resolves to function, JSON.parse fails → never throw; degrade to {input: <raw text>}, reason:\"malformed_arguments_wrapped\". This is deliberately asymmetric with parseFunctionArguments (codexFallback.ts:466, which throws): that function sits on the model-output-parsing hot path where a hard failure is correct; this sits on request-ingestion, where fabricating a well-formed fallback and continuing is correct, because failing here fails the whole incoming request pre-dispatch.\nname does not resolve to any currently-declared tool → still emit the best-guess wrapped pair; dropping produces an unbalanced tool_use/tool_result set Anthropic's own validation rejects, strictly worse than a degraded-but-present pair.\n\nResolves minor finding on \"reuse, not duplicate\": the prior design claimed parseCodexNativeFunctionArguments \"reuses parseFunctionArguments via a shared helper\" — false, since parseFunctionArguments is module-private and no shared module was ever named. Rejecting the reviewer's alternative (a) (extract an exported helper both directions import) for a technical reason: the two functions have deliberately opposite failure-mode contracts by design (§1.6 of the original / §5 here) — one throws on purpose, one must never throw — and the only line-for-line-shared logic is a single JSON.parse(x || \"{}\") try/catch (~4 lines); forcing both through one function needs a boolean/enum mode flag coupling two independently-evolving call sites for a four-line saving, which is a worse trade than accepting the small, documented duplication. Adopted correction: new, independent function in a new module, and the false \"reuse\" claim is dropped, not carried forward.","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"5. Empty/malformed arguments and oversized payloads (unchanged in substance, function renamed)","lvl3":""}},
|
|
11107
11107
|
{"objectID":"1c404502e5139a9e2b23ddb7a10b5919e560f43f42f32b1f469b2c39dc96aa87","title":"6. Identifier mapping — unchanged (Design 1), cross-turn key corrected","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#6-identifier-mapping-unchanged-design-1-cross-turn-key-corrected","content":"Design 1 stands: pass tool_use.id/call_id straight through, no re-minting, no map, in both this new response serializer and the new request translator — mirrors this repo's own dominant idiom (openaiFormat.ts:266, tc.toolCallId || generateOpenAIToolCallId() — prefer real id, mint only as fallback) rather than codexFallback.ts's response-streaming re-mint, which is the outlier here, not the rule.\n\nResolves major finding on session/thread scoping: the prior design claimed \"top-level session_id/thread_id fields (confirmed live)\" on genuine Codex requests. False — re-parsed the real capture directly: body.session_id/body.thread_id are both absent; the only place those identifiers exist is nested, body.client_metadata.{thread_id, turn_id, root_turn_id, session_id}, and body.prompt_cache_key is set to the exact same string as client_metadata.thread_id. The top-level-fields shape belongs only to test/fixtures/codex-request-resumed-session.json, an admittedly-synthetic fixture (_fixtureMeta.basedOn: \"shape only, not copied verbatim\"). Correction adopted: CodexNativeRequest (§7) drops the speculative top-level session_id?/thread_id? fields entirely — client_metadata?: Record<string, unknown> already covers the real shape structurally, no type change needed there, only the false \"top-level, confirmed live\" prose is removed. Design 2 (the id-remapping fallback, not the default — kept unchanged in shape) should key its Map<anthropicToolUseId, codexCallId> by client_metadata.thread_id (or simply the already-present prompt_cache_key, verified to carry the same value), not by invented top-level fields.\n\nResolves major finding on \"resent verbatim every turn\": the prior design told the cache-codex-prefix section it could skip its own dedup/hash logic because \"the whole additional_tools item is resent verbatim by the Codex client on every turn of one thread (confirmed structurally)\".","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"6. Identifier mapping — unchanged (Design 1), cross-turn key corrected","lvl3":""}},
|
|
11108
11108
|
{"objectID":"5f7d76935018ad2c8e0a940bacaf46457ff7f85b68a6cb14f78fe3e1dcc5a2e6","title":"7. JSON-schema translation limits (unchanged, confirmed sound)","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#7-json-schema-translation-limits-unchanged-confirmed-sound","content":"| Construct | Decision | Mechanism |\n| ---------------------------------- | --------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| plain object/array/required/enum | PASSTHROUGH | input_schema = parameters unchanged |\n| strict:true + all-required trick | PASSTHROUGH, drift undocumented in-band | out of scope to reverse-engineer the nullable-optional trick |\n| format keyword | PASSTHROUGH | not independently verified against live Anthropic this session |\n| oneOf/anyOf/allOf | PASSTHROUGH | not observed in the one real sample; absence isn't proof of absence |\n| $ref/$defs/definitions | FLATTEN | call inlineJsonSchema (src/lib/utils/schemaConversion.ts:105) directly, confirmed exported, confirmed signature (schema, definitions?, visited?, rootSchema?): Record<string, unknown> |\n| circular $ref | DEGRADE | inlineJsonSchema's existing","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"7. JSON-schema translation limits (unchanged, confirmed sound)","lvl3":""}},
|
|
11109
11109
|
{"objectID":"b5df2b5ba85927a731ef6ea194054367843b175b0ed01649a010f138e7e2923e","title":"8. Types — exact, corrected (src/lib/types/codex.ts, add)","url":"/docs/superpowers/specs/2026-09-27-codex-outbound-fallback-design#8-types-exact-corrected-srclibtypescodexts-add","content":"(CodexReasoningEffort already exists, codex.ts:168-175, reused as-is.)\n\nsrc/lib/types/proxy.ts — modify ClaudeRequest.tool_choice in place at lines 165-167 (exact replacement text in §2).\nsrc/lib/types/proxy.ts — modify ProxyMetrics (2177-2194): add schemaDegradedTotal: Counter; and unsupportedFieldTotal: Counter;.","hierarchy":{"lvl0":"Superpowers","lvl1":"Codex Outbound Fallback — Design","lvl2":"8. Types — exact, corrected (src/lib/types/codex.ts, add)","lvl3":""}},
|