add ollama files. Fix unit tests (finally). TODO: handle static file downloading and screens.

This commit is contained in:
Jordan
2025-02-14 15:23:22 -08:00
parent 68cc052417
commit 081ac367ba
14 changed files with 431 additions and 169 deletions

View File

@ -23,9 +23,8 @@ export type language_matrix = {
[key:string] : language_matrix_entry
}
export class Translator {
constructor(public source : language_t, public defaultTarget : string = "en", private baseUrl = LIBRETRANSLATE_BASE_URL) {
}
export class LanguageServer {
constructor(public baseUrl : string) {}
async fetchLanguages() : Promise<language_matrix> {
let data = {};
@ -52,9 +51,14 @@ export class Translator {
throw new Error(`Can't extract values from data: ${JSON.stringify(data)}`)
}
}
}
export class Translator {
constructor(public source : language_t, public defaultTarget : string = "en", private languageServer : LanguageServer) {
}
async translate(text : string, target : string|undefined = undefined) {
const url = LIBRETRANSLATE_BASE_URL + `/translate`;
const url = this.languageServer.baseUrl + `/translate`;
const res = await fetch(url, {
method: "POST",
body: JSON.stringify({

View File

@ -4,7 +4,7 @@ import _LANGUAGES from "@/assets/languages.min.json"
export const LANG_FLAGS = _LANG_FLAGS
export function longLang(shortLang : string) {
return ((LANG_FLAGS as any)[shortLang] as any)["nameEnglish"] as string
return ((LANG_FLAGS as any)[shortLang] as any)["name"] as string
}
export function lang_a3_a2(a3 : string) {

View File

@ -1,14 +1,15 @@
// conversation.test.ts
import { Translator } from '@/app/i18n/api';
import { LanguageServer, Translator } from '@/app/i18n/api';
import { Conversation, Message, Speaker } from '@/app/lib/conversation';
import { LIBRETRANSLATE_BASE_URL } from '@/constants/api';
import { describe, beforeEach, it, expect, test } from '@jest/globals';
describe('Conversation', () => {
let conversation: Conversation;
beforeEach(() => {
const translator = new Translator("en", "es");
const translator = new Translator("en", "es", new LanguageServer(LIBRETRANSLATE_BASE_URL));
const s1: Speaker = { language: "en", id: "host" };
const s2: Speaker = { id: "guest", language: "es" }
conversation = new Conversation(translator, s1, s2);

View File

@ -20,6 +20,7 @@ describe('Settings', () => {
describe('setHostLanguage', () => {
it('should set the host language in the database', async () => {
const value = 'en';
await settings.db.runAsync("REPLACE INTO settings (host_language) VALUES (?)", "en");
await settings.setHostLanguage(value);
const result = await settings.getHostLanguage();
@ -30,10 +31,7 @@ describe('Settings', () => {
describe('getHostLanguage', () => {
it('should return the host language from the database', async () => {
const value = 'fr';
await settings.db.executeSql(
`INSERT INTO settings (host_language) VALUES (?)`,
[value]
);
await settings.setHostLanguage(value);
const result = await settings.getHostLanguage();
expect(result).toEqual(value);
@ -41,14 +39,14 @@ describe('Settings', () => {
it('should return null if the host language is not set', async () => {
const result = await settings.getHostLanguage();
expect(result).not.toBeNull();
expect(result).toBeNull();
});
});
describe('setLibretranslateBaseUrl', () => {
it('should set the LibreTranslate base URL in the database', async () => {
const value = 'https://example.com';
await settings.setLibetransalteBaseUrl(value);
await settings.setLibretranslateBaseUrl(value);
const result = await settings.getLibretranslateBaseUrl();
expect(result).toEqual(value);
@ -56,20 +54,9 @@ describe('Settings', () => {
});
describe('getLibretranslateBaseUrl', () => {
it('should return the LibreTranslate base URL from the database', async () => {
const value = 'https://another-example.com';
await settings.db.executeSql(
`INSERT INTO settings (libretranslate_base_url) VALUES (?)`,
[value]
);
const result = await settings.getLibretranslateBaseUrl();
expect(result).toEqual(value);
});
it('should return null if the LibreTranslate base URL is not set', async () => {
const result = await settings.getLibretranslateBaseUrl();
expect(result).not.toBeNull();
expect(result).toBeNull();
});
});
});

View File

@ -33,10 +33,8 @@ LIMIT 1`
if (!Settings.KEYS.includes(key)) {
throw new Error(`Invalid setting: '${key}'`)
}
const statement = `REPLACE INTO settings ('${key}')
VALUES (?)`
const args = [value]
await this.db.runAsync(statement, args);
const statement = `REPLACE INTO settings (${key}) VALUES (?)`
await this.db.runAsync(statement, value);
}
async setHostLanguage(value: string) {
@ -47,12 +45,12 @@ VALUES (?)`
return await this.getValue("host_language")
}
async setLibetransalteBaseUrl(value : string) {
async setLibretranslateBaseUrl(value : string) {
await this.setValue("libretranslate_base_url", value)
}
async getLibretranslateBaseUrl() {
await this.getValue("libretranslate_base_url")
return await this.getValue("libretranslate_base_url")
}
}