Zero hallucinated exports.
Generic coding AIs guess. They call ox_lib.notify_player(), they pass arguments to oxmysql:fetch() in the wrong order, they invent QBCore events that do not exist. SwisserAI is tuned against the real API surface of the libraries FiveM actually runs.
You paste less, you reread less, you spend less time explaining that no, that function has never shipped.
The ox_lib hallucination problem
Generic AI models ChatGPT, Claude, Copilot are trained on the entire public internet. That includes ox_lib documentation, but it also includes every stale forum thread, every PR that never merged, every screenshot of someone's home-grown fork, and every Lua tutorial that confidently teaches a function that was renamed two releases ago.
The result: when you ask a generic model for a notification, it might give you ox_lib.notify_player(source, "hello") a function that has never existed. The correct call is lib.notify(source, {title = "hello"}). One looks reasonable, one actually works.
Multiply that by every function across ox_lib, oxmysql, ox_inventory, ox_target, QBCore, Qbox, ESX Legacy, ESX v1-final, and the FiveM natives themselves, and you have a developer tax: every AI answer needs a manual pass to check the model did not invent half the call site.
-- Invented / wrong
ox_lib.notify_player(source, "You got paid")
local result = oxmysql:fetch(
"SELECT * FROM players WHERE id = ?",
playerId
)
RegisterNetEvent("QBCore:GiveMoney")
AddEventHandler("QBCore:GiveMoney",
function(amount)
QBCore.Player.AddMoney(source, amount)
end
)-- Grounded against current APIs
lib.notify(source, {
title = "Paid",
description = "You got paid",
type = "success",
})
local row = MySQL.single.await(
"SELECT * FROM players WHERE id = ?",
{ playerId }
)
local Player = QBCore.Functions.GetPlayer(source)
if Player then
Player.Functions.AddMoney("cash", amount, "payout")
endHow SwisserAI grounds outputs
Under the hood, SwisserAI is a FiveM-tuned model wrapped in a grounding and validation layer. Three things happen to every generation:
Framework detection
We inspect your prompt, your pasted code, or your resource to determine which frameworks are in play ox_lib, oxmysql, QBCore, Qbox, ESX Legacy, ESX v1-final and which versions. The model only pulls grounding for what is actually relevant.
Grounded generation
The model is tuned on the API surfaces of those libraries exports, events, natives, argument shapes. Grounding is stitched into the context so the model is never guessing what lib.callback accepts.
Export linter
After generation, a static pass checks every export, event, and native in the output against the grounded index. Anything that cannot be verified is flagged in the UI before you copy it anywhere near your server.
We are honest about the limit of this: grounding reduces hallucination rate, it does not prove correctness. Edge cases in niche forks, custom resources we have never seen, and frameworks that broke their own exports last week will still produce the occasional miss. But the baseline is no longer "every answer needs a full manual check" it is "the model now reliably uses real function names, and the linter catches the rest."
Compared to a generic model that will happily invent QBCore:TriggerServerCallbackAsync because it sounds right, this is the difference between shipping in an afternoon and debugging console errors for two hours.
What we validate
The grounded index covers the surface area you hit every day on a real FiveM server. If it is in the stock release of any of these libraries, SwisserAI knows the current signature.
ox_lib functions
lib.notify, lib.callback, lib.showContext, lib.registerContext, lib.cache, lib.locale full argument shapes for the current ox_lib release.
oxmysql syntax
MySQL.query vs MySQL.prepare vs MySQL.scalar vs MySQL.insert, correct parameter arrays, awaitable vs callback variants.
QBCore events
Client and server event names, QBCore:GetCoreObject, PlayerData shape, QBCore.Functions.* and QBCore.Commands.Add.
Qbox state bags
Player.PlayerData via state bags, the Qbox migration deltas from QBCore, and the Qbox-specific helper exports.
fxmanifest structure
fx_version, game, lua54, shared_scripts, client_scripts, server_scripts, dependencies, ui_page in the right order with correct values.
Resource naming
Folder-matches-resource, kebab-case conventions, avoiding reserved names, and valid dependency references in server.cfg.
Beyond the stock libraries
If your stack includes a library we have not indexed yet or your own internal resource you can paste the relevant exports into the session and SwisserAI will treat them as the ground truth for the rest of the conversation. Team plans include persistent private grounding for organisation-specific frameworks.