Spaces:
Sleeping
Sleeping
| # from config import model_gt | |
| # import torch | |
| # from transformers import GPT2Tokenizer, GPT2LMHeadModel | |
| # | |
| # tokenizer = GPT2Tokenizer.from_pretrained(model_gt) | |
| # model = GPT2LMHeadModel.from_pretrained(model_gt) | |
| # | |
| # # text = "Replace me by any text you'd like." | |
| # | |
| # def generate_text(prompt:str, max_length:int=100)->str: | |
| # """ | |
| # Генерирует продолжение текста на основе заданного промпта. | |
| # """ | |
| # try: | |
| # tokenizer.pad_token=tokenizer.eos_token | |
| # inputs = tokenizer([prompt], | |
| # return_tensors="pt", # PyTorch тензоры | |
| # truncation=True, | |
| # padding=True, | |
| # add_special_tokens=True, | |
| # max_length=512) | |
| # with torch.no_grad(): | |
| # outputs=model.generate( | |
| # input_ids=inputs.input_ids, | |
| # attention_mask=inputs.attention_mask, | |
| # max_length=max_length, | |
| # num_return_sequences=1, | |
| # pad_token_id=tokenizer.eos_token_id, | |
| # do_sample=True, # включаем вероятностную выборку | |
| # temperature=0.6, # креативность (0 – детерминированно, 1 – случайно) | |
| # ) | |
| # generated_text = tokenizer.decode(outputs[0], skip_special_tokens=True) | |
| # | |
| # return generated_text | |
| # | |
| # except Exception as e: | |
| # return f'error of generaion: {str(e)}' | |
| import os | |
| import requests | |
| # Загружаем токен из переменных окружения | |
| HF_TOKEN = os.getenv("HF_TOKEN") | |
| if not HF_TOKEN: | |
| raise ValueError("HF_TOKEN не задан в окружении") | |
| MODEL_GT = "ai-forever/rugpt3small_based_on_gpt2" # можно заменить на другую модель | |
| API_URL = f"https://api-inference.huggingface.co/models/{MODEL_GT}" | |
| def generate_text(prompt: str, max_length: int = 80) -> str: | |
| """ | |
| Генерирует продолжение текста через Hugging Face Inference API. | |
| """ | |
| if not prompt.strip(): | |
| return "Промпт пуст." | |
| headers = {"Authorization": f"Bearer {HF_TOKEN}"} | |
| payload = { | |
| "inputs": prompt, | |
| "parameters": { | |
| "max_new_tokens": max_length, # не max_length, а max_new_tokens! | |
| "temperature": 0.7, | |
| "top_p": 0.9, | |
| "do_sample": True, | |
| "repetition_penalty": 1.2, | |
| } | |
| } | |
| try: | |
| # Отправляем POST-запрос к API | |
| response = requests.post(API_URL, headers=headers, json=payload, timeout=30) | |
| response.raise_for_status() # выбросит исключение при HTTP-ошибке | |
| result = response.json() | |
| # API возвращает список, в котором первый элемент — словарь с полем generated_text | |
| if isinstance(result, list) and len(result) > 0: | |
| generated = result[0].get('generated_text', '') | |
| # Иногда модель возвращает полный текст вместе с промптом — убираем промпт | |
| if generated.startswith(prompt): | |
| # generated = generated[len(prompt):].strip() | |
| generated = generated.strip() | |
| return generated if generated else "Не удалось сгенерировать текст." | |
| else: | |
| return f"Неожиданный ответ API: {result}" | |
| except requests.exceptions.Timeout: | |
| return "Ошибка: время ожидания API истекло." | |
| except requests.exceptions.RequestException as e: | |
| return f"Ошибка запроса к API: {str(e)}" | |
| except Exception as e: | |
| return f"Неизвестная ошибка: {str(e)}" |