File size: 4,523 Bytes
f384aea 3578fad f384aea 3578fad f384aea 3578fad f384aea 3578fad f384aea 3578fad f384aea 3578fad f384aea 3578fad f384aea 3578fad f384aea 3578fad f384aea 3578fad f384aea 3578fad f384aea 3578fad f384aea 3578fad f384aea 3578fad f384aea 3578fad f384aea 9aaf2fd f384aea 9aaf2fd f384aea |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 |
import os
import logging
import time
from fastapi import FastAPI, Request
# from transformers import pipeline
from huggingface_hub import InferenceClient, login
import langid
# import asyncio
# Configure logging
logging.basicConfig(format="%(asctime)s - %(levelname)s - %(message)s", level=logging.INFO)
logger = logging.getLogger(__name__)
# Get Hugging Face API token from environment variable
HF_HUB_TOKEN = os.getenv("HUGGINGFACEHUB_API_TOKEN")
if not HF_HUB_TOKEN:
raise ValueError("Missing Hugging Face API token. Please set HUGGINGFACEHUB_API_TOKEN.")
# Login and initialize the client
login(token=HF_HUB_TOKEN)
client = InferenceClient(api_key=HF_HUB_TOKEN)
# Create FastAPI app
app = FastAPI()
# # Function to detect language
# def detect_language(user_input):
# try:
# lang, _ = langid.classify(user_input)
# return "hebrew" if lang == "he" else "english" if lang == "en" else "unsupported"
# except Exception as e:
# logging.error(f"Language detection error: {e}")
# return "unsupported"
def detect_language(user_input: str) -> str:
"""
Detects the language of the input text.
Returns "hebrew" for Hebrew, "english" for English, and "unsupported" otherwise.
"""
try:
lang, _ = langid.classify(user_input)
if lang == "he":
return "hebrew"
elif lang == "en":
return "english"
else:
return "unsupported"
except Exception as e:
logger.error(f"Language detection error: {e}")
return "unsupported"
# # Function to generate response
# def generate_response(text):
# language = detect_language(text)
# if language == "hebrew":
# content = "转注谞讛 讘拽爪专讛 讗讘诇 转砖转祝 讗转 转讛诇讬讱 拽讘诇转 讛讛讞诇讟讜转 砖诇讱, " + text
# model = "microsoft/Phi-3.5-mini-instruct"
# elif language == "english":
# content = "keep it short but tell your decision making process, " + text
# model = "mistralai/Mistral-Nemo-Instruct-2407"
# else:
# return "Sorry, I only support Hebrew and English."
# messages = [{"role": "user", "content": content}]
# completion = client.chat.completions.create(
# model=model,
# messages=messages,
# max_tokens=2048,
# temperature=0.5,
# top_p=0.7
# )
# return completion.choices[0].message.content
def generate_response(text: str) -> str:
"""
Generates a response by selecting a prompt and model based on the language.
Uses the Hugging Face Inference API to get a chat completion.
"""
language = detect_language(text)
if language == "hebrew":
prompt = "转注谞讛 讘拽爪专讛 讗讘诇 转砖转祝 讗转 转讛诇讬讱 拽讘诇转 讛讛讞诇讟讜转 砖诇讱, " + text
model = "microsoft/Phi-3.5-mini-instruct"
elif language == "english":
prompt = "keep it short but tell your decision making process, " + text
model = "mistralai/Mistral-Nemo-Instruct-2407"
else:
return "Sorry, I only support Hebrew and English."
messages = [{"role": "user", "content": prompt}]
try:
completion = client.chat.completions.create(
model=model,
messages=messages,
max_tokens=2048,
temperature=0.5,
top_p=0.7
)
return completion.choices[0].message.content
except Exception as e:
logger.error(f"Error generating response: {e}")
return "Error: Could not generate response."
@app.post("/generate_response")
async def generate_text(request: Request):
"""
Endpoint to generate a response from the chat model.
Expects a JSON with a "text" field.
"""
try:
data = await request.json()
text = data.get("text", "").strip()
if not text:
return {"error": "No text provided"}
response = generate_response(text)
return {"response": response}
except Exception as e:
logging.error(f"Error processing request: {e}")
return {"error": "An unexpected error occurred."}
@app.get("/")
async def root():
"""
Root endpoint to check that the API is running.
"""
return {"message": "Decision Helper API is running!"}
# Function to run bot.py
# def run_bot():
# logging.info("Starting Telegram bot...")
# subprocess.Popen(["python3", "bot.py"])
if __name__ == "__main__":
# run_bot()
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=7860)
|