Bot & Automation
Market AI
/root/hermes-projects/Market AI
packages/provider-adapters/src/ai-provider.ts
text
export interface AiReviewInput {
prompt: string;
system?: string;
}
export interface AiReviewResult {
provider: "github_models" | "disabled";
model?: string;
content: string;
}
export function isGithubModelsConfigured(): boolean {
return Boolean(process.env.GITHUB_MODELS_TOKEN);
}
function githubModelsEndpoint(): string {
const org = process.env.GITHUB_MODELS_ORG?.trim();
if (org) {
return `https://models.github.ai/orgs/${org}/inference/chat/completions`;
}
const baseUrl = process.env.GITHUB_MODELS_BASE_URL?.trim() || "https://models.github.ai/inference";
return `${baseUrl.replace(/\/$/, "")}/chat/completions`;
}
export async function generateAiReview(input: AiReviewInput): Promise<AiReviewResult> {
const token = process.env.GITHUB_MODELS_TOKEN;
const model = process.env.GITHUB_MODELS_MODEL?.trim() || "openai/gpt-4.1";
if (!token) {
return {
provider: "disabled",
content: "AI review provider is not configured.",
};
}
const response = await fetch(githubModelsEndpoint(), {
method: "POST",
headers: {
Accept: "application/vnd.github+json",
Authorization: `Bearer ${token}`,
"X-GitHub-Api-Version": "2026-03-10",
"Content-Type": "application/json",
},
body: JSON.stringify({
model,
messages: [
{
role: "system",
content:
input.system ??
"You are a risk-first trading analysis reviewer. Never promise profit or guaranteed accuracy.",
},
{ role: "user", content: input.prompt },
],
temperature: 0.2,
max_tokens: 350,
}),
});
const data = (await response.json()) as {
choices?: Array<{ message?: { content?: string } }>;
message?: string;
error?: { message?: string };
};
if (!response.ok) {
const safeDetail = data.error?.message ?? data.message ?? `GitHub Models request failed with ${response.status}`;
throw new Error(safeDetail);
}
return {
provider: "github_models",
model,
content: data.choices?.[0]?.message?.content?.trim() || "AI review returned an empty response.",
};
}