11import logging
22import os
3- import requests
43import socket
54import threading
65import time
7-
86from datetime import datetime , timezone
97from typing import Generator
108
119import pytest
10+ import requests
1211from anthropic .types .beta .messages import BetaMessageBatch , BetaMessageBatchRequestCounts
13-
1412from dotenv import load_dotenv
15-
16- from letta_client import Letta , AsyncLetta
13+ from letta_client import AsyncLetta , Letta
1714
1815from letta .schemas .agent import AgentState
19-
2016from letta .schemas .llm_config import LLMConfig
21-
2217from letta .services .organization_manager import OrganizationManager
2318from letta .services .user_manager import UserManager
2419from letta .settings import tool_settings
@@ -160,11 +155,13 @@ def dummy_beta_message_batch() -> BetaMessageBatch:
160155 type = "message_batch" ,
161156 )
162157
158+
163159# --- Model Sweep ---
164160# Global flag to track server state
165161_server_started = False
166162_server_url = None
167163
164+
168165def _start_server_once () -> str :
169166 """Start server exactly once, return URL"""
170167 global _server_started , _server_url
@@ -176,16 +173,18 @@ def _start_server_once() -> str:
176173
177174 # Check if already running
178175 with socket .socket (socket .AF_INET , socket .SOCK_STREAM ) as s :
179- if s .connect_ex ((' localhost' , 8283 )) == 0 :
176+ if s .connect_ex ((" localhost" , 8283 )) == 0 :
180177 _server_started = True
181178 _server_url = url
182179 return url
183180
184181 # Start server (your existing logic)
185182 if not os .getenv ("LETTA_SERVER_URL" ):
183+
186184 def _run_server ():
187185 load_dotenv ()
188186 from letta .server .rest_api .app import start_server
187+
189188 start_server (debug = True )
190189
191190 thread = threading .Thread (target = _run_server , daemon = True )
@@ -209,15 +208,18 @@ def _run_server():
209208 _server_url = url
210209 return url
211210
211+
212212# ------------------------------
213213# Fixtures
214214# ------------------------------
215215
216+
216217@pytest .fixture (scope = "module" )
217218def server_url () -> str :
218219 """Return URL of already-started server"""
219220 return _start_server_once ()
220221
222+
221223@pytest .fixture (scope = "module" )
222224def client (server_url : str ) -> Letta :
223225 """
@@ -274,14 +276,11 @@ def get_available_llm_configs() -> [LLMConfig]:
274276 temp_client = Letta (base_url = server_url )
275277 return temp_client .models .list ()
276278
279+
277280# dynamically insert llm_config paramter at collection time
278281def pytest_generate_tests (metafunc ):
279282 """Dynamically parametrize tests that need llm_config."""
280283 if "llm_config" in metafunc .fixturenames :
281284 configs = get_available_llm_configs ()
282285 if configs :
283- metafunc .parametrize (
284- "llm_config" ,
285- configs ,
286- ids = [c .model for c in configs ]
287- )
286+ metafunc .parametrize ("llm_config" , configs , ids = [c .model for c in configs ])
0 commit comments