diff --git a/src/lib/Playground/PlaygroundEmbedding.svelte b/src/lib/Playground/PlaygroundEmbedding.svelte
index bc548d2e..1158d976 100644
--- a/src/lib/Playground/PlaygroundEmbedding.svelte
+++ b/src/lib/Playground/PlaygroundEmbedding.svelte
@@ -8,6 +8,7 @@
let query = "";
let model = "MiniLM";
+ let customEmbeddingUrl = "";
let data:string[] = [];
let dataresult:[string, number][] = [];
let running = false;
@@ -15,7 +16,7 @@
const run = async () => {
if(running) return;
running = true;
- const processer = new HypaProcesser(model as any);
+ const processer = new HypaProcesser(model as any, customEmbeddingUrl);
await processer.addText(data);
console.log(processer.vectors)
dataresult = await processer.similaritySearchScored(query);
@@ -29,8 +30,14 @@
MiniLM L6 v2
Nomic Embed Text v1.5
+ Custom (OpenAI-compatible)
+{#if model === "custom"}
+ Custom Server URL
+
+{/if}
+
Query
diff --git a/src/ts/process/memory/hypamemory.ts b/src/ts/process/memory/hypamemory.ts
index 7de36eb8..90282e14 100644
--- a/src/ts/process/memory/hypamemory.ts
+++ b/src/ts/process/memory/hypamemory.ts
@@ -1,20 +1,24 @@
import localforage from "localforage";
import { globalFetch } from "src/ts/storage/globalApi";
import { runEmbedding } from "../transformers";
+import { alertError } from "src/ts/alert";
+import { appendLastPath } from "src/ts/util";
export class HypaProcesser{
oaikey:string
vectors:memoryVector[]
forage:LocalForage
- model:'ada'|'MiniLM'|'nomic'
+ model:'ada'|'MiniLM'|'nomic'|'custom'
+ customEmbeddingUrl:string
- constructor(model:'ada'|'MiniLM'|'nomic'){
+ constructor(model:'ada'|'MiniLM'|'nomic'|'custom',customEmbeddingUrl?:string){
this.forage = localforage.createInstance({
name: "hypaVector"
})
this.vectors = []
this.model = model
+ this.customEmbeddingUrl = customEmbeddingUrl
}
async embedDocuments(texts: string[]): Promise {
@@ -40,15 +44,32 @@ export class HypaProcesser{
let results:Float32Array[] = await runEmbedding(inputs, this.model === 'nomic' ? 'nomic-ai/nomic-embed-text-v1.5' : 'Xenova/all-MiniLM-L6-v2')
return results
}
- const gf = await globalFetch("https://api.openai.com/v1/embeddings", {
- headers: {
- "Authorization": "Bearer " + this.oaikey
- },
- body: {
- "input": input,
- "model": "text-embedding-ada-002"
+ let gf = null;
+ if(this.model === 'custom'){
+ if(!this.customEmbeddingUrl){
+ alertError('Custom model requires a Custom Server URL')
+ return [0]
}
- })
+ const {customEmbeddingUrl} = this
+ const replaceUrl = customEmbeddingUrl.endsWith('/embeddings')?customEmbeddingUrl:appendLastPath(customEmbeddingUrl,'embeddings')
+
+ gf = await globalFetch(replaceUrl.toString(), {
+ body:{
+ "input": input
+ },
+ })
+ }
+ if(this.model === 'ada'){
+ gf = await globalFetch("https://api.openai.com/v1/embeddings", {
+ headers: {
+ "Authorization": "Bearer " + this.oaikey
+ },
+ body: {
+ "input": input,
+ "model": "text-embedding-ada-002"
+ }
+ })
+ }
const data = gf.data
diff --git a/src/ts/util.ts b/src/ts/util.ts
index c93d63f2..8c74681c 100644
--- a/src/ts/util.ts
+++ b/src/ts/util.ts
@@ -492,4 +492,34 @@ export function trimUntilPunctuation(s:string){
result = result.slice(0, -1)
}
return result
+}
+
+/**
+ * Appends the given last path to the provided URL.
+ *
+ * @param {string} url - The base URL to which the last path will be appended.
+ * @param {string} lastPath - The path to be appended to the URL.
+ * @returns {string} The modified URL with the last path appended.
+ *
+ * @example
+ * appendLastPath("https://github.com/kwaroran/RisuAI","/commits/main")
+ * return 'https://github.com/kwaroran/RisuAI/commits/main'
+ *
+ * @example
+ * appendLastPath("https://github.com/kwaroran/RisuAI/","/commits/main")
+ * return 'https://github.com/kwaroran/RisuAI/commits/main
+ *
+ * @example
+ * appendLastPath("http://127.0.0.1:7997","embeddings")
+ * return 'http://127.0.0.1:7997/embeddings'
+ */
+export function appendLastPath(url, lastPath) {
+ // Remove trailing slash from url if exists
+ url = url.replace(/\/$/, '');
+
+ // Remove leading slash from lastPath if exists
+ lastPath = lastPath.replace(/^\//, '');
+
+ // Concat the url and lastPath
+ return url + '/' + lastPath;
}
\ No newline at end of file