SEVAQWERTY/Free-claude-code
0
1import os2import requests3import gradio as gr4 5OPENROUTER_API_KEY = os.environ.get("OPENROUTER_API_KEY")6if not OPENROUTER_API_KEY:7 raise ValueError("Добавь OPENROUTER_API_KEY в Secrets")8 9def ask_openrouter(message: str, history: list) -> str:10 # Преобразуем историю Gradio в формат messages11 messages = []12 for user_msg, bot_msg in history:13 if user_msg:14 messages.append({"role": "user", "content": user_msg})15 if bot_msg:16 messages.append({"role": "assistant", "content": bot_msg})17 # Добавляем текущий вопрос18 messages.append({"role": "user", "content": message})19 20 try:21 response = requests.post(22 "https://openrouter.ai/api/v1/chat/completions",23 headers={24 "Authorization": f"Bearer {OPENROUTER_API_KEY}",25 "Content-Type": "application/json",26 "HTTP-Referer": "https://huggingface.co",27 "X-Title": "Claude Code"28 },29 json={30 "model": "deepseek/deepseek-r1-0528:free",31 "messages": messages, # теперь точно правильный формат32 "max_tokens": 4096,33 "temperature": 0.7,34 "stream": False35 },36 timeout=6037 )38 if response.status_code == 200:39 return response.json()["choices"][0]["message"]["content"]40 else:41 return f"Ошибка API ({response.status_code}): {response.text[:300]}"42 except Exception as e:43 return f"Ошибка: {str(e)}"44 45with gr.Blocks(title="Claude Code Free") as demo:46 gr.Markdown("# 🤖 Claude Code")47 chatbot = gr.Chatbot(height=500)48 msg = gr.Textbox(label="Запрос", placeholder="Пиши код...")49 clear = gr.ClearButton([msg, chatbot])50 51 def respond(message, chat_history):52 reply = ask_openrouter(message, chat_history)53 chat_history.append((message, reply))54 return "", chat_history55 56 msg.submit(respond, [msg, chatbot], [msg, chatbot])57 58demo.launch()