[NOTICKET] add total token logging
#9
by rhbt6767 - opened
- src/agents/chatbot.py +11 -1
src/agents/chatbot.py
CHANGED
|
@@ -1,5 +1,6 @@
|
|
| 1 |
"""Chatbot agent with RAG capabilities."""
|
| 2 |
|
|
|
|
| 3 |
from langchain_openai import AzureChatOpenAI
|
| 4 |
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
|
| 5 |
from langchain_core.output_parsers import StrOutputParser
|
|
@@ -9,6 +10,14 @@ from langchain_core.messages import HumanMessage, AIMessage
|
|
| 9 |
|
| 10 |
logger = get_logger("chatbot")
|
| 11 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 12 |
|
| 13 |
class ChatbotAgent:
|
| 14 |
"""Chatbot agent with RAG capabilities."""
|
|
@@ -64,7 +73,8 @@ class ChatbotAgent:
|
|
| 64 |
async def astream_response(self, messages: list, context: str = ""):
|
| 65 |
"""Stream response tokens as they are generated."""
|
| 66 |
try:
|
| 67 |
-
|
|
|
|
| 68 |
async for token in self.chain.astream({"messages": messages, "context": context}):
|
| 69 |
yield token
|
| 70 |
except Exception as e:
|
|
|
|
| 1 |
"""Chatbot agent with RAG capabilities."""
|
| 2 |
|
| 3 |
+
import tiktoken
|
| 4 |
from langchain_openai import AzureChatOpenAI
|
| 5 |
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
|
| 6 |
from langchain_core.output_parsers import StrOutputParser
|
|
|
|
| 10 |
|
| 11 |
logger = get_logger("chatbot")
|
| 12 |
|
| 13 |
+
_enc = tiktoken.get_encoding("cl100k_base")
|
| 14 |
+
|
| 15 |
+
|
| 16 |
+
def _count_tokens(messages: list, context: str) -> dict:
|
| 17 |
+
msg_tokens = sum(len(_enc.encode(m.content)) for m in messages)
|
| 18 |
+
ctx_tokens = len(_enc.encode(context))
|
| 19 |
+
return {"messages_tokens": msg_tokens, "context_tokens": ctx_tokens, "total": msg_tokens + ctx_tokens}
|
| 20 |
+
|
| 21 |
|
| 22 |
class ChatbotAgent:
|
| 23 |
"""Chatbot agent with RAG capabilities."""
|
|
|
|
| 73 |
async def astream_response(self, messages: list, context: str = ""):
|
| 74 |
"""Stream response tokens as they are generated."""
|
| 75 |
try:
|
| 76 |
+
token_counts = _count_tokens(messages, context)
|
| 77 |
+
logger.info("LLM input tokens", **token_counts)
|
| 78 |
async for token in self.chain.astream({"messages": messages, "context": context}):
|
| 79 |
yield token
|
| 80 |
except Exception as e:
|