yvligo

yvligo is DeepSeek-V4.1-Flash-1017 post-trained to run X (Twitter) Ads campaigns as a tool-using agent. Given a client's brief, it:

  • sets up campaigns through X Ads API tools;
  • checks on them through the flight and adjusts targeting, bids and budgets;
  • ends with a recap to the client.

It is a LoRA adapter trained with supervised fine-tuning on expert traces: complete campaign runs by an expert agent in a simulated X Ads environment. A run became a trace only when it beat a scripted baseline and broke none of the brief's rules.

Results

We ran each agent once on 45 held-out briefs in the simulated environment, at the same rollout seed for every agent. None of these briefs or their worlds appear in the training data.

A run scores its conversions over par: the expected conversions its campaigns drove, divided by those of a scripted baseline in the same world and seed. The baseline runs one ad group on the brief's rules at X's default AUTO bid.

Agent Geometric mean of conversions ÷ par yvligo ÷ agent, paired by brief (SE) yvligo ahead on
yvligo 1.311
Expert (source of the training traces) 1.349 ×0.972 (×1.025) 21 of 45
GPT-6.1 Sol (Codex) 1.145 ×1.145 (×1.035) 33
DeepSeek-V4.1-Flash (Claude Code on OpenRouter) 1.117 ×1.173 (×1.048) 33
DeepSeek-V4.1-Flash, before post-training (same setup as yvligo) 1.095 ×1.196 (×1.036) 36
Grok 4.7 (Grok Build) 1.087 ×1.206 (×1.038) 36
Opus 5.5 (Claude Code) 1.068 ×1.228 (×1.033) 40
GPT-6 Astra (Codex) 1.058 ×1.239 (×1.036) 37
Haiku 5.5 (Claude Code) 1.012 ×1.295 (×1.037) 40
Sonnet 5.5 (Claude Code) 0.930 ×1.409 (×1.043) 43
GPT-6 Luna (Codex) 0.738 ×1.775 (×1.244) 42
Nemotron 3.5 Lightning (Claude Code on OpenRouter) 0.213 ×6.147 (×1.469) 43

The other models ran in their own agent CLIs at medium reasoning effort.

Across the 45 briefs, yvligo:

  • never scored under 0.8 of par (its lowest was 0.842);
  • wrote an accurate recap every time;
  • had 2.3% of its tool calls return an error (the expert 1.6%);
  • broke 6 brief rules, against the expert's 2 (see Limitations).

Training

Traces. The expert ran 444 campaigns: 222 briefs, two rollout seeds each. A run was kept when it:

  • finished;
  • scored at least par;
  • scored at least as well as the base model on the same brief and seed;
  • passed the brief's rule checks.

That gave 312 traces from 181 of the 196 training briefs; the other 26 briefs were held back for validation. Each trace is a whole run of up to 262,144 tokens: the brief, every reasoning step, tool call and tool result, and the final recap.

Fine-tuning. Supervised fine-tuning on Tinker:

  • loss on every assistant turn;
  • LoRA rank 32, alpha 32, on all linear layers;
  • Adam (β₁ 0.9, β₂ 0.95, ε 1e-8), 8 traces per step;
  • learning rate 1e-4, decaying linearly over a planned 117 steps (three epochs).

Checkpoint. We checked the agent's behaviour after each training block (steps 10, 20, 39 and 59). This adapter is step 39: one epoch, about 24M tokens. The next checkpoint, at step 59, broke a tool-call format and was rejected. Validation loss on 22 held-out traces fell from 0.415 to 0.366.

Chat format. DeepSeek V4.1 with thinking at low effort, keeping earlier turns' reasoning in the context. We used tinker-cookbook's renderer, which matches DeepSeek's API token for token.

Source checkpoint: tinker://cd80698b-c69b-5061-b324-a416cee754e4:train:0/weights/block3-step39

How to use

This is a standard PEFT LoRA adapter for deepseek-ai/DeepSeek-V4.1-Flash-1017. Load it with any stack that serves the base model with LoRA adapters. With Transformers and PEFT:

from transformers import AutoModelForCausalLM
from peft import PeftModel

base = AutoModelForCausalLM.from_pretrained("deepseek-ai/DeepSeek-V4.1-Flash-1017", torch_dtype="auto", device_map="auto")
model = PeftModel.from_pretrained(base, "loglogai/yvligo")

It was trained and measured in one agent setup:

  • the system prompt is DeepSeek Harness's headless agent prompt;
  • the user message is the client's brief;
  • the tools are an X Ads API surface as MCP tools: 78 tools under mcp__ads__*, plus mcp__scheduler__wait_until to pause until later in the flight;
  • thinking is on at low effort, with earlier turns' reasoning kept in the context.

It expects to act through tools and to end the session with a recap to the client.

Limitations

  • Brief rules. It sometimes adds an 18+ age gate the brief doesn't need, three times on petitions. That accounts for 5 of its 6 rule failures, and it trails the expert on restricted-category briefs.
  • Keyword gains. Part of its gain over the base model comes from keyword targeting, which the simulator may reward more than X does.
  • Evaluation awareness. In 18 of the 45 runs, its reasoning remarks on being evaluated.

License

MIT, the same as the base model.

Downloads last month
2
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for loglogai/yvligo

Adapter
(10)
this model