fix: migrate message model config off deprecated pydantic api

parent 2c9b5310
...@@ -23,7 +23,7 @@ Why did the programmer quit his job? Because he didn't get arrays! ...@@ -23,7 +23,7 @@ Why did the programmer quit his job? Because he didn't get arrays!
A modular proxy server for managing multiple AI provider integrations. A modular proxy server for managing multiple AI provider integrations.
""" """
from pydantic import BaseModel, Field from pydantic import BaseModel, ConfigDict, Field
from typing import Dict, List, Optional, Union from typing import Dict, List, Optional, Union
class Message(BaseModel): class Message(BaseModel):
...@@ -33,8 +33,7 @@ class Message(BaseModel): ...@@ -33,8 +33,7 @@ class Message(BaseModel):
tool_call_id: Optional[str] = None tool_call_id: Optional[str] = None
name: Optional[str] = None name: Optional[str] = None
class Config: model_config = ConfigDict(extra="allow")
extra = "allow" # Allow extra fields not defined in the model
class ChatCompletionRequest(BaseModel): class ChatCompletionRequest(BaseModel):
model: str model: str
messages: List[Message] messages: List[Message]
......
...@@ -17,6 +17,7 @@ You should have received a copy of the GNU General Public License ...@@ -17,6 +17,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. along with this program. If not, see <https://www.gnu.org/licenses/>.
""" """
import inspect
import json import json
from pathlib import Path from pathlib import Path
import sys import sys
...@@ -30,6 +31,8 @@ from itsdangerous import TimestampSigner ...@@ -30,6 +31,8 @@ from itsdangerous import TimestampSigner
sys.path.insert(0, str(Path(__file__).resolve().parents[2])) sys.path.insert(0, str(Path(__file__).resolve().parents[2]))
from aisbf.routes.dashboard import providers as dashboard_providers from aisbf.routes.dashboard import providers as dashboard_providers
from aisbf.routes.dashboard import settings as dashboard_settings
from aisbf.models import Message
from aisbf.database import DatabaseRegistry from aisbf.database import DatabaseRegistry
from aisbf.studio import build_studio_catalog from aisbf.studio import build_studio_catalog
from main import app from main import app
...@@ -572,6 +575,31 @@ def test_search_provider_models_refresh_uses_autodetect_flow_without_exposing_st ...@@ -572,6 +575,31 @@ def test_search_provider_models_refresh_uses_autodetect_flow_without_exposing_st
assert response.json() == {"models": ["whisper-large-v3"], "fetched_live": True} assert response.json() == {"models": ["whisper-large-v3"], "fetched_live": True}
def test_message_model_uses_pydantic_v2_model_config():
assert Message.model_config.get("extra") == "allow"
assert "Config" not in Message.__dict__
def test_dashboard_user_query_uses_pattern_constraints():
route = next(route for route in dashboard_settings.router.routes if route.endpoint is dashboard_settings.dashboard_users)
query_params = {param.name: param for param in route.dependant.query_params}
assert query_params["order_by"].field_info.json_schema_extra == {"pattern": "^(username|last_login|created_at|tier_name)$"}
assert query_params["direction"].field_info.json_schema_extra == {"pattern": "^(asc|desc)$"}
assert query_params["status_filter"].field_info.json_schema_extra == {"pattern": "^(active|inactive)$"}
assert query_params["role_filter"].field_info.json_schema_extra == {"pattern": "^(admin|user)$"}
source = inspect.getsource(dashboard_settings.dashboard_users)
assert "regex=" not in source
def test_fastapi_app_uses_lifespan_instead_of_on_event_decorators():
lifespan_context = getattr(app.router, "lifespan_context", None)
assert lifespan_context is not None
assert not getattr(app.router, "on_startup", [])
assert not getattr(app.router, "on_shutdown", [])
class DummyOpen: class DummyOpen:
def __init__(self, sink): def __init__(self, sink):
self.sink = sink self.sink = sink
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment