Spaces:
Runtime error
Runtime error
| from fastapi import FastAPI, UploadFile, File | |
| from transformers import pipeline | |
| from fastai.vision.all import * | |
| from PIL import Image | |
| # NOTE - we configure docs_url to serve the interactive Docs at the root path | |
| # of the app. This way, we can use the docs as a landing page for the app on Spaces. | |
| app = FastAPI(docs_url="/") | |
| pipe = pipeline("text2text-generation", model="google/flan-t5-small") | |
| categories = ('Heart', 'Oblong', 'Oval', 'Round', 'Square') | |
| learn = load_learner('model.pkl') | |
| def generate(text: str): | |
| """ | |
| Using the text2text-generation pipeline from `transformers`, generate text | |
| from the given input text. The model used is `google/flan-t5-small`, which | |
| can be found [here](https://huggingface.co/google/flan-t5-small). | |
| """ | |
| output = pipe(text) | |
| return {"output": output[0]["generated_text"]} | |
| async def face_analyse(file: UploadFile = File(...)): | |
| # Read the uploaded file content | |
| request_object_content = await file.read() | |
| try: | |
| # Attempt to open the image | |
| img = Image.open(io.BytesIO(request_object_content)) | |
| except Exception as e: | |
| return {"error": "Failed to open the image file. Make sure it is a valid image file."} | |
| # Check if img is None or not | |
| if img is None: | |
| return {"error": "Failed to open the image file."} | |
| try: | |
| # Resize the image to 300x300 pixels | |
| img = img.resize((300, 300)) | |
| except Exception as e: | |
| return {"error": "Failed to resize the image."} | |
| try: | |
| # Assuming 'learn' is your image classifier model | |
| pred, idx, probs = learn.predict(img) | |
| except Exception as e: | |
| return {"error": "Failed to make predictions."} | |
| # Assuming categories is a list of category labels | |
| return dict(zip(categories, map(float, probs))) | |
| # Initialize the Meta-Llama-3-70B-Instruct pipeline | |
| llama_model_id = "meta-llama/Meta-Llama-3-70B-Instruct" | |
| llama_pipeline = pipeline( | |
| "text-generation", | |
| model=llama_model_id, | |
| model_kwargs={"torch_dtype": torch.bfloat16}, | |
| device_map="auto", | |
| ) | |
| """ | |
| @app.post("/frame-details") | |
| def frame_details(text: str): | |
| # Extract structured information from a given text about frames using the Meta-Llama-3-70B-Instruct model. The model will output details like price, color, etc. | |
| messages = [ | |
| {"role": "system", "content": "You are an api chatbot for frames and glasses who always responds with only a json. Extract the infomation given into a structured json for frame details"}, | |
| {"role": "user", "content": text}, | |
| ] | |
| terminators = [ | |
| llama_pipeline.tokenizer.eos_token_id, | |
| llama_pipeline.tokenizer.convert_tokens_to_ids("") | |
| ] | |
| outputs = llama_pipeline( | |
| messages, | |
| max_new_tokens=256, | |
| eos_token_id=terminators, | |
| do_sample=True, | |
| temperature=0.6, | |
| top_p=0.9, | |
| ) | |
| # Extract the last generated text from the output | |
| generated_text = outputs[0]["generated_text"] | |
| # Parse the generated text to extract structured information (this is an example and should be customized) | |
| # Here, you would add your own logic to parse the generated text | |
| # For now, we'll assume the generated text is in JSON format | |
| try: | |
| extracted_info = eval(generated_text) # It's recommended to use `json.loads` in a real application | |
| except Exception as e: | |
| return {"error": "Failed to parse the generated text."} | |
| return extracted_info | |
| if __name__ == "__main__": | |
| import uvicorn | |
| uvicorn.run(app, host="0.0.0.0", port=8000) | |
| """ |