Spaces:
Sleeping
Sleeping
import os | |
import requests | |
import json | |
import logging | |
from flask import Flask, request, jsonify | |
from ddtrace import patch_all, tracer | |
from ddtrace.llmobs import LLMObs | |
from dotenv import load_dotenv | |
# Load environment variables from .env file if it exists | |
load_dotenv() | |
# Set up logging for debugging | |
logging.basicConfig(level=logging.DEBUG) | |
# Enable Datadog tracing | |
patch_all() | |
# Enable LLM observability | |
LLMObs.enable() | |
app = Flask(__name__) | |
# Ensure environment variables are set | |
os.environ['DD_LLMOBS_ENABLED'] = '1' | |
os.environ['DD_LLMOBS_ML_APP'] = 'anything-api' | |
os.environ['DD_LLMOBS_AGENTLESS_ENABLED'] = '1' | |
def handle_llm_call(): | |
logging.debug("Received a request at /llm_call") | |
# Extract data from the incoming request (e.g., message to LLM) | |
data = request.get_json() | |
message = data.get("message") | |
if not message: | |
logging.error("No message provided in the request.") | |
return jsonify({"error": "No message provided"}), 400 | |
url = 'https://severian-anything.hf.space/api/v1/workspace/scoreboard/chat' | |
headers = { | |
'accept': 'application/json', | |
'Authorization': 'Bearer TYQYM46-RPCMQ98-GCGJMNB-Q23K6HC', # Replace with actual token securely | |
'Content-Type': 'application/json' | |
} | |
payload = { | |
"message": message, | |
"mode": "query" | |
} | |
# Use LLMObs to trace the LLM API call | |
with LLMObs.trace("llm_api_call", service="anything-api", resource="chat") as span: | |
logging.debug("Starting trace for LLM API call.") | |
span.set_tag("llm.request.model", "anything-api") | |
span.set_tag("llm.request.input", message) | |
try: | |
# Make the actual call to the LLM API | |
response = requests.post(url, headers=headers, data=json.dumps(payload)) | |
response.raise_for_status() | |
response_data = response.json() | |
bot_response = response_data.get("textResponse") | |
# Set LLM-specific tags and metrics | |
span.set_tag("llm.response.output", bot_response) | |
span.set_metric("llm.tokens.prompt", len(message.split())) | |
span.set_metric("llm.tokens.completion", len(bot_response.split())) | |
span.set_metric("llm.tokens.total", len(message.split()) + len(bot_response.split())) | |
logging.debug(f"LLM API response: {bot_response}") | |
return jsonify({"bot_response": bot_response}) | |
except requests.RequestException as e: | |
span.set_tag("error", True) | |
span.set_tag("error.msg", str(e)) | |
logging.error(f"Request failed: {e}") | |
return jsonify({"error": f"Request failed: {e}"}), 500 | |
except Exception as e: | |
span.set_tag("error", True) | |
span.set_tag("error.msg", str(e)) | |
logging.error(f"An error occurred: {e}") | |
return jsonify({"error": f"An error occurred: {e}"}), 500 | |
if __name__ == "__main__": | |
logging.info("Starting Flask app on port 7860") | |
app.run(host='0.0.0.0', port=7860) |