Spaces:
Sleeping
Sleeping
| import requests | |
| import os | |
| import json | |
| from config import HF_API_TOKEN | |
| from models import get_model_config | |
| def call_hf_model(prompt, task="text_generation"): | |
| """ | |
| Call Hugging Face Inference API with improved error handling and response parsing. | |
| """ | |
| if not HF_API_TOKEN: | |
| return {"error": "API Token missing. Please set HF_API_TOKEN in .env file."} | |
| model_cfg = get_model_config(task) | |
| model_id = model_cfg["id"] | |
| api_url = f"https://api-inference.huggingface.co/models/{model_id}" | |
| headers = {"Authorization": f"Bearer {HF_API_TOKEN}"} | |
| # Parameters to ensure better text generation | |
| payload = { | |
| "inputs": prompt, | |
| "parameters": { | |
| "max_new_tokens": 800, | |
| "temperature": 0.7, | |
| "top_p": 0.9, | |
| "return_full_text": False | |
| } | |
| } | |
| try: | |
| response = requests.post(api_url, headers=headers, json=payload, timeout=30) | |
| response.raise_for_status() | |
| result = response.json() | |
| # Handle different response formats from HF API | |
| if isinstance(result, list) and len(result) > 0: | |
| if "generated_text" in result[0]: | |
| return result[0]["generated_text"].strip() | |
| return result[0] | |
| return result | |
| except requests.exceptions.HTTPError as e: | |
| if response.status_code == 503: | |
| return {"error": "Model is currently loading. Please try again in a few seconds."} | |
| return {"error": f"HTTP Error: {str(e)}"} | |
| except Exception as e: | |
| return {"error": f"Connection Error: {str(e)}"} | |
| def generate_educational_content(prompt_type, **kwargs): | |
| """ | |
| Helper to generate content based on prompts.json templates. | |
| """ | |
| try: | |
| # Get absolute path to data/prompts.json | |
| base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) | |
| prompts_path = os.path.join(base_dir, "data", "prompts.json") | |
| with open(prompts_path, "r", encoding="utf-8") as f: | |
| prompts = json.load(f) | |
| template = prompts.get(prompt_type, "") | |
| formatted_prompt = template.format(**kwargs) | |
| return call_hf_model(formatted_prompt) | |
| except Exception as e: | |
| return {"error": f"Prompt Error: {str(e)}"} | |