File size: 2,894 Bytes
d92c861
 
 
 
 
 
 
 
6122003
d92c861
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6122003
 
 
 
 
 
 
 
 
 
 
 
d2e31be
 
098faa2
 
2fd10b1
098faa2
 
 
d92c861
 
 
fed63e7
 
d92c861
6122003
d92c861
fed63e7
 
 
 
 
 
 
 
 
e782b03
 
 
 
 
 
 
 
 
 
 
7dff946
e782b03
 
 
 
7dff946
6122003
e782b03
6122003
2e1190c
a940aa8
7dff946
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
from fastapi import FastAPI, File, UploadFile, HTTPException
from fastapi.responses import HTMLResponse
from fastapi.responses import StreamingResponse
from fastapi.responses import FileResponse
from fastapi.middleware.cors import CORSMiddleware
import pandas as pd
from io import StringIO
import os
import uuid

from pandasai import SmartDataframe
import pandas as pd
from pandasai.llm import OpenAI


secret = os.environ["key"]

app = FastAPI()
app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

import base64
from PIL import Image
from io import BytesIO

def convert_image_to_base64(image_path):
    with Image.open(image_path) as image:
        buffered = BytesIO()
        image.save(buffered, format="PNG")
        img_bytes = buffered.getvalue()
        img_base64 = base64.b64encode(img_bytes)
        img_base64_string = img_base64.decode("utf-8")
    return img_base64_string
    
llm = OpenAI(api_token=secret,save_charts=True)
df = pd.read_csv("233.csv")
sdf = SmartDataframe(df, config={"llm": llm})
sdf.chat("give bar chart")
image_path = "exports/charts/temp_chart.png"  # Replace with your image's path
base64str = convert_image_to_base64(image_path)

@app.post("/get_image_for_text")
async def get_image_for_text(email,query,file: UploadFile = File(...)):
        print(file.filename)
        file_name = file.filename
        with open(email+file_name, "wb") as file_object:
            file_object.write(file.file.read())
        uuid1 = uuid.uuid1()
        llm = OpenAI(api_token=secret,save_charts=True)

        # Determine the file type and read accordingly
        if file_name.endswith('.csv'):
            df = pd.read_csv(email+file_name)
        elif file_name.endswith('.xls') or file_name.endswith('.xlsx'):
            df = pd.read_excel(email+file_name)
        else:
            return {"error": "Unsupported file type"}
            
        sdf = SmartDataframe(df, config={"llm": llm})
        sdf.chat(query)  

        code_to_exec = """
        import matplotlib.pyplot as plt
        import seaborn as sns\n"""
        code_to_exec = code_to_exec + sdf.last_code_generated.replace("dfs[0]","dfs")
        code_to_exec = code_to_exec.replace("/content/exports/charts/temp_chart.png",email+file_name+".png")
        print(code_to_exec)
        local_vars = {'dfs': df}
        exec(code_to_exec, globals(), local_vars)
        try:

            print(email+file_name+".png",df.head())
            
            return FileResponse(email+file_name+".png")
            image_path = "exports/charts/temp_chart.png"  # Replace with your image's path
            base64str = convert_image_to_base64(image_path)
            
            return {"id":str(uuid1),"image":base64str}
        except Exception as e:
            print(str(e))
            return "try again"