opencode-pollinations-plugin 6.1.0-beta.2 → 6.1.0-beta.22

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.
Files changed (96) hide show
  1. package/README.md +242 -62
  2. package/dist/index.js +68 -159
  3. package/dist/server/commands.d.ts +6 -0
  4. package/dist/server/commands.js +400 -71
  5. package/dist/server/config.d.ts +32 -23
  6. package/dist/server/config.js +183 -99
  7. package/dist/server/connect-response.d.ts +2 -0
  8. package/dist/server/connect-response.js +141 -0
  9. package/dist/server/generate-config.d.ts +3 -30
  10. package/dist/server/generate-config.js +164 -106
  11. package/dist/server/index.d.ts +2 -1
  12. package/dist/server/index.js +124 -149
  13. package/dist/server/logger.d.ts +8 -0
  14. package/dist/server/logger.js +36 -0
  15. package/dist/server/models/cache.d.ts +35 -0
  16. package/dist/server/models/cache.js +160 -0
  17. package/dist/server/models/fetcher.d.ts +18 -0
  18. package/dist/server/models/fetcher.js +150 -0
  19. package/dist/server/models/index.d.ts +6 -0
  20. package/dist/server/models/index.js +5 -0
  21. package/dist/server/models/manual.d.ts +15 -0
  22. package/dist/server/models/manual.js +92 -0
  23. package/dist/server/models/types.d.ts +55 -0
  24. package/dist/server/models/types.js +7 -0
  25. package/dist/server/models/worker.d.ts +21 -0
  26. package/dist/server/models/worker.js +97 -0
  27. package/dist/server/pollinations-api.d.ts +11 -0
  28. package/dist/server/pollinations-api.js +21 -8
  29. package/dist/server/proxy.js +223 -160
  30. package/dist/server/quota.d.ts +2 -0
  31. package/dist/server/quota.js +89 -86
  32. package/dist/server/scripts/pollinations_pricing.d.ts +8 -0
  33. package/dist/server/scripts/pollinations_pricing.js +246 -0
  34. package/dist/server/scripts/test_cost_endpoints.d.ts +1 -0
  35. package/dist/server/scripts/test_cost_endpoints.js +61 -0
  36. package/dist/server/scripts/test_dynamic_pricing.d.ts +1 -0
  37. package/dist/server/scripts/test_dynamic_pricing.js +39 -0
  38. package/dist/server/scripts/test_freetier_audit.d.ts +11 -0
  39. package/dist/server/scripts/test_freetier_audit.js +215 -0
  40. package/dist/server/scripts/test_parallel_cost.d.ts +1 -0
  41. package/dist/server/scripts/test_parallel_cost.js +104 -0
  42. package/dist/server/toast.d.ts +7 -1
  43. package/dist/server/toast.js +43 -10
  44. package/dist/tools/design/gen_diagram.d.ts +2 -0
  45. package/dist/tools/design/gen_diagram.js +94 -0
  46. package/dist/tools/design/gen_palette.d.ts +2 -0
  47. package/dist/tools/design/gen_palette.js +182 -0
  48. package/dist/tools/design/gen_qrcode.d.ts +2 -0
  49. package/dist/tools/design/gen_qrcode.js +50 -0
  50. package/dist/tools/ffmpeg.d.ts +24 -0
  51. package/dist/tools/ffmpeg.js +54 -0
  52. package/dist/tools/index.d.ts +24 -0
  53. package/dist/tools/index.js +83 -0
  54. package/dist/tools/pollinations/beta_discovery.d.ts +9 -0
  55. package/dist/tools/pollinations/beta_discovery.js +197 -0
  56. package/dist/tools/pollinations/cost-guard.d.ts +38 -0
  57. package/dist/tools/pollinations/cost-guard.js +141 -0
  58. package/dist/tools/pollinations/deepsearch.d.ts +7 -0
  59. package/dist/tools/pollinations/deepsearch.js +80 -0
  60. package/dist/tools/pollinations/gen_audio.d.ts +18 -0
  61. package/dist/tools/pollinations/gen_audio.js +246 -0
  62. package/dist/tools/pollinations/gen_image.d.ts +11 -0
  63. package/dist/tools/pollinations/gen_image.js +225 -0
  64. package/dist/tools/pollinations/gen_music.d.ts +14 -0
  65. package/dist/tools/pollinations/gen_music.js +180 -0
  66. package/dist/tools/pollinations/gen_video.d.ts +16 -0
  67. package/dist/tools/pollinations/gen_video.js +256 -0
  68. package/dist/tools/pollinations/polli_gen_confirm.d.ts +2 -0
  69. package/dist/tools/pollinations/polli_gen_confirm.js +48 -0
  70. package/dist/tools/pollinations/polli_status.d.ts +2 -0
  71. package/dist/tools/pollinations/polli_status.js +31 -0
  72. package/dist/tools/pollinations/polli_web_search.d.ts +15 -0
  73. package/dist/tools/pollinations/polli_web_search.js +164 -0
  74. package/dist/tools/pollinations/search_crawl_scrape.d.ts +7 -0
  75. package/dist/tools/pollinations/search_crawl_scrape.js +85 -0
  76. package/dist/tools/pollinations/shared.d.ts +165 -0
  77. package/dist/tools/pollinations/shared.js +665 -0
  78. package/dist/tools/pollinations/test_estimators.d.ts +1 -0
  79. package/dist/tools/pollinations/test_estimators.js +22 -0
  80. package/dist/tools/pollinations/transcribe_audio.d.ts +13 -0
  81. package/dist/tools/pollinations/transcribe_audio.js +194 -0
  82. package/dist/tools/power/extract_audio.d.ts +2 -0
  83. package/dist/tools/power/extract_audio.js +179 -0
  84. package/dist/tools/power/extract_frames.d.ts +2 -0
  85. package/dist/tools/power/extract_frames.js +237 -0
  86. package/dist/tools/power/file_to_url.d.ts +2 -0
  87. package/dist/tools/power/file_to_url.js +217 -0
  88. package/dist/tools/power/remove_background.d.ts +2 -0
  89. package/dist/tools/power/remove_background.js +366 -0
  90. package/dist/tools/power/rmbg_keys.d.ts +2 -0
  91. package/dist/tools/power/rmbg_keys.js +79 -0
  92. package/dist/tools/shared.d.ts +30 -0
  93. package/dist/tools/shared.js +80 -0
  94. package/package.json +10 -4
  95. package/dist/server/models-seed.d.ts +0 -18
  96. package/dist/server/models-seed.js +0 -55
@@ -0,0 +1,97 @@
1
+ import { polliGenImageTool } from '../../tools/pollinations/gen_image.js';
2
+ import { polliGenVideoTool } from '../../tools/pollinations/gen_video.js';
3
+ import { ModelRegistry } from './index.js';
4
+ import { log } from '../logger.js';
5
+ import { per1pollen, estimateImageCost, estimateVideoCost } from '../../tools/pollinations/shared.js';
6
+ /**
7
+ * ToolRegistryWorker
8
+ * Responsabilité : Patcher dynamiquement la propriété "description" des Tools statiques
9
+ * (ex: polliGenImageTool, polliGenVideoTool) pour y injecter le catalogue temps réel
10
+ * rapatrié par le ModelRegistry.
11
+ */
12
+ export class ToolRegistryWorker {
13
+ static isRunning = false;
14
+ static interval = null;
15
+ // Fréquence de vérification des modifications du registre (en ms)
16
+ static CHECK_INTERVAL = 60000; // 1 minute
17
+ /**
18
+ * Démarre le Worker en tâche de fond.
19
+ */
20
+ static start() {
21
+ if (this.isRunning)
22
+ return;
23
+ this.isRunning = true;
24
+ log('[ToolWorker] Démarrage du patcher dynamique...');
25
+ // Exécution immédiate
26
+ this.patchTools();
27
+ // Setup de l'intervalle
28
+ this.interval = setInterval(() => {
29
+ if (ModelRegistry.isReady()) {
30
+ this.patchTools();
31
+ }
32
+ }, this.CHECK_INTERVAL);
33
+ }
34
+ static stop() {
35
+ if (this.interval)
36
+ clearInterval(this.interval);
37
+ this.isRunning = false;
38
+ log('[ToolWorker] Stoppé');
39
+ }
40
+ /**
41
+ * Lit le registre en mémoire et injecte les listes Markdown formatées
42
+ * dans les propriétés ToolDefinition.description
43
+ */
44
+ static patchTools() {
45
+ try {
46
+ // -- Patch VIDEO Tool --
47
+ const videoModels = ModelRegistry.list('video');
48
+ if (videoModels.length > 0 && polliGenVideoTool.description) {
49
+ let videoTable = `\n\n**🎬 Modèles Vidéo Détectés (${videoModels.length}) :**\n`;
50
+ videoTable += `| Modèle | Source I/O | Audio | 1 pollen ≈ | Specs |\n`;
51
+ videoTable += `|--------|------------|-------|------------|-------|\n`;
52
+ for (const m of videoModels) {
53
+ // Estimation pour une vidéo moyenne de 6 secondes
54
+ const cost = estimateVideoCost(m.name, 6);
55
+ const price = cost ? `${per1pollen(cost)} vidéos` : 'inconnu';
56
+ // durationRange et aspectRatios arrivent du fetcher (ou fallback)
57
+ const specs = `${m.durationRange ? m.durationRange.join('-') + 's' : '?s'} / ${m.aspectRatios ? m.aspectRatios.length : '?'} ratios`;
58
+ const badge = m.paid_only ? '💎' : '🌿';
59
+ videoTable += `| \`${m.name}\` ${badge} | ${m.supportsI2X ? 'T2V/I2V' : 'T2V'} | ${m.output_modalities?.includes('audio') || m.name === 'grok-video' ? '✅' : '❌'} | ${price} | ${specs} |\n`;
60
+ }
61
+ if (!polliGenVideoTool.description.includes('**🎬 Modèles Vidéo Détectés')) {
62
+ polliGenVideoTool.description += videoTable;
63
+ }
64
+ else {
65
+ polliGenVideoTool.description = polliGenVideoTool.description.split('**🎬 Modèles Vidéo Détectés')[0] + videoTable;
66
+ }
67
+ }
68
+ // -- Patch IMAGE Tool --
69
+ const imageModels = ModelRegistry.list('image');
70
+ if (imageModels.length > 0 && polliGenImageTool.description) {
71
+ let imageTable = `\n\n**🎨 Modèles Image Détectés (${imageModels.length}) :**\n`;
72
+ imageTable += `| Modèle | I2I | Qualité | 1 pollen ≈ |\n`;
73
+ imageTable += `|--------|-----|---------|------------|\n`;
74
+ // Afficher max 20 modèles pour éviter de saturer le prompt LLM
75
+ for (const m of imageModels.slice(0, 20)) {
76
+ const cost = estimateImageCost(m.name);
77
+ const price = cost ? `${per1pollen(cost)} images` : 'inconnu';
78
+ const badge = m.paid_only ? '💎' : '🌿';
79
+ imageTable += `| \`${m.name}\` ${badge} | ${m.supportsI2X ? '✅' : '❌'} | Standard | ${price} |\n`;
80
+ }
81
+ if (imageModels.length > 20) {
82
+ imageTable += `| *(+${imageModels.length - 20} autres)* | ... | ... | ... |\n`;
83
+ }
84
+ if (!polliGenImageTool.description.includes('**🎨 Modèles Image Détectés')) {
85
+ polliGenImageTool.description += imageTable;
86
+ }
87
+ else {
88
+ polliGenImageTool.description = polliGenImageTool.description.split('**🎨 Modèles Image Détectés')[0] + imageTable;
89
+ }
90
+ }
91
+ log(`[ToolWorker] Propriétés (descriptions) des outils mises à jour via ModelRegistry.`);
92
+ }
93
+ catch (e) {
94
+ log(`[ToolWorker] Error patching tools: ${e}`);
95
+ }
96
+ }
97
+ }
@@ -41,6 +41,17 @@ export interface DetailedUsageResponse {
41
41
  count: number;
42
42
  }
43
43
  export declare function getDetailedUsage(apiKey: string): Promise<DetailedUsageResponse | null>;
44
+ export interface DailyUsageEntry {
45
+ date: string;
46
+ model: string;
47
+ meter_source: 'tier' | 'pack' | 'combined';
48
+ requests: number;
49
+ cost_usd: number;
50
+ }
51
+ export interface DailyUsageResponse {
52
+ usage: DailyUsageEntry[];
53
+ }
54
+ export declare function getDailyUsage(apiKey: string): Promise<DailyUsageResponse | null>;
44
55
  export declare function getAggregatedModels(): Promise<{
45
56
  object: string;
46
57
  data: OpenAIModel[];
@@ -1,12 +1,5 @@
1
1
  import { loadConfig } from './config.js';
2
- import * as fs from 'fs';
3
- // Debug Helper
4
- function logDebug(msg) {
5
- try {
6
- fs.appendFileSync('/tmp/pollinations-api-debug.log', `[${new Date().toISOString()}] ${msg}\n`);
7
- }
8
- catch (e) { }
9
- }
2
+ import { logApi as logDebug } from './logger.js';
10
3
  const HEADERS = {
11
4
  'User-Agent': 'curl/8.5.0',
12
5
  'Origin': '',
@@ -136,6 +129,26 @@ export async function getDetailedUsage(apiKey) {
136
129
  return null;
137
130
  }
138
131
  }
132
+ export async function getDailyUsage(apiKey) {
133
+ if (!apiKey || apiKey.length < 10)
134
+ return null;
135
+ try {
136
+ logDebug("Fetching Daily Usage (aggregated)...");
137
+ const response = await fetch('https://gen.pollinations.ai/account/usage/daily', {
138
+ headers: { 'Authorization': `Bearer ${apiKey}` }
139
+ });
140
+ if (!response.ok) {
141
+ logDebug(`Daily Usage API Error: ${response.status}`);
142
+ return null;
143
+ }
144
+ const data = await response.json();
145
+ return data;
146
+ }
147
+ catch (e) {
148
+ logDebug(`Error Daily Usage: ${e}`);
149
+ return null;
150
+ }
151
+ }
139
152
  export async function getAggregatedModels() {
140
153
  const config = loadConfig();
141
154
  const [free, enter] = await Promise.all([