opencode-ccgo-provider/scripts/smoke.mjs

56 lines
1.9 KiB
JavaScript

// Live smoke test for the CommandCode provider. Run: node scripts/smoke.mjs [modelId]
import { readFileSync } from "node:fs";
import { homedir } from "node:os";
import { join } from "node:path";
import { createCommandCode } from "../dist/index.js";
function apiKey() {
if (process.env.COMMANDCODE_API_KEY) return process.env.COMMANDCODE_API_KEY;
const configPath = join(homedir(), ".config", "opencode", "opencode.json");
try {
const cfg = JSON.parse(readFileSync(configPath, "utf8"));
return cfg.provider?.commandcode?.options?.apiKey;
} catch {
return undefined;
}
}
const modelId = process.argv[2] ?? "deepseek/deepseek-v4-flash-vision-exp";
const key = apiKey();
if (!key) {
console.error("No API key: set COMMANDCODE_API_KEY or configure provider.commandcode.options.apiKey");
process.exit(1);
}
const provider = createCommandCode({ name: "commandcode", apiKey: key });
const model = provider.languageModel(modelId);
console.log(`== doGenerate: ${modelId} ==`);
const result = await model.doGenerate({
prompt: [{ role: "user", content: [{ type: "text", text: "Reply with exactly: pong" }] }],
maxOutputTokens: 64,
});
console.log("content:", JSON.stringify(result.content));
console.log("finishReason:", result.finishReason);
console.log("usage:", JSON.stringify(result.usage));
console.log(`\n== doStream: ${modelId} ==`);
const { stream } = await model.doStream({
prompt: [{ role: "user", content: [{ type: "text", text: "Count from 1 to 3." }] }],
maxOutputTokens: 128,
});
const reader = stream.getReader();
let text = "";
try {
while (true) {
const { done, value } = await reader.read();
if (done) break;
if (value.type === "text-delta") text += value.delta;
if (value.type === "finish") console.log("stream finish:", JSON.stringify(value.finishReason));
if (value.type === "error") throw value.error;
}
} finally {
reader.releaseLock();
}
console.log("stream text:", JSON.stringify(text));