Merge pull request #4 from bdim404/dev

Validate LLM configuration and simplify SQLite checks
This commit is contained in:
2026-03-11 18:05:02 +08:00
committed by GitHub
2 changed files with 25 additions and 5 deletions

View File

@@ -297,13 +297,29 @@ async def set_llm_config(
db: Session = Depends(get_db) db: Session = Depends(get_db)
): ):
from core.security import encrypt_api_key from core.security import encrypt_api_key
encrypted_key = encrypt_api_key(config.api_key.strip()) from core.llm_service import LLMService
api_key = config.api_key.strip()
base_url = config.base_url.strip()
model = config.model.strip()
# Validate LLM config by sending a test request
llm = LLMService(base_url=base_url, api_key=api_key, model=model)
try:
await llm.chat("You are a test assistant.", "Reply with 'ok'.")
except Exception as e:
raise HTTPException(
status_code=status.HTTP_400_BAD_REQUEST,
detail=f"LLM API validation failed: {e}"
)
encrypted_key = encrypt_api_key(api_key)
update_user_llm_config( update_user_llm_config(
db, db,
user_id=current_user.id, user_id=current_user.id,
llm_api_key=encrypted_key, llm_api_key=encrypted_key,
llm_base_url=config.base_url.strip(), llm_base_url=base_url,
llm_model=config.model.strip(), llm_model=model,
) )
return {"message": "LLM config updated successfully"} return {"message": "LLM config updated successfully"}

View File

@@ -1,14 +1,18 @@
from sqlalchemy import create_engine, event from sqlalchemy import create_engine, event
from sqlalchemy.orm import sessionmaker, declarative_base from sqlalchemy.orm import sessionmaker, declarative_base
from sqlalchemy.pool import NullPool
from config import settings from config import settings
_is_sqlite = "sqlite" in settings.DATABASE_URL
engine = create_engine( engine = create_engine(
settings.DATABASE_URL, settings.DATABASE_URL,
connect_args={"check_same_thread": False} if "sqlite" in settings.DATABASE_URL else {} connect_args={"check_same_thread": False} if _is_sqlite else {},
poolclass=NullPool if _is_sqlite else None,
) )
if "sqlite" in settings.DATABASE_URL: if _is_sqlite:
@event.listens_for(engine, "connect") @event.listens_for(engine, "connect")
def _set_wal(dbapi_conn, _): def _set_wal(dbapi_conn, _):
dbapi_conn.execute("PRAGMA journal_mode=WAL") dbapi_conn.execute("PRAGMA journal_mode=WAL")