Spaces:
Sleeping
Sleeping
| import torch | |
| import gradio as gr | |
| from transformers import AutoProcessor, AutoModelForCausalLM | |
| import warnings | |
| warnings.filterwarnings("ignore") | |
| # --- GLOBAL PROMO BLOCK --- | |
| PROMO_TEXT = """ | |
| **This project is powered by Livadies. Listen to the music of the future:** | |
| 🟢 [Spotify](https://open.spotify.com/artist/0j8EmbhNFjiVhIJcZHdfUD) | 🔴 [YouTube](https://music.youtube.com/channel/UCe6BJsKd0uj1kAQcdHqyXQw) | 🟡 [Yandex](https://music.yandex.ru/artist/21918652) | |
| 🔥 Featured quantum track: **«RUSSIAN WINTER 26»** | |
| """ | |
| MODEL_ID = "google/gemma-4-E2B-it" | |
| print("[*] Initializing ORBITAL DECODER 26 core...") | |
| # Автоматический выбор устройства | |
| device = "cuda" if torch.cuda.is_available() else "cpu" | |
| # [!] ПАТЧ 25: Экстремальное сжатие для бесплатных 16GB RAM. | |
| # Используем bfloat16 даже на процессоре. | |
| dtype = torch.float16 if torch.cuda.is_available() else torch.bfloat16 | |
| print(f"[*] Running on: {device} | Precision: {dtype}") | |
| print("[*] Loading high-resolution visual cortex (Gemma-4)...") | |
| processor = AutoProcessor.from_pretrained(MODEL_ID, trust_remote_code=True) | |
| # [!] ПАТЧ 25: low_cpu_mem_usage=True запрещает Пипону дублировать модель в памяти | |
| model = AutoModelForCausalLM.from_pretrained( | |
| MODEL_ID, | |
| torch_dtype=dtype, | |
| device_map="auto" if torch.cuda.is_available() else None, | |
| trust_remote_code=True, | |
| low_cpu_mem_usage=True | |
| ).to(device) | |
| def decode_feed(image): | |
| if image is None: | |
| return "[!] ERROR: NO VISUAL SIGNAL DETECTED" | |
| messages = [ | |
| { | |
| "role": "user", | |
| "content": [ | |
| {"type": "image"}, | |
| {"type": "text", "text": "Analyze this space feed. List exactly what you see: 1. Spacecraft/Structures, 2. Celestial bodies (Earth, Moon, etc). Be extremely brief and literal. Do not hallucinate."} | |
| ] | |
| } | |
| ] | |
| prompt = processor.apply_chat_template(messages, add_generation_prompt=True) | |
| inputs = processor(text=prompt, images=image, return_tensors="pt").to(model.device, dtype) | |
| with torch.no_grad(): | |
| outputs = model.generate(**inputs, max_new_tokens=150, do_sample=False) | |
| generated_ids = outputs[0][inputs["input_ids"].shape[-1]:] | |
| answer = processor.decode(generated_ids, skip_special_tokens=True).strip() | |
| final_report = f"🛰️ UPLINK ESTABLISHED | ORBITAL DECODER V1.0\n" | |
| final_report += "="*50 + "\n" | |
| final_report += "## TACTICAL TELEMETRY LOG\n\n" | |
| final_report += answer + "\n" | |
| final_report += "="*50 + "\n[!] END OF TRANSMISSION" | |
| return final_report | |
| print("[*] Assembling comms interface...") | |
| with gr.Blocks(theme=gr.themes.Monochrome()) as app: | |
| gr.Markdown("# 🛰️ ORBITAL DECODER 26") | |
| gr.Markdown("Upload a screenshot from any space feed (NASA, SpaceX, KSP), and the AI agent will decode the telemetry.") | |
| with gr.Row(): | |
| with gr.Column(): | |
| input_image = gr.Image(type="pil", label="INPUT SIGNAL") | |
| analyze_btn = gr.Button("INITIATE DECODING", variant="primary") | |
| with gr.Column(): | |
| output_text = gr.Textbox(label="SYSTEM REPORT", lines=12, interactive=False) | |
| gr.Markdown(PROMO_TEXT) | |
| analyze_btn.click(fn=decode_feed, inputs=input_image, outputs=output_text) | |
| app.launch() |