AutoRAG_llama3_groq / phi /api /workspace.py
AmmarFahmy
adding all files
105b369
from typing import List, Optional, Dict, Union
from httpx import Response
from phi.api.api import api, invalid_response
from phi.api.routes import ApiRoutes
from phi.api.schemas.user import UserSchema
from phi.api.schemas.workspace import (
WorkspaceSchema,
WorkspaceCreate,
WorkspaceUpdate,
WorkspaceDelete,
WorkspaceEvent,
UpdatePrimaryWorkspace,
)
from phi.cli.settings import phi_cli_settings
from phi.utils.log import logger
def get_primary_workspace(user: UserSchema) -> Optional[WorkspaceSchema]:
if not phi_cli_settings.api_enabled:
return None
logger.debug("--o-o-- Get primary workspace")
with api.AuthenticatedClient() as api_client:
try:
r: Response = api_client.post(
ApiRoutes.WORKSPACE_READ_PRIMARY, json=user.model_dump(include={"id_user", "email"})
)
if invalid_response(r):
return None
response_json: Union[Dict, List] = r.json()
if response_json is None:
return None
primary_workspace: WorkspaceSchema = WorkspaceSchema.model_validate(response_json)
if primary_workspace is not None:
return primary_workspace
except Exception as e:
logger.debug(f"Could not get primary workspace: {e}")
return None
def get_available_workspaces(user: UserSchema) -> Optional[List[WorkspaceSchema]]:
if not phi_cli_settings.api_enabled:
return None
logger.debug("--o-o-- Get available workspaces")
with api.AuthenticatedClient() as api_client:
try:
r: Response = api_client.post(
ApiRoutes.WORKSPACE_READ_AVAILABLE, json=user.model_dump(include={"id_user", "email"})
)
if invalid_response(r):
return None
response_json: Union[Dict, List] = r.json()
if response_json is None:
return None
available_workspaces: List[WorkspaceSchema] = []
for workspace in response_json:
if not isinstance(workspace, dict):
logger.debug(f"Not a dict: {workspace}")
continue
available_workspaces.append(WorkspaceSchema.model_validate(workspace))
return available_workspaces
except Exception as e:
logger.debug(f"Could not get available workspaces: {e}")
return None
def create_workspace_for_user(user: UserSchema, workspace: WorkspaceCreate) -> Optional[WorkspaceSchema]:
if not phi_cli_settings.api_enabled:
return None
logger.debug("--o-o-- Create workspace")
with api.AuthenticatedClient() as api_client:
try:
r: Response = api_client.post(
ApiRoutes.WORKSPACE_CREATE,
json={
"user": user.model_dump(include={"id_user", "email"}),
"workspace": workspace.model_dump(exclude_none=True),
},
)
if invalid_response(r):
return None
response_json: Union[Dict, List] = r.json()
if response_json is None:
return None
created_workspace: WorkspaceSchema = WorkspaceSchema.model_validate(response_json)
if created_workspace is not None:
return created_workspace
except Exception as e:
logger.debug(f"Could not create workspace: {e}")
return None
def update_workspace_for_user(user: UserSchema, workspace: WorkspaceUpdate) -> Optional[WorkspaceSchema]:
if not phi_cli_settings.api_enabled:
return None
logger.debug("--o-o-- Update workspace")
with api.AuthenticatedClient() as api_client:
try:
r: Response = api_client.post(
ApiRoutes.WORKSPACE_UPDATE,
json={
"user": user.model_dump(include={"id_user", "email"}),
"workspace": workspace.model_dump(exclude_none=True),
},
)
if invalid_response(r):
return None
response_json: Union[Dict, List] = r.json()
if response_json is None:
return None
updated_workspace: WorkspaceSchema = WorkspaceSchema.model_validate(response_json)
if updated_workspace is not None:
return updated_workspace
except Exception as e:
logger.debug(f"Could not update workspace: {e}")
return None
def update_primary_workspace_for_user(user: UserSchema, workspace: UpdatePrimaryWorkspace) -> Optional[WorkspaceSchema]:
if not phi_cli_settings.api_enabled:
return None
logger.debug(f"--o-o-- Update primary workspace to: {workspace.ws_name}")
with api.AuthenticatedClient() as api_client:
try:
r: Response = api_client.post(
ApiRoutes.WORKSPACE_UPDATE_PRIMARY,
json={
"user": user.model_dump(include={"id_user", "email"}),
"workspace": workspace.model_dump(exclude_none=True),
},
)
if invalid_response(r):
return None
response_json: Union[Dict, List] = r.json()
if response_json is None:
return None
updated_workspace: WorkspaceSchema = WorkspaceSchema.model_validate(response_json)
if updated_workspace is not None:
return updated_workspace
except Exception as e:
logger.debug(f"Could not update primary workspace: {e}")
return None
def delete_workspace_for_user(user: UserSchema, workspace: WorkspaceDelete) -> Optional[WorkspaceSchema]:
if not phi_cli_settings.api_enabled:
return None
logger.debug("--o-o-- Delete workspace")
with api.AuthenticatedClient() as api_client:
try:
r: Response = api_client.post(
ApiRoutes.WORKSPACE_DELETE,
json={
"user": user.model_dump(include={"id_user", "email"}),
"workspace": workspace.model_dump(exclude_none=True),
},
)
if invalid_response(r):
return None
response_json: Union[Dict, List] = r.json()
if response_json is None:
return None
updated_workspace: WorkspaceSchema = WorkspaceSchema.model_validate(response_json)
if updated_workspace is not None:
return updated_workspace
except Exception as e:
logger.debug(f"Could not delete workspace: {e}")
return None
def log_workspace_event(user: UserSchema, workspace_event: WorkspaceEvent) -> bool:
if not phi_cli_settings.api_enabled:
return False
logger.debug("--o-o-- Log workspace event")
with api.AuthenticatedClient() as api_client:
try:
r: Response = api_client.post(
ApiRoutes.WORKSPACE_EVENT_CREATE,
json={
"user": user.model_dump(include={"id_user", "email"}),
"event": workspace_event.model_dump(exclude_none=True),
},
)
if invalid_response(r):
return False
response_json: Union[Dict, List] = r.json()
if response_json is None:
return False
if isinstance(response_json, dict) and response_json.get("status") == "success":
return True
return False
except Exception as e:
logger.debug(f"Could not log workspace event: {e}")
return False