[package] name = "mesh-openai" version.workspace = true edition.workspace = true license.workspace = true repository.workspace = true description = "OpenAI-compatible API ingest for Mesh — translate a /v1/chat/completions request into a Mesh ServeRequest (joule ceiling + fidelity floor) and a served result back into an OpenAI chat-completion response carrying the sealed energy receipt as a usage extension. Lets any OpenAI client (vLLM/TGI/Ollama/SDKs) drive energy-metered serving without changing transport. Ingest, not compete." [dependencies] mesh-schema = { workspace = true } mesh-core = { workspace = true } serde_json = { workspace = true } thiserror = { workspace = true } hex = { workspace = true } # Only to choose the reference server example's meter (the features below): # the library itself never meters, it carries what `mesh-core` sealed. mesh-meter = { workspace = true, optional = true } # The GPU load for `ProcessMeter`'s liveness probe, with the `metal` feature. jouleclaw-backend-apple = { workspace = true, optional = true } [dev-dependencies] mesh-engine = { workspace = true } mesh-meter = { workspace = true } jcp-schema = { workspace = true } jcp-grant = { workspace = true } mesh-router = { workspace = true } mesh-receipt = { workspace = true } ed25519-dalek = { workspace = true } [features] default = [] # A minimal, std-only /v1/chat/completions reference server (no async runtime, # no extra deps). Routes through mesh-core and returns the sealed receipt. server = [] # The meter the reference server example serves with (its module docs). With # none of these it is the load estimator, and every receipt says `Estimator`. # `hw-meter`: the family's machine meter (`HwMeter::detect`), a hardware # reading only where a live counter covers the whole request (a RAPL package). hw-meter = ["dep:mesh-meter", "mesh-meter/hw-meter"] hw-meter-rapl = ["hw-meter", "mesh-meter/hw-meter-rapl"] hw-meter-nvml = ["hw-meter", "mesh-meter/hw-meter-nvml"] hw-meter-apple = ["hw-meter", "mesh-meter/hw-meter-apple"] # macOS: this process's own CPU and GPU energy over each serve # (`ProcessMeter`), since the reference engine runs in this process. metal = ["hw-meter-apple", "dep:jouleclaw-backend-apple"] # The reference server example uses the `server` module, so it only builds with # the feature on (keeps the default `--all-targets` build clean). [[example]] name = "serve" required-features = ["server"] # Drives the example's own meter and mesh through one served request. [[test]] name = "serve_example" required-features = ["server"] [lints] workspace = true