@difizen/magent-au
Version:
140 lines (117 loc) • 2.9 kB
text/typescript
import { inject, prop, transient } from '@difizen/mana-app';
import type { LLMProviderMeta } from './protocol.js';
import { LLMProviderOption } from './protocol.js';
import { LLMModelOption, type LLMMeta } from './protocol.js';
export class LLMProvider implements LLMProviderMeta {
id: string;
nickname: string;
model_name: string[] = [];
get name(): string {
return this.nickname;
}
set name(v: string) {
this.nickname = v;
}
get models(): string[] {
return this.model_name;
}
set models(v: string[]) {
this.models = v;
}
temperature: number;
protected configStr: string;
constructor( meta: LLMProviderMeta) {
this.id = meta.id;
this.nickname = meta.nickname;
this.model_name = meta.model_name;
this.temperature = meta.temperature;
}
toSingleMeta = (name?: string): LLMMeta | undefined => {
if (!name) {
if (this.models.length === 0) {
const meta = this.toMeta();
return { ...meta, model_name: [] };
}
return undefined;
}
if (!this.models.includes(name)) {
return undefined;
}
const meta = this.toMeta();
return { ...meta, model_name: [name] };
};
toMeta = (): LLMProviderMeta => {
const meta: LLMProviderMeta = {
id: this.id,
nickname: this.nickname,
model_name: this.model_name,
temperature: this.temperature,
};
return meta;
};
toSingleMetas = () => {
if (this.models.length === 0) {
return [this.toSingleMeta()];
}
return this.models.map(this.toSingleMeta);
};
}
export class LLMModel implements LLMMeta {
id: string;
nickname: string;
model_name: [string] | [];
get name(): string {
return this.nickname;
}
set name(v: string) {
this.nickname = v;
}
get models(): string[] {
return this.model_name;
}
set models(v: string[]) {
this.models = v;
}
temperature: number;
protected configStr: string;
constructor( meta: LLMMeta) {
this.id = meta.id;
this.nickname = meta.nickname;
this.model_name = meta.model_name;
this.updateMeta(meta);
}
updateMeta = (meta?: LLMMeta) => {
if (!meta) {
return;
}
if (this.id !== meta.id) {
this.id = meta.id;
}
if (this.nickname !== meta.nickname) {
this.nickname = meta.nickname;
}
if (this.temperature !== meta.temperature) {
this.temperature = meta.temperature;
}
if (this.model_name.join(',') !== meta.model_name.join(',')) {
this.model_name = meta.model_name;
}
};
toMeta = (): LLMMeta => {
const meta: LLMMeta = {
id: this.id,
nickname: this.nickname,
model_name: this.model_name,
temperature: this.temperature,
};
return meta;
};
}