feat: init new config model version

This commit is contained in:
swve 2024-08-09 20:54:41 +02:00
parent b7dc77a0e6
commit 6485b6e1bb
6 changed files with 225 additions and 117 deletions

View file

@ -86,8 +86,8 @@ def ai_start_activity_chat_session(
org_config = result.first()
org_config = OrganizationConfig.model_validate(org_config)
embeddings = org_config.config["AIConfig"]["embeddings"]
ai_model = org_config.config["AIConfig"]["ai_model"]
embeddings = "text-embedding-ada-002"
ai_model = org_config.config["features"]["ai"]["model"]
chat_session = get_chat_session_history()
@ -177,8 +177,8 @@ def ai_send_activity_chat_message(
org_config = result.first()
org_config = OrganizationConfig.model_validate(org_config)
embeddings = org_config.config["AIConfig"]["embeddings"]
ai_model = org_config.config["AIConfig"]["ai_model"]
embeddings = "text-embedding-ada-002"
ai_model = org_config.config["features"]["ai"]["model"]
chat_session = get_chat_session_history(chat_session_object.aichat_uuid)

View file

@ -78,7 +78,7 @@ def check_limits_and_config(db_session: Session, organization: Organization):
)
# Check if the Organization has Limits enabled and if the max_asks limit has been reached
if org_config.config["AIConfig"]["limits"]["limits_enabled"] == True:
if org_config.config["features"]["ai"]["limit"] > 0:
LH_CONFIG = get_learnhouse_config()
redis_conn_string = LH_CONFIG.redis_config.redis_connection_string
@ -107,7 +107,7 @@ def check_limits_and_config(db_session: Session, organization: Organization):
ai_asks = int(ai_asks)
# Check if the Number of asks is less than the max_asks limit
if org_config.config["AIConfig"]["limits"]["max_asks"] <= ai_asks:
if org_config.config["features"]["ai"]["limit"] <= ai_asks:
raise HTTPException(
status_code=403,
detail="Organization has reached the max number of AI asks",

View file

@ -5,12 +5,28 @@ from fastapi import HTTPException, Request
from sqlalchemy import desc
from sqlmodel import Session, select
from src.db.install import Install, InstallRead
from src.db.organization_config import AIEnabledFeatures, AILimitsSettings, LimitSettings, OrgUserConfig, OrganizationConfig, OrganizationConfigBase, GeneralConfig, AIConfig
from src.db.organization_config import (
AIOrgConfig,
APIOrgConfig,
AnalyticsOrgConfig,
AssignmentOrgConfig,
CollaborationOrgConfig,
CourseOrgConfig,
DiscussionOrgConfig,
MemberOrgConfig,
OrgFeatureConfig,
OrgGeneralConfig,
OrganizationConfig,
OrganizationConfigBase,
PaymentOrgConfig,
StorageOrgConfig,
UserGroupOrgConfig,
)
from src.db.organizations import Organization, OrganizationCreate
from src.db.roles import Permission, Rights, Role, RoleTypeEnum
from src.db.user_organizations import UserOrganization
from src.db.users import User, UserCreate, UserRead
from config.config import get_learnhouse_config
from config.config import GeneralConfig, get_learnhouse_config
from src.security.security import security_hash_password
@ -57,7 +73,7 @@ async def get_latest_install_instance(request: Request, db_session: Session):
status_code=404,
detail="No install instance found",
)
install = InstallRead.model_validate(install)
return install
@ -96,8 +112,7 @@ async def update_install_instance(
# Install Default roles
def install_default_elements(db_session: Session):
"""
"""
""" """
# remove all default roles
statement = select(Role).where(Role.role_type == RoleTypeEnum.TYPE_GLOBAL)
roles = db_session.exec(statement).all()
@ -300,9 +315,7 @@ def install_default_elements(db_session: Session):
# Organization creation
def install_create_organization(
org_object: OrganizationCreate, db_session: Session
):
def install_create_organization(org_object: OrganizationCreate, db_session: Session):
org = Organization.model_validate(org_object)
# Complete the org object
@ -314,36 +327,28 @@ def install_create_organization(
db_session.commit()
db_session.refresh(org)
# Org Config
# Org Config
org_config = OrganizationConfigBase(
GeneralConfig=GeneralConfig(
color="#000000",
limits=LimitSettings(
limits_enabled=False,
max_users=0,
max_storage=0,
max_staff=0,
),
collaboration=False,
users=OrgUserConfig(
signup_mechanism="open",
),
active=True,
),
AIConfig=AIConfig(
config_version="1.0",
general=OrgGeneralConfig(
enabled=True,
limits=AILimitsSettings(
limits_enabled=False,
max_asks=0,
),
embeddings="text-embedding-ada-002",
ai_model="gpt-3.5-turbo",
features=AIEnabledFeatures(
editor=True,
activity_ask=True,
course_ask=True,
global_ai_ask=True,
color="normal",
watermark=True,
),
features=OrgFeatureConfig(
courses=CourseOrgConfig(enabled=True, limit=0),
members=MemberOrgConfig(
enabled=True, signup_mode="open", admin_limit=0, limit=0
),
usergroups=UserGroupOrgConfig(enabled=True, limit=0),
storage=StorageOrgConfig(enabled=True, limit=0),
ai=AIOrgConfig(enabled=True, limit=0, model="text-embedding-ada-002"),
assignments=AssignmentOrgConfig(enabled=True, limit=0),
payments=PaymentOrgConfig(enabled=True, stripe_key=""),
discussions=DiscussionOrgConfig(enabled=True, limit=0),
analytics=AnalyticsOrgConfig(enabled=True, limit=0),
collaboration=CollaborationOrgConfig(enabled=True, limit=0),
api=APIOrgConfig(enabled=True, limit=0),
),
)
@ -365,7 +370,7 @@ def install_create_organization(
def install_create_organization_user(
user_object: UserCreate, org_slug: str, db_session: Session
user_object: UserCreate, org_slug: str, db_session: Session
):
user = User.model_validate(user_object)
@ -418,8 +423,6 @@ def install_create_organization_user(
db_session.commit()
db_session.refresh(user)
# get org id
statement = select(Organization).where(Organization.slug == org_slug)
org = db_session.exec(statement)

View file

@ -5,14 +5,21 @@ from typing import Literal
from uuid import uuid4
from sqlmodel import Session, select
from src.db.organization_config import (
AIConfig,
AIEnabledFeatures,
AILimitsSettings,
GeneralConfig,
LimitSettings,
OrgUserConfig,
AIOrgConfig,
APIOrgConfig,
AnalyticsOrgConfig,
AssignmentOrgConfig,
CollaborationOrgConfig,
CourseOrgConfig,
DiscussionOrgConfig,
MemberOrgConfig,
OrgFeatureConfig,
OrgGeneralConfig,
OrganizationConfig,
OrganizationConfigBase,
PaymentOrgConfig,
StorageOrgConfig,
UserGroupOrgConfig,
)
from src.security.rbac.rbac import (
authorization_verify_based_on_org_admin_status,
@ -149,35 +156,27 @@ async def create_org(
db_session.commit()
db_session.refresh(user_org)
org_config = OrganizationConfigBase(
GeneralConfig=GeneralConfig(
color="#000000",
limits=LimitSettings(
limits_enabled=False,
max_users=0,
max_storage=0,
max_staff=0,
),
collaboration=False,
users=OrgUserConfig(
signup_mechanism="open",
),
active=True,
),
AIConfig=AIConfig(
org_config = org_config = OrganizationConfigBase(
config_version="1.0",
general=OrgGeneralConfig(
enabled=True,
limits=AILimitsSettings(
limits_enabled=False,
max_asks=0,
),
embeddings="text-embedding-ada-002",
ai_model="gpt-3.5-turbo",
features=AIEnabledFeatures(
editor=True,
activity_ask=True,
course_ask=True,
global_ai_ask=True,
color="normal",
watermark=True,
),
features=OrgFeatureConfig(
courses=CourseOrgConfig(enabled=True, limit=0),
members=MemberOrgConfig(
enabled=True, signup_mode="open", admin_limit=0, limit=0
),
usergroups=UserGroupOrgConfig(enabled=True, limit=0),
storage=StorageOrgConfig(enabled=True, limit=0),
ai=AIOrgConfig(enabled=True, limit=0, model="text-embedding-ada-002"),
assignments=AssignmentOrgConfig(enabled=True, limit=0),
payments=PaymentOrgConfig(enabled=True, stripe_key=""),
discussions=DiscussionOrgConfig(enabled=True, limit=0),
analytics=AnalyticsOrgConfig(enabled=True, limit=0),
collaboration=CollaborationOrgConfig(enabled=True, limit=0),
api=APIOrgConfig(enabled=True, limit=0),
),
)
@ -210,8 +209,6 @@ async def create_org(
return org
# Temporary pre-alpha code
async def create_org_with_config(
request: Request,
org_object: OrganizationCreate,
@ -477,7 +474,7 @@ async def update_org_signup_mechanism(
# Update config
updated_config = OrganizationConfigBase(**updated_config)
updated_config.GeneralConfig.users.signup_mechanism = signup_mechanism
updated_config.features.members.signup_mode = signup_mechanism
# Update the database
org_config.config = json.loads(updated_config.json())
@ -527,7 +524,7 @@ async def get_org_join_mechanism(
# Get the signup mechanism
config = OrganizationConfigBase(**config)
signup_mechanism = config.GeneralConfig.users.signup_mechanism
signup_mechanism = config.features.members.signup_mode
return signup_mechanism