Spaces:
Running
Running
| import os | |
| import time | |
| from huggingface_hub import InferenceClient | |
| from src.config import HF_TOKEN, VISION_MODEL | |
| client = InferenceClient(token=HF_TOKEN) | |
| def generate_image_description(image_path: str) -> str: | |
| """ | |
| Transmits local image binaries over the wire to create a textual visual description. | |
| Includes fallback error catching and a 503 warmup buffer to prevent RAG dropouts. | |
| """ | |
| try: | |
| if not os.path.exists(image_path) or os.path.getsize(image_path) == 0: | |
| return "Visual asset placeholder. Image file missing or unreadable." | |
| with open(image_path, "rb") as img_file: | |
| image_data = img_file.read() | |
| response = client.image_to_text(image=image_data, model=VISION_MODEL) | |
| if hasattr(response, "generated_text"): | |
| return response.generated_text | |
| elif isinstance(response, dict) and "generated_text" in response: | |
| return response["generated_text"] | |
| elif isinstance(response, list) and len(response) > 0 and "generated_text" in response[0]: | |
| return response[0]["generated_text"] | |
| return str(response) | |
| except Exception as e: | |
| error_msg = str(e) | |
| if "503" in error_msg or "loading" in error_msg.lower(): | |
| try: | |
| print(f"🔄 Vision model warming up. Retrying request for {image_path}...") | |
| time.sleep(4) | |
| with open(image_path, "rb") as img_file: | |
| image_data = img_file.read() | |
| response = client.image_to_text(image=image_data, model=VISION_MODEL) | |
| return response.generated_text if hasattr(response, 'generated_text') else str(response) | |
| except Exception as retry_err: | |
| print(f"⚠️ Retry failed: {retry_err}") | |
| print(f"⚠️ Log Error: Vision pipeline failed on {image_path}. Context details: {e}") | |
| return "Slide layout diagram graphic asset component containing system descriptions." | |
| def generate_text_response(model_id: str, system_context: str, user_query: str) -> str: | |
| """ | |
| Fallback Helper: Routes raw text requests through conversational endpoints | |
| to bypass provider restrictions when not using LangChain. | |
| """ | |
| try: | |
| response = client.chat.completions.create( | |
| model=model_id, | |
| messages=[ | |
| {"role": "system", "content": system_context}, | |
| {"role": "user", "content": user_query} | |
| ], | |
| max_tokens=1024, | |
| temperature=0.3 | |
| ) | |
| return response.choices[0].message.content | |
| except Exception as e: | |
| print(f"⚠️ Log Error: Conversational pipeline failure. Context details: {e}") | |
| return "An error occurred while generating a response from the text model." |