Language model

Maruti AI

Our own language model.On your own hardware.

Maruti AI is the language model Appdirs builds and trains itself: its own architecture, its own tokenizer, trained on code. Your teams use it to write, complete, explain and debug code, and its answers stream in as it writes them.

The model loads from your disk and serves from your hardware, with no external AI provider in the inference path. In our deployments, Prospica’s language model is Maruti AI.

Maruti AI

Write a retry wrapper for the export job: three attempts, exponential backoff, and log each failure.

Here is a decorator that retries with exponential backoff and logs each failed attempt:

pythonCopy
import loggingimport timefrom functools import wrapslog = logging.getLogger("export")def retry(attempts=3, base=0.5):    def wrap(fn):        @wraps(fn)        def run(*args, **kwargs):            for n in range(1, attempts + 1):                try:                    return fn(*args, **kwargs)                except Exception as exc:                    log.warning("attempt %d failed: %s", n, exc)                    if n == attempts:                        raise                    time.sleep(base * 2 ** (n - 1))        return run    return wrap

Put @retry() on the export job. With the defaults it tries three times, waiting 0.5 s and then 1 s, and raises the last error if every attempt fails.

HelpfulNot helpful

The conversation is invented. The layout is modelled on Maruti AI’s own chat interface.

Built for code.

Generation, completion, explanation and debugging across the languages your teams write — Python, TypeScript, SQL and more.

Maruti AI

Write

Open findings per site, worst first.

SELECT site, count(*) AS open_findings
FROM findings
WHERE status = 'open'
GROUP BY site
ORDER BY open_findings DESC;

sql

Complete

Finish this function.

export function isExpired(token: Token, now = Date.now()) {
  return token.expiresAt <= now;
}

typescript

Explain

What does @wraps do in the retry decorator?

It copies the wrapped function’s name and docstring onto the inner function, so logs and tracebacks still say export_job instead of run.

python

Debug

Why does this test fail some nights?

expect(dayOf(new Date())).toBe(new Date().getDate());

It reads the clock twice. Run just before midnight, the two reads can land on different days. Create one date, pass it to both, and the test no longer depends on when it runs.

typescript

It answers as it writes.

Token-by-token streaming over Server-Sent Events, for interactive use in development and review tools. Your tools see each word as it is written, then the whole answer.

API

Request

POST /v1/chat

{
  "messages": [
    { "role": "user", "content": "Explain the lease-history query" }
  ],
  "mode": "coding",
  "language": "sql",
  "stream": true
}

Response stream

data: { "token": "It ", "generated_text": "It ", "finished": false }data: { "token": "joins ", "generated_text": "It joins ", "finished": false }data: { "token": "each ", "generated_text": "It joins each ", "finished": false }…data: { "token": "", "generated_text": "It joins each asset to its address leases, newest first.", "finished": true }

Runs where your code already is.

Runs on your own hardware, with no external AI provider in the inference path. Source code and prompts go to a model you host.

Your hardware

Model files

Loaded from your own disk.

Maruti AI

Serves from your hardware.

  • Chat in the browser

    Your developers ask, and answers stream back.

  • Your tools

    Development and code-review tools call the streaming API.

  • Prospica

    In our deployments, Prospica’s language model is Maruti AI.

No external AI provider in the inference path.

What you run.

Deployment
Self-hosted, on your own hardware. The model loads from your disk and serves from your servers.
Inference
No external AI provider in the inference path.
Interface
A chat in the browser, with accounts, conversation history and a Planning, Coding or Chat mode for each question.
API
A streaming chat API for development and code-review tools: one event per word, then a final event with the whole answer.
Feedback
People can mark each answer helpful or not, and Maruti AI collects those ratings.

See it write code.

Talk to us about running Maruti AI on your own hardware, or see Prospica, the governed AI it powers in our deployments.