Ctrl K
ComunidadGuías…

test/devin-connect-assign-model.test.js

Rama master · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
import { describe, it } from 'node:test';
import assert from 'node:assert/strict';
import {
  isRouterModel,
  parseAssignTags,
  encodeAssignModelRequest,
  decodeAssignModelResponse,
  assignModel,
} from '../src/devin-connect-catalog.js';
import { writeStringField, writeMessageField, parseFields } from '../src/proto.js';

// Build a synthetic AssignModelResponse in the wire layout:
//   #1 assignment { #1 assignment_jwt, #2 model_uid, #3 harness_uids* }
function buildAssignResponse({ modelUid, jwt, harness = [] } = {}) {
  const inner = [];
  if (jwt != null) inner.push(writeStringField(1, jwt));
  if (modelUid != null) inner.push(writeStringField(2, modelUid));
  for (const h of harness) inner.push(writeStringField(3, h));
  return writeMessageField(1, Buffer.concat(inner));
}

describe('isRouterModel', () => {
  it('flags the known router families', () => {
    assert.equal(isRouterModel('adaptive'), true);
    assert.equal(isRouterModel('ADAPTIVE'), true); // case-insensitive
    assert.equal(isRouterModel('arena-fast'), true);
    assert.equal(isRouterModel('arena-anything'), true);
  });

  it('does not flag concrete models', () => {
    assert.equal(isRouterModel('claude-opus-4.8'), false);
    assert.equal(isRouterModel('swe-1.6-slow'), false);
    assert.equal(isRouterModel('gpt-5.5'), false);
    assert.equal(isRouterModel(''), false);
    assert.equal(isRouterModel(null), false);
  });

  it('honors DEVIN_CONNECT_ROUTER_MODELS extension (exact + prefix)', () => {
    const env = { DEVIN_CONNECT_ROUTER_MODELS: 'auto,smart-*' };
    assert.equal(isRouterModel('auto', env), true);
    assert.equal(isRouterModel('smart-pick', env), true);
    assert.equal(isRouterModel('claude-opus-4.8', env), false);
    // built-ins still apply alongside the extension
    assert.equal(isRouterModel('adaptive', env), true);
  });
});

describe('parseAssignTags', () => {
  it('returns the default layout when unset', () => {
    const t = parseAssignTags({});
    assert.deepEqual(t, {
      req_model_uid: 2, req_cascade_id: 3, resp_assignment: 1, asg_model_uid: 2, asg_jwt: 1, asg_harness: 3,
    });
  });

  it('applies valid overrides and ignores garbage / unknown keys', () => {
    const t = parseAssignTags({
      DEVIN_CONNECT_ASSIGN_TAGS: 'resp_assignment=4,asg_model_uid=7,bogus=9,asg_jwt=xx,asg_harness=-1',
    });
    assert.equal(t.resp_assignment, 4);   // overridden
    assert.equal(t.asg_model_uid, 7);     // overridden
    assert.equal(t.asg_jwt, 1);           // non-int ignored → default
    assert.equal(t.asg_harness, 3);       // negative ignored → default
    assert.equal('bogus' in t, false);    // unknown key not added
  });
});

describe('encode/decode AssignModel round-trip', () => {
  it('encodes the request model_uid at the configured tag', () => {
    const body = encodeAssignModelRequest('adaptive');
    const fields = parseFields(body);
    // default req_model_uid tag is 2
    const f = fields.find((x) => x.field === 2 && x.wireType === 2);
    assert.ok(f, 'model_uid encoded at tag 2');
    assert.equal(f.value.toString('utf8'), 'adaptive');
  });

  it('decodes a full ModelAssignment', () => {
    const raw = buildAssignResponse({
      modelUid: 'claude-opus-4-8-medium', jwt: 'eyJhbGc.sig', harness: ['h1', 'h2'],
    });
    assert.deepEqual(decodeAssignModelResponse(raw), {
      model_uid: 'claude-opus-4-8-medium',
      assignment_jwt: 'eyJhbGc.sig',
      harness_uids: ['h1', 'h2'],
    });
  });

  it('returns null on an empty assignment (no model_uid)', () => {
    assert.equal(decodeAssignModelResponse(buildAssignResponse({ jwt: 'x' })), null);
    assert.equal(decodeAssignModelResponse(Buffer.alloc(0)), null); // no assignment field at all
  });

  it('respects tag overrides symmetrically', () => {
    const env = { DEVIN_CONNECT_ASSIGN_TAGS: 'resp_assignment=4,asg_model_uid=7,asg_jwt=8' };
    const tags = parseAssignTags(env);
    // build a response in the overridden layout
    const inner = Buffer.concat([writeStringField(7, 'm-uid'), writeStringField(8, 'jwt')]);
    const raw = writeMessageField(4, inner);
    assert.deepEqual(decodeAssignModelResponse(raw, tags), {
      model_uid: 'm-uid', assignment_jwt: 'jwt', harness_uids: [],
    });
  });
});

describe('assignModel (transport guards)', () => {
  it('throws NO_TOKEN when no token is available', async () => {
    await assert.rejects(
      () => assignModel({ modelUid: 'adaptive', env: {} }),
      (e) => e.code === 'NO_TOKEN',
    );
  });

  it('throws BAD_REQUEST when modelUid is missing', async () => {
    await assert.rejects(
      () => assignModel({ token: 'fake', env: {} }),
      (e) => e.code === 'BAD_REQUEST',
    );
  });
});