Spaces:
Running
Running
Upload app.py
Browse files
app.py
CHANGED
|
@@ -4,6 +4,7 @@ from typing import List
|
|
| 4 |
import logging
|
| 5 |
import logging.handlers
|
| 6 |
import json
|
|
|
|
| 7 |
from langchain_openai import ChatOpenAI
|
| 8 |
from langchain_core.tools import tool
|
| 9 |
from langchain_core.messages import HumanMessage, AIMessage, ToolMessage
|
|
@@ -41,6 +42,36 @@ else:
|
|
| 41 |
|
| 42 |
logger = logging.getLogger(__name__)
|
| 43 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 44 |
# Configuration from environment variables
|
| 45 |
llm_ip = os.environ.get('public_ip')
|
| 46 |
llm_port = os.environ.get('port')
|
|
@@ -195,19 +226,14 @@ class ToolCallingAgentChat:
|
|
| 195 |
logger.info(f"Message: {message}")
|
| 196 |
logger.info(f"History length: {len(history)}")
|
| 197 |
|
| 198 |
-
# Convert history to messages for context with system message
|
| 199 |
from langchain_core.messages import SystemMessage
|
| 200 |
|
| 201 |
-
|
| 202 |
-
|
| 203 |
-
|
| 204 |
-
|
| 205 |
-
|
| 206 |
-
- Real-time data or recent updates
|
| 207 |
-
- Specific facts that may have changed recently
|
| 208 |
-
- When users explicitly ask you to search the web
|
| 209 |
-
|
| 210 |
-
For general knowledge questions that don't require current information, answer directly without using tools.""")]
|
| 211 |
|
| 212 |
for user_msg, assistant_msg in history:
|
| 213 |
messages.append(HumanMessage(content=user_msg))
|
|
@@ -318,14 +344,13 @@ For general knowledge questions that don't require current information, answer d
|
|
| 318 |
# Global agent instance
|
| 319 |
tool_calling_agent = ToolCallingAgentChat(llm_ip, llm_port, llm_key, llm_model)
|
| 320 |
|
| 321 |
-
def generate_response(message: str, history: List[List[str]],
|
| 322 |
-
|
| 323 |
-
"""Generate response using tool calling agent"""
|
| 324 |
global tool_calling_agent
|
| 325 |
|
| 326 |
try:
|
| 327 |
-
#
|
| 328 |
-
|
| 329 |
|
| 330 |
# Reset conversation if history is empty (indicates clear button was pressed)
|
| 331 |
if len(history) == 0:
|
|
@@ -396,21 +421,8 @@ chatbot = gr.ChatInterface(
|
|
| 396 |
elem_id="chatbot"
|
| 397 |
),
|
| 398 |
additional_inputs=[
|
| 399 |
-
gr.
|
| 400 |
-
"You are a helpful AI assistant with web search capabilities. Use web search when you need current information, recent events, or real-time data.",
|
| 401 |
-
label="System Prompt",
|
| 402 |
-
lines=2
|
| 403 |
-
),
|
| 404 |
-
gr.Slider(50, 2048, label="Max Tokens", value=512,
|
| 405 |
info="Maximum number of tokens in the response"),
|
| 406 |
-
gr.Textbox(llm_ip, label="LLM IP Address",
|
| 407 |
-
info="IP address of the OpenAI-compatible LLM server"),
|
| 408 |
-
gr.Textbox(llm_port, label="LLM Port",
|
| 409 |
-
info="Port of the LLM server"),
|
| 410 |
-
gr.Textbox(llm_key, label="API Key", type="password",
|
| 411 |
-
info="API key for the LLM server"),
|
| 412 |
-
gr.Textbox(llm_model, label="Model Name",
|
| 413 |
-
info="Name of the model to use"),
|
| 414 |
],
|
| 415 |
title="🤖 DQ Micro Agent",
|
| 416 |
description="DevQuasar self hosted Micro Agent with websearch capabilities",
|
|
|
|
| 4 |
import logging
|
| 5 |
import logging.handlers
|
| 6 |
import json
|
| 7 |
+
from datetime import datetime
|
| 8 |
from langchain_openai import ChatOpenAI
|
| 9 |
from langchain_core.tools import tool
|
| 10 |
from langchain_core.messages import HumanMessage, AIMessage, ToolMessage
|
|
|
|
| 42 |
|
| 43 |
logger = logging.getLogger(__name__)
|
| 44 |
|
| 45 |
+
def get_current_date() -> str:
|
| 46 |
+
"""Get current date in YYYY-MM-DD format"""
|
| 47 |
+
return datetime.now().strftime("%Y-%m-%d")
|
| 48 |
+
|
| 49 |
+
def create_system_prompt() -> str:
|
| 50 |
+
"""Create dynamic system prompt with current date"""
|
| 51 |
+
current_date = get_current_date()
|
| 52 |
+
return f"""You are a helpful AI assistant with web search capabilities.
|
| 53 |
+
|
| 54 |
+
TODAY'S DATE: {current_date}
|
| 55 |
+
|
| 56 |
+
IMPORTANT: You have access to a web_search tool. Consider your knowledge cutoff date and today's date to decide when to search:
|
| 57 |
+
|
| 58 |
+
USE WEB SEARCH when users ask about:
|
| 59 |
+
- Events after your knowledge cutoff date
|
| 60 |
+
- Current events, breaking news, or recent developments
|
| 61 |
+
- Today's date, current time, or "what's happening now"
|
| 62 |
+
- Real-time data (weather, stock prices, sports scores)
|
| 63 |
+
- Recent updates to ongoing situations
|
| 64 |
+
- Information that changes frequently
|
| 65 |
+
- When users explicitly ask you to search the web
|
| 66 |
+
|
| 67 |
+
DO NOT use web search for:
|
| 68 |
+
- Historical facts before your cutoff date
|
| 69 |
+
- General knowledge that doesn't change (capitals, basic science, etc.)
|
| 70 |
+
- Established facts and concepts
|
| 71 |
+
- Personal advice or opinions
|
| 72 |
+
|
| 73 |
+
When in doubt about whether information might be outdated, use web search to get the most current information."""
|
| 74 |
+
|
| 75 |
# Configuration from environment variables
|
| 76 |
llm_ip = os.environ.get('public_ip')
|
| 77 |
llm_port = os.environ.get('port')
|
|
|
|
| 226 |
logger.info(f"Message: {message}")
|
| 227 |
logger.info(f"History length: {len(history)}")
|
| 228 |
|
| 229 |
+
# Convert history to messages for context with dynamic system message
|
| 230 |
from langchain_core.messages import SystemMessage
|
| 231 |
|
| 232 |
+
# Create dynamic system prompt with current date
|
| 233 |
+
system_prompt = create_system_prompt()
|
| 234 |
+
if ENABLE_DETAILED_LOGGING:
|
| 235 |
+
logger.info(f"System prompt includes today's date: {get_current_date()}")
|
| 236 |
+
messages = [SystemMessage(content=system_prompt)]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 237 |
|
| 238 |
for user_msg, assistant_msg in history:
|
| 239 |
messages.append(HumanMessage(content=user_msg))
|
|
|
|
| 344 |
# Global agent instance
|
| 345 |
tool_calling_agent = ToolCallingAgentChat(llm_ip, llm_port, llm_key, llm_model)
|
| 346 |
|
| 347 |
+
def generate_response(message: str, history: List[List[str]], max_tokens: int):
|
| 348 |
+
"""Generate response using tool calling agent with dynamic system prompt"""
|
|
|
|
| 349 |
global tool_calling_agent
|
| 350 |
|
| 351 |
try:
|
| 352 |
+
# Configuration is pre-loaded from environment variables
|
| 353 |
+
# No runtime config changes allowed for security
|
| 354 |
|
| 355 |
# Reset conversation if history is empty (indicates clear button was pressed)
|
| 356 |
if len(history) == 0:
|
|
|
|
| 421 |
elem_id="chatbot"
|
| 422 |
),
|
| 423 |
additional_inputs=[
|
| 424 |
+
gr.Slider(50, 8192, label="Max Tokens", value=1024,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 425 |
info="Maximum number of tokens in the response"),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 426 |
],
|
| 427 |
title="🤖 DQ Micro Agent",
|
| 428 |
description="DevQuasar self hosted Micro Agent with websearch capabilities",
|