DHEIVER commited on
Commit
6e8113e
·
verified ·
1 Parent(s): e39300d

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +34 -16
app.py CHANGED
@@ -1,7 +1,8 @@
1
  import gradio as gr
2
- from huggingface_hub import InferenceApi
3
  from PIL import Image
4
  import io
 
5
  from functools import lru_cache
6
  import tempfile
7
 
@@ -14,23 +15,41 @@ def update_api_token(new_token):
14
  API_TOKEN = new_token.strip()
15
  return f"✅ Token atualizado com sucesso: {API_TOKEN[:8]}... (ocultado)"
16
 
17
- # Função para criar uma instância da API com o token atualizado
18
- def get_inference_api(repo_id):
19
- return InferenceApi(repo_id=repo_id, token=API_TOKEN)
20
 
21
- # Funções para os modelos utilizando a API Hugging Face
22
  @lru_cache(maxsize=128)
23
  def interpret_image_cached(image_bytes):
24
- captioning_api = get_inference_api("Salesforce/blip2-opt-2.7b")
25
- response = captioning_api(image_bytes)
26
- description = response.get("generated_text", "").strip().capitalize()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
27
  if not description.endswith("."):
28
  description += "."
29
  return description
30
 
 
31
  @lru_cache(maxsize=128)
32
  def nutritional_analysis_cached(description):
33
- nutrition_api = get_inference_api("google/flan-t5-large")
34
  prompt = (
35
  f"Com base na descrição do prato de comida abaixo, forneça uma análise nutricional detalhada.\n\n"
36
  f"Descrição do prato: {description}\n\n"
@@ -43,27 +62,28 @@ def nutritional_analysis_cached(description):
43
  f"- Recomendações para melhorar o prato: [sugestões]\n\n"
44
  f"Análise nutricional:"
45
  )
46
- response = nutrition_api(prompt, max_length=300)
47
  analysis = response.get("generated_text", "").replace("Análise nutricional:", "").strip()
48
  return analysis
49
 
 
50
  @lru_cache(maxsize=128)
51
  def health_tips_cached(description):
52
- nutrition_api = get_inference_api("google/flan-t5-large")
53
  prompt = (
54
  f"Com base na descrição do prato de comida abaixo, forneça dicas de saúde e sugestões "
55
  f"para melhorar o prato, tornando-o mais equilibrado e nutritivo. Liste as dicas em tópicos.\n\n"
56
  f"Descrição do prato: {description}\n\n"
57
  f"Dicas de saúde:"
58
  )
59
- response = nutrition_api(prompt, max_length=150)
60
  tips = response.get("generated_text", "").replace("Dicas de saúde:", "").strip()
61
  return tips
62
 
63
  # Função principal para processar a imagem e gerar resultados
64
  def process_image(image):
65
  try:
66
- # Converter a imagem para bytes para uso com as APIs
67
  buffered = io.BytesIO()
68
  image.save(buffered, format="JPEG")
69
  image_bytes = buffered.getvalue()
@@ -129,7 +149,6 @@ with gr.Blocks(theme=gr.themes.Soft(primary_hue="blue", secondary_hue="cyan")) a
129
 
130
  # Estado oculto para armazenar o resultado completo para o download
131
  result_state = gr.State("")
132
- # Campo de feedback para exibir mensagens do processo
133
  feedback = gr.Markdown("")
134
 
135
  submit_button.click(
@@ -143,8 +162,7 @@ with gr.Blocks(theme=gr.themes.Soft(primary_hue="blue", secondary_hue="cyan")) a
143
  inputs=result_state,
144
  outputs=gr.File(label="Seu Resultado")
145
  )
146
-
147
- # Conectar botão de atualização do token à função correspondente
148
  update_button.click(
149
  update_api_token,
150
  inputs=api_token_input,
 
1
  import gradio as gr
2
+ from huggingface_hub import InferenceClient
3
  from PIL import Image
4
  import io
5
+ import base64
6
  from functools import lru_cache
7
  import tempfile
8
 
 
15
  API_TOKEN = new_token.strip()
16
  return f"✅ Token atualizado com sucesso: {API_TOKEN[:8]}... (ocultado)"
17
 
18
+ # Função para criar uma instância da API com o token atualizado usando InferenceClient
19
+ def get_inference_client(model):
20
+ return InferenceClient(model=model, token=API_TOKEN)
21
 
22
+ # Função para interpretar a imagem com cache utilizando InferenceClient (captioning)
23
  @lru_cache(maxsize=128)
24
  def interpret_image_cached(image_bytes):
25
+ # Converter imagem para base64 e criar data URI
26
+ base64_image = base64.b64encode(image_bytes).decode("utf-8")
27
+ data_uri = f"data:image/jpeg;base64,{base64_image}"
28
+
29
+ # Instanciar o client para o modelo de captioning
30
+ client = get_inference_client("Salesforce/blip2-opt-2.7b")
31
+
32
+ # Construção da mensagem seguindo o exemplo da API de chat para visão
33
+ messages = [{
34
+ "role": "user",
35
+ "content": [
36
+ {"type": "image_url", "image_url": {"url": data_uri}},
37
+ {"type": "text", "text": "Descreva esta imagem em uma frase."}
38
+ ]
39
+ }]
40
+
41
+ # Chamada da API usando método de chat (a estrutura de retorno segue o padrão da API)
42
+ output = client.chat.completions.create(messages=messages)
43
+ # Supondo que o resultado esteja em output["choices"][0]["message"]["content"]
44
+ description = output["choices"][0]["message"]["content"].strip().capitalize()
45
  if not description.endswith("."):
46
  description += "."
47
  return description
48
 
49
+ # Função para análise nutricional com cache utilizando InferenceClient e método post
50
  @lru_cache(maxsize=128)
51
  def nutritional_analysis_cached(description):
52
+ client = get_inference_client("google/flan-t5-large")
53
  prompt = (
54
  f"Com base na descrição do prato de comida abaixo, forneça uma análise nutricional detalhada.\n\n"
55
  f"Descrição do prato: {description}\n\n"
 
62
  f"- Recomendações para melhorar o prato: [sugestões]\n\n"
63
  f"Análise nutricional:"
64
  )
65
+ response = client.post(json={"inputs": prompt})
66
  analysis = response.get("generated_text", "").replace("Análise nutricional:", "").strip()
67
  return analysis
68
 
69
+ # Função para gerar dicas de saúde com cache utilizando InferenceClient e método post
70
  @lru_cache(maxsize=128)
71
  def health_tips_cached(description):
72
+ client = get_inference_client("google/flan-t5-large")
73
  prompt = (
74
  f"Com base na descrição do prato de comida abaixo, forneça dicas de saúde e sugestões "
75
  f"para melhorar o prato, tornando-o mais equilibrado e nutritivo. Liste as dicas em tópicos.\n\n"
76
  f"Descrição do prato: {description}\n\n"
77
  f"Dicas de saúde:"
78
  )
79
+ response = client.post(json={"inputs": prompt})
80
  tips = response.get("generated_text", "").replace("Dicas de saúde:", "").strip()
81
  return tips
82
 
83
  # Função principal para processar a imagem e gerar resultados
84
  def process_image(image):
85
  try:
86
+ # Converter imagem para bytes
87
  buffered = io.BytesIO()
88
  image.save(buffered, format="JPEG")
89
  image_bytes = buffered.getvalue()
 
149
 
150
  # Estado oculto para armazenar o resultado completo para o download
151
  result_state = gr.State("")
 
152
  feedback = gr.Markdown("")
153
 
154
  submit_button.click(
 
162
  inputs=result_state,
163
  outputs=gr.File(label="Seu Resultado")
164
  )
165
+
 
166
  update_button.click(
167
  update_api_token,
168
  inputs=api_token_input,