models.dev service via DB for MT5
  • MQL5 90.6%
  • MQL4 9.4%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Nique_372 b49adfc00f
2026-08-01 22:56:51 -05:00
Src 2026-08-01 22:56:51 -05:00
Test 2026-07-17 15:03:00 -05:00
dependencies.json Añadir dependencies.json 2026-07-17 20:03:47 +00:00
LICENSE Añadir LICENSE 2026-07-17 20:03:20 +00:00
LLmRegiteryByLeo.mqproj Generated by MQL5 Wizard 2026-07-16 16:27:58 -05:00
README.md Actualizar README.md 2026-08-01 22:03:40 +00:00
RegisteryService.mq5 2026-07-17 15:03:00 -05:00

A lightweight and fast MT5 module that keeps a local SQLite mirror of the models.dev LLM registry.
Fetches the full catalog (orgs + models: cost, context windows, modalities, flags) via WebRequest, persists it to a shared SQLite database, and notifies subscribed charts on every update.


Main Features

  • Self-updating registry: on init, downloads https://models.dev/api.json and upserts every org/model into a local SQLite database (llm_orgs, llm_models)
  • Scheduled refresh: configurable update interval (InpHorasUpdate), re-syncs automatically via OnTimer
  • Retry with backoff: failed fetches/writes are retried up to InpMaxIntentos times, waiting InpSegundosTry seconds between attempts, before falling back to the next full cycle
  • Shared or local storage: files can live in the MT5 common folder (InpFilesInCommonFolder) so multiple charts/EAs share one database
  • Cross-chart notifications: on a successful sync, emits EventChartCustom (LLMREG_ON_UPDATE) to every chart registered in the charts_id table
  • Compact model schema: cost (in/out), release/update dates, context window/input/output, and bitflags for tools, temperature, reasoning, open_weights, structured_output, plus input/output modalities (text, audio, video, image, pdf)

Registry service (drop-in EA/module)

input string InpFolderNameBase  = "LLmRegistery\\";
input bool InpFilesInCommonFolder = true;
input int InpHorasUpdate = 8;
input int InpMaxIntentos = 5;
input int InpSegundosTry = 100;
input int InpTimeoutWebReqeuestMs  = 60000;
input ENUM_VERBOSE_LOG_LEVEL InpLogLevel = VERBOSE_LOG_LEVEL_ALL;

TSN::CLlmRegistery g_llm_registery;

int OnInit()
 {
  g_llm_registery.AddLogFlags(InpLogLevel);
  if(!g_llm_registery.Init(InpFolderNameBase, InpFilesInCommonFolder, InpHorasUpdate,
                           InpMaxIntentos, InpSegundosTry, InpTimeoutWebReqeuestMs))
    return INIT_FAILED;
  return(INIT_SUCCEEDED);
 }

void OnTimer()
 {
  g_llm_registery.OnTimerEvent();
 }

Subscribing to updates from another chart

#include <TSN\\LLM\\RegDef.mqh>

int g_sql_handle = INVALID_HANDLE;
const long g_my = ChartID();

int OnInit()
 {
  g_sql_handle = DatabaseOpen(InpEaServerFoderName + LLMREG_FILENAME_SQL,
                              DATABASE_OPEN_READWRITE | (InpEaFilesInCommonFolder ? DATABASE_OPEN_COMMON : 0));
  DatabaseExecute(g_sql_handle, StringFormat("INSERT OR IGNORE INTO charts_id (chart_id) VALUES(%I64d)", g_my));
  return(INIT_SUCCEEDED);
 }

void OnChartEvent(const int32_t id, const long &lparam, const double &dparam, const string &sparam)
 {
  if(id == CHARTEVENT_CUSTOM + LLMREG_ON_UPDATE)
    Print("Base de datos de modelos ha sido actulizada");
 }

void OnDeinit(const int reason)
 {
  DatabaseExecute(g_sql_handle, StringFormat("DELETE FROM charts_id WHERE chart_id = %I64d;", g_my));
  DatabaseClose(g_sql_handle);
 }

Querying the registry (SQL)

SELECT m.name, m.cost_in, m.cost_out, m.context_window
FROM llm_models m
JOIN llm_orgs o ON o.id = m.org_id
WHERE o.id = 'anthropic'
ORDER BY m.last_update_date DESC;

Schema

llm_orgs
├── id (PK)
├── name
├── doc
└── updated_at

llm_models
├── id, org_id (PK, FK -> llm_orgs.id)
├── name, description
├── cost_in, cost_out
├── release_date, last_update_date
├── flags            (tools | temperature | open_weights | reasoning | structured_output)
├── in_modals / out_modals  (text | audio | video | image | pdf)
├── context_window / context_output / context_input
└── updated_at

charts_id
└── chart_id (PK)   -- charts subscribed to update notifications

Full definition in Src/Init.sql.


Repository Structure

LLmRegiteryByLeo/
├── Src/
│   ├── Main.mqh          # CLlmRegistery: fetch, parse, upsert, notify, retry logic
│   ├── Def.mqh           # Structs, flags, modal defines, index constants
│   ├── Init.sql          # SQLite schema (orgs, models, charts_id)
│   └── EnumReg/          # Modal string -> flag enum registry
├── Test/
│   └── TestHooks.mq5     # Minimal subscriber example (chart hook)
└── RegisteryService.mq5  # Main EA/module entry point

License

Read Full License By downloading or using this repository, you accept the license terms.


Requirements

See dependencies.json for the full list.

  • MetaTrader 5, build 5430+
  • WebRequest access enabled for https://models.dev (Tools → Options → Expert Advisors)

Installation

cd "C:\Users\YOUR_USER\AppData\Roaming\MetaQuotes\Terminal\YOUR_ID\MQL5\Shared Projects"
tsndep install "https://forge.mql5.io/nique_372/LLmRegiteryByLeo.git"

Requires the tsndep package, available on PyPI. It automatically downloads and installs all declared dependencies.


Quick Start

1. Add the URL to WebRequest allowed list:

https://models.dev

2. Attach RegisteryService.mq5 to a chart (once, as a background service). It creates/updates LLmRegistery.db and Registery.json in the shared folder.

3. From any other EA, open the shared database and query it directly, or subscribe to LLMREG_ON_UPDATE via OnChartEvent as shown in Subscribing to updates.


Contact