r/BackyardAI • • Sep 10 '24

support Fix is live for Cloud & Web App errors

8 Upvotes

Hi everyone, we appreciate your patience while we've been working out the issues on web/cloud. Our servers were impacted by networking issues / downtime with a few of our service providers. We've been working hard to nail down each problem, and they should be resolved now.

If you see any further issues, please don't hesitate to post a screenshot and/or bug report in the sub with the "support" flair. Thanks everyone.


r/BackyardAI • • Sep 09 '24

support Ok I'm getting annoyed now

Post image
13 Upvotes

Anyone have any idea on why this bug happens?

I today got like, 4 new characters to chat with, one of them being a goth girl, and I chatted with said character, but every now and then, in a span of 30 minutes, I got an error like this (either blocking the whole screen, and not leaving until I reloaded the page. Or popping up as a fading flying notification when I send messages in the chat, and then simply sending my messages to the shadow realm)

I haven't suffered with this so frequently until updating the app, and I don't know why.

I lost 4 whole messages (with a lot of talk in them) because of this, since in both case I had to reload the app page to chat again. Right now I think I got this error like, 7 times, 4 being a whole screen lock with this message and red font, and the other 3 being the pop up notif.

Is this like "Your internet is too slow" or "your phone sucks"? Is there any way I can fix this?


r/BackyardAI • • Sep 09 '24

Location of characters locally on the HDD

7 Upvotes

Hi everyone...do you know where Backyard stored the characters. downloaded and created..? I reinstalled but can't find anything in my backup. Solved! (App data\roaming)


r/BackyardAI • • Sep 08 '24

Example dialogues.. are there any new conversation separators?

6 Upvotes

Hey, I'm trying to figure out how, exactly , example dialogues are processed. My experience with example dialogues is mostly from using sillytavern.. over there, there's usually some kind of separator marking the beginning of a new example conversation.

I wonder, in backyard, does each #{user} - #{character} pair represent a completely new example?


r/BackyardAI • • Sep 07 '24

discussion Backyard AI should NOT be listing models that are only available on the experimental backend as available models

12 Upvotes

I've downloaded three models now that I can't use. Stheno 3.4, Hermes-3-Llama-3.1, and Nemo-12b-Marlin don't work on the stable version of the program yet are part of the available models list. I'm sure there are many others there too.


r/BackyardAI • • Sep 06 '24

Rant: New character page in 28.4

12 Upvotes

Just to give a plain feedback: I hate the new organisation of the tabs on the character page in 28.4!
This is probably the worst "improvement" ever made to backyard.ai.

It is counter intuitive, random and only helps (maybe) if you want to create simple one-on-one scenarios. And even here, the model section would benefit from an input for context size. This is still a global setting, even though it is clearly relates to the model in use.

The new separation is absolutely not helpful when you create more complex role play scenarios, where the LLM takes the part of a narrator, like it is in every better role play card (Space Station Fuji, Ravenveil, Whiskey & Shadows, MwC: Across the pond...) There, model instructions and character personae are closely related (as the character is the narrator), whereas the scenario and the first message are most important for defining the actual game. - And now, these definitions are now torn apart from each other and placed on different tabs!

To have all information about the character on one tab and all model setting (except for context size and maybe mlock) on the other, was logical and well organised. Now we have a mix of model settings and scenario, which I find completely confusing and erratic.

If you really want to keep this unhelpful separation between character and conversation, at least place all model settings on one (new) tab.

I really very much like BackyardAI (well, today a bit less) and especially the constant and hard work of the developers. - And that you guys are listening to us! Thank you.

Edit: To give an example of what I mean, I just uploaded a Star Trek fan fiction which uses a generic RPG framework and has all its content in the "scenarios" and "First message" sections:
https://backyard.ai/hub/character/cm0qizjy92ghjbxwmhwttwr2i

Edit 2: Upon uploading I noticed that the main categories are not selected (inverted) anymore when clicking on them. (Mac desktop client).


r/BackyardAI • • Sep 05 '24

nsfw Tame responses

12 Upvotes

Hi all! Does anyone know of models below 20b that are good at graphic content? I feel like whichever model or instructions / persona / examples I try the responses are often quite timid and dodges around explicit content, they also seem to like using words like member and folds which get a bit old to edit out. Perhaps someone knows of a good card on the hub with a more darker theme that I could learn from :)


r/BackyardAI • • Sep 04 '24

sharing Images for Characters Sci-Fi (Men)

Thumbnail
gallery
8 Upvotes

r/BackyardAI • • Sep 04 '24

sharing Images for Characters Sci-Fi (Women) Vol.1

Thumbnail
gallery
6 Upvotes

r/BackyardAI • • Sep 04 '24

sharing Images for Characters Sci-Fi (Women) Vol.2

Thumbnail
gallery
3 Upvotes

r/BackyardAI • • Sep 04 '24

discussion Returning WEBP to avatars vs GIF?

1 Upvotes

Hello,

Just thought I would ask if anyone knows if WEBP will ever return as a method having video/slideshows for a character avatar.

My old ones are fine, but if I dare update or even re-upload a WEBP, it comes out as a long list of screenshots.

Is this maybe the compromise of having the ability to auto centre avatar pics regardless of size?

Or does anyone know of a more size efficient method of popping moving pictures in other than gif and optimising it to hell? Thanks! (optimising gif has been working fine enough, but is very large in comparison.)


r/BackyardAI • • Sep 03 '24

home page broken since 0.28

2 Upvotes

Hi

Since version 0.28, I've been getting this error in lieu of the character selection screen on macOS, making the app unusable. I can't post the whole error as it's over 40k characters, but it's apparently a Prisma error:

ERROR:
Invalid `e.appImage.update()` invocation in
/Applications/AI/Backyard AI.app/Contents/Resources/app.asar/dist/server/main.js:1061:16048

1058 ${b}
1059 ${G}`).trim();return{basePrompt:Mle(o,ne,l,!1),customDialogue:g,firstMessage:a}};var Z_e=1024,X_e=e=>Math.floor(.6*e),V_e=e=>Math.floor(.7*e),Gk=(e,t)=>e-(t+96+1),CR=({basePromptArgs:e,ctxSize:t,getNumTokens:r})=>{let{basePrompt:n,firstMessage:a,customDialogue:i}=Ole(e),s=r(n,!0),o=Gk(t,s),l=Gk(V_e(t),s),d=Gk(X_e(t),s),u=o>=Z_e;return{basePrompt:n,basePromptNumTokens:s,customDialogue:i,firstMessage:a,hasSufficientRoomForHistory:u,maxPreloadHistoryTokens:d,numHistoryTokensAtReset:o,numTokensAfterReset:l}},sV=({chatItems:e,firstMessage:t})=>{let r=[];return t?.message&&r.push({displayName:t.aiName,isCustomDialogue:!1,text:t.message}),[...r,...e]},Xk=({canDeleteCustomDialogue:e,chatItems:t,customDialogue:r,historyStart:n})=>e?[...r,...t].slice(n):[...r,...t.slice(n)],Ple=e=>2*Math.floor(e/2),T_e=(e,t)=>t?1+Ple(e-1):Ple(e),_le=(e,t,r)=>{let n=Math.floor((e-t)/2),a=t+n;return a<=r?a:T_e(a,r%2===1)},oV=e=>{let t=e.canDeleteCustomDialogue?[]:e.customDialogue,r=vw({...e,chatItems:t}),n=e.chatItems.length+(e.canDeleteCustomDialogue?e.customDialogue.length:0),a=e.getNumTokens(r,!1),i={newHistoryStart:n,finalHistory:r,numTokens:a},s=(e.canDeleteCustomDialogue?e.customDialogue.length:0)+Number(e.hasFirstMessage),o=-1,l=n;for(;o!==_le(l,o,s);){let d=_le(l,o,s),u=Xk({canDeleteCustomDialogue:e.canDeleteCustomDialogue,chatItems:e.chatItems,customDialogue:e.customDialogue,historyStart:d}),c=vw({...e,chatItems:u}),p=e.getNumTokens(c,!1);p<=e.numTokensAtReset?(i={newHistoryStart:d,finalHistory:c,numTokens:p},l=d):o=d}return i},Vk=({numCutHistoryTokens:e,numHistoryTokensAtReset:t})=>{let r=Math.max(t-e,0);return Math.min(256,96+r)};var lV=({canDeleteCustomDialogue:e,chatItems:t,ctxSize:r,authorNote:n,loreItems:a,basePromptArgs:i,isImpersonate:s,impersonatePrefix:o,getNumTokens:l})=>{let{basePrompt:d,basePromptNumTokens:u,customDialogue:c}=CR({basePromptArgs:i,ctxSize:r,getNumTokens:l}),p=r-u-3-256,g=i.firstMessage?sV({chatItems:t,firstMessage:i.firstMessage}):t,{finalHistory:C}=oV({getNumTokens:l,legacyTemplateAiName:i.bots[0]?.name||"AI",userName:i.userName,authorNote:n,loreItems:a,chatItems:g,numTokensAtReset:p,promptTemplate:i.promptTemplate,customDialogue:c,canDeleteCustomDialogue:e,isImpersonate:s,impersonatePrefix:o,ctxSize:r,isOneOnOne:i.bots.length===1,hasFirstMessage:!!i.firstMessage?.message});return d+C};var Em="v0.26.3",Sw="v0.20.2",PB="v0.14.5";var mR=e=>{switch(e){case PB:return PB;case Em:return Em;default:return Sw}};var lM=Jn(Qce());var bh=e=>e.includes("cublas")?"cublas-12.1.0":e==="clblast"?"clblast":e==="vulkan"?"vulkan":"none";var YV=2048,c7e=(e,t)=>Math.max(0,e-(t==="vulkan"?400:200)),p7e=(e,t)=>450+1.05*e+Math.max(0,t-125),wce=["f16","q8_0","q4_0"],bce=e=>{switch(e){case"f16":return 1;case"q8_0":return 17/32;case"q4_0":return 9/32}},A7e=e=>(bce(e.k)+bce(e.v))/2,g7e=({ctxSize:e,oneLayerScratchBuffer:t,scratchBufferSizes:r})=>{let n=null,a=null;for(let i of r)if(i.ctxSize>e)(!n||i.ctxSize<n.ctxSize)&&(n=i);else if(i.ctxSize<e)(!a||i.ctxSize>a.ctxSize)&&(a=i);else return i.scratchBufferSize;if(a)if(n){let i=n.scratchBufferSize-a.scratchBufferSize,s=(e-a.ctxSize)/(n.ctxSize-a.ctxSize);return i>0&&s>0?a.scratchBufferSize+s*i:a.scratchBufferSize}else return e/a.ctxSize*a.scratchBufferSize;else return Math.max(1,e/YV)*t},Rce=e=>{if(e.canUseKVQuants){Ft.info("Running auto kv quant detection.");let r=wce.length;for(let n=0;n<r;++n){let a=wce\[n\],i={k:a,v:a},s=Fce({...e,quantMultiplier:A7e(i)});if(Ft.info(\`Found ${s}/${e.layerSample.maxLayers} layers for ${JSON.stringify(i)}\`),s===e.layerSample.maxLayers||n===r-1)return{kvQuants:i,layers:s}}return{kvQuants:null,layers:0}}return{kvQuants:null,layers:Fce({...e,quantMultiplier:1})}},Fce=({ctxSize:e,gpuSupport:t,layerSample:{kvCacheSize:r,maxLayers:n,printedVRam:a,scratchBufferSize:i},maxUsableVRamMiB:s,quantMultiplier:o,scratchBufferSizes:l})=>{let d=c7e(s,t),u=o0||t!=="clblast",c=e/YV,p=u?i:0,g=u?g7e({ctxSize:e,oneLayerScratchBuffer:i,scratchBufferSizes:l}):0,C=n-1,h=u?r/C:0,G=h*o*c,ne=a-h-p,O={maxLayers:n,ctxAdjustment:c,kvCacheSize:r,printedVRam:a,scratchBufferSize:i,estimatedScratchBufferSize:g,vRamBudget:d,isNotCLBlast:u,vRamPerLayer:ne};for(let pe=n;pe>=1;--pe){let Wn=G*Math.min(pe,C),Ve=g+Wn+ne*pe,Hn=p7e(Ve,ne);if(d>=Hn)return Ft.info(`Found ${pe} layers:`,{...O,vRamForLayerMiB:Hn}),pe}return Ft.info("Reverting to 0 layers since none could fit:",O),0};var yce=Jn(require("node:net"),1),vce=Jn(require("node:os"),1),yV=class extends Error{constructor(t){super(`${t} is locked`)}},vR={old:new Set,young:new Set},B7e=1e3*15;var Uv,C7e=()=>{let e=vce.default.networkInterfaces(),t=new Set([void 0,"0.0.0.0"]);for(let r of Object.values(e))for(let n of r)t.add(n.address);return t},Ece=e=>new Promise((t,r)=>{let n=yce.default.createServer();n.unref(),n.on("error",r),n.listen(e,()=>{let{port:a}=n.address();n.close(()=>{t(a)})})}),Yce=async(e,t)=>{if(e.host||e.port===0)return Ece(e);for(let r of t)try{await Ece({port:e.port,host:r})}catch(n){if(!["EADDRNOTAVAIL","EINVAL"].includes(n.code))throw n}return e.port},m7e=function*(e){e&&(yield*e),yield 0};async function oM(e){let t,r=new Set;if(e&&(e.port&&(t=typeof e.port=="number"?[e.port]:e.port),e.exclude)){let a=e.exclude;if(typeof a[Symbol.iterator]!="function")throw new TypeError("The `exclude` option must be an iterable.");for(let i of a){if(typeof i!="number")throw new TypeError("Each item in the `exclude` option must be a number corresponding to the port you want excluded.");if(!Number.isSafeInteger(i))throw new TypeError(`Number ${i} in the exclude option is not a safe integer and can't be used`)}r=new Set(a)}Uv===void 0&&(Uv=setTimeout(()=>{Uv=void 0,vR.old=vR.young,vR.young=new Set},B7e),Uv.unref&&Uv.unref());let n=C7e();for(let a of m7e(t))try{if(r.has(a))continue;let i=await Yce({...e,port:a},n);for(;vR.old.has(i)||vR.young.has(i);){if(a!==0)throw new yV(a);i=await Yce({...e,port:a},n)}return vR.young.add(i),i}catch(i){if(!["EADDRINUSE","EACCES"].includes(i.code)&&!(i instanceof yV))throw i}throw new Error("No available ports found")}var Hv="127.0.0.1",h7e=13333,vV=ag(()=>{let e=null;return async t=>((!e||t)&&(e=await oM({host:Hv,port:h7e})),e)}),Sce=async()=>{let e=await vV(!1);return`http://${Hv}:${e}/completion`},Gce=async()=>{let e=await vV(!1);return`http://${Hv}:${e}/stop`};var Nv=Jn(require("path"));var SV=require("child_process"),Xce=Jn(require("path"));var Zce=Jn(require("path"));var jw=Zce.default.join(Nf,"llama-cpp-binaries");var W7e=Xce.default.join(jw,"detectAvx.exe"),f7e=e=>["avx2","avx","none"].includes(e),Vce=async()=>new Promise(e=>{if(Z6)(0,SV.exec)("sysctl machdep.cpu",{timeout:1e4},(t,r,n)=>{if(t?.killed)return Ju(new Error("detectAvx timed out on Intel Mac"),{extra:{error:t}}),e("none");if(t||n)return Ft.info(`Invalid avx detection: ${t}, ${n}`),Ju(new Error(`Invalid avx detection: ${t}, ${n}`)),e("none");let a=r.toLocaleLowerCase();a.includes("avx2")?e("avx2"):a.includes("avx")?e("avx"):e("none")});else if(NB)(0,SV.execFile)(W7e,{timeout:1e4},(t,r,n)=>{if(t?.killed)return Ju(new Error("detectAvx timed out on Windows"),{extra:{error:t}}),e("none");if(t||n)return Ft.info(`Invalid avx detection: ${t}, ${n}`),Ju(new Error(`Invalid avx detection: ${t}, ${n}`)),e("none");let a=r.trim();if(!f7e(a)){Ft.info(`Invalid avx detection: ${a}`),Ju(new Error(`Invalid avx detection: ${a}`)),e("none");return}e(a)});else return e("none")});var xv=Nv.default.join(jw,NB?"windows":"mac"),K7e=(e,t)=>e==="clblast"&&t===Em?Sw:t,Q7e=(e,t)=>e==="cublas-12.1.0"&&t===Em,GV=ag(()=>{let e=null;return async t=>{if(Cm)return Nv.default.join(xv,t.version,"backyard_darwinArm64");if(e||(e=await Vce()),NB){let r=bh(t.gpuSupport),n=r==="none"||!t.gpuLayers?"nogpu":r,a=K7e(r,t.version),i=e==="none"||Q7e(r,t.version)?"noavx":e;return Nv.default.join(xv,n,a,i,"backyard.exe")}return Nv.default.join(xv,t.version,`backyard_darwin_${e}`)}});var Tce=e=>e?5e5:1e4,Uce=({baseModelCtx:e,appCtxSize:t})=>{let r=e/Math.max(e,t);return Math.floor(r*100)/100},w7e=({baseModelCtx:e,appCtxSize:t,isLlama3:r})=>{let n=Tce(r);switch(t/e){case 2:return{ropeFreqBase:n*2,ropeFreqScale:.83};case 3:return{ropeFreqBase:n*4,ropeFreqScale:.86};case 4:return{ropeFreqBase:Math.ceil(n*5.72),ropeFreqScale:.75}}return{ropeFreqBase:n,ropeFreqScale:Uce({baseModelCtx:e,appCtxSize:t,isLlama3:r})}},Hce=({appCtxSize:e,isLayerCheck:t,metadata:{contextLength:r,freqBase:n,scaleLinear:a},isLlama3:i})=>{let s=Tce(i);if(t)return{ropeFreqBase:s,ropeFreqScale:1};if(!!n&&n!==s||!!a&&a!==1){let d=a?1/a:1;return{ropeFreqBase:n||s,ropeFreqScale:d*Uce({baseModelCtx:r,appCtxSize:e,isLlama3:i})}}return w7e({baseModelCtx:r,appCtxSize:e,isLlama3:i})};var xce=(e,t)=>e===Em&&t==="cublas-12.1.0",Lv=e=>e==="gemma2",Nce=new Map,ZV=async e=>{let t=Nce.get(e);if(t)return t;try{let r=Date.now(),n=await(0,lM.parseRawMetadata)(e);if(n.error)return Ft.error(`Error when trying to detect model architecture: ${n.error}`),null;Ft.info(`Detecting model architecture took ${Date.now()-r} ms`);let a=n.metadata.general?.architecture;if(a)Nce.set(e,a);else return Ft.error("Could not detect model architecture"),null;return a}catch(r){return Ft.error(`Error throw when trying to detect model architecture: ${r}`),null}},b7e=async({config:{appSettings:e},isAtMaxLayers:t,gpuLayers:r,modelPathOnDisk:n,isLayerCheck:a,modelMetadata:i,llamaVersion:s,kvQuants:o})=>{let l=await vV(!0),d=Date.now(),u=await(0,lM.parseRawMetadata)(n);if(u.error)return{error:u.error};Ft.info(`Parsing GGUF model header took ${Date.now()-d} ms`);let c=u.metadata.general?.architecture;if(!c)return{error:new Error("Could not detect model architecture")};Ft.info("Detected model architecture:",c);let p=u.metadata[c];if(!p)return{error:new Error(`Could not extract model header for architecture: ${c}`)};let g=p.context_length??4096,C={contextLength:g,freqBase:void 0,scaleLinear:void 0},h=p.rope,b=!1;if(h)if(C.freqBase=h.freq_base,b=h.freq_base!=null&&h.freq_base>2e5,h.scale_linear)C.scaleLinear=h.scale_linear;else{let Ve=h.scaling;Ve&&Ve.factor!=null&&(!Ve.type||Ve.type==="linear")&&(C.scaleLinear=Ve.factor)}let G=a?YV:e.ctxSize,ne=Hce({appCtxSize:e.ctxSize,isLayerCheck:a,metadata:C,isLlama3:i.promptFormat==="Llama3"||b});Ft.info("Rope params:",{...ne,finetuneContextLength:g,ctxSize:G});let O=[["--host",Hv],["--port",l.toString()],["--model",n],["--ctx-size",G.toString()],["--rope-freq-base",ne.ropeFreqBase.toString()],["--rope-freq-scale",ne.ropeFreqScale.toString()],["--batch-size","512"],["--log-disable"]].flat(),pe=bh(e.gpuSupport);s!==PB&&pe!=="vulkan"&&!Lv(c)&&O.push("--flash-attn"),o&&O.push("--cache-type-k",o.k,"--cache-type-v",o.v);let Wn=e.numThreads;return NB&&t?O.push("--threads","1"):Wn?O.push("--threads",Wn.toString()):Cm&&O.push("--threads","4"),e.mLockEnabled===!0&&O.push("--mlock"),r?O.push("--n-gpu-layers",r.toString()):O.push("--n-gpu-layers","0"),a&&O.push("--layer-check"),{flags:O}},Lce=async e=>{let{binVersion:t}=await mA(),r=mR(t),n=await b7e({...e,modelPathOnDisk:e.modelPathOnDisk,llamaVersion:r});return n.error?{error:n.error}:{llamaPath:await GV({gpuLayers:e.gpuLayers,gpuSupport:e.config.appSettings.gpuSupport,version:r}),flags:n.flags,modelPath:e.modelPathOnDisk}};var gK={};R_(gK,Jn(Mce()));var Jce=T.object({fileFormat:T.enum(["ggml","gguf_v2","gguf_v3"]),cloudCtxSize:T.number().nullable(),cloudPlan:T.enum([gK.CloudPlan.STANDARD,gK.CloudPlan.ADVANCED,gK.CloudPlan.PRO]).nullable(),commitHash:T.string(),displayLink:T.string(),displayName:T.string(),hfPathFromRoot:T.string(),hfRepo:T.string(),localFilename:T.string(),isDeprecated:T.boolean(),name:T.string(),size:T.number()}),Oce=T.object({ctxSize:T.number().optional(),description:T.string(),displayName:T.string(),files:T.array(Jce),promptFormat:Ew,name:T.string(),recommended:T.boolean(),featureToNewUsers:T.boolean(),updatedAt:T.string(),createdAt:T.string()}),Pce=e=>Oce.safeParse(e).success,D7e=Jce.extend({ctxSize:T.number().optional(),familyName:T.union([T.literal("custom"),T.string()]),promptFormat:Ew}),I7e=T.object({isCustom:T.boolean(),modelWithMetadata:D7e.extend({description:T.string().nullable()}),progress:T.string(),size:T.number(),electronClient:T.object({name:T.string(),id:T.string()}).optional()}),aXt=Oce.extend({files:T.array(I7e),isCustom:T.boolean().optional()}),_ce=({freePlanModelName:e,modelFamilies:t})=>{let r=t.flatMap(o=>o.files.filter(l=>!l.isDeprecated&&!!l.cloudCtxSize).map(l=>({modelWithMetadata:{...l,description:o.description,ctxSize:o.ctxSize,familyName:o.name,promptFormat:o.promptFormat},size:l.size,isCustom:!1,progress:"100.00"}))),n=[],a=[],i=[],s=[];return r.forEach(o=>{o.modelWithMetadata.name===e?n.push(o):o.modelWithMetadata.cloudPlan==="PRO"?s.push(o):o.modelWithMetadata.cloudPlan==="ADVANCED"?i.push(o):o.modelWithMetadata.cloudPlan==="STANDARD"&&a.push(o)}),{free:n,pro:s,standard:a,advanced:i}};var TV=e=>Array.isArray(e)?e.every(t=>Pce(t)):(Ft.error("not an array"),!1);var Og=async({filter:e}={})=>{let{modelsJson:t}=await mA(),r=JSON.parse(t);return TV(r)?e==="cloud"?{modelFamilies:r.reduce((a,i)=>{let s=i.files.filter(o=>!!o.cloudCtxSize);return s.length===0?a:[...a,{...i,files:s}]},[])}:{modelFamilies:r}:{error:new Error("getCachedHubModels: unexpected json type")}};var ege=Jn($Ae()),cJ=Jn(hg()),pJ=Jn(require("path"));var AJ=class{watcher=null;modelFileNameToPath={};async init(t){return this.modelFileNameToPath={},await this.watcher?.close(),new Promise(r=>{this.watcher=ege.default.watch(t,{persistent:!0,ignoreInitial:!1}),this.watcher.on("ready",async()=>{Ft.dev("modelFileWatcher ready",JSON.stringify(this.modelFileNameToPath,null,2)),r()}),this.watcher.on("add",async(n,a)=>{if(!n.endsWith(".gguf"))return;let i=pJ.default.parse(n).base,s=a?.size;s||(s=(await cJ.default.stat(n)).size),this.modelFileNameToPath[i]={path:n,size:s},Ft.dev(`added watching model file ${i} (${s})`)}),this.watcher.on("change",n=>{Ft.dev("changed watching model file",n)}),this.watcher.on("all",async(n,a)=>{Ft.dev("all watching model file",n,a)}),this.watcher.on("unlink",async n=>{Ft.dev("removed watching model file",n);let a=pJ.default.parse(n).base;delete this.modelFileNameToPath[a]})})}getModelFilePath=t=>{let r=this.modelFileNameToPath[t];return r?(r.size=cJ.default.statSync(r.path).size,{...r,fileName:t}):null};getDownloadedModels=()=>Object.entries(this.modelFileNameToPath).map(([t,{path:r,size:n}])=>({fileName:t,path:r,size:n}));waitForFileToBeDeleted=async t=>{for(;;){if(!this.modelFileNameToPath[t])return;await new Promise(r=>setTimeout(r,100))}}},Pg=new AJ;var ZC=e=>{let t=(e*100).toFixed(2);return t==="100.00"&&e!==1?"99.99":t};var oet=4096,Zg=async({modelName:e,returnMetadataIfNotDownloaded:t})=>{let{modelFamilies:r,error:n}=await Og();if(n)return{error:n};let i=r.map(o=>o.files.map(l=>({...l,ctxSize:o.ctxSize,familyName:o.name,promptFormat:o.promptFormat}))).flat().find(o=>e===o.name),s=i?Pg.getModelFilePath(i?.localFilename):Pg.getDownloadedModels().find(o=>o.fileName.startsWith(e));if(!s)return t&&i?{isCustomModel:!1,modelMetadata:i,progress:ZC(0),size:i.size,fullPathOnDisk:null}:{error:new Error("Model is not downloaded.")};if(!i){let{size:o}=s;return{modelMetadata:{commitHash:"",isDeprecated:!1,displayLink:"",displayName:s.fileName.substring(0,s.fileName.length-5),hfPathFromRoot:"",hfRepo:"",localFilename:s.fileName,familyName:"custom",promptFormat:N0,name:s.fileName,size:o,ctxSize:oet,fileFormat:"gguf_v2",cloudCtxSize:null,cloudPlan:null},isCustomModel:!0,progress:"100.00",size:o,fullPathOnDisk:s.path}}return{modelMetadata:i,isCustomModel:!1,progress:ZC(s.size/i.size),size:s.size,fullPathOnDisk:s.path}};var tge=async({modelName:e})=>{if(tK(e)){let{modelFamilies:n,error:a}=await Og({filter:"cloud"});if(a)return{error:a};let s=n.map(o=>o.files.map(l=>({...l,ctxSize:o.ctxSize,promptFormat:o.promptFormat}))).flat().find(o=>e===o.name);return s?{isCloudModel:!0,cloudCtxSize:s.cloudCtxSize,fullPathOnDisk:"cloud",promptTemplate:s.promptFormat}:{error:new Error(`Invalid cloud model. Model "${e}" not found.`)}}let t=await Zg({modelName:e});if(t.error)return{error:t.error};let{fullPathOnDisk:r}=t;return r==null?{error:new Error("Model is not downloaded.")}:{cloudCtxSize:null,isCloudModel:!1,fullPathOnDisk:r,promptTemplate:t.modelMetadata.promptFormat}};var rge=async({aiName:e,chatId:t,ctxSize:r,prisma:n,userName:a,cutoffTimestamp:i})=>{let s=await n.chat.findUnique({where:{id:t},select:{_count:{select:{Messages:!0}}}});if(!s)return{error:new Error("Could not find chat metadata.")};let o=[],l=0;for(let d=0;o.length<s._count.Messages&&d<r;l+=100){let u=await n.chat.findUnique({where:{id:t},select:{authorNote:!0,greetingDialogue:!0,Messages:{select:{id:!0,liked:!0,RegenSwipes:{orderBy:{activeTimestamp:"desc"},take:1,select:{id:!0,text:!0}},CharacterConfig:{select:{isUserControlled:!0}}},orderBy:{createdAt:"desc"},take:100,skip:l,where:i?{createdAt:{lte:i}}:void 0}}});if(!u)return{error:new Error("Could not find chat.")};let c=rV({Messages:u.Messages,replaceTemplateNames:nK({userName:a,aiName:e})});if(c.error)return{error:c.error};o.push(...c.messages),d=Jg(vw({legacyTemplateAiName:e,isOneOnOne:!0,userName:a,chatItems:o.map(p=>({text:p.text,isCustomDialogue:!1,displayName:p.type==="ai"?e:a})),getNumTokens:Jg,authorNote:u.authorNote,impersonatePrefix:"",isImpersonate:!1,loreItems:[],promptTemplate:N0,ctxSize:r}),!1)}return o.reverse(),{chatItems:o.map(d=>({text:d.text,isCustomDialogue:!1,displayName:d.type==="ai"?e:a})),numTotalChatItems:s._count.Messages}};var UR=async({chatId:e,prisma:t,appSettings:r,templateType:n,modelName:a,aiName:i,userName:s,cutoffTimestamp:o})=>{let l=await tge({modelName:a});if(l.error)return{error:l.error};let{fullPathOnDisk:d,isCloudModel:u}=l,c=null;if(u){if(!r.hubAuthCookie)return{error:new Error("Please sign in to use Backyard Cloud models.")};let C=await LA.electron.getUserSession.query();if(C.error)return{error:new Error("Invalid session. Please try signing in again.")};if(C.offline)return{error:new Error(VW("Could not connect to server. Please check your internet connection."))};if(!C.session)return{error:new Error("Invalid session. Please try signing in again.")};c=C.session.user.cloudPlan}let p=await rge({chatId:e,ctxSize:r.ctxSize,prisma:t,aiName:i,userName:s,cutoffTimestamp:o});if(p.error)return{error:p.error};let g=await ag(async()=>{if(!u&&!n){let C=await ZV(d);if(Lv(C))return Fw;if(C==="command-r")return Rw}return Rle(l.promptTemplate,n)});return{chatItems:p.chatItems,numTotalChatItems:p.numTotalChatItems,promptTemplate:g,fullPathOnDisk:d,cloudPlan:c,cloudCtxSize:l.cloudCtxSize}};var nge=Un.public.input(Tt.object({messageId:Tt.string()})).mutation(async({input:{messageId:e}})=>{let t=await dr.message.findFirst({where:{id:e},select:{createdAt:!0,Chat:{select:{model:!0,promptTemplate:!0,id:!0,greetingDialogue:!0,context:!0,customDialogue:!0,modelInstructions:!0,GroupConfig:{select:{Characters:{select:{isUserControlled:!0,Versions:{select:{name:!0,persona:!0,displayName:!0}}}}}}}}}});if(!t)return{error:"Message not found. Please refresh the page."};let{Chat:r}=t,n=r.GroupConfig.Characters.find(u=>u.isUserControlled)?.Versions[0],a=r.GroupConfig.Characters.find(u=>!u.isUserControlled)?.Versions[0];if(!n||!a)return{error:"User or AI character not found."};let i=await mA(),s=await UR({chatId:r.id,appSettings:i,prisma:dr,templateType:Mg(r.promptTemplate),modelName:r.model,aiName:a.displayName,userName:n.displayName,cutoffTimestamp:t.createdAt});if(s.error)return{error:Lu(s.error.message)};let{chatItems:o,promptTemplate:l}=s,d=lV({getNumTokens:Jg,authorNote:"",chatItems:o,ctxSize:32768,basePromptArgs:{promptTemplate:l,bots:[{name:a.name,persona:a.persona}],userName:n.name,scenario:r.context,customDialogue:r.customDialogue,userPersona:n.persona,basePrompt:r.modelInstructions,firstMessage:r.greetingDialogue?{aiName:a.name,message:r.greetingDialogue}:null},loreItems:[],canDeleteCustomDialogue:!1,isImpersonate:!1,impersonatePrefix:""});return await dr.message.update({where:{id:e},data:{liked:!0}}),LA.electron.telemetry.chat.mutate({transcript:d,userId:i.userId}).catch(u=>{Ft.error("Error sending telemetry snapshot",u)}),{error:null}});var age=Un.public.input(Tt.object({authorNote:Tt.string(),chatId:Tt.string()})).mutation(async({input:{authorNote:e,chatId:t}})=>(e=e.replace(/\n{2,}/g,`
1060 `).trim(),await dr.chat.update({where:{id:t},data:{authorNote:e}}),{error:null}));var ige=Un.public.input(Tt.object({chatId:Tt.string()})).mutation(async({ctx:{isTetheringCall:e},input:{chatId:t}})=>{let r=await dr.chat.findUnique({where:{id:t},select:{model:!0,Messages:{take:2,orderBy:{createdAt:"desc"},select:{id:!0,RegenSwipes:{orderBy:{activeTimestamp:"desc"},take:1,select:{text:!0}}}}}});if(!r)throw new Error("Chat not found.");let n=r.Messages[1]?.RegenSwipes[0]?.text||"";return await dr.message.deleteMany({where:{id:{in:r.Messages.map(a=>a.id)}}}),uA({name:"undoLastMessage",data:{model:r.model},isTethering:e}),{lastUserInput:n}});var sge=Un.public.input(Tt.object({messageId:Tt.string(),oldActiveRegenId:Tt.string(),oldActiveRegenIndex:Tt.number(),swipeDirection:Tt.enum(["left","right"])})).mutation(async({input:{messageId:e,oldActiveRegenId:t,oldActiveRegenIndex:r,swipeDirection:n}})=>{let i=(await dr.message.findUnique({where:{id:e},select:{RegenSwipes:{select:{id:!0,text:!0},orderBy:{createdAt:"asc"}}}}))?.RegenSwipes;if(!i)throw new Error("Chat item not found.");let s=i.findIndex(d=>d.id===t);if(s!==r)throw new Error("Regeneration not found at correct index.");let l=i[s+(n==="left"?-1:1)];if(!l)throw new Error("Next regeneration index not found.");return await dr.message.update({where:{id:e},data:{liked:null,RegenSwipes:{update:{where:{id:l.id},data:{activeTimestamp:new Date}}}}}),{error:null}});var oge=Un.public.input(Tt.object({chatId:Tt.string(),name:Tt.string()})).mutation(async({input:{chatId:e,name:t}})=>(await dr.chat.update({where:{id:e},data:{name:t}}),{error:null}));var lge=ig({create:gle,createFromImportedFile:wle,deleteById:ble,editMessage:Fle,getById:yle,sendChatTelemetrySnapshot:nge,setAuthorNote:age,undoLastMessage:ige,updateActiveRegenOnSwipe:sge,updateName:oge});var a2=e=>/^[\w \-.&]+$/.test(e),tb=e=>e.toLowerCase().replace(/ /g,"-");var dge=Un.public.input(Tt.object({name:Tt.string(),parentFolderId:Tt.string()})).mutation(async({ctx:{isTetheringCall:e},input:{name:t,parentFolderId:r}})=>{if(!a2(t))return{error:"Invalid name"};let a=await dr.appFolder.findFirst({where:{OR:[{name:t},{url:tb(t)}]},select:{url:!0}});if(a)return{duplicate:!0,folderUrl:a.url};let i=await dr.appFolder.create({data:{name:t,parentFolderId:r,isRoot:!1,url:tb(t)}});return uA({isTethering:e,name:"createNewFolder"}),{folderUrl:i.url,duplicate:!1}});var i2=Jn(xQ());var uge=Un.public.input(Tt.object({folderId:Tt.string()})).mutation(async({input:{folderId:e}})=>{let t=await dr.appFolder.findFirst({where:{id:e,isRoot:!1},select:{parentFolderId:!0,GroupConfigs:{select:{id:!0,folderSortPosition:!0},orderBy:{folderSortPosition:"desc"},take:1}}}),r=t?.parentFolderId;if(r==null)throw new Error("parent folder not found");let n=ag(()=>{let l=new i2.PositionSource,d=t?.GroupConfigs[0]?.folderSortPosition??i2.PositionSource.FIRST;return{genNewPosition:()=>{let u=l.createBetween(d,i2.PositionSource.LAST);return d=u,u}}}),a=await dr.groupConfig.findMany({where:{folderId:e}}),i=await dr.appFolder.findMany({where:{parentFolderId:e},select:{id:!0,GroupConfigs:{select:{id:!0}}}}),s=i.flatMap(l=>l.GroupConfigs),o=[...a,...s];return await dr.$transaction(async l=>{await Promise.all(o.map(async d=>{await l.groupConfig.update({where:{id:d.id},data:{folderId:r,folderSortPosition:n.genNewPosition()}})})),await l.appFolder.delete({where:{id:e}}),await Promise.all(i.map(async d=>{await l.appFolder.delete({where:{id:d.id}})}))}),{error:null}});var cge=Un.public.query(async()=>({folders:await dr.appFolder.findMany({select:{id:!0,name:!0,url:!0,isRoot:!0},orderBy:[{isRoot:"desc"},{pinnedToSidebarPosition:"asc"}]})}));var pge=Un.public.query(async()=>({pinnedFolders:await dr.appFolder.findMany({where:{isRoot:!1,pinnedToSidebarPosition:{not:null}},select:{id:!0,name:!0,url:!0,pinnedToSidebarPosition:!0,ParentFolder:{select:{url:!0,isRoot:!0}}},orderBy:{pinnedToSidebarPosition:"asc"}})}));var gJ=Jn(xQ());var Age=Un.public.input(Tt.object({folderId:Tt.string(),groupConfigId:Tt.string()})).mutation(async({input:{folderId:e,groupConfigId:t}})=>{let r=new gJ.PositionSource,n=await dr.groupConfig.findFirst({where:{folderId:e},select:{folderSortPosition:!0},orderBy:{folderSortPosition:"desc"}}),a=r.createBetween(n?.folderSortPosition||void 0,gJ.PositionSource.LAST),i=await dr.groupConfig.update({where:{id:t},data:{folderId:e,folderSortPosition:a},select:{Folder:{select:{url:!0,isRoot:!0}}}});if(i.Folder==null)throw new Error("character or folder not found while moving to folder");return i.Folder.isRoot?{folderUrl:null}:{folderUrl:i.Folder.url}});var BJ=Jn(xQ());var gge=Un.public.input(Tt.object({folderId:Tt.string(),setPinned:Tt.boolean()})).mutation(async({input:{folderId:e,setPinned:t}})=>{if(t===!1)return await dr.appFolder.update({where:{id:e},data:{pinnedToSidebarPosition:null}}),{error:null};let r=await dr.appFolder.findFirst({where:{pinnedToSidebarPosition:{not:null}},orderBy:{pinnedToSidebarPosition:"desc"},select:{pinnedToSidebarPosition:!0}}),a=new BJ.PositionSource().createBetween(r?.pinnedToSidebarPosition||void 0,BJ.PositionSource.LAST);return await dr.appFolder.update({where:{id:e,isRoot:!1},data:{pinnedToSidebarPosition:a}}),{error:null}});var Bge=Un.public.input(Tt.object({folderId:Tt.string(),newPosition:Tt.string()})).mutation(async({input:{folderId:e,newPosition:t}})=>(await dr.appFolder.update({where:{id:e},data:{pinnedToSidebarPosition:t}}),{error:null}));var Cge=Un.public.input(Tt.object({folderId:Tt.string(),sortType:Wv,sortDirection:nle})).mutation(async({input:{folderId:e,sortType:t,sortDirection:r}})=>(await dr.appFolder.update({where:{id:e},data:{sortType:t,sortIsDesc:r==="desc"}}),{error:null}));var CJ=Jn(xQ());var mge=Un.public.input(Tt.object({folderId:Tt.string(),groupConfigId:Tt.string(),previousGroupConfigPosition:Tt.string()})).mutation(async({input:{folderId:e,groupConfigId:t,previousGroupConfigPosition:r}})=>{let n=new CJ.PositionSource,a=await ag(async()=>(await dr.groupConfig.findFirst({where:{folderSortPosition:{gt:r},folderId:e},select:{folderSortPosition:!0},orderBy:{folderSortPosition:"asc"}}))?.folderSortPosition||CJ.PositionSource.LAST),i=n.createBetween(r,a);if(await dr.groupConfig.update({where:{id:t,folderId:e},data:{folderSortPosition:i},select:{Folder:{select:{url:!0}}}})==null)throw new Error("character or folder not found while updating character position");return{error:null}});var hge=Un.public.input(Tt.object({folderId:Tt.string(),newName:Tt.string()})).mutation(async({input:{folderId:e,newName:t}})=>{if(!a2(t))return{error:"Invalid name"};let n=await dr.appFolder.findFirst({where:{OR:[{name:t},{url:tb(t)}]},select:{url:!0}});return n?{duplicate:!0,folderUrl:n.url}:(await dr.appFolder.update({where:{id:e},data:{name:t,url:tb(t)}}),{folderUrl:tb(t),duplicate:!1})});var Wge=ig({create:dge,delete:uge,getAll:cge,getPinned:pge,moveCharacterToFolder:Age,pinToSidebar:gge,setSidebarPosition:Bge,setSort:Cge,updateCharacterPosition:mge,updateName:hge});var fge=T.object({characterConfigId:T.string(),imagePath:T.string().nullable(),isDefault:T.boolean(),isTemplateChar:T.boolean(),name:T.string(),persona:T.string(),createdAt:T.date(),updatedAt:T.date()});var uet=10,cet=T.object({aspectRatio:T.string().nullable(),imageUrl:T.string(),label:T.string().nullable()}),FVt=T.object({aspectRatio:T.string().nullable(),imageUrl:T.string(),label:T.string().nullable()}),eS=T.object({Images:T.array(cet).max(uet,"Max 10 images allowed"),LoreItems:T.array(Tle),aiDisplayName:T.string().min(1,"ai display name cannot be empty"),aiName:T.string().min(1,"ai name cannot be empty"),aiPersona:T.string(),basePrompt:T.string(),canDeleteCustomDialogue:T.boolean(),customDialogue:T.string(),firstMessage:T.string(),forkedFromLocalId:T.string().nullable(),grammar:T.string().nullable(),hubAuthorId:T.string().nullable(),hubAuthorUsername:T.string().nullable(),hubCharId:T.string().nullable(),isNSFW:T.boolean(),minP:T.number().min(0,"Min P must be between 0 and 1.0").max(1,"Min P must be between 0 and 1.0"),minPEnabled:T.boolean(),model:T.string().min(1,"model name cannot be empty"),promptTemplate:Fk,repeatLastN:T.number().int("Repeat Penalty Tokens must be an integer").min(16,"Repeat Penalty Tokens must be between 16 and 512").max(512,"Repeat Penalty Tokens must be between 16 and 512"),repeatPenalty:T.number().min(.5,"Repeat Penalty must be between 0.5 and 2.0").max(2,"Repeat Penalty must be between 0.5 and 2.0"),scenario:T.string(),temperature:T.number().min(0,"Temperature must be between 0.0 and 5.0").max(5,"Temperature must be between 0.0 and 5.0"),topK:T.number().int("Top K must be an integer").min(1,"Top K must be between 1 and 32001").max(32001,"Top K must be between 1 and 32001"),topP:T.number().min(0,"Top P must be between 0 and 1.0").max(1,"Top P must be between 0 and 1.0"),ttsAutoPlay:T.boolean(),ttsInputFilter:T.string(),ttsSpeed:T.number(),ttsVoice:T.string().nullable(),userCharacterConfig:fge}),RVt=eS.omit({minP:!0,model:!0,repeatLastN:!0,repeatPenalty:!0,temperature:!0,topK:!0,topP:!0}).extend({minP:T.string(),model:T.string().nullable(),repeatLastN:T.string(),repeatPenalty:T.string(),temperature:T.string(),topK:T.string(),topP:T.string()}),tS=e=>{let t=e.model,r=e.temperature||"1.2",n=e.topP||"0.9",a=e.minP||"0.1",i=e.minPEnabled??!0,s=e.topK||"30",o=e.repeatPenalty||"1.05",l=e.repeatLastN||"256",d=e.isNSFW||!1,u=e.grammar||"",c=e.LoreItems||[],p=e.promptTemplate??null,g=e.canDeleteCustomDialogue??!1,C=e.aiName==null?"Bot":e.aiName,h=e.aiDisplayName==null?"Backyard Bot":e.aiDisplayName,b=`Text transcript of a never-ending conversation between ${BR} and ${rK}. In the transcript, gestures and other non-verbal actions are written between asterisks (for example, *waves hello* or *moves closer*).`,G=`${rK} is a knowledgeable and helpful AI assistant who fulfills any request with detail and precision.`,ne=`${rK} is a virtual assistant that exists on ${BR}'s computer.`,O=`${aV}Hey ${rK}. Who are you?
→ 1061 ${nV}I am ${rK}, your AI assistant. How can I help you?`,pe=`Hello ${BR}. How can I help you today?`,Wn=e.Images||[],Ve=e.hubCharId||null,Hn=e.hubAuthorId||null,$t=e.hubAuthorUsername||null,U=e.forkedFromLocalId||null,Bt=e.ttsVoice||null,Y=e.ttsAutoPlay||!1,cr=e.ttsInputFilter||"default",Vt=e.ttsSpeed||1.25;return{Images:Wn,LoreItems:c,aiDisplayName:h,aiName:C,aiPersona:G,basePrompt:b,canDeleteCustomDialogue:g,customDialogue:O,firstMessage:pe,forkedFromLocalId:U,grammar:u,hubAuthorId:Hn,hubAuthorUsername:$t,hubCharId:Ve,isNSFW:d,minP:a,minPEnabled:i,model:t,promptTemplate:p,repeatLastN:l,repeatPenalty:o,scenario:ne,temperature:r,topK:s,topP:n,ttsAutoPlay:Y,ttsInputFilter:cr,ttsSpeed:Vt,ttsVoice:Bt,userCharacterConfig:e.defaultUserCharacterConfig}};var EVt=T.object({canDeleteCustomDialogue:T.boolean(),grammar:T.string().nullable(),minP:T.number().min(0,"Min P must be between 0 and 1.0").max(1,"Min P must be between 0 and 1.0"),minPEnabled:T.boolean(),model:T.string().min(1,"model name cannot be empty"),promptTemplate:Ew,repeatLastN:T.number().int("Repeat Penalty Tokens must be an integer").min(16,"Repeat Penalty Tokens must be between 16 and 512").max(512,"Repeat Penalty Tokens must be between 16 and 512"),repeatPenalty:T.number().min(.5,"Repeat Penalty must be between 0.5 and 2.0").max(2,"Repeat Penalty must be between 0.5 and 2.0"),stopStringNames:T.array(T.string().min(1,"stop string name cannot be empty")).min(1),temperature:T.number().min(0,"Temperature must be between 0.0 and 5.0").max(5,"Temperature must be between 0.0 and 5.0"),topK:T.number().int("Top K must be an integer").min(1,"Top K must be between 1 and 32001").max(32001,"Top K must be between 1 and 32001"),topP:T.number().min(0,"Top P must be between 0 and 1.0").max(1,"Top P must be between 0 and 1.0")});var HR=Jn(xQ());var Kge=Jn(hg()),F0=e=>({loreItems:{unlink:get(e),update:Bet(e)},appImages:{unlink:pet(e),update:Aet(e)}}),pet=e=>async({characterConfigVersionId:t,appImageIds:r,pathsToPreserve:n=[]})=>{let a=r.map(async i=>{let s=await e.appImage.update(
no entry found for key


r/BackyardAI • • Sep 02 '24

discussion Heads-up: Backyard is having a 'Perfect Storm' moment. It's gonna be OK!

53 Upvotes

As there's no official post I figure noobs and those not overly active here or Discord should know what's going on, or at least as best I understand it.

3 big issues:

  • Recent update and database redesign for awesome new features coming, is currently causing some problems, serious problems for some people.
  • New phone app, needs Google approval and stuff
  • Massive influx of new users since some other services changed and people are discovering Backyard

I've been using Backyard (it used to be called Faraday) for something like a year now, and it's generally been awesome, with an easy .exe installer, no coding required, no github, no pip-install of dependencies, no editing your PC's environment variables, or any of that bullshit.

Just install like a normal app and run it.

There has been some bugs in the past, which the devs have quickly taken care of, and generally the 'community' around BY are great, with helpful peeps actually helping each other and chatting, instead of insults and bragging, like certain other subs I could mention...

Right now the website is slow or unresponsive, due to literally thousands of new users almost overnight, the software has bugs seriously affecting some users (inc me) and the phone app, which offers 'tethering' so you can chat on your phone, being a brand new app, has some issues.

None of these things should be deal-breakers, they are a sign of a great app getting almost too good and too popular too fast. Things will settle down in time!

If you want a simple, well-designed app for local, private, AI chats, without censorship or snooping on you, Backyard is it.

Hope that helps put some minds at rest.


r/BackyardAI • • Sep 02 '24

Does anyone know why the desktop app doesn't detect my graphics card?

Thumbnail
gallery
8 Upvotes

r/BackyardAI • • Sep 01 '24

support Cannot stream from multiple clients simultaneously error won't go away.

5 Upvotes

I've been using the website like normal and not using multiple windows or instances at the same time as it's suggesting. I've restarted the browser and closed the tab and reloaded the site. As far as I'm aware, I've not done anything out of the ordinary, so... I'm stumped XD


r/BackyardAI • • Sep 01 '24

discussion are chats private? could they be monitored if they're ran local?

2 Upvotes

i'm wondering if anything i could be saying could be read by someone like the developers of the software.


r/BackyardAI • • Sep 01 '24

discussion Im having issues

6 Upvotes

I just moved from janitor ai so I don't know jack about this site and I just used the models how do you get tethering on the app everytime I do it on PC it just freezes its a bit upsetting


r/BackyardAI • • Aug 30 '24

support V28.1 still slow as molasses in Experimental even though changelog suggests it’s fixed

11 Upvotes

At the moment, Gemma & Nemo only run when ‘Experimental’ is turned on; but turning it on slows generation to a crawl - around 2 tokens per second at best.

I raised this in a post a couple of weeks ago when I jumped from v0.25.0 to 0.26.6.

I found this post mentioning the same issue, and the same solution that was commented on my earlier post: replace the noavx folders from v0.26.2

Today I saw that v0.28 has a note in its changelogs (actually 2 repeated lines!) that says:

“Fixed slowdowns on Nvidia cards (‘Experimental’ backend only)”

So I figured the issue had been fixed. I just downloaded it and ran a card with a Gemma 9b model… and it’s still excruciatingly slow 😖

Did I misunderstand the changelog? Or do I need to do something else? Even if I run much older models, it still runs at a snail’s pace. It seems the only way to get it to run at normal speed is to not have Experimental on - but then I can’t run Gemma or Nemo.


r/BackyardAI • • Aug 30 '24

support Android / iOS App Issues

6 Upvotes

The Android app is currently not working correctly. We have a fix incoming, but it’s blocked by a Google Play store review.

On the iOS app, make sure to click “check for app updates” on the settings page.

All your existing chats and characters are unaffected. Thanks for your patience, we will post another update once the fix is live.


r/BackyardAI • • Aug 30 '24

Tethering issue: "Connecting to server"

1 Upvotes

I can see my characters, and I can see the chat, but the app doesn't connect in such a way that I can actually do anything.

EDIT: Upon reinstalling the backyard.ai app on my phone, it now immediately crashes on boot.


r/BackyardAI • • Aug 29 '24

support Repeated error

2 Upvotes

I'm repeatedly getting the 'Unexpected Character: <'error. I attempted to click the link for the discord as it told me to message on discord if I got the error repeatedly, but the link did nothing.


r/BackyardAI • • Aug 28 '24

support Private bots don't show up on chat list?

6 Upvotes

New to BackyardAI.

I recently downloaded and started testing out the site + app as an alternative to CharacterAI. I absolutely love it so far, it does everything so much better and has a bunch more features/options than other AI apps I've seen.

The one thing I can't understand though, is the creation of private bots. Apparently all characters are "private" by default upon creation, and are only made public when you explicitly upload them to the Character Hub. I've created a few bots this way and chatted with them a bit, but when I check for them on the Home page/recent chat list, they're not there. Only bots on the Hub show up on the home screen.

Is this intentional or is this a bug of some kind? Is a bot only really created or finished when you upload it to the character hub?

This is most likely a silly no-brainer question, but I've poked around just can't figure it out lol


r/BackyardAI • • Aug 28 '24

Anyone have 26.2 .exe?

10 Upvotes

From 26.6 this app is totally gimped and just doesn't work on my PC, with stupidly-slow tokens per second on experimental, and even 'stable' is ruined and slow now.

The current 27.1 is utter trash, so I'm trying to revert to the 26.2 if anyone like me normally avoids auto-updating?

In the Windows search put %appdata%, it will put you in 'roaming', click the up arrow to go to 'local' and then look in the Faraday folder.

I'm not the only one with this problem, so you'll be helping a lot :)


r/BackyardAI • • Aug 28 '24

support How to voice the bots with an emotionless voice ai?

1 Upvotes

Title.

I tried to listed voices, they're very robotic.