1
0
Fork 0

feat(ai): switch AI compose to the Ornith 9B model

Point the AI compose plugin at Unsloth Studio serving Ornith 1.0 9B (replacing
Gemma 4 26B), and rename the model settings to ornith-9b-settings. Ornith is a
reasoning model, so requests disable reasoning (reasoning_effort "none") to stop
a small token budget being spent entirely on the reasoning block. Adds the
migration and documents UNSLOTH_URL / UNSLOTH_API_KEY in .env.example.
This commit is contained in:
Jason Fraley 2026-10-03 03:30:10 -04:00
parent d4f9051b17
commit a06060eb9f
3 changed files with 42 additions and 0 deletions

View file

@ -22,6 +22,15 @@ APP_URL=http://localhost:3000
# Coolify (or to your cron). See DEPLOYMENT.md. # Coolify (or to your cron). See DEPLOYMENT.md.
GAME_TICK_NOTIFY_SECRET=YOUR_GAME_TICK_NOTIFY_SECRET GAME_TICK_NOTIFY_SECRET=YOUR_GAME_TICK_NOTIFY_SECRET
# --- Unsloth AI (Payload AI Compose plugin) ---
# Base URL of the Unsloth Studio OpenAI-compatible API that serves the
# Ornith 9B model (the "Apex" connection lives on the apex-lnx machine).
# Defaults to the Apex box's LAN address; for the deployed site use whatever
# host can actually reach that box (VPN / tunnel / reverse proxy).
UNSLOTH_URL=http://192.168.1.7:8888/v1
# sk-unsloth-... API key generated in Unsloth Studio (Settings -> API).
UNSLOTH_API_KEY=YOUR_UNSLOTH_API_KEY
# --- Bin script file logging --- # --- Bin script file logging ---
# Optional. Payload bin scripts (game-tick, market-tick, mission-tick, # Optional. Payload bin scripts (game-tick, market-tick, mission-tick,
# generate-mission) tee their logs to daily files. Defaults to <repo>/logs # generate-mission) tee their logs to daily files. Defaults to <repo>/logs

View file

@ -88,6 +88,16 @@ export const GameRules: GlobalConfig = {
"Assignment(s) considered the intelligence division. Members and leaders of these assignments get elevated access to draft missions and intelligence content.", "Assignment(s) considered the intelligence division. Members and leaders of these assignments get elevated access to draft missions and intelligence content.",
}, },
}, },
{
name: "infantryAssignment",
type: "relationship",
relationTo: "assignments",
hasMany: false,
admin: {
description:
"Assignment that members are moved to when a division leader removes them from their division (the default destination for leadership-initiated transfers).",
},
},
{ {
name: "proximityThreshold", name: "proximityThreshold",
type: "number", type: "number",

View file

@ -0,0 +1,23 @@
import { MigrateUpArgs, MigrateDownArgs, sql } from "@payloadcms/db-postgres";
export async function up({ db, payload, req }: MigrateUpArgs): Promise<void> {
await db.execute(sql`
ALTER TABLE "plugin_ai_instructions" RENAME COLUMN "gemma_4_settings_model" TO "ornith_9b_settings_model";
ALTER TABLE "plugin_ai_instructions" ALTER COLUMN "ornith_9b_settings_model" SET DEFAULT 'unsloth/Ornith-1.0-9B-GGUF';
UPDATE "plugin_ai_instructions" SET "ornith_9b_settings_model" = 'unsloth/Ornith-1.0-9B-GGUF' WHERE "ornith_9b_settings_model" IS DISTINCT FROM 'unsloth/Ornith-1.0-9B-GGUF';
ALTER TABLE "plugin_ai_instructions" ALTER COLUMN "model_id" SET DATA TYPE text;
DROP TYPE "public"."enum_plugin_ai_instructions_model_id";
CREATE TYPE "public"."enum_plugin_ai_instructions_model_id" AS ENUM('unsloth/Ornith-1.0-9B-GGUF');
ALTER TABLE "plugin_ai_instructions" ALTER COLUMN "model_id" SET DATA TYPE "public"."enum_plugin_ai_instructions_model_id" USING CASE WHEN "model_id" IS NULL THEN NULL ELSE 'unsloth/Ornith-1.0-9B-GGUF' END::"public"."enum_plugin_ai_instructions_model_id";`);
}
export async function down({ db, payload, req }: MigrateDownArgs): Promise<void> {
await db.execute(sql`
ALTER TABLE "plugin_ai_instructions" ALTER COLUMN "model_id" SET DATA TYPE text;
DROP TYPE "public"."enum_plugin_ai_instructions_model_id";
CREATE TYPE "public"."enum_plugin_ai_instructions_model_id" AS ENUM('unsloth/gemma-4-26B-A4B-it-qat-GGUF');
ALTER TABLE "plugin_ai_instructions" ALTER COLUMN "model_id" SET DATA TYPE "public"."enum_plugin_ai_instructions_model_id" USING CASE WHEN "model_id" IS NULL THEN NULL ELSE 'unsloth/gemma-4-26B-A4B-it-qat-GGUF' END::"public"."enum_plugin_ai_instructions_model_id";
UPDATE "plugin_ai_instructions" SET "ornith_9b_settings_model" = 'unsloth/gemma-4-26B-A4B-it-qat-GGUF' WHERE "ornith_9b_settings_model" IS DISTINCT FROM 'unsloth/gemma-4-26B-A4B-it-qat-GGUF';
ALTER TABLE "plugin_ai_instructions" ALTER COLUMN "ornith_9b_settings_model" SET DEFAULT 'unsloth/gemma-4-26B-A4B-it-qat-GGUF';
ALTER TABLE "plugin_ai_instructions" RENAME COLUMN "ornith_9b_settings_model" TO "gemma_4_settings_model";`);
}