Skip to content

Tags: OriPekelman/tep

Tags

v0.11.7

Toggle v0.11.7's commit message
tep 0.11.7 — consumer-usable cut from the fd87f45b-green tree (fixes …

…tep#245)

v0.11.6

Toggle v0.11.6's commit message
tep 0.11.6 — proxy single-class-opening fix (#228), erb/mustache loca…

…ls (#231), shell File.read never-raise (#232), pg Hash-conninfo restore. All pin-independent; re-pin stays blocked on matz/spinel#1606.

v0.11.5

Toggle v0.11.5's commit message
tep 0.11.5 — PG opt-in (#216), boot-safe seeds (#199 hazard), master-…

…regression workarounds; unblocks toy serve

v0.11.4

Toggle v0.11.4's commit message
tep 0.11.4 — backend-controllable Completion#id (#209)

v0.11.3

Toggle v0.11.3's commit message
tep 0.11.3 — spinel-harvest + IDs-only Backend

v0.11.2

Toggle v0.11.2's commit message
tep 0.11.2 — fix SIGTERM SEGV (#186)

v0.11.1

Toggle v0.11.1's commit message
tep 0.11.1 — onboarding: resolve the install-engine spinel + build C …

…helpers on demand

v0.11.0

Toggle v0.11.0's commit message
tep 0.11.0 — TLS, caching, pooling, PG raise, embeddings, gem on Ruby…

…Gems

v0.10.0

Toggle v0.10.0's commit message
tep v0.10.0

Two new batteries + tooling. Additive only — no breaking changes since v0.9.0.

NEW BATTERIES

* Tep::Proxy (Battery 6) — Sinatra-flavored reverse proxy.
    - 6.1: non-streaming base (rewrite_path / before_forward /
      after_forward).
    - 6.2: streaming pass-through (stream_request? /
      on_stream_chunk / on_stream_end + StreamStats).
    - Block-form DSL — `proxy.before_forward do |req, res, ureq| ... end`
      lowers via bin/tep to a synthesized subclass. The translator
      rewrites local-var Proxy mounts into constant-mount form so
      Tep.<verb> doesn't widen Proxy's rewrite_path param.
    - See docs/PROXY-BATTERY.md.

* Tep::Llm::OpenAI::Server (Battery 7) — serve OpenAI-compatible HTTP
  from local compute.
    - 7.1a: Backend interface + Server.use / Server.serve! +
      GET /v1/models.
    - 7.1b: POST /v1/completions (non-streaming) +
      generate_from_tokens.
    - 7.1c: serve!(events_jsonl) — emit run_start at boot + one
      `inference` event per request (Tep::Events).
    - 7.2: streaming /v1/completions via SSE — subclass-override-sink
      pattern (Backend#generate_stream_from_tokens(model, ids, sampling,
      sink); sink.emit_token(piece)) lets backends emit per-token
      without crossing a block boundary spinel can't lower. The
      CompletionsStreamer writes data:[DONE] + emits the
      inference event with sink.completion_count.
    - /v1/embeddings deliberately lives app-side (lib stays
      float-free; toy ships it in tep_demo/embeddings_handler.rb
      against tnn_embed_lookup_to_doubles).
    - See docs/OPENAI-SERVER-BATTERY.md.

* Tep::Events — toy/v1 JSONL emitter (run_start / inference /
  run_end). Float-free by design (integer wall_us, schema floats
  live in caller-built extra_json). Standalone-ready for any
  per-request telemetry stream.

NEW EXAMPLES

* examples/llm_gateway/ — Tep::Proxy streaming demo; SSE pass-through
  + one inference event per stream.
* examples/api_gateway/ — buffered-proxy demo; capability-gated
  forwarding with before/after_forward observability.

TOOLING

* make test-parallel + test/run_parallel.rb — subprocess fan-out
  cuts wall time ~3.3× (13min → ~4min on the gx10). make test
  stays serial as the canonical / CI path. 430 tests now (was
  ~360 at v0.9.0).
* spinel-ext.json — single JSON source of truth for the
  @TEP_*_O@ / @TEP_PG_CFLAGS@ FFI placeholders inside lib/tep/*.rb
  (replaces the hardcoded substitution dict in bin/tep). Lays the
  groundwork for sibling projects (toy, tep_demo) to vendor tep's
  C-ext wiring through a stable manifest.
* prism is a development dependency (was runtime). gemspec
  required_ruby_version relaxed to >= 3.2 (was >= 3.4) — prism
  is stdlib from 3.4 onward, a gem install on 3.2/3.3.

FIXES

* Scheduler-aware body drain for Tep::Server::Scheduled (#52). The
  blocking sphttp_drain_body would stall a non-blocking client fd
  under the fiber scheduler; replaced with a cooperative drain that
  parks on io_wait + sphttp_recv_some until Content-Length-bytes
  are read or the peer hangs up.
* res.streaming now drives correctly under Tep::Server::Scheduled
  (was prefork-only; broke chatbot SSE).
* Tep::SQLite#prepare_cached + cached-finalize semantic — same
  shape as ruby-sqlite3, lets ActiveRecord-on-spinel reuse the
  adapter unchanged.
* Tep::Presence — heartbeat + prune_stale_workers for PG-mirror GC.
* examples/chatbot — streaming transport swapped from raw SSE to
  Tep::WebSocket.

SPINEL TRACK

Tracking matz/spinel master; the workarounds live where they're
needed and are reverted as the upstream fixes land. Three blockers
still open:
* matz/spinel#556 — virtual-imeth dispatch enumeration.
* matz/spinel#564 — closure heap-cell undeclared in multi-fiber-capture
  chains.
* matz/spinel #1007 — Tep::Server::Scheduled closure cleanup.

Full shortlog: `git log v0.9.0..v0.10.0`.

v0.9.0

Toggle v0.9.0's commit message
tep 0.9.0 (pre-alpha) -- Battery 5: Tep::MCP

The agent-as-driver surface ships. Tep apps can now expose
themselves as MCP servers; Claude Code / OpenCode / Gravity CLI
discover and drive the catalog natively.

Highlights:
- mcp_tool DSL with typed params + caps gating.
- mcp_resource DSL for read-only fetches.
- /mcp JSON-RPC 2.0 dispatcher (initialize, tools/list, tools/call,
  resources/list, resources/read, notifications/initialized).
- /tools/<name> + /resources/<uri> HTTP-direct routes for curl
  and non-MCP agents.
- /llms.txt + /openapi.json auto-published catalog.
- AGENTS.md convention for hand-written agent-facing surface docs.

Demo: examples/experiments -- mock training-run manager driving
the full agent loop in ~200 lines + worked AGENTS.md.

Pre-alpha. API still in motion.