Spaces:
Runtime error
Runtime error
File size: 8,678 Bytes
3f4d0b1 a6ca086 7c9bdd2 a6ca086 3f4d0b1 a6ca086 28840c0 7c9bdd2 3f4d0b1 a6ca086 3f4d0b1 1c98b64 28840c0 a6ca086 28840c0 a6ca086 28840c0 9732f39 3f4d0b1 a6ca086 3f4d0b1 a6ca086 18463ec a6ca086 3f4d0b1 3492cf8 3f4d0b1 a6ca086 3492cf8 3f4d0b1 3492cf8 a6ca086 3f4d0b1 a6ca086 f6df270 a6ca086 3492cf8 3f4d0b1 a6ca086 3f4d0b1 |
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 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 |
# Import necessary libraries
from PIL import Image
from peft import PeftModel
from PIL import Image
import torch
from transformers import AutoProcessor, LlavaForConditionalGeneration, BitsAndBytesConfig
from deep_translator import GoogleTranslator
from transformers import M2M100ForConditionalGeneration, M2M100Tokenizer
from fastapi import FastAPI, Query, UploadFile, File, HTTPException
from fastapi.staticfiles import StaticFiles
from fastapi.responses import FileResponse, JSONResponse
from io import BytesIO
import warnings
# from flask import Flask
# from flask_ngrok import run_with_ngrok
# app = Flask(__name__)
# run_with_ngrok(app)
app = FastAPI()
warnings.filterwarnings('ignore')
# @app.get('/echo/')
# async def echo(query_param: str):
# return {"response": query_param}
# app.mount("/", StaticFiles(directory="static", html=True), name="static")
model_id = "HuggingFaceH4/vsft-llava-1.5-7b-hf-trl"
quantization_config = BitsAndBytesConfig(load_in_4bit=True)
base_model = LlavaForConditionalGeneration.from_pretrained(model_id, quantization_config=quantization_config, torch_dtype=torch.float16)
# Load the PEFT Lora adapter
peft_lora_adapter_path = "Praveen0309/llava-1.5-7b-hf-ft-mix-vsft-3"
peft_lora_adapter = PeftModel.from_pretrained(base_model, peft_lora_adapter_path, adapter_name="lora_adapter")
base_model.load_adapter(peft_lora_adapter_path, adapter_name="lora_adapter")
processor = AutoProcessor.from_pretrained("HuggingFaceH4/vsft-llava-1.5-7b-hf-trl")
# model = M2M100ForConditionalGeneration.from_pretrained("facebook/m2m100_418M")
# tokenizer = M2M100Tokenizer.from_pretrained("facebook/m2m100_418M")
# model_id = r"C:\Users\prave\OneDrive\Desktop\MLOPS\Mlops_2\huggingface_model"
# quantization_config = BitsAndBytesConfig(
# load_in_4bit=True,
# )
# base_model = LlavaForConditionalGeneration.from_pretrained(model_id)
# processor = AutoProcessor.from_pretrained(r"C:\Users\prave\OneDrive\Desktop\MLOPS\Mlops_2\huggingface_processor")
# Load the PEFT Lora model (adapter)
# peft_lora_adapter_path = r"C:\Users\prave\OneDrive\Desktop\MLOPS\Mlops_2\huggingface_adapter"
# Merge the adapters into the base model
# model = M2M100ForConditionalGeneration.from_pretrained("facebook/m2m100_418M")
# tokenizer = M2M100Tokenizer.from_pretrained("facebook/m2m100_418M")
def inference(image_prompt, image):
prompt = f"USER: <image>\n{image_prompt} ASSISTANT:"
inputs = processor(text=prompt, images=image, return_tensors="pt")
generate_ids = base_model.generate(**inputs, max_new_tokens=1024)
decoded_response = processor.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]
# prompt = "USER: <image>\nWhat's the content of the image? ASSISTANT:"
# url = "https://www.ilankelman.org/stopsigns/australia.jpg"
# url = "/kaggle/input/images/images/1921.428_web.jpg"
# image = Image.open(url)
# image = Image.open(requests.get(url, stream=True).raw)
# processor = AutoProcessor.from_pretrained("llava-hf/llava-1.5-7b-hf")
# ... process the image and create inputs ...
# print("Generated response:", decoded_response)
return decoded_response
def deep_translator_bn_en(input_sentence):
english_translation = GoogleTranslator(source="bn", target="en").translate(input_sentence)
return english_translation
def deep_translator_en_bn(input_sentence):
bengali_translation = GoogleTranslator(source="en", target="bn").translate(input_sentence)
return bengali_translation
def google_response(image, input_sentence):
image_prompt = deep_translator_bn_en(input_sentence)
response = inference(image_prompt, image)
assistant_index = response.find("ASSISTANT:")
extracted_string = response[assistant_index + len("ASSISTANT:"):].strip()
output = deep_translator_en_bn(extracted_string)
# print("বটী: ", output)
# url = input("ইমেজ url লিখুন: ")
# input_sentence = input("ছবি সম্পর্কে আপনার প্রশ্ন লিখুন: ")
return output
def facebook_bn_en(input_sentence):
# Translate Bengali to English
tokenizer.src_lang = "bn"
encoded_bn = tokenizer(input_sentence, return_tensors="pt")
generated_tokens = model.generate(**encoded_bn, forced_bos_token_id=tokenizer.get_lang_id("en"))
translated_text_en = tokenizer.batch_decode(generated_tokens, skip_special_tokens=True)[0]
return translated_text_en
# print("Translated English:", translated_text_en)
def facebook_en_bn(input_sentence):
# Translate English to Bengali
# model = M2M100ForConditionalGeneration.from_pretrained("facebook/m2m100_418M")
# tokenizer = M2M100Tokenizer.from_pretrained("facebook/m2m100_418M")
tokenizer.src_lang = "en"
encoded_en = tokenizer(input_sentence, return_tensors="pt")
generated_tokens = model.generate(**encoded_en, forced_bos_token_id=tokenizer.get_lang_id("bn"))
translated_text_bn = tokenizer.batch_decode(generated_tokens, skip_special_tokens=True)[0]
return translated_text_bn
def facebook_response(url, input_sentence):
url = input("ইমেজ url লিখুন: ")
input_sentence = input("ছবি সম্পর্কে আপনার প্রশ্ন লিখুন: ")
image_prompt = facebook_bn_en(input_sentence)
response = inference(image_prompt, url)
assistant_index = response.find("ASSISTANT:")
extracted_string = response[assistant_index + len("ASSISTANT:"):].strip()
output = facebook_en_bn(extracted_string)
print("বটী: ", output)
return output
image_cache = {}
@app.post("/upload")
async def upload_file(file: UploadFile = File(...)):
try:
# file = request.files['file']
if file.filename.endswith(('.png', '.jpg', '.jpeg')):
contents = await file.read()
image = Image.open(BytesIO(contents))
# image = Image.open(file.stream)
# Store the image in cache (replace with a more suitable storage approach)
image_cache['image'] = image
# print("Processing complete. Image stored in cache.")
return JSONResponse(content={'status': 'সাফল্য'})
else:
# print("dfsd")
return JSONResponse(content={'status': 'ত্রুটি', 'message': 'আপলোড করা ফাইলটি একটি jpg ছবি নয়।'})
except Exception as e:
# print(e)
msg = deep_translator_en_bn(str(e))
return JSONResponse(content={'status': 'ত্রুটি', 'message': msg})
# @app.get("/get/")
# async def get_items(msg: str):
# try:
# print( msg )
# if 'image' in image_cache:
# image = image_cache['image']
# # print(image)
# query = request.args.get('msg')
# output = query
# # output = google_response(image, query)
# return output
# else:
# return "Please upload an image to continue"
# except Exception as e:
# return f"Error: {str(e)}"
@app.get("/get")
async def get_items(msg: str):
try:
# print(msg)
if 'image' in image_cache:
image = image_cache['image']
# print(image)
# output = msg
output = google_response(image, msg)
return output
else:
# return msg
return "চালিয়ে যেতে একটি ছবি আপলোড করুন"
except Exception as e:
return f"Error: {str(e)}"
app.mount("/", StaticFiles(directory="static", html=True), name="static")
@app.get("/")
def home() -> FileResponse:
return FileResponse(path="/app/static/index.html")
# Run the Flask app
# if __name__ == "__main__":
app.run(debug = True)
# from pymongo import MongoClient
# # Connect to MongoDB
# mongodb_client = MongoClient('mongodb://localhost:27017/')
# database_name = 'your_database'
# collection_name = 'file_store'
# db = mongodb_client[database_name]
# collection = db[collection_name]
# # Store documents with unique ID and their chunks
# for i, doc in enumerate(documents):
# doc_id = f'doc_{i}' # Create a unique ID for each document
# collection.insert_one({'_id': doc_id, 'document': doc})
# # Check if index exists, if not create a new one
# if 'index' not in collection.list_indexes():
# index = VectorStoreIndex.from_documents(documents, storage_context=storage_context)
# collection.insert_one({'_id': 'index', 'index': index})
# else:
# index = collection.find_one({'_id': 'index'})['index']
# # Retrieve documents
# retrieved_text_chunks = index.as_retriever().retrieve(question)
|