# app.py import gradio as gr from huggingface_hub import InferenceClient from ddgs import DDGS # Публичная модель → токен НЕ нужен! MODEL_NAME = "openai/gpt-oss-20b" client = InferenceClient() # ← без токена! def web_search(query, max_results=3): try: with DDGS() as ddgs: results = ddgs.text(query, region="ru-ru", max_results=max_results) return "\n".join([f"{r['title']}: {r['body']}" for r in results]) except Exception as e: return f"Ошибка поиска: {str(e)[:100]}" def respond(message, history, system_message, max_tokens, temperature, top_p): user_input = message.strip() user_lower = user_input.lower() if user_lower.startswith("система:"): return "🔒 Управление системой недоступно в демо-версии." if user_lower.startswith("поиск:"): query = user_input[6:].strip() if not query: return "🔍 Пример: `поиск: погода в Москве`" yield "🔍 Ищу...\n" context = web_search(query) full_prompt = ( f"{system_message}\n\n" f"ИНФОРМАЦИЯ ИЗ ИНТЕРНЕТА:\n{context}\n\n" f"ВОПРОС: {query}\nОТВЕТ НА РУССКОМ:" ) else: full_prompt = f"{system_message}\n\nВОПРОС: {user_input}\nОТВЕТ НА РУССКОМ:" messages = [{"role": "user", "content": full_prompt}] response = "" try: for chunk in client.chat_completion( messages, model=MODEL_NAME, max_tokens=max_tokens, stream=True, temperature=temperature, top_p=top_p, ): token = chunk.choices[0].delta.content or "" response += token yield response except Exception as e: yield f"⚠️ Ошибка: {str(e)}" chatbot = gr.ChatInterface( respond, type="messages", additional_inputs=[ gr.Textbox( value="Ты — Newton MAX. Отвечай кратко, точно и только на русском языке.", label="Системное сообщение" ), gr.Slider(1, 1024, 512, label="Макс. токенов"), gr.Slider(0.1, 1.5, 0.7, label="Температура"), gr.Slider(0.1, 1.0, 0.92, label="Top-p"), ], title="🚀 Newton MAX (gpt-oss-20b + поиск)", description="Работает без входа! Поддержка: `поиск: ...`", examples=[ ["Привет!", "Ты — Newton MAX...", 512, 0.7, 0.92], ["Что такое ИИ?", "Ты — Newton MAX...", 512, 0.7, 0.92], ["поиск: последние новости", "Ты — Newton MAX...", 768, 0.8, 0.95], ], ) if __name__ == "__main__": chatbot.launch()