Framework setup

Pick your stack · API reference

Oracle speaks the OpenAI wire format at https://oracle.nuvocode.com/v1. Your API key is <app>:<secret> (create one with pnpm create-app). List the models your app may use with GET /v1/models.

1. Install the Laravel AI SDK

composer require laravel/ai
php artisan vendor:publish --provider="Laravel\Ai\AiServiceProvider"

2. Add Oracle to config/ai.php → providers

'oracle' => [
    'driver' => 'openai-compatible',
    'url' => env('ORACLE_URL', 'https://oracle.nuvocode.com/v1'),
    'key' => env('ORACLE_API_KEY'),
    'models' => [
        'text' => ['default' => env('ORACLE_TEXT_MODEL', '@cf/meta/llama-3.1-8b-instruct-fp8')],
        'embeddings' => ['default' => env('ORACLE_EMBED_MODEL', '@cf/baai/bge-base-en-v1.5')],
    ],
],

To make it the default, also set 'default' => 'oracle' and 'default_for_embeddings' => 'oracle' in the same file.

3. .env

ORACLE_URL=https://oracle.nuvocode.com/v1
ORACLE_API_KEY=my-app:my-secret

4. Use it

use Laravel\Ai\Embeddings;

$reply = agent()->prompt('Hello', provider: 'oracle');

$vectors = Embeddings::for(['Hello'])->generate(provider: 'oracle');

1. Install

npm install openai

2. .env

ORACLE_URL=https://oracle.nuvocode.com/v1
ORACLE_API_KEY=my-app:my-secret

3. Use it

import OpenAI from "openai";

const oracle = new OpenAI({
  baseURL: process.env.ORACLE_URL,
  apiKey: process.env.ORACLE_API_KEY,
});

const res = await oracle.chat.completions.create({
  model: "@cf/meta/llama-3.1-8b-instruct-fp8",
  messages: [{ role: "user", content: "Hello" }],
});
console.log(res.choices[0].message.content);

1. Install

npm install openai @nestjs/config

2. .env

ORACLE_URL=https://oracle.nuvocode.com/v1
ORACLE_API_KEY=my-app:my-secret

3. Provide a client (oracle.module.ts)

import { Global, Module } from "@nestjs/common";
import { ConfigService } from "@nestjs/config";
import OpenAI from "openai";

export const ORACLE = Symbol("ORACLE");

@Global()
@Module({
  providers: [{
    provide: ORACLE,
    inject: [ConfigService],
    useFactory: (cfg: ConfigService) => new OpenAI({
      baseURL: cfg.getOrThrow("ORACLE_URL"),
      apiKey: cfg.getOrThrow("ORACLE_API_KEY"),
    }),
  }],
  exports: [ORACLE],
})
export class OracleModule {}

4. Inject it

constructor(@Inject(ORACLE) private readonly oracle: OpenAI) {}

const res = await this.oracle.chat.completions.create({
  model: "@cf/meta/llama-3.1-8b-instruct-fp8",
  messages: [{ role: "user", content: "Hello" }],
});

Import OracleModule (and ConfigModule.forRoot()) in AppModule.

curl https://oracle.nuvocode.com/v1/chat/completions \
  -H "Authorization: Bearer my-app:my-secret" \
  -H "Content-Type: application/json" \
  -d '{"model":"@cf/meta/llama-3.1-8b-instruct-fp8","messages":[{"role":"user","content":"Hello"}]}'