Skip to content

Commit ee8f3be

Browse files
authored
Merge pull request #780 from apecloud/refine_config
Refine config
2 parents b1b55f3 + 8a0e099 commit ee8f3be

6 files changed

Lines changed: 33 additions & 24 deletions

File tree

aperag/apps.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ def ready(self):
3333
from django.conf import settings
3434
settings.AUTH_USER_MODEL = 'aperag.User'
3535

36+
from aperag.llm.litellm_track import register_llm_track
37+
register_llm_track()
38+
3639

3740
def get_ip_config():
3841
from django.db import transaction

aperag/embed/embedding_service.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,5 +83,6 @@ def _embed_batch(self, batch: Sequence[str]) -> List[List[float]]:
8383
api_base=self.api_base,
8484
api_key=self.api_key,
8585
input=list(batch),
86+
max_retries=0,
8687
)
8788
return [item["embedding"] for item in response["data"]]

aperag/llm/completion_service.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,12 @@ def provide_default_token():
3333
return False
3434

3535
async def _agenerate_stream(self, history, prompt, memory=False):
36-
response = litellm.completion(
36+
response = await litellm.acompletion(
3737
**self.kwargs,
3838
messages=history + [{"role": "user", "content": prompt}] if memory else [{"role": "user", "content": prompt}],
3939
stream=True,
4040
timeout=httpx.Timeout(None, connect=3),
41+
max_retries=0,
4142
)
4243
async for chunk in response:
4344
if not chunk.choices:
@@ -53,6 +54,7 @@ def _generate_stream(self, history, prompt, memory=False):
5354
messages=history + [{"role": "user", "content": prompt}] if memory else [{"role": "user", "content": prompt}],
5455
stream=True,
5556
timeout=httpx.Timeout(None, connect=3),
57+
max_retries=0,
5658
)
5759
for chunk in response:
5860
if not chunk.choices:
@@ -67,11 +69,12 @@ async def agenerate_stream(self, history, prompt, memory=False):
6769
yield tokens
6870

6971
async def agenerate_by_tools(self, prompt,tools):
70-
response = litellm.completion(
72+
response = await litellm.acompletion(
7173
**self.kwargs,
7274
messages=[{"role": "user", "content": prompt}],
7375
tools=tools,
7476
tool_choice="auto",
77+
max_retries=0,
7578
)
7679
tool_calls = response.choices[0].message.tool_calls
7780
return tool_calls, response.choices[0].message.content

aperag/llm/litellm_track.py

Lines changed: 18 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
import logging
22
import litellm
33
from datetime import datetime
4+
from litellm.integrations.custom_logger import CustomLogger
5+
46

57
logger = logging.getLogger(__name__)
68

79

8-
class MyCustomHandler:
10+
class MyCustomHandler(CustomLogger):
911
def __init__(self):
1012
self.prefix = "LiteLLM"
1113

@@ -17,30 +19,13 @@ def _format_time(self, dt: datetime) -> str:
1719
def log_pre_api_call(self, model, messages, kwargs):
1820
pass
1921

22+
# async func won't trigger this callback, it's a bug. https://github.com/BerriAI/litellm/issues/8842
2023
def log_success_event(self, kwargs, response_obj, start_time, end_time):
21-
try:
22-
latency = (end_time - start_time).total_seconds() if start_time and end_time else 0.0
23-
cost = kwargs.get("response_cost", 0)
24-
25-
logger.info(f"{self.prefix} Status: Success")
26-
logger.info(f"{self.prefix} Model: {kwargs.get('model')}")
27-
logger.info(f"{self.prefix} Provider: {kwargs.get('custom_llm_provider', 'unknown')}")
28-
logger.info(f"{self.prefix} Start Time: {self._format_time(start_time)}")
29-
logger.info(f"{self.prefix} End Time: {self._format_time(end_time)}")
30-
logger.info(f"{self.prefix} Latency: {latency:.2f} seconds")
31-
logger.info(f"{self.prefix} Cost: ${cost:.6f}")
32-
except Exception as e:
33-
logger.error(f"{self.prefix} Error in log_success_event", exc_info=e)
24+
pass
3425

3526
def log_failure_event(self, kwargs, response_obj, start_time, end_time):
3627
try:
3728
error_str = str(response_obj) if response_obj else "Unknown error"
38-
39-
logger.error(f"{self.prefix} Status: Failed")
40-
logger.error(f"{self.prefix} Model: {kwargs.get('model')}")
41-
logger.error(f"{self.prefix} Provider: {kwargs.get('custom_llm_provider', 'unknown')}")
42-
logger.error(f"{self.prefix} Start Time: {self._format_time(start_time)}")
43-
logger.error(f"{self.prefix} End Time: {self._format_time(end_time)}")
4429
logger.error(f"{self.prefix} Error: {error_str}", exc_info=True)
4530
except Exception as e:
4631
logger.error(f"{self.prefix} Error in log_failure_event", exc_info=e)
@@ -52,7 +37,19 @@ async def async_log_failure_event(self, kwargs, response_obj, start_time, end_ti
5237
self.log_failure_event(kwargs, response_obj, start_time, end_time)
5338

5439
def log_post_api_call(self, kwargs, response_obj, start_time, end_time):
55-
pass
40+
try:
41+
latency = (end_time - start_time).total_seconds() if start_time and end_time else 0.0
42+
cost = kwargs.get("response_cost", 0) or 0
43+
44+
logger.info(f"{self.prefix} Model: {kwargs.get('model')}")
45+
logger.info(f"{self.prefix} Provider: {kwargs.get('custom_llm_provider', 'unknown')}")
46+
logger.info(f"{self.prefix} base_url: {kwargs.get('api_base', 'unknown')}")
47+
logger.info(f"{self.prefix} Start Time: {self._format_time(start_time)}")
48+
logger.info(f"{self.prefix} End Time: {self._format_time(end_time)}")
49+
logger.info(f"{self.prefix} Latency: {latency:.2f} seconds")
50+
logger.info(f"{self.prefix} Cost: ${cost:.6f}")
51+
except Exception as e:
52+
logger.error(f"{self.prefix} Error in log_success_event", exc_info=e)
5653

5754

5855
def register_llm_track():

aperag/rank/reranker.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@ async def rank(self, query: str, results: List[DocumentWithScore]):
2929
top_n=len(documents),
3030
api_key=self.api_key,
3131
api_base=self.api_base,
32-
return_documents=False
32+
return_documents=False,
33+
max_retries=0,
3334
)
3435
indices = [item["index"] for item in resp["results"]]
3536
return [results[i] for i in indices]

tests/unit_test/embed/test_embedding_service.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import os
22
import pytest
33
from aperag.embed.embedding_service import EmbeddingService
4+
from aperag.llm.litellm_track import register_llm_track
45

56
PROVIDERS = [
67
{
@@ -38,6 +39,9 @@
3839
]
3940

4041

42+
register_llm_track()
43+
44+
4145
@pytest.fixture(params=PROVIDERS)
4246
def embedding_service(request):
4347
config = request.param

0 commit comments

Comments
 (0)