mirror of
https://github.com/khoj-ai/khoj.git
synced 2024-11-23 23:48:56 +01:00
Migrate all existing pages except login to the new spring ui
This commit is contained in:
parent
f835e330b8
commit
c61b289bd1
1 changed files with 29 additions and 130 deletions
|
@ -1,27 +1,16 @@
|
||||||
# System Packages
|
# System Packages
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
from typing import Optional
|
|
||||||
|
|
||||||
from fastapi import APIRouter, Request
|
from fastapi import APIRouter, Request
|
||||||
from fastapi.responses import FileResponse, HTMLResponse, RedirectResponse
|
from fastapi.responses import FileResponse, HTMLResponse, RedirectResponse
|
||||||
from fastapi.templating import Jinja2Templates
|
from fastapi.templating import Jinja2Templates
|
||||||
from starlette.authentication import requires
|
from starlette.authentication import requires
|
||||||
|
|
||||||
from khoj.database.adapters import (
|
from khoj.database.adapters import get_user_github_config
|
||||||
AgentAdapters,
|
|
||||||
PublicConversationAdapters,
|
|
||||||
get_user_github_config,
|
|
||||||
get_user_notion_config,
|
|
||||||
)
|
|
||||||
from khoj.database.models import KhojUser
|
|
||||||
from khoj.routers.helpers import get_next_url, get_user_config
|
from khoj.routers.helpers import get_next_url, get_user_config
|
||||||
from khoj.utils import constants, state
|
from khoj.utils import constants
|
||||||
from khoj.utils.rawconfig import (
|
from khoj.utils.rawconfig import GithubContentConfig, GithubRepoConfig
|
||||||
GithubContentConfig,
|
|
||||||
GithubRepoConfig,
|
|
||||||
NotionContentConfig,
|
|
||||||
)
|
|
||||||
|
|
||||||
# Initialize Router
|
# Initialize Router
|
||||||
web_client = APIRouter()
|
web_client = APIRouter()
|
||||||
|
@ -30,39 +19,36 @@ templates = Jinja2Templates([constants.web_directory, constants.next_js_director
|
||||||
|
|
||||||
# Create Routes
|
# Create Routes
|
||||||
@web_client.get("/", response_class=FileResponse)
|
@web_client.get("/", response_class=FileResponse)
|
||||||
@requires(["authenticated"], redirect="login_page")
|
|
||||||
def index(request: Request):
|
def index(request: Request):
|
||||||
user = request.user.object
|
return templates.TemplateResponse("index.html", context={"request": request})
|
||||||
user_config = get_user_config(user, request)
|
|
||||||
|
|
||||||
return templates.TemplateResponse("chat.html", context=user_config)
|
|
||||||
|
|
||||||
|
|
||||||
@web_client.post("/", response_class=FileResponse)
|
@web_client.post("/", response_class=FileResponse)
|
||||||
@requires(["authenticated"], redirect="login_page")
|
@requires(["authenticated"], redirect="login_page")
|
||||||
def index_post(request: Request):
|
def index_post(request: Request):
|
||||||
user = request.user.object
|
return templates.TemplateResponse("index.html", context={"request": request})
|
||||||
user_config = get_user_config(user, request)
|
|
||||||
|
|
||||||
return templates.TemplateResponse("chat.html", context=user_config)
|
|
||||||
|
|
||||||
|
|
||||||
@web_client.get("/search", response_class=FileResponse)
|
@web_client.get("/search", response_class=FileResponse)
|
||||||
@requires(["authenticated"], redirect="login_page")
|
@requires(["authenticated"], redirect="login_page")
|
||||||
def search_page(request: Request):
|
def search_page(request: Request):
|
||||||
user = request.user.object
|
return templates.TemplateResponse(
|
||||||
user_config = get_user_config(user, request)
|
"search/index.html",
|
||||||
|
context={
|
||||||
return templates.TemplateResponse("search.html", context=user_config)
|
"request": request,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@web_client.get("/chat", response_class=FileResponse)
|
@web_client.get("/chat", response_class=FileResponse)
|
||||||
@requires(["authenticated"], redirect="login_page")
|
@requires(["authenticated"], redirect="login_page")
|
||||||
def chat_page(request: Request):
|
def chat_page(request: Request):
|
||||||
user = request.user.object
|
return templates.TemplateResponse(
|
||||||
user_config = get_user_config(user, request)
|
"chat/index.html",
|
||||||
|
context={
|
||||||
return templates.TemplateResponse("chat.html", context=user_config)
|
"request": request,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
@web_client.get("/experimental", response_class=FileResponse)
|
@web_client.get("/experimental", response_class=FileResponse)
|
||||||
|
@ -113,38 +99,10 @@ def agents_page(request: Request):
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@web_client.get("/agent/{agent_slug}", response_class=HTMLResponse)
|
|
||||||
def agent_page(request: Request, agent_slug: str):
|
|
||||||
user: KhojUser = request.user.object if request.user.is_authenticated else None
|
|
||||||
user_config = get_user_config(user, request)
|
|
||||||
agent = AgentAdapters.get_agent_by_slug(agent_slug)
|
|
||||||
|
|
||||||
if agent == None:
|
|
||||||
user_config["has_documents"] = False
|
|
||||||
return templates.TemplateResponse("404.html", context=user_config)
|
|
||||||
|
|
||||||
user_config["agent"] = {
|
|
||||||
"slug": agent.slug,
|
|
||||||
"avatar": agent.avatar,
|
|
||||||
"name": agent.name,
|
|
||||||
"personality": agent.personality,
|
|
||||||
"public": agent.public,
|
|
||||||
"creator": agent.creator.username if agent.creator else None,
|
|
||||||
"managed_by_admin": agent.managed_by_admin,
|
|
||||||
"chat_model": agent.chat_model.chat_model,
|
|
||||||
"creator_not_self": agent.creator != user,
|
|
||||||
}
|
|
||||||
|
|
||||||
return templates.TemplateResponse("agent.html", context=user_config)
|
|
||||||
|
|
||||||
|
|
||||||
@web_client.get("/settings", response_class=HTMLResponse)
|
@web_client.get("/settings", response_class=HTMLResponse)
|
||||||
@requires(["authenticated"], redirect="login_page")
|
@requires(["authenticated"], redirect="login_page")
|
||||||
def config_page(request: Request):
|
def config_page(request: Request):
|
||||||
user: KhojUser = request.user.object
|
return templates.TemplateResponse("settings/index.html", context={"request": request})
|
||||||
user_config = get_user_config(user, request, is_detailed=True)
|
|
||||||
|
|
||||||
return templates.TemplateResponse("settings.html", context=user_config)
|
|
||||||
|
|
||||||
|
|
||||||
@web_client.get("/settings/content/github", response_class=HTMLResponse)
|
@web_client.get("/settings/content/github", response_class=HTMLResponse)
|
||||||
|
@ -177,82 +135,23 @@ def github_config_page(request: Request):
|
||||||
return templates.TemplateResponse("content_source_github_input.html", context=user_config)
|
return templates.TemplateResponse("content_source_github_input.html", context=user_config)
|
||||||
|
|
||||||
|
|
||||||
@web_client.get("/settings/content/notion", response_class=HTMLResponse)
|
|
||||||
@requires(["authenticated"], redirect="login_page")
|
|
||||||
def notion_config_page(request: Request):
|
|
||||||
user = request.user.object
|
|
||||||
user_config = get_user_config(user, request)
|
|
||||||
|
|
||||||
current_notion_config = get_user_notion_config(user)
|
|
||||||
token = current_notion_config.token if current_notion_config else ""
|
|
||||||
current_config = NotionContentConfig(token=token)
|
|
||||||
current_config = json.loads(current_config.model_dump_json())
|
|
||||||
|
|
||||||
user_config["current_config"] = current_config
|
|
||||||
return templates.TemplateResponse("content_source_notion_input.html", context=user_config)
|
|
||||||
|
|
||||||
|
|
||||||
@web_client.get("/settings/content/computer", response_class=HTMLResponse)
|
|
||||||
@requires(["authenticated"], redirect="login_page")
|
|
||||||
def computer_config_page(request: Request):
|
|
||||||
user = request.user.object if request.user.is_authenticated else None
|
|
||||||
user_config = get_user_config(user, request)
|
|
||||||
|
|
||||||
return templates.TemplateResponse("content_source_computer_input.html", context=user_config)
|
|
||||||
|
|
||||||
|
|
||||||
@web_client.get("/share/chat/{public_conversation_slug}", response_class=HTMLResponse)
|
@web_client.get("/share/chat/{public_conversation_slug}", response_class=HTMLResponse)
|
||||||
def view_public_conversation(request: Request):
|
def view_public_conversation(request: Request):
|
||||||
public_conversation_slug = request.path_params.get("public_conversation_slug")
|
return templates.TemplateResponse(
|
||||||
public_conversation = PublicConversationAdapters.get_public_conversation_by_slug(public_conversation_slug)
|
"share/chat/index.html",
|
||||||
if not public_conversation:
|
context={
|
||||||
return templates.TemplateResponse(
|
"request": request,
|
||||||
"404.html",
|
},
|
||||||
context={
|
|
||||||
"request": request,
|
|
||||||
"khoj_version": state.khoj_version,
|
|
||||||
},
|
|
||||||
)
|
|
||||||
user = request.user.object if request.user.is_authenticated else None
|
|
||||||
user_config = get_user_config(user, request)
|
|
||||||
user_config["public_conversation_slug"] = public_conversation_slug
|
|
||||||
user_config["google_client_id"] = os.environ.get("GOOGLE_CLIENT_ID")
|
|
||||||
|
|
||||||
all_agents = AgentAdapters.get_all_accessible_agents(request.user.object if request.user.is_authenticated else None)
|
|
||||||
|
|
||||||
# Filter out the current agent
|
|
||||||
all_agents = [agent for agent in all_agents if agent != public_conversation.agent]
|
|
||||||
agents_packet = []
|
|
||||||
for agent in all_agents:
|
|
||||||
agents_packet.append(
|
|
||||||
{
|
|
||||||
"slug": agent.slug,
|
|
||||||
"avatar": agent.avatar,
|
|
||||||
"name": agent.name,
|
|
||||||
}
|
|
||||||
)
|
|
||||||
user_config["agents"] = agents_packet
|
|
||||||
|
|
||||||
redirect_uri = str(request.app.url_path_for("auth"))
|
|
||||||
next_url = str(
|
|
||||||
request.app.url_path_for("view_public_conversation", public_conversation_slug=public_conversation_slug)
|
|
||||||
)
|
)
|
||||||
user_config["redirect_uri"] = f"{redirect_uri}?next={next_url}"
|
|
||||||
|
|
||||||
return templates.TemplateResponse("public_conversation.html", context=user_config)
|
|
||||||
|
|
||||||
|
|
||||||
@web_client.get("/automations", response_class=HTMLResponse)
|
@web_client.get("/automations", response_class=HTMLResponse)
|
||||||
def automations_config_page(
|
def automations_config_page(
|
||||||
request: Request,
|
request: Request,
|
||||||
subject: Optional[str] = None,
|
|
||||||
crontime: Optional[str] = None,
|
|
||||||
queryToRun: Optional[str] = None,
|
|
||||||
):
|
):
|
||||||
user = request.user.object if request.user.is_authenticated else None
|
return templates.TemplateResponse(
|
||||||
user_config = get_user_config(user, request)
|
"automations/index.html",
|
||||||
user_config["subject"] = subject if subject else ""
|
context={
|
||||||
user_config["crontime"] = crontime if crontime else ""
|
"request": request,
|
||||||
user_config["queryToRun"] = queryToRun if queryToRun else ""
|
},
|
||||||
|
)
|
||||||
return templates.TemplateResponse("config_automation.html", context=user_config)
|
|
||||||
|
|
Loading…
Reference in a new issue