opencode-pollinations-plugin 6.1.0-beta.4 → 6.1.0-beta.5

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.
@@ -2,7 +2,7 @@ import * as https from 'https';
2
2
  import { loadConfig, saveConfig } from './config.js';
3
3
  import { getQuotaStatus } from './quota.js';
4
4
  import { emitStatusToast } from './toast.js';
5
- import { getDetailedUsage } from './pollinations-api.js';
5
+ import { getDetailedUsage, getAggregatedModels } from './pollinations-api.js';
6
6
  import { generatePollinationsConfig } from './generate-config.js';
7
7
  function checkEndpoint(ep, key) {
8
8
  return new Promise((resolve) => {
@@ -145,7 +145,7 @@ export async function handleCommand(command) {
145
145
  case 'connect':
146
146
  return await handleConnectCommand(args);
147
147
  case 'fallback':
148
- return handleFallbackCommand(args);
148
+ return await handleFallbackCommand(args);
149
149
  case 'config':
150
150
  return handleConfigCommand(args);
151
151
  case 'help':
@@ -265,7 +265,7 @@ async function handleUsageCommand(args) {
265
265
  return { handled: true, error: `Erreur: ${e}` };
266
266
  }
267
267
  }
268
- function handleFallbackCommand(args) {
268
+ async function handleFallbackCommand(args) {
269
269
  let targetMode = args[0];
270
270
  const targetModel = args[1];
271
271
  if (!targetMode || !targetModel) {
@@ -280,20 +280,21 @@ function handleFallbackCommand(args) {
280
280
  if (targetMode !== 'economy' && targetMode !== 'pro') {
281
281
  return { handled: true, error: 'Target mode invalide (economy ou pro)' };
282
282
  }
283
- // Validate Model
284
- const KNOWN_MODELS = [
285
- "openai", "openai-fast", "openai-large", "qwen-coder", "mistral", "openai-audio", "gemini", "gemini-fast",
286
- "deepseek", "grok", "gemini-search", "chickytutor", "midijourney", "claude-fast", "claude", "claude-large",
287
- "perplexity-fast", "perplexity-reasoning", "kimi", "gemini-large", "gemini-legacy", "nova-fast", "glm", "minimax",
288
- "nomnom", "gpt-5-nano", "gpt-5.2", "openai-reasoning", "qwen3-coder", "deepseek-v3", "deepseek-reasoning",
289
- "gemini-2.5-flash-lite", "claude-sonnet-4.5", "claude-sonnet", "amazon-nova-micro", "nova", "nova-micro"
290
- ];
291
- // Tolerant check (if missing from known list, warn but allow if looks valid pattern? No, strict warn is better as requested)
292
- if (!KNOWN_MODELS.includes(targetModel)) {
293
- return {
294
- handled: true,
295
- error: `⚠️ Modèle inconnu: "${targetModel}".\nModèles valides: ${KNOWN_MODELS.slice(0, 5).join(', ')}... (voir doc)`
296
- };
283
+ // DYNAMIC MODEL VALIDATION (BUG 2 FIX)
284
+ try {
285
+ const { data: models } = await getAggregatedModels();
286
+ const validIds = models.map(m => m.id.replace(/^pollinations\/(free|enter)\//, ''));
287
+ if (!validIds.includes(targetModel)) {
288
+ const suggestions = validIds.slice(0, 10).join(', ');
289
+ return {
290
+ handled: true,
291
+ error: `⚠️ Modèle inconnu: "${targetModel}".\nExemples valides: ${suggestions}...`
292
+ };
293
+ }
294
+ }
295
+ catch (e) {
296
+ // Fail-open si API down
297
+ console.warn('[Fallback] Model validation failed, allowing:', e);
297
298
  }
298
299
  const config = loadConfig();
299
300
  const updates = { fallbacks: { ...config.fallbacks } };
@@ -647,6 +647,15 @@ export async function handleChatCompletion(req, res, bodyRaw) {
647
647
  log(`[SafetyNet] Adjusted max_tokens to 4000 for ${actualModel}`);
648
648
  }
649
649
  }
650
+ // BEDROCK COMPATIBILITY FIX (BUG 1)
651
+ const isBedrockModel = actualModel.includes('nova') ||
652
+ actualModel.includes('amazon') ||
653
+ actualModel.includes('chickytutor');
654
+ if (isBedrockModel && retryBody.tools) {
655
+ delete retryBody.tools;
656
+ log(`[SafetyNet] Tools removed for Bedrock model: ${actualModel}`);
657
+ emitStatusToast('warning', '⚠️ Tools désactivés (Bedrock incompatible)', 'Fallback');
658
+ }
650
659
  // 4. Retry Fetch
651
660
  const retryRes = await fetchWithRetry(targetUrl, {
652
661
  method: 'POST',
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "opencode-pollinations-plugin",
3
3
  "displayName": "Pollinations AI (V5.6)",
4
- "version": "6.1.0-beta.4",
4
+ "version": "6.1.0-beta.5",
5
5
  "description": "Native Pollinations.ai Provider Plugin for OpenCode",
6
6
  "publisher": "pollinations",
7
7
  "repository": {