habulaj commited on
Commit
6660c10
·
verified ·
1 Parent(s): b08c896

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +71 -32
app.py CHANGED
@@ -760,36 +760,51 @@ async def generate_elements_endpoint(request: GenerateElementsRequest):
760
  contexto_add = f"\n{request.context}" if request.context else ""
761
 
762
  prompt = f"""
763
- Crie um título e uma descrição analisando o vídeo e pesquisando pelo contexto geral e completo, em várias fontes e indo entender. Corrija qualquer informação imprecisa, utilize técnicas modernas que prendeu o leitor a ler até o final. A legenda deve ser compatível e do tamanho de uma legenda do Instagram. A descrição deve ser sem tópico, apenas descrição limpa e direta, sem conclusões parecendo IA e sem enrolação/redundâncias. Eu quero informações concretas, informações, não pensamentos, opiniões ou imaginações. Não deve ser muito redundante, deve ter informação, apenas. Se inspire no modo de escrita dos exemplos.
764
 
765
  Contexto que pode ajudar (baseado na legenda do vídeo): {contexto_add}
766
 
767
  EXEMPLOS:
768
 
769
- [
770
- {{
771
- "title": "O autor escreveu essa história como um pedido de desculpas à irmã porque, ao contrário do herói do filme, ele admite que não foi bondoso o suficiente para salvá-lá.",
772
- "description": "🥲 O autor escreveu a obra como um pedido de desculpas à sua irmã, Keiko, que morreu de fome em 1945. Enquanto o protagonista do filme é o símbolo máximo do sacrifício e do cuidado, Nosaka admitiu em diversas entrevistas que a realidade foi muito mais cruel e humana.\n\nAos 14 anos, por exemplo, consumido pela fome e pelo desespero do pós-guerra em Kobe, Nosaka não dividia toda a comida. Muitas vezes, ele comia primeiro, deixando apenas as sobras para a irmã pequena. O peso de cuidar de um bebê no meio do caos o levava ao limite, chegando a admitir que batia na cabeça de Keiko para que ela parasse de chorar. O arrependimento de ter sobrevivido às custas da negligência com a irmã o assombrou por décadas. Criando Seita, Nosaka projetou o irmão idealizado que ele gostaria de ter sido, dando ao personagem a bondade e a paciência que ele, na vida real, não teve forças para manifestar."
773
- }},
774
- {{
775
- "title": "É incrível como ele era vulnerável e emotivo antes de perder qualquer traço de humanidade",
776
- "description": "No episódio 3 da temporada de Breaking Bad (...And the Bag's in the River), Walter White reconstrói um prato quebrado e descobre que falta um único estilhaço. Ele percebe que Krazy-8, o traficante mantido em seu porão, escondeu a peça pontiaguda para usá-la como arma. Walt estava decidido a libertar o prisioneiro, mas a prova física da traição o forçou a estrangular o traficante pra sobreviver.\n\nFoi nesse momento que o docente de química compreendeu que a empatia seria sua condenação. Morria, naquele instante, o mestre de escola, e surgia a lógica inflexível de Heisenberg 🔥"
777
- }},
778
- {{
779
- "title": "Imagina escrever uma música do próprio livro e vê-la ganhar vida em live-action 😮‍💨",
780
- "description": "Jogos Vorazes deu vida a “The Hanging Tree”, de Suzanne Collins, depois que a canção apareceu pela primeira vez em seu livro Mockingjay. Na Parte 1 de Mockingjay, no Distrito 12, o que começa como uma lembrança solene do pai de Katniss transforma-se em um grito de mobilização para que os distritos se oponham à Capital. Enquanto Snow manipula a mente de Peeta no silêncio do Distrito 13, a canção deixa muito claro que o poder de uma ideia é a única coisa que o medo não consegue deter. Até porque, nada representa uma ameaça maior para um tirano do que um povo que não tem mais nada a perder 🎯"
781
- }},
782
- {{
783
- "title": "Normal People foi tão bom porque Paul Mescal não tava atuando 🥹",
784
- "description": "🥹 Paul Mescal era um ator de teatro praticamente desconhecido até ser escalado como Connell Waldron em Normal People. A adaptação do best-seller de Sally Rooney rendeu a Mescal o BAFTA de Melhor Ator e uma indicação ao Emmy, que claramente consolidou sua química com Daisy Edgar-Jones como uma das mais realistas da televisão recente.\n\nA produção utilizou uma coordenadora de intimidade para garantir que as cenas de vulnerabilidade fossem autênticas, focando mais na linguagem corporal e no silêncio do que em diálogos expositivos. Filmada na Irlanda e na Itália, a série apresenta com precisão técnica a transição da vida escolar em Sligo para a universidade no Trinity College, evitando os clichês estéticos típicos de romances juvenis e concentrando-se no naturalismo das atuações."
785
- }},
786
- {{
787
- "title": "O exato momento em que Carl supera seu luto de décadas 🥹",
788
- "description": "🍇 O broche que Carl entrega a Russell é uma tampa de refrigerante de uva (Grape Soda) original dos anos 30, o mesmo objeto que Ellie deu a Carl quando eles se conheceram na infância.\n\nNo final de Up: Altas Aventuras (2009), Russell, com 8 anos, lida com a falta do pai durante a cerimônia de formatura dos Exploradores da Natureza. Carl Fredricksen sobe ao palco e entrega ao garoto a \"Insígnia Ellie\", a mais alta distinção que ele tem. Isso representa o momento preciso em que Carl supera seu luto de décadas, transferindo o legado de aventura para Russell e assumindo o papel de figura paterna para o garoto.\n\nDirigido por Pete Docter, o longa fez história ao ser a primeira animação a abrir o Festival de Cannes e venceu os Oscars de Melhor Filme de Animação e Melhor Trilha Sonora."
789
- }}
790
- ]
791
 
792
- Mande apenas o JSON na resposta. Sem texto adicional.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
793
  """
794
 
795
  # 4. Enviar para o Gemini
@@ -806,14 +821,38 @@ Mande apenas o JSON na resposta. Sem texto adicional.
806
  content = response_gemini.get("content", "")
807
  print(f"✅ Resposta recebida ({len(content)} chars)")
808
 
809
- # 5. Processar Resposta
810
- titles_data = extract_json_from_text(content)
811
-
812
- if not titles_data:
813
- print(f"⚠️ Falha ao extrair JSON. Conteúdo bruto: {content[:200]}...")
814
- return JSONResponse(content={"raw_content": content, "error": "Failed to parse JSON"}, status_code=200)
815
-
816
- return titles_data
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
817
 
818
  except HTTPException:
819
  raise
 
760
  contexto_add = f"\n{request.context}" if request.context else ""
761
 
762
  prompt = f"""
763
+ Crie um título e uma descrição analisando o vídeo e pesquisando pelo contexto geral e completo, em várias fontes e indo entender. Corrija qualquer informação imprecisa, utilize técnicas modernas que prendem o leitor a ler até o final. A legenda deve ser compatível e do tamanho de uma legenda do Instagram. A descrição deve ser sem tópico, apenas descrição limpa e direta, sem conclusões parecendo IA e sem enrolação/redundâncias. Eu quero informações concretas, informações, não pensamentos, opiniões ou imaginações. Não deve ser muito redundante, deve ter informação, apenas. Se inspire no modo de escrita dos exemplos.
764
 
765
  Contexto que pode ajudar (baseado na legenda do vídeo): {contexto_add}
766
 
767
  EXEMPLOS:
768
 
769
+ TÍTULO: O autor escreveu essa história como um pedido de desculpas à irmã porque, ao contrário do herói do filme, ele admite que não foi bondoso o suficiente para salvá-lá.
770
+ DESCRIÇÃO: 🥲 O autor escreveu a obra como um pedido de desculpas à sua irmã, Keiko, que morreu de fome em 1945. Enquanto o protagonista do filme é o símbolo máximo do sacrifício e do cuidado, Nosaka admitiu em diversas entrevistas que a realidade foi muito mais cruel e humana.
771
+
772
+ Aos 14 anos, por exemplo, consumido pela fome e pelo desespero do pós-guerra em Kobe, Nosaka não dividia toda a comida. Muitas vezes, ele comia primeiro, deixando apenas as sobras para a irmã pequena. O peso de cuidar de um bebê no meio do caos o levava ao limite, chegando a admitir que batia na cabeça de Keiko para que ela parasse de chorar. O arrependimento de ter sobrevivido às custas da negligência com a irmã o assombrou por décadas. Criando Seita, Nosaka projetou o irmão idealizado que ele gostaria de ter sido, dando ao personagem a bondade e a paciência que ele, na vida real, não teve forças para manifestar.
773
+
774
+ ---
775
+
776
+ TÍTULO: É incrível como ele era vulnerável e emotivo antes de perder qualquer traço de humanidade
777
+ DESCRIÇÃO: No episódio 3 da 1ª temporada de Breaking Bad (...And the Bag's in the River), Walter White reconstrói um prato quebrado e descobre que falta um único estilhaço. Ele percebe que Krazy-8, o traficante mantido em seu porão, escondeu a peça pontiaguda para usá-la como arma. Walt estava decidido a libertar o prisioneiro, mas a prova física da traição o forçou a estrangular o traficante pra sobreviver.
778
+
779
+ Foi nesse momento que o docente de química compreendeu que a empatia seria sua condenação. Morria, naquele instante, o mestre de escola, e surgia a lógica inflexível de Heisenberg 🔥
780
+
781
+ ---
782
+
783
+ TÍTULO: Imagina escrever uma música do próprio livro e vê-la ganhar vida em live-action 😮‍💨
784
+ DESCRIÇÃO: Jogos Vorazes deu vida a "The Hanging Tree", de Suzanne Collins, depois que a canção apareceu pela primeira vez em seu livro Mockingjay. Na Parte 1 de Mockingjay, no Distrito 12, o que começa como uma lembrança solene do pai de Katniss transforma-se em um grito de mobilização para que os distritos se oponham à Capital. Enquanto Snow manipula a mente de Peeta no silêncio do Distrito 13, a canção deixa muito claro que o poder de uma ideia é a única coisa que o medo não consegue deter. Até porque, nada representa uma ameaça maior para um tirano do que um povo que não tem mais nada a perder 🎯
 
 
 
 
 
 
785
 
786
+ ---
787
+
788
+ TÍTULO: Normal People foi tão bom porque Paul Mescal não tava atuando 🥹
789
+ DESCRIÇÃO: 🥹 Paul Mescal era um ator de teatro praticamente desconhecido até ser escalado como Connell Waldron em Normal People. A adaptação do best-seller de Sally Rooney rendeu a Mescal o BAFTA de Melhor Ator e uma indicação ao Emmy, que claramente consolidou sua química com Daisy Edgar-Jones como uma das mais realistas da televisão recente.
790
+
791
+ A produção utilizou uma coordenadora de intimidade para garantir que as cenas de vulnerabilidade fossem autênticas, focando mais na linguagem corporal e no silêncio do que em diálogos expositivos. Filmada na Irlanda e na Itália, a série apresenta com precisão técnica a transição da vida escolar em Sligo para a universidade no Trinity College, evitando os clichês estéticos típicos de romances juvenis e concentrando-se no naturalismo das atuações.
792
+
793
+ ---
794
+
795
+ TÍTULO: O exato momento em que Carl supera seu luto de décadas 🥹
796
+ DESCRIÇÃO: 🍇 O broche que Carl entrega a Russell é uma tampa de refrigerante de uva (Grape Soda) original dos anos 30, o mesmo objeto que Ellie deu a Carl quando eles se conheceram na infância.
797
+
798
+ No final de Up: Altas Aventuras (2009), Russell, com 8 anos, lida com a falta do pai durante a cerimônia de formatura dos Exploradores da Natureza. Carl Fredricksen sobe ao palco e entrega ao garoto a "Insígnia Ellie", a mais alta distinção que ele tem. Isso representa o momento preciso em que Carl supera seu luto de décadas, transferindo o legado de aventura para Russell e assumindo o papel de figura paterna para o garoto.
799
+
800
+ Dirigido por Pete Docter, o longa fez história ao ser a primeira animação a abrir o Festival de Cannes e venceu os Oscars de Melhor Filme de Animação e Melhor Trilha Sonora.
801
+
802
+ ---
803
+
804
+ Mande apenas o título e a descrição na resposta, no formato:
805
+
806
+ TÍTULO: <valor>
807
+ DESCRIÇÃO: <valor>
808
  """
809
 
810
  # 4. Enviar para o Gemini
 
821
  content = response_gemini.get("content", "")
822
  print(f"✅ Resposta recebida ({len(content)} chars)")
823
 
824
+ # 5. Processar Resposta (Novo formato TÍTULO/DESCRIÇÃO)
825
+ # Regex para capturar TÍTULO e DESCRIÇÃO
826
+ # Suporta múltiplos blocos se o modelo gerar mais de um
827
+ results = []
828
+ import re # Assuming re is not globally imported, adding it here for scope
829
+ pattern = re.compile(r"TÍTULO:\s*(.*?)\s*\nDESCRIÇÃO:\s*(.*?)(?=\n\s*TÍTULO:|$)", re.DOTALL | re.IGNORECASE)
830
+
831
+ matches = pattern.findall(content)
832
+ for title, description in matches:
833
+ results.append({
834
+ "title": title.strip(),
835
+ "description": description.strip()
836
+ })
837
+
838
+ if not results:
839
+ # Tentar formato sem quebra de linha exata ou variações
840
+ # Fallback simples
841
+ if "TÍTULO:" in content and "DESCRIÇÃO:" in content:
842
+ parts = content.split("TÍTULO:")[1:]
843
+ for part in parts:
844
+ if "DESCRIÇÃO:" in part:
845
+ t_part, d_part = part.split("DESCRIÇÃO:", 1)
846
+ results.append({
847
+ "title": t_part.strip(),
848
+ "description": d_part.strip()
849
+ })
850
+
851
+ if not results:
852
+ print(f"⚠️ Falha ao extrair TÍTULO/DESCRIÇÃO. Conteúdo bruto: {content[:200]}...")
853
+ return JSONResponse(content={"raw_content": content, "error": "Failed to parse format"}, status_code=200)
854
+
855
+ return results
856
 
857
  except HTTPException:
858
  raise