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) |