4oMini / app.py
navalmen007's picture
Update app.py
cbc1ff2 verified
Raw History Blame Contribute Delete
2.89 kB
from flask import Flask, request, jsonify, stream_with_context, Response
import requests
import json
app = Flask(__name__)
STATUS_URL = "https://duckduckgo.com/duckchat/v1/status"
CHAT_URL = "https://duckduckgo.com/duckchat/v1/chat"
STATUS_HEADERS = { "x-vqd-accept": "1" }
MODEL_MAP = {
"gpt-4o-mini": "gpt-4o-mini",
"claude-3-haiku": "claude-3-haiku-20240307",
"llama": "meta-llama/Meta-Llama-3.1-70B-Instruct-Turbo",
"mixtral": "mistralai/Mixtral-8x7B-Instruct-v0.1",
}
class Chat:
def __init__(self, vqd, model):
self.old_vqd = vqd
self.new_vqd = vqd
self.model = model
self.messages = []
def fetch(self, content):
self.messages.append({"content": content, "role": "user"})
payload = {
"model": self.model,
"messages": self.messages
}
response = requests.post(
CHAT_URL,
headers={"x-vqd-4": self.new_vqd, "Content-Type": "application/json"},
json=payload
)
if not response.ok:
response.raise_for_status()
return response
def fetch_full(self, content):
response = self.fetch(content)
text = ""
for event in response.iter_lines():
if event:
message_data = json.loads(event)
if "message" not in message_data:
break
text += message_data["message"]
new_vqd = response.headers.get("x-vqd-4")
self.old_vqd = self.new_vqd
self.new_vqd = new_vqd
self.messages.append({"content": text, "role": "assistant"})
return text
@app.route('/v1/models', methods=['POST', 'GET'])
def init_chat():
model_alias = request.json.get("model")
if model_alias not in MODEL_MAP:
return jsonify({"error": "Invalid model alias"}), 400
status_response = requests.get(STATUS_URL, headers=STATUS_HEADERS)
if not status_response.ok:
return jsonify({"error": "Failed to initialize chat"}), status_response.status_code
vqd = status_response.headers.get("x-vqd-4")
if not vqd:
return jsonify({"error": "No vqd received"}), 500
chat_instance = Chat(vqd, MODEL_MAP[model_alias])
return jsonify({"vqd": vqd, "model": MODEL_MAP[model_alias]})
@app.route('/v1/completions', methods=['POST'])
def fetch_message():
content = request.json.get("content")
vqd = request.json.get("vqd")
model = request.json.get("model")
if not content or not vqd or not model:
return jsonify({"error": "Missing parameters"}), 400
chat_instance = Chat(vqd, model)
try:
full_message = chat_instance.fetch_full(content)
except Exception as e:
return jsonify({"error": str(e)}), 500
return jsonify({"response": full_message})
if __name__ == '__main__':
app.run(host='0.0.0.0', port=7860)