103 lines
3.5 KiB
TypeScript
103 lines
3.5 KiB
TypeScript
import { Injectable } from '@angular/core';
|
|
import { BehaviorSubject, Observable } from 'rxjs';
|
|
import { SiteStructure, GenerationVersion } from '../core/models/llm';
|
|
|
|
export interface PromptEntry {
|
|
originalPrompt: string;
|
|
refinedPrompt: string | null;
|
|
result: SiteStructure | null;
|
|
timestamp: Date;
|
|
}
|
|
|
|
@Injectable({ providedIn: 'root' })
|
|
export class LlmSessionService {
|
|
private currentPromptSubject = new BehaviorSubject<string>('');
|
|
private currentResultSubject = new BehaviorSubject<SiteStructure | null>(null);
|
|
private historySubject = new BehaviorSubject<PromptEntry[]>([]);
|
|
private generatingSubject = new BehaviorSubject<boolean>(false);
|
|
private errorSubject = new BehaviorSubject<string | null>(null);
|
|
private versionsSubject = new BehaviorSubject<GenerationVersion[]>([]);
|
|
private currentVersionIdSubject = new BehaviorSubject<string | null>(null);
|
|
private loadingVersionsSubject = new BehaviorSubject<boolean>(false);
|
|
|
|
currentPrompt$ = this.currentPromptSubject.asObservable();
|
|
currentResult$ = this.currentResultSubject.asObservable();
|
|
history$ = this.historySubject.asObservable();
|
|
generating$ = this.generatingSubject.asObservable();
|
|
error$ = this.errorSubject.asObservable();
|
|
versions$ = this.versionsSubject.asObservable();
|
|
currentVersionId$ = this.currentVersionIdSubject.asObservable();
|
|
loadingVersions$ = this.loadingVersionsSubject.asObservable();
|
|
|
|
get currentPrompt(): string { return this.currentPromptSubject.value; }
|
|
get currentResult(): SiteStructure | null { return this.currentResultSubject.value; }
|
|
get generating(): boolean { return this.generatingSubject.value; }
|
|
get error(): string | null { return this.errorSubject.value; }
|
|
get versions(): GenerationVersion[] { return this.versionsSubject.value; }
|
|
get currentVersionId(): string | null { return this.currentVersionIdSubject.value; }
|
|
|
|
setPrompt(prompt: string): void {
|
|
this.currentPromptSubject.next(prompt);
|
|
this.errorSubject.next(null);
|
|
}
|
|
|
|
setResult(result: SiteStructure): void {
|
|
this.currentResultSubject.next(result);
|
|
const entry: PromptEntry = {
|
|
originalPrompt: this.currentPromptSubject.value,
|
|
refinedPrompt: null,
|
|
result,
|
|
timestamp: new Date(),
|
|
};
|
|
const history = this.historySubject.value;
|
|
this.historySubject.next([...history, entry]);
|
|
this.generatingSubject.next(false);
|
|
this.errorSubject.next(null);
|
|
}
|
|
|
|
clearResult(): void {
|
|
this.currentResultSubject.next(null);
|
|
}
|
|
|
|
setGenerating(generating: boolean): void {
|
|
this.generatingSubject.next(generating);
|
|
}
|
|
|
|
setError(error: string): void {
|
|
this.errorSubject.next(error);
|
|
this.generatingSubject.next(false);
|
|
}
|
|
|
|
clearError(): void {
|
|
this.errorSubject.next(null);
|
|
}
|
|
|
|
clearHistory(): void {
|
|
this.historySubject.next([]);
|
|
this.currentResultSubject.next(null);
|
|
this.currentPromptSubject.next('');
|
|
this.currentVersionIdSubject.next(null);
|
|
this.errorSubject.next(null);
|
|
}
|
|
|
|
setVersions(versions: GenerationVersion[]): void {
|
|
this.versionsSubject.next(versions);
|
|
this.loadingVersionsSubject.next(false);
|
|
}
|
|
|
|
setLoadingVersions(loading: boolean): void {
|
|
this.loadingVersionsSubject.next(loading);
|
|
}
|
|
|
|
setCurrentVersionId(id: string | null): void {
|
|
this.currentVersionIdSubject.next(id);
|
|
}
|
|
|
|
loadVersionData(structure: SiteStructure, versionId: string): void {
|
|
this.currentResultSubject.next(structure);
|
|
this.currentVersionIdSubject.next(versionId);
|
|
this.generatingSubject.next(false);
|
|
this.errorSubject.next(null);
|
|
}
|
|
}
|