Pozwól AI uruchamiać kod SAS, a nie tylko go pisać

Każdy model potrafi wygenerować kod SAS. Bez możliwości jego wykonania nikt nie wie, czy ten kod działa. Otwarte Run API Jenner daje agentowi drugą połowę pętli: uruchom program, odczytaj rzeczywisty wynik i rzeczywiste błędy, popraw kod i uruchom ponownie — bez licencji SAS i bez instalacji lokalnej.

Dostęp anonimowy działa całkowicie bez klucza API.

Wygenerowanie kodu to łatwiejsza połowa

Asystent, który pisze kod SAS i na tym poprzestaje, zwraca coś, co wygląda poprawnie. Czy makro się rozwinie, czy złączenie pobierze oczekiwane zmienne, czy PROC MEANS zwróci 19 wierszy, czy 0 — tego nie da się stwierdzić, dopóki program nie zostanie uruchomiony.

Dotąd uruchomienie kodu SAS wymagało licencji i instalacji — czyli dokładnie tego, czego agent nie ma. Run API znosi to ograniczenie: jedno wywołanie HTTP wykonuje kod i zwraca ustrukturyzowane wyniki, na których model może faktycznie pracować.

Pętla

Generowanie, sprawdzanie, uruchamianie, iteracja — wszystko czytelne maszynowo.

1

Generowanie

Model pisze kod SAS — krok DATA, procedurę PROC, makro. Nic specjalnego nie jest potrzebne: Jenner przyjmuje standardową składnię SAS, więc uruchamiany jest dokładnie taki kod, jaki asystent już potrafi napisać.

2

Sprawdzanie

Wyślij skrypt metodą POST na /v1/validate, aby wykonać samo parsowanie. Diagnostyka wraca bez uruchamiania czegokolwiek, więc agent może wychwycić błąd składni, zanim zużyje uruchomienie.

3

Uruchomienie

Wyślij POST na /v1/run ze skryptem i dowolnymi danymi wejściowymi CSV lub Parquet. Jenner wykonuje go w izolowanym kontenerze i zwraca wynik listingu, log NOTE/WARNING/ERROR, kod wyjścia oraz każdy zbiór danych i plik utworzony przez program.

4

Iteracja

Log i diagnostyka to ustrukturyzowana informacja zwrotna, a nie zrzut ekranu. Agent czyta rzeczywisty błąd, poprawia rzeczywistą linię i uruchamia kod ponownie — domykając pętlę bez człowieka pośrodku.

Jak to wygląda

Prawdziwe żądania do publicznego API. Bez klucza, bez konfiguracji.

Uruchom skrypt i odbierz listing

Żądanie
curl -X POST https://api.jenneranalytics.com/v1/quick \
  --data-binary @analysis.sas
Odpowiedź
                          The MEANS Procedure

 Variable        N           Mean        Std Dev
 -----------------------------------------------
 bmi            19     17.8420103      1.4625169
 -----------------------------------------------

Wychwyć błąd, zanim pochłonie całe uruchomienie

W tym fragmencie brakuje średnika. Wywołanie samego parsowania wskazuje problem, więc agent może go poprawić i działać dalej.

Błędny kod SAS
data demo;
  set sashelp.class      /* <- missing semicolon */
  bmi = weight / (height**2) * 703;
run;
POST /v1/validate
{
  "valid": false,
  "diagnostics": [
    { "severity": "error",
      "message": "Unexpected token: Eq, expected Semi" }
  ]
}

Odczytuj wyniki, na których model potrafi pracować

Pełne uruchomienie zwraca listing, log, kod wyjścia i każdy zbiór danych utworzony przez program — wraz z liczbą wierszy, dzięki czemu agent może potwierdzić, że faktycznie otrzymał dane, zamiast to zakładać.

POST /v1/run
{
  "run_id": "r_c8679761197f4f9d8a3bc021...",
  "status": "ok",
  "exit_code": 0,
  "output":   "...formatted listing tables...",
  "log":      "NOTE: PROC MEANS statement used.",
  "datasets": [ { "name": "demo", "row_count": 19 } ],
  "files":    [],
  "diagnostics": [],
  "duration_ms": 412,
  "jenner_version": "..."
}

Punkty końcowe

Bazowy adres URL https://api.jenneranalytics.com/v1

Punkt końcowyPrzeznaczenie
POST/v1/runUruchamia skrypt z opcjonalnymi danymi wejściowymi. Zwraca wynik, log, kod wyjścia, zbiory danych, pliki i diagnostykę w formacie JSON.
POST/v1/run/streamTo samo co /v1/run, ale strumieniowane jako Server-Sent Events, więc log przychodzi jeszcze w trakcie działania programu.
POST/v1/quickWygoda jednej linijki. Na wejściu surowy skrypt, na wyjściu listing w zwykłym tekście — najszybszy sposób na odpowiedź „czy ten kod SAS działa?”
POST/v1/validateSprawdzenie samej składni. Zwraca diagnostykę bez wykonywania kodu. Makra nie są rozwijane, więc błędy w kodzie obfitującym w makra traktuj orientacyjnie.
GET/v1/run/{run_id}Pobiera zakończone uruchomienie, jego pliki albo podgląd lub pobranie zbioru danych. Wyniki są dostępne przez godzinę i wymagają tokena dostępu do danego uruchomienia.

Dostęp

Zacznij bez klucza. Dodaj go, gdy potrzebny będzie większy zapas.

PoziomUwierzytelnianieLimit zapytańLimit czasu
AnonimowyKlucz nie jest wymagany1000 zapytań/godz. na adres IP30 sekund
FreeRejestracja e-mailem1500 zapytań/godz.60 sekund
ProKlucz API10 000 zapytań/godz.5 minut
EnterpriseKlucz APIIndywidualnyIndywidualny

Działa z tym, czego już używasz

Narzędzia AI

  • Claude Code od Anthropic
  • Claude Desktop
  • Codex od OpenAI
  • ChatGPT
  • Dowolny system, który potrafi wysłać żądanie HTTP

Albo z poziomu Jenner

  • Zespołowa przestrzeń robocza w przeglądarce
  • Aplikacja desktopowa dla macOS
  • Natywne jądro Jupyter

Za wszystkimi stoi ten sam silnik wykonawczy, więc kod sprawdzony przez agenta w API zachowa się tak samo, gdy otworzy go człowiek.

Najczęściej zadawane pytania

Nie. Żądania anonimowe działają zupełnie bez klucza, z limitem 1000 żądań na godzinę na adres IP i 30-sekundowym limitem czasu wykonania. To wystarczy, aby agent testował i poprawiał prawdziwy kod. Darmowy klucz podnosi ten pułap, a klucze Pro lub Enterprise podnoszą go jeszcze wyżej.

Nie. API wykonuje kod w izolowanym kontenerze w naszej infrastrukturze. Nie ma licencji SAS, instalacji lokalnej ani niczego, co środowisko modelu musiałoby przygotować.

Tak. /v1/run przyjmuje obok skryptu powtarzalne pliki wejściowe w formacie CSV lub Parquet. Zbiory danych utworzone przez program wracają z liczbą wierszy oraz adresami URL do podglądu lub pobrania, więc agent może obejrzeć wyniki, zamiast ich zgadywać.

Każde uruchomienie zwraca kod wyjścia, pełny log NOTE/WARNING/ERROR oraz ustrukturyzowaną diagnostykę. Błędy są jawne i czytelne maszynowo, więc agent odróżni program, który zadziałał, od takiego, który zawiódł — a właśnie tego sygnału brakuje w procesie ograniczonym do generowania kodu.

Godzinę. Każde uruchomienie zwraca token dostępu przypisany do tego uruchomienia; punkty końcowe GET go wymagają, a on sam jest niezależny od klucza API.

Daj agentowi sposób na sprawdzenie własnej pracy

Na start nie potrzeba klucza. I nigdy licencji SAS.