mirror of
https://github.com/BerriAI/litellm.git
synced 2026-09-23 00:41:40 +00:00
82 lines
1.8 KiB
TypeScript
82 lines
1.8 KiB
TypeScript
export class LanguageModelTextPart {
|
|
constructor(readonly value: string) {}
|
|
}
|
|
|
|
export class LanguageModelToolCallPart {
|
|
constructor(
|
|
readonly callId: string,
|
|
readonly name: string,
|
|
readonly input: object,
|
|
) {}
|
|
}
|
|
|
|
export const LanguageModelChatToolMode = { Auto: 1, Required: 2 } as const;
|
|
|
|
type Listener<T> = (value: T) => void;
|
|
|
|
interface Subscription {
|
|
dispose(): void;
|
|
}
|
|
|
|
export class EventEmitter<T> {
|
|
private readonly listeners: Listener<T>[] = [];
|
|
|
|
readonly event = (listener: Listener<T>): Subscription => {
|
|
this.listeners.push(listener);
|
|
return {
|
|
dispose: () => {
|
|
const index = this.listeners.indexOf(listener);
|
|
if (index >= 0) {
|
|
this.listeners.splice(index, 1);
|
|
}
|
|
},
|
|
};
|
|
};
|
|
|
|
fire(value: T): void {
|
|
[...this.listeners].forEach((listener) => listener(value));
|
|
}
|
|
|
|
dispose(): void {
|
|
this.listeners.splice(0);
|
|
}
|
|
}
|
|
|
|
export interface MockCancellationToken {
|
|
readonly isCancellationRequested: boolean;
|
|
onCancellationRequested(listener: Listener<void>): Subscription;
|
|
}
|
|
|
|
export class CancellationTokenSource {
|
|
private readonly emitter = new EventEmitter<void>();
|
|
private cancelled = false;
|
|
private disposed = 0;
|
|
readonly token: MockCancellationToken;
|
|
|
|
constructor() {
|
|
const source = this;
|
|
this.token = {
|
|
get isCancellationRequested(): boolean {
|
|
return source.cancelled;
|
|
},
|
|
onCancellationRequested: (listener) => {
|
|
const subscription = source.emitter.event(listener);
|
|
return {
|
|
dispose: () => {
|
|
source.disposed += 1;
|
|
subscription.dispose();
|
|
},
|
|
};
|
|
},
|
|
};
|
|
}
|
|
|
|
get disposedListeners(): number {
|
|
return this.disposed;
|
|
}
|
|
|
|
cancel(): void {
|
|
this.cancelled = true;
|
|
this.emitter.fire();
|
|
}
|
|
}
|