generate site using llm prompt
This commit is contained in:
102
frontend/src/app/llm-workspace/llm-session.service.ts
Normal file
102
frontend/src/app/llm-workspace/llm-session.service.ts
Normal file
@@ -0,0 +1,102 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user