chatbot_michelle / utils.py
evelynstarlight's picture
Deploy chatbot to Hugging Face
f5e6b7b
import os
import requests
import json
from dotenv import load_dotenv
# 🔐 Load token dari .env file (optional, aman buat deploy)
load_dotenv()
HF_TOKEN = os.getenv("HF_TOKEN")
# 🎭 Modifier untuk gaya bahasa (tone)
def apply_tone(prompt, tone):
tone_instructions = {
"Formal": "Jawab dengan gaya bahasa formal dan sopan.",
"Casual": "Jawab dengan gaya santai dan mudah dimengerti.",
"Humorous": "Jawab dengan gaya lucu dan menghibur.",
"Professional": "Jawab dengan gaya profesional dan ringkas.",
"Sarcastic": "Jawab dengan gaya sarkastik tapi tetap informatif."
}
instruction = tone_instructions.get(tone, "")
return f"{instruction}\n\n{prompt}"
# 🌐 Modifier untuk bahasa respon
def apply_language(prompt, language):
if language == "Indonesia":
return f"Jawab pertanyaan berikut dalam bahasa Indonesia:\n\n{prompt}"
elif language == "English":
return f"Answer the following question in English:\n\n{prompt}"
elif language == "Chinese":
return f"请用中文回答以下问题:\n\n{prompt}"
else:
return prompt
# 🧾 Modifier untuk format respon
def apply_format(prompt, response_format):
format_instructions = {
"Text": "", # default
"Bullet Points": "Jawab dalam bentuk poin-poin yang jelas dan terstruktur.",
"Code": "Jawab dalam format kode atau blok teknis jika memungkinkan."
}
instruction = format_instructions.get(response_format, "")
return f"{instruction}\n\n{prompt}" if instruction else prompt
# 🧠 Query Hugging Face Inference API
def query_huggingface(prompt, model="mistralai/Mistral-7B-Instruct-v0.2", temperature=0.7, max_tokens=500):
try:
headers = {
"Authorization": f"Bearer {HF_TOKEN}",
"Content-Type": "application/json"
}
payload = {
"inputs": prompt,
"parameters": {
"temperature": temperature,
"max_new_tokens": max_tokens
}
}
response = requests.post(
f"https://api-inference.huggingface.co/models/{model}",
headers=headers,
json=payload
)
response.raise_for_status()
result = response.json()
if isinstance(result, list):
return result[0].get("generated_text", "")
elif isinstance(result, dict) and "generated_text" in result:
return result["generated_text"]
else:
return json.dumps(result)
except Exception as e:
return f"⚠️ Error from Hugging Face: {str(e)}"
# 🧠 Query OpenAI backend (DISABLED)
# import openai
# openai.api_key = os.getenv("OPENAI_API_KEY")
# def query_openai(prompt, model="gpt-3.5-turbo", temperature=0.7, max_tokens=500):
# try:
# response = openai.ChatCompletion.create(
# model=model,
# messages=[{"role": "user", "content": prompt}],
# temperature=temperature,
# max_tokens=max_tokens
# )
# return response.choices[0].message.content
# except Exception as e:
# return f"⚠️ Error from OpenAI: {str(e)}"
# 🔀 Dispatcher untuk backend
def get_response(prompt, backend="HuggingFace", model="mistralai/Mistral-7B-Instruct-v0.2", temperature=0.7, max_tokens=500):
if backend == "HuggingFace":
return query_huggingface(prompt, model, temperature, max_tokens)
# elif backend == "OpenAI":
# return query_openai(prompt, model, temperature, max_tokens)
else:
return "❌ Backend tidak dikenali."