-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathproto.py
120 lines (106 loc) · 3.61 KB
/
proto.py
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
from idlelib.pyparse import trans
from tkinter import filedialog
import PyPDF2
from openai import OpenAI
import base64
import tkinter as tk
import docx
client = OpenAI(api_key='')
MODEL = "gpt-4o-mini"
def selecionar_arquivo():
root = tk.Tk()
root.withdraw()
arquivo = filedialog.askopenfilename(
filetypes=[("PDF", "*.pdf"), ("DOCX", "*.docx"), ("Images", "*.jpg;*.jpeg;*.png")],
title="Select a file"
)
return arquivo
def verificar_tipo_arquivo(arquivo: str) -> str:
"""
Verifica o tipo de arquivo com base na extensão.
Args:
arquivo (str): Caminho do arquivo.
Returns:
str: Tipo de arquivo ('pdf', 'docx', 'image') ou 'unknown' se não for suportado.
"""
if arquivo.endswith(".pdf"):
return "pdf"
elif arquivo.endswith(".docx"):
return "docx"
elif arquivo.endswith((".jpg", ".jpeg", ".png")):
return "image"
else:
return "unknown"
def transcrever(arquivo):
if arquivo.endswith(".pdf"):
with open(arquivo, 'rb') as file:
leitor = PyPDF2.PdfReader(file)
texto = ''
for pagina in leitor.pages:
texto += pagina.extract_text() + '\n'
return texto
elif arquivo.endswith(".docx"):
doc = docx.Document(arquivo)
texto = '\n'.join([paragrafo.text for paragrafo in doc.paragraphs])
return texto
elif arquivo.endswith(".jpeg") or arquivo.endswith(".jpg") or arquivo.endswith(".png"):
with open(arquivo, 'rb') as image_file:
return base64.b64encode(image_file.read()).decode('utf-8')
def gpt(prompt, conteudo, is_image=False):
try:
if is_image:
completion = client.chat.completions.create(
model=MODEL,
messages=[
{"role": "system", "content": "Você é professor numa classe universitária"},
{
"role": "user",
"content": [
{"type": "text", "text": prompt},
{
"type": "image_url",
"image_url": {
"url": f"data:image/jpeg;base64,{conteudo}"
}
}
]
}
]
)
else:
completion = client.chat.completions.create(
model=MODEL,
messages=[
{"role": "system", "content": "Você é professor numa classe universitária"},
{"role": "user", "content": f"{prompt}\n\n{conteudo}"}
]
)
return completion.choices[0].message.content
except Exception as e:
print(f"Erro ao chamar a API: {e}")
return None
arquivo = selecionar_arquivo()
def main():
if not arquivo:
conteudo = "\n"
while True:
prompt = input("Você: ")
if prompt.lower() == 'quit':
break
resposta = gpt(prompt, conteudo, is_image=False)
print(resposta)
tipo_arquivo = verificar_tipo_arquivo(arquivo)
conteudo = transcrever(arquivo)
is_image = (tipo_arquivo == "image")
while True:
prompt = input("Você: ")
if prompt.lower() == 'quit':
break
resposta = gpt(prompt, conteudo, is_image)
if resposta:
print(resposta)
else:
print("Erro ao processar a resposta.")
if __name__ == '__main__':
main()
#BRAVO FERNANDO 2005 WORLD CHAMPION