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.
- package/README.md +242 -62
- package/dist/index.js +68 -159
- package/dist/server/commands.d.ts +6 -0
- package/dist/server/commands.js +400 -71
- package/dist/server/config.d.ts +32 -23
- package/dist/server/config.js +183 -99
- package/dist/server/connect-response.d.ts +2 -0
- package/dist/server/connect-response.js +141 -0
- package/dist/server/generate-config.d.ts +3 -30
- package/dist/server/generate-config.js +164 -106
- package/dist/server/index.d.ts +2 -1
- package/dist/server/index.js +124 -149
- package/dist/server/logger.d.ts +8 -0
- package/dist/server/logger.js +36 -0
- package/dist/server/models/cache.d.ts +35 -0
- package/dist/server/models/cache.js +160 -0
- package/dist/server/models/fetcher.d.ts +18 -0
- package/dist/server/models/fetcher.js +150 -0
- package/dist/server/models/index.d.ts +6 -0
- package/dist/server/models/index.js +5 -0
- package/dist/server/models/manual.d.ts +15 -0
- package/dist/server/models/manual.js +92 -0
- package/dist/server/models/types.d.ts +55 -0
- package/dist/server/models/types.js +7 -0
- package/dist/server/models/worker.d.ts +21 -0
- package/dist/server/models/worker.js +97 -0
- package/dist/server/pollinations-api.d.ts +11 -0
- package/dist/server/pollinations-api.js +21 -8
- package/dist/server/proxy.js +223 -160
- package/dist/server/quota.d.ts +2 -0
- package/dist/server/quota.js +89 -86
- package/dist/server/scripts/pollinations_pricing.d.ts +8 -0
- package/dist/server/scripts/pollinations_pricing.js +246 -0
- package/dist/server/scripts/test_cost_endpoints.d.ts +1 -0
- package/dist/server/scripts/test_cost_endpoints.js +61 -0
- package/dist/server/scripts/test_dynamic_pricing.d.ts +1 -0
- package/dist/server/scripts/test_dynamic_pricing.js +39 -0
- package/dist/server/scripts/test_freetier_audit.d.ts +11 -0
- package/dist/server/scripts/test_freetier_audit.js +215 -0
- package/dist/server/scripts/test_parallel_cost.d.ts +1 -0
- package/dist/server/scripts/test_parallel_cost.js +104 -0
- package/dist/server/toast.d.ts +7 -1
- package/dist/server/toast.js +43 -10
- package/dist/tools/design/gen_diagram.d.ts +2 -0
- package/dist/tools/design/gen_diagram.js +94 -0
- package/dist/tools/design/gen_palette.d.ts +2 -0
- package/dist/tools/design/gen_palette.js +182 -0
- package/dist/tools/design/gen_qrcode.d.ts +2 -0
- package/dist/tools/design/gen_qrcode.js +50 -0
- package/dist/tools/ffmpeg.d.ts +24 -0
- package/dist/tools/ffmpeg.js +54 -0
- package/dist/tools/index.d.ts +24 -0
- package/dist/tools/index.js +83 -0
- package/dist/tools/pollinations/beta_discovery.d.ts +9 -0
- package/dist/tools/pollinations/beta_discovery.js +197 -0
- package/dist/tools/pollinations/cost-guard.d.ts +38 -0
- package/dist/tools/pollinations/cost-guard.js +141 -0
- package/dist/tools/pollinations/deepsearch.d.ts +7 -0
- package/dist/tools/pollinations/deepsearch.js +80 -0
- package/dist/tools/pollinations/gen_audio.d.ts +18 -0
- package/dist/tools/pollinations/gen_audio.js +246 -0
- package/dist/tools/pollinations/gen_image.d.ts +11 -0
- package/dist/tools/pollinations/gen_image.js +225 -0
- package/dist/tools/pollinations/gen_music.d.ts +14 -0
- package/dist/tools/pollinations/gen_music.js +180 -0
- package/dist/tools/pollinations/gen_video.d.ts +16 -0
- package/dist/tools/pollinations/gen_video.js +256 -0
- package/dist/tools/pollinations/polli_gen_confirm.d.ts +2 -0
- package/dist/tools/pollinations/polli_gen_confirm.js +48 -0
- package/dist/tools/pollinations/polli_status.d.ts +2 -0
- package/dist/tools/pollinations/polli_status.js +31 -0
- package/dist/tools/pollinations/polli_web_search.d.ts +15 -0
- package/dist/tools/pollinations/polli_web_search.js +164 -0
- package/dist/tools/pollinations/search_crawl_scrape.d.ts +7 -0
- package/dist/tools/pollinations/search_crawl_scrape.js +85 -0
- package/dist/tools/pollinations/shared.d.ts +165 -0
- package/dist/tools/pollinations/shared.js +665 -0
- package/dist/tools/pollinations/test_estimators.d.ts +1 -0
- package/dist/tools/pollinations/test_estimators.js +22 -0
- package/dist/tools/pollinations/transcribe_audio.d.ts +13 -0
- package/dist/tools/pollinations/transcribe_audio.js +194 -0
- package/dist/tools/power/extract_audio.d.ts +2 -0
- package/dist/tools/power/extract_audio.js +179 -0
- package/dist/tools/power/extract_frames.d.ts +2 -0
- package/dist/tools/power/extract_frames.js +237 -0
- package/dist/tools/power/file_to_url.d.ts +2 -0
- package/dist/tools/power/file_to_url.js +217 -0
- package/dist/tools/power/remove_background.d.ts +2 -0
- package/dist/tools/power/remove_background.js +366 -0
- package/dist/tools/power/rmbg_keys.d.ts +2 -0
- package/dist/tools/power/rmbg_keys.js +79 -0
- package/dist/tools/shared.d.ts +30 -0
- package/dist/tools/shared.js +80 -0
- package/package.json +10 -4
- package/dist/server/models-seed.d.ts +0 -18
- 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
|
|
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([
|