UNPKG

genosdb

Version:

GenosDB (GDB): distributed graph database in real-time, peer-to-peer, scalable storage - efficient querying of complex relationships.

2 lines (1 loc) 3.63 kB
import*as v from"https://esm.run/@mlc-ai/web-llm";async function h(j,{timeoutMs:J=E}={}){const K=typeof AbortController==="function"?new AbortController:null,H=K&&J?setTimeout(()=>K.abort(),J):null;try{const Q=await fetch(A,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(j),signal:K?.signal});if(!Q.ok)throw new Error(`Pollinations error: ${Q.status} ${Q.statusText}`);const V=await Q.json().catch((Y)=>{throw new Error(`Pollinations JSON parse error: ${Y.message}`)}),W=V?.image_base64||V?.imageBase64||V?.image;if(!W||typeof W!=="string")throw new Error("Pollinations response missing base64 payload");return{base64:W,dataUri:N(W.trim()),meta:{seed:V?.seed??j.seed,model:V?.model??j.model,size:j.size,prompt:j.prompt}}}catch(Q){if(Q?.name==="AbortError")throw new Error("Pollinations request timed out");throw Q}finally{if(H)clearTimeout(H)}}var T=function(j){if(console.log("\uD83E\uDDE0 Loading AI (WebLLM) model..."),!j.webllm)j.webllm={engine:null,isReady:!1,initPromise:null,async init(J="Phi-3.5-mini-instruct-q4f16_1-MLC"){if(this.initPromise)return this.initPromise;return this.engine=new v.MLCEngine,this.initPromise=this.engine.reload(J,{temperature:0.7,top_p:0.9}).then(()=>{return this.isReady=!0,console.log("\u2705 [WebLLM] Model Ready."),this.engine}),this.initPromise}},j.webllm.init().catch((J)=>{console.error("\u274C [WebLLM] Error al inicializar:",J)});if(!j.ai)j.ai={};if(!j.ai.pollinations)j.ai.pollinations=O();else{const J=O();j.ai.pollinations.generateImageBase64=J.generateImageBase64,j.ai.pollinations.generateCoverFromTitle=J.generateCoverFromTitle,j.ai.pollinations.buildCoverPrompt=J.buildCoverPrompt}return j},A="https://image.pollinations.ai/generate",E=45000,N=(j)=>j.startsWith("data:")?j:`data:image/png;base64,${j.replace(/^data:[^,]+,/,"")}`,U=(j,J)=>{const K=Number(j);if(!Number.isFinite(K)||K<=0)return J;return Math.min(Math.round(K),2048)},S=({width:j,height:J})=>`${U(j,1024)}x${U(J,1024)}`,L=({title:j,subtitle:J,description:K,keywords:H,audience:Q,tone:V,style:W,colorPalette:Y,focalPoint:$,extraPrompt:F}={})=>{const R=String(j||"").trim();if(!R)throw new Error("Title is required to generate a cover prompt");const X=[`Create a single, cohesive illustration for a blog post titled "${R}".`];if(J)X.push(`Subtitle: "${String(J).trim()}".`);if(K)X.push(`The article is about ${String(K).trim()}.`);if(Q)X.push(`Target audience: ${String(Q).trim()}.`);const q=Array.isArray(H)?H.filter(Boolean).map((Z)=>String(Z).trim()):typeof H==="string"?H.split(",").map((Z)=>Z.trim()).filter(Boolean):[];if(q.length)X.push(`Incorporate visual cues for: ${q.join(", ")}.`);const C=[V&&`${V} mood`,W&&`style of ${W}`,Y&&`color palette ${Y}`,$&&`central focus on ${$}`].filter(Boolean).join(", ");if(C)X.push(`Visual style hints: ${C}.`);if(F)X.push(String(F).trim());return X.push("Use cinematic lighting, rich gradients, and modern tech aesthetics.","Avoid text or typography in the artwork.","High detail, 4k render, trending on ArtStation."),X.join(" ")},O=()=>{const j=async(K={})=>{const H=typeof K==="string"?{prompt:K}:{...K},Q=String(H.prompt||"").trim();if(!Q)throw new Error("Pollinations requires a non-empty prompt");const V={prompt:Q,size:S({width:H.width,height:H.height}),format:"base64",seed:typeof H.seed==="number"?H.seed:Math.floor(Math.random()*1000)};if(H.model)V.model=H.model;const W=await h(V,{timeoutMs:H.timeoutMs});return H.returnMeta?W:W.dataUri};return{generateImageBase64:j,generateCoverFromTitle:async(K={})=>{const H=L(K);return j({...K,prompt:H,returnMeta:K.returnMeta})},buildCoverPrompt:L}},_=(j)=>{return T(j)};export{_ as init};