#!/usr/bin/env python3 import json import re import urllib.request ASK_API = "https://fission.kube5s.ru/console/api/ai/ask" CHECK_API = "https://fission.kube5s.ru/console/api/ai/check" HEADERS = {"X-Test-Sub": "livetest@test.local", "Content-Type": "application/json"} CASES = [ { "lang": "nodejs", "question": "Сгенерируй только код Fission-функции на Node.js. Задача: принять JSON с полем name и вернуть ответ 200 с приветствием. Код должен быть синтаксически корректным. После кода отдельным блоком кратко объясни, что делает код.", }, { "lang": "python", "question": "Сгенерируй только код Fission-функции на Python. Задача: принять словарь context, взять context['name'] если он есть и вернуть строку приветствия. Код должен быть синтаксически корректным. После кода отдельным блоком кратко объясни, что делает код.", }, { "lang": "php", "question": "Сгенерируй только код Fission-функции на PHP. Задача: вернуть JSON-ответ 200 с приветствием, если имя есть в context. Код должен быть синтаксически корректным. После кода отдельным блоком кратко объясни, что делает код.", }, { "lang": "ruby", "question": "Сгенерируй только код Fission-функции на Ruby. Задача: принять context и вернуть greeting JSON с именем из context, если оно есть. Код должен быть синтаксически корректным. После кода отдельным блоком кратко объясни, что делает код.", }, { "lang": "go", "question": "Сгенерируй только код Fission-функции на Go. Задача: принять запрос и вернуть 200 с приветствием, если имя передано, иначе использовать значение по умолчанию. Код должен быть синтаксически корректным. После кода отдельным блоком кратко объясни, что делает код.", }, ] def post(url: str, payload: dict) -> dict: body = json.dumps(payload).encode() req = urllib.request.Request(url, data=body, headers=HEADERS) with urllib.request.urlopen(req, timeout=90) as resp: return json.loads(resp.read()) def extract_code(answer: str) -> str: match = re.search(r"```(?:[a-zA-Z0-9_+-]+)?\n(.*?)\n```", answer, re.S) return match.group(1).strip() if match else "" def explain_block(answer: str) -> str: parts = re.split(r"```\s*$", answer, maxsplit=1) if len(parts) > 1: return parts[1].strip() return "" for case in CASES: ask_resp = post(ASK_API, {"question": case["question"]}) answer = ask_resp.get("answer", ask_resp.get("error", "???")) code = extract_code(answer) explanation = explain_block(answer) check_resp = post(CHECK_API, {"language": case["lang"], "code": code}) if code else {"ok": False, "result": "no code extracted"} print(f"=== {case['lang']} ===") print("PROMPT:") print(case["question"]) print("\nANSWER:") print(answer) print("\nEXTRACTED CODE:") print(code) print("\nEXPLANATION FOUND:", bool(explanation)) if explanation: print(explanation) print("\nLINT:") print(json.dumps(check_resp, ensure_ascii=False, indent=2)[:2000]) print("\n" + "=" * 72 + "\n")