from flask import Flask, request, abort import markdown from bs4 import BeautifulSoup from linebot.v3 import ( WebhookHandler ) from linebot.v3.exceptions import ( InvalidSignatureError ) from linebot.v3.messaging import ( Configuration, ApiClient, MessagingApi, ReplyMessageRequest, TextMessage ) from linebot.v3.webhooks import ( MessageEvent, TextMessageContent ) import os import requests HF_TOKEN = os.environ.get('HF_TOKEN') headers = {"Authorization": f"Bearer {HF_TOKEN}"} API_URL = "https://api-inference.huggingface.co/models/mistralai/Mixtral-8x7B-Instruct-v0.1" def query(payload): response = requests.post(API_URL, headers=headers, json=payload) return response.json() app = Flask(__name__) configuration = Configuration(access_token='YOUR_CHANNEL_ACCESS_TOKEN') handler = WebhookHandler('YOUR_CHANNEL_SECRET') @app.route("/callback", methods=['POST']) def callback(): # get X-Line-Signature header value signature = request.headers['X-Line-Signature'] # get request body as text body = request.get_data(as_text=True) app.logger.info("Request body: " + body) # handle webhook body try: handler.handle(body, signature) except InvalidSignatureError: app.logger.info("Invalid signature. Please check your channel access token/channel secret.") abort(400) return 'OK' @handler.add(MessageEvent, message=TextMessageContent) def handle_message(event): with ApiClient(configuration) as api_client: line_bot_api = MessagingApi(api_client) response = query({"inputs": input, "parameters":{"return_full_text":False, "max_length":1024}}) html_msg = markdown.markdown(response) soup = BeautifulSoup(html_msg, 'html.parser') line_bot_api.reply_message( ReplyMessageRequest( reply_token=event.reply_token, messages=[TextMessage(text=soup.get_text())] ) ) if __name__ == "__main__": app.run()