Загрузка данных
import urllib.request
import urllib.error
import urllib.parse
import json
import ssl
import os
# ============================================
# АВТОМАТИЗАЦИЯ ПУТЕЙ
# ============================================
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
CERTS_DIR = os.path.join(BASE_DIR, "certs")
# Пути к сертификатам
KEY_PATH = os.path.join(CERTS_DIR, "gigachat_user.key")
CERT_PATH = os.path.join(CERTS_DIR, "gigachat_user.pem")
CACERT_PATH = os.path.join(CERTS_DIR, "root_ca.pem")
# Базовые переменные
API_URL = "https://ai.giga.atb.su:8080"
SESSION_ID = "dfa87a40-99a9-42c4-b810-6c7caa1e1e8b"
# ============================================
# Вспомогательная функция для запросов
# ============================================
def fetch(title, url, method="GET", data=None, headers=None, use_certs=False, verify_ssl=True, is_file=False):
print(f"\n==========================================")
print(f"{title}")
print(f"==========================================")
req_headers = headers or {}
payload = None
# Обработка тела запроса (data)
if data:
if is_file:
try:
with open(data, 'rb') as f:
payload = f.read()
except FileNotFoundError:
print(f"[ОШИБКА] Файл '{data}' не найден.")
return
elif isinstance(data, dict):
#payload = json.dumps(data).encode('utf-8')
#payload = json.dumps(data, ensure_ascii=False).encode('utf-8')
payload = json.dumps(data, ensure_ascii=False, separators=(',', ':')).encode('utf-8')
elif isinstance(data, str):
payload = data.encode('utf-8')
# Создание объекта запроса
req = urllib.request.Request(url, data=payload, headers=req_headers, method=method)
# Настройка SSL контекста
ctx = None
if url.startswith("https"):
if verify_ssl:
# Используем корневой сертификат, если требуется верификация (аналог --cacert)
try:
ctx = ssl.create_default_context(cafile=CACERT_PATH)
except Exception as e:
print(f"[ОШИБКА SSL] Не удалось загрузить корневой сертификат: {e}")
ctx = ssl._create_unverified_context()
else:
# Отключение проверки (аналог флага -k)
ctx = ssl._create_unverified_context()
# Добавление клиентского сертификата (--cert и --key)
if use_certs:
try:
ctx.load_cert_chain(certfile=CERT_PATH, keyfile=KEY_PATH)
except Exception as e:
print(f"[ОШИБКА SSL] Не удалось загрузить клиентский сертификат/ключ: {e}")
return
# Выполнение запроса
try:
with urllib.request.urlopen(req, context=ctx) as response:
body = response.read().decode('utf-8')
# Имитация работы утилиты jq (форматирование JSON)
try:
parsed_json = json.loads(body)
print(json.dumps(parsed_json, indent=2, ensure_ascii=False))
except json.JSONDecodeError:
print(body)
except urllib.error.HTTPError as e:
print(f"[HTTP ОШИБКА] Код: {e.code} - {e.reason}")
print(e.read().decode('utf-8', errors='ignore'))
except urllib.error.URLError as e:
print(f"[СЕТЕВАЯ ОШИБКА] {e.reason}")
except Exception as e:
print(f"[НЕПРЕДВИДЕННАЯ ОШИБКА] {e}")
# ============================================
# Запросы к GigaChat
# ============================================
# 1. Показать доступные модели (GET, использует сертификаты, -k)
fetch(
"1. Показать доступные модели",
f"{API_URL}/v1/models",
method="GET",
use_certs=True,
verify_ssl=False
)
# 2. GOPRODIGY - metrics (Обычный HTTP)
fetch(
"2. GOPRODIGY - metrics",
"http://tplss-gigatest001:8081/metrics",
method="GET"
)
# # 3. GOPRODIGY - chat completions (POST, сертификаты, json, -k)
# fetch(
# "3. GOPRODIGY - chat completions",
# f"{API_URL}/v1/chat/completions",
# method="POST",
# headers={"Content-Type": "application/json", "X-Session-ID": SESSION_ID},
# data={
# "model": "GigaChat-Max",
# "messages": [{"role": "user", "content": "what is ansible?"}],
# "temperature": 1.0,
# "stream": False
# },
# use_certs=True,
# verify_ssl=False
# )
# 4. WMCORE - информация о моделях
fetch(
"4. WMCORE - информация о моделях",
"http://tplss-gigatest001:8101/info/json",
method="GET"
)
# 5. WMCORE - metrics
fetch(
"5. WMCORE - metrics",
"http://tplss-gigatest001:8101/metrics",
method="GET"
)
# 6. WMCORE - таблица
fetch(
"6. WMCORE - таблица",
"http://tplss-gigatest001:8101/info/table",
method="GET"
)
# 7. GIGAFILTER - info
fetch(
"7. GIGAFILTER - info",
"http://tplss-gigatest001:8301/info/json",
method="GET"
)
# 8. GIGAFILTER - metrics
fetch(
"8. GIGAFILTER - metrics",
"http://tplss-gigatest001:8301/metrics",
method="GET"
)
# # 9. GIGAFILTER - chat completions (POST, сертификаты, json, -k)
# fetch(
# "9. GIGAFILTER - chat completions",
# f"{API_URL}/v1/chat/completions",
# method="POST",
# headers={"Content-Type": "application/json", "X-Session-ID": SESSION_ID},
# data={
# "model": "GigaChat-Max",
# "messages": [{"role": "user", "content": "Крым?"}]
# },
# use_certs=True,
# verify_ssl=False
# )
# 10. Embedder - info
fetch(
"10. Embedder - info",
"http://tplss-gigatest001:27961/info/json",
method="GET"
)
# 11. Embedder - metrics
fetch(
"11. Embedder - metrics",
"http://tplss-gigatest001:27961/metrics",
method="GET"
)
# # 12. Embedder - embeddings (POST, сертификаты, json, -k)
# fetch(
# "12. Embedder - embeddings",
# f"{API_URL}/v1/embeddings",
# method="POST",
# headers={"Content-Type": "application/json"},
# data={
# "model": "Embeddings",
# "input": "Какая температура может быть на Солнце?"
# },
# use_certs=True,
# verify_ssl=False
# )
# 13. Tokenizer - count tokens (из файла) (POST, сертификаты, файл, строгая проверка SSL)
# В bash-скрипте нет флага -k, поэтому verify_ssl=True (использует CACERT_PATH)
fetch(
"13. Tokenizer - count tokens (из файла)",
f"{API_URL}/v1/tokens/count",
method="POST",
headers={"Content-Type": "application/json"},
data=os.path.join(BASE_DIR, "request-tokenizer.json"),
is_file=True,
use_certs=True,
verify_ssl=True
)
# 14. Tokenizer - count tokens (прямой запрос) (POST, сертификаты, json, строгая проверка SSL)
fetch(
"14. Tokenizer - count tokens (прямой запрос)",
f"{API_URL}/v1/tokens/count",
method="POST",
#headers={"Content-Type": "application/json"},
headers={
"Content-Type": "application/json",
#"X-Session-ID": SESSION_ID,
#"Accept": "application/json"
},
data={
"model": "Embeddings",
"input": "test" #"Какая температура может быть на Солнце?"
},
use_certs=True,
verify_ssl=False
)
CACERT_PATH = os.path.join(CERTS_DIR, "root_ca.pem")