Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
713e9ad
feat(*): google integration flow
Ayush8923 Mar 31, 2026
06acfdc
feat(*): added the logout api endpoint
Ayush8923 Mar 31, 2026
b2ef783
fix(*): align the bottom action items tab
Ayush8923 Mar 31, 2026
3fbc5d3
fix(*): UI updates and users flow
Ayush8923 Apr 1, 2026
a236f2d
fix(*): small updates
Ayush8923 Apr 1, 2026
7e45d41
fix(*): some cases handling & UI updates
Ayush8923 Apr 2, 2026
e57c2e4
fix(*): some edge cases handled
Ayush8923 Apr 2, 2026
0e4d1dc
fix(*): authentication handle in the knowledge base
Ayush8923 Apr 2, 2026
bd1e94f
Merge branch 'feat/admin-flow' of https://github.com/ProjectTech4DevA…
Ayush8923 Apr 2, 2026
1b6598b
Merge branch 'feat/admin-flow' of https://github.com/ProjectTech4DevA…
Ayush8923 Apr 2, 2026
525f850
fix(*): remove the js comment
Ayush8923 Apr 2, 2026
8a98eeb
Merge branch 'feat/admin-flow' of https://github.com/ProjectTech4DevA…
Ayush8923 Apr 3, 2026
32826e2
fix(*): some apikey intilization
Ayush8923 Apr 3, 2026
b6d59f8
fix(*): some of the UI updates
Ayush8923 Apr 3, 2026
3301f9d
fix(*): update the api response data
Ayush8923 Apr 4, 2026
9e14e58
fix(*): cleanups & handling refresh token
Ayush8923 Apr 5, 2026
be27625
fix(*): update the default setting route
Ayush8923 Apr 5, 2026
9959073
Merge branch 'feat/admin-flow' into feat/google-integration
Ayush8923 Apr 6, 2026
4a0e744
Merge branch 'feat/admin-flow' into feat/google-integration
Ayush8923 Apr 7, 2026
275fcfc
fix(*): centralize the local storage key and clear the local storage …
Ayush8923 Apr 7, 2026
adb54ec
Merge branch 'feat/admin-flow' of https://github.com/ProjectTech4DevA…
Ayush8923 Apr 8, 2026
05bd0d3
fix(*): UI updates
Ayush8923 Apr 8, 2026
e0c4783
Merge branch 'feat/admin-flow' into feat/google-integration
Ayush8923 Apr 8, 2026
06b672b
cleanups(*): stt and tts flow
Ayush8923 Apr 8, 2026
f985a1e
fix(*): few edge cases handles
Ayush8923 Apr 8, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .env.example
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
BACKEND_URL=http://localhost:8000
BACKEND_URL=http://localhost:8000
NEXT_PUBLIC_GOOGLE_CLIENT_ID=your-google-client-id.apps.googleusercontent.com
28 changes: 9 additions & 19 deletions app/(main)/configurations/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,8 @@ export default function ConfigLibraryPage() {
Record<string, number>
>({});
const { sidebarCollapsed } = useApp();
const { activeKey } = useAuth();
const apiKey = activeKey?.key;
const { activeKey, isAuthenticated } = useAuth();
const apiKey = activeKey?.key ?? "";
const [searchInput, setSearchInput] = useState("");
const [debouncedQuery, setDebouncedQuery] = useState("");
const [columnCount, setColumnCount] = useState(3);
Expand Down Expand Up @@ -100,11 +100,11 @@ export default function ConfigLibraryPage() {

useEffect(() => {
const fetchEvaluationCounts = async () => {
if (!activeKey) return;
if (!isAuthenticated) return;
try {
const data = await apiFetch<EvalJob[] | { data: EvalJob[] }>(
"/api/evaluations",
activeKey.key,
apiKey,
);
const jobs: EvalJob[] = Array.isArray(data) ? data : data.data || [];
const counts: Record<string, number> = {};
Expand All @@ -129,7 +129,7 @@ export default function ConfigLibraryPage() {
await existing;
return;
}
if (!apiKey) return;
if (!isAuthenticated) return;

const loadPromise = (async () => {
const res = await apiFetch<{
Expand All @@ -144,15 +144,15 @@ export default function ConfigLibraryPage() {
pendingVersionLoads.set(configId, loadPromise);
await loadPromise;
},
[apiKey],
[apiKey, isAuthenticated],
);

const loadSingleVersion = useCallback(
async (configId: string, version: number): Promise<SavedConfig | null> => {
const key = `${configId}:${version}`;
const existing = pendingSingleVersionLoads.get(key);
if (existing) return existing;
if (!apiKey) return null;
if (!isAuthenticated) return null;

const configPublic =
configs.find((c) => c.id === configId) ??
Expand All @@ -179,7 +179,7 @@ export default function ConfigLibraryPage() {
pendingSingleVersionLoads.set(key, loadPromise);
return loadPromise;
},
[apiKey, configs],
[apiKey, configs, isAuthenticated],
);

const handleCreateNew = () => {
Expand Down Expand Up @@ -277,17 +277,7 @@ export default function ConfigLibraryPage() {
) : error ? (
<div className="rounded-lg p-6 text-center bg-[#fef2f2] border border-[#fecaca]">
<WarningTriangleIcon className="w-12 h-12 mx-auto mb-3 text-[#dc2626]" />
<p className="text-sm font-medium text-[#dc2626]">{error}</p>
<button
onClick={() => router.push("/keystore")}
className="mt-4 px-4 py-2 rounded-md text-sm font-medium transition-colors"
style={{
backgroundColor: colors.accent.primary,
color: colors.bg.primary,
}}
>
Go to Keystore
</button>
<p className="text-sm font-medium text-status-error">{error}</p>
</div>
) : configs.length === 0 ? (
<div
Expand Down
8 changes: 4 additions & 4 deletions app/(main)/configurations/prompt-editor/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ function PromptEditorContent() {
const toast = useToast();
const searchParams = useSearchParams();
const { sidebarCollapsed } = useApp();
const { activeKey } = useAuth();
const { activeKey, isAuthenticated } = useAuth();
const urlConfigId = searchParams.get("config");
const urlVersion = searchParams.get("version");
const showHistory = searchParams.get("history") === "true";
Expand Down Expand Up @@ -253,9 +253,9 @@ function PromptEditorContent() {
return;
}

const apiKey = activeKey?.key;
if (!apiKey) {
toast.error("No API key found. Please add an API key in the Keystore.");
const apiKey = activeKey?.key ?? "";
if (!isAuthenticated) {
toast.error("Please log in to save configurations.");
return;
}

Expand Down
Loading
Loading