L'AI esegue il codice SAS, non lo scrive soltanto

Qualsiasi modello sa generare SAS. Senza un modo per eseguirlo, nessuno sa se funziona. La Run API aperta di Jenner dà all'agente l'altra metà del ciclo: eseguire il programma, leggere output ed errori reali, correggerlo ed eseguirlo di nuovo — senza licenza SAS e senza installazioni locali.

L'accesso anonimo funziona senza alcuna chiave API.

Generare il codice è la parte facile

Un assistente che scrive SAS e si ferma lì consegna qualcosa che sembra corretto. Se la macro si risolve, se il merge prende le variabili attese, se PROC MEANS restituisce 19 righe oppure 0: nulla di tutto questo è verificabile finché il programma non viene eseguito.

Storicamente, eseguirlo richiedeva una licenza SAS e un'installazione, cioè proprio ciò che un agente non ha. La Run API elimina questo vincolo: una sola chiamata HTTP esegue il codice e restituisce risultati strutturati su cui il modello può davvero ragionare.

Il ciclo

Generare, verificare, eseguire, iterare: tutto leggibile da una macchina.

1

Genera

Il modello scrive SAS: un DATA step, una PROC, una macro. Non serve nulla di particolare: Jenner accetta la sintassi SAS standard, quindi il codice che un assistente sa già scrivere è il codice che viene eseguito.

2

Verifica

Inviare lo script in POST a /v1/validate per un passaggio di solo parsing. La diagnostica torna senza eseguire nulla, così un agente può individuare un errore di sintassi prima di sprecarci un'esecuzione.

3

Esegui

Inviare in POST a /v1/run lo script ed eventuali input CSV o Parquet. Jenner lo esegue in un container isolato e restituisce l'output del listing, il log NOTE/WARNING/ERROR, un codice di uscita e ogni dataset e file prodotto dal programma.

4

Itera

Il log e la diagnostica sono un riscontro strutturato, non uno screenshot. L'agente legge l'errore reale, corregge la riga reale ed esegue di nuovo, chiudendo il ciclo senza una persona nel mezzo.

Come si presenta

Richieste reali all'API pubblica. Nessuna chiave, nessuna configurazione.

Esegui uno script, ottieni il listing

Richiesta
curl -X POST https://api.jenneranalytics.com/v1/quick \
  --data-binary @analysis.sas
Risposta
                          The MEANS Procedure

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

Individuare un errore prima di sprecarci un'esecuzione

In questo frammento manca un punto e virgola. Una chiamata di solo parsing individua il problema, così l'agente può correggerlo e proseguire.

SAS con errori
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" }
  ]
}

Risultati su cui il modello può ragionare

Un'esecuzione completa restituisce il listing, il log, un codice di uscita e ogni dataset prodotto dal programma, con il numero di righe: l'agente può verificare di aver ottenuto dati invece di presumerlo.

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": "..."
}

Endpoint

URL di base https://api.jenneranalytics.com/v1

EndpointScopo
POST/v1/runEsegue uno script con dati in ingresso facoltativi. Restituisce output, log, codice di uscita, dataset, file e diagnostica in JSON.
POST/v1/run/streamCome /v1/run, ma in streaming come Server-Sent Events, così il log arriva mentre il programma è ancora in esecuzione.
POST/v1/quickComodità in una riga. Script grezzo in ingresso, listing in testo semplice in uscita: il modo più rapido per rispondere a “questo SAS funziona?”
POST/v1/validateControllo della sintassi con solo parsing. Restituisce la diagnostica senza eseguire. Le macro non vengono espanse, quindi trattare gli errori legati alle macro come indicativi.
GET/v1/run/{run_id}Recupera un'esecuzione completata, i suoi file oppure l'anteprima o il download di un dataset. I risultati restano disponibili per un'ora e richiedono il token di accesso dell'esecuzione.

Accesso

Si parte senza chiave. Se ne aggiunge una quando serve più margine.

LivelloAutenticazioneLimite di frequenzaTimeout
AnonimoNessuna chiave richiesta1.000 req/h per IP30 secondi
FreeRegistrazione via email1.500 req/h60 secondi
ProChiave API10.000 req/h5 minuti
EnterpriseChiave APIPersonalizzatoPersonalizzato

Funziona con ciò che già usa

I suoi strumenti AI

  • Claude Code di Anthropic
  • Claude Desktop
  • Codex di OpenAI
  • ChatGPT
  • Qualsiasi sistema in grado di effettuare una richiesta HTTP

Oppure da dentro Jenner

  • Il workspace web collaborativo
  • L'app desktop per macOS
  • Un kernel Jupyter nativo

Lo stesso motore di esecuzione è alla base di tutti, quindi il codice convalidato da un agente tramite l'API si comporta allo stesso modo quando una persona lo apre.

Domande frequenti

No. Le richieste anonime funzionano senza alcuna chiave, con un limite per IP di 1.000 richieste all'ora e un timeout di esecuzione di 30 secondi. È sufficiente perché un agente provi e iteri su codice reale. Una chiave gratuita alza il tetto, e le chiavi Pro o Enterprise lo alzano ulteriormente.

No. L'API esegue il codice in un container isolato sulla nostra infrastruttura. Non serve alcuna licenza SAS, nessuna installazione locale e niente da predisporre nell'ambiente che ospita il modello.

Sì. /v1/run accetta file di input ripetibili insieme allo script, in CSV o Parquet. I dataset prodotti dal programma tornano con il numero di righe e gli URL di anteprima o download, così un agente può esaminare i risultati invece di indovinarli.

Ogni esecuzione restituisce un codice di uscita, il log NOTE/WARNING/ERROR completo e diagnostica strutturata. Gli errori sono espliciti e leggibili da una macchina, così un agente distingue un programma che ha funzionato da uno che non ha funzionato: esattamente il segnale che manca a un flusso di sola generazione.

Un'ora. Ogni esecuzione restituisce un token di accesso limitato a quell'esecuzione; gli endpoint GET lo richiedono ed è distinto dalla chiave API.

Dia al suo agente un modo per verificare il proprio lavoro

Nessuna chiave per iniziare. Nessuna licenza SAS, mai.