gemini-realtime-dots / src /lib /store-logger.ts
Trudy's picture
adding proxy running local
854a551
/**
* Copyright 2024 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { create } from "zustand";
import { StreamingLog } from "../multimodal-live-types";
import { mockLogs } from "../components/logger/mock-logs";
interface StoreLoggerState {
maxLogs: number;
logs: StreamingLog[];
log: (streamingLog: StreamingLog) => void;
clearLogs: () => void;
}
export const useLoggerStore = create<StoreLoggerState>((set, get) => ({
maxLogs: 500,
logs: [], //mockLogs,
log: ({ date, type, message }: StreamingLog) => {
set((state) => {
const prevLog = state.logs.at(-1);
if (prevLog && prevLog.type === type && prevLog.message === message) {
return {
logs: [
...state.logs.slice(0, -1),
{
date,
type,
message,
count: prevLog.count ? prevLog.count + 1 : 1,
} as StreamingLog,
],
};
}
return {
logs: [
...state.logs.slice(-(get().maxLogs - 1)),
{
date,
type,
message,
} as StreamingLog,
],
};
});
},
clearLogs: () => {
console.log("clear log");
set({ logs: [] });
},
setMaxLogs: (n: number) => set({ maxLogs: n }),
}));