This commit is contained in:
Timothy Jaeryang Baek
2026-03-21 18:21:25 -05:00
parent 78dbad5e1e
commit 93407ba316

View File

@@ -2,9 +2,9 @@ import logging
import time import time
from typing import Optional from typing import Optional
from sqlalchemy.orm import Session from sqlalchemy.orm import Session, defer
from open_webui.internal.db import Base, JSONField, get_db, get_db_context from open_webui.internal.db import Base, JSONField, get_db, get_db_context
from open_webui.models.users import Users, UserModel from open_webui.models.users import Users, UserModel, UserResponse
from pydantic import BaseModel, ConfigDict from pydantic import BaseModel, ConfigDict
from sqlalchemy import BigInteger, Boolean, Column, String, Text, Index from sqlalchemy import BigInteger, Boolean, Column, String, Text, Index
@@ -75,10 +75,6 @@ class FunctionWithValvesModel(BaseModel):
#################### ####################
class FunctionUserResponse(FunctionModel):
user: Optional[UserModel] = None
class FunctionResponse(BaseModel): class FunctionResponse(BaseModel):
id: str id: str
user_id: str user_id: str
@@ -91,6 +87,10 @@ class FunctionResponse(BaseModel):
created_at: int # timestamp in epoch created_at: int # timestamp in epoch
class FunctionUserResponse(FunctionResponse):
user: Optional[UserResponse] = None
class FunctionForm(BaseModel): class FunctionForm(BaseModel):
id: str id: str
name: str name: str
@@ -224,7 +224,12 @@ class FunctionsTable:
def get_function_list(self, db: Optional[Session] = None) -> list[FunctionUserResponse]: def get_function_list(self, db: Optional[Session] = None) -> list[FunctionUserResponse]:
with get_db_context(db) as db: with get_db_context(db) as db:
functions = db.query(Function).order_by(Function.updated_at.desc()).all() functions = (
db.query(Function)
.options(defer(Function.content))
.order_by(Function.updated_at.desc())
.all()
)
user_ids = list(set(func.user_id for func in functions)) user_ids = list(set(func.user_id for func in functions))
users = Users.get_users_by_user_ids(user_ids, db=db) if user_ids else [] users = Users.get_users_by_user_ids(user_ids, db=db) if user_ids else []
@@ -233,8 +238,17 @@ class FunctionsTable:
return [ return [
FunctionUserResponse.model_validate( FunctionUserResponse.model_validate(
{ {
**FunctionModel.model_validate(func).model_dump(), **FunctionResponse.model_validate(func).model_dump(),
'user': (users_dict.get(func.user_id).model_dump() if func.user_id in users_dict else None), 'user': (
UserResponse(
id=users_dict[func.user_id].id,
name=users_dict[func.user_id].name,
role=users_dict[func.user_id].role,
email=users_dict[func.user_id].email,
).model_dump()
if func.user_id in users_dict
else None
),
} }
) )
for func in functions for func in functions