From 3a9e6237dae3cd49ca8683b4b3c02bc3030df5ed Mon Sep 17 00:00:00 2001 From: Oscar Date: Tue, 26 May 2026 15:32:04 +0300 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=80=20feat(src/openai.ts):=20=D0=B4?= =?UTF-8?q?=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B0=20=D1=84=D1=83?= =?UTF-8?q?=D0=BD=D0=BA=D1=86=D0=B8=D1=8F=20askOpenCode=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20=D0=B2=D0=B7=D0=B0=D0=B8=D0=BC=D0=BE=D0=B4=D0=B5=D0=B9?= =?UTF-8?q?=D1=81=D1=82=D0=B2=D0=B8=D1=8F=20=D1=81=20OpenCode=20API.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/openai.ts | 43 +++++++++++++++++++++++++++++++++++++++---- 1 file changed, 39 insertions(+), 4 deletions(-) diff --git a/src/openai.ts b/src/openai.ts index 68afd81..2e5bed0 100644 --- a/src/openai.ts +++ b/src/openai.ts @@ -1,16 +1,51 @@ -import Anthropic from '@anthropic-ai/sdk' +import { createOpencode } from '@opencode-ai/sdk' +// import Anthropic from '@anthropic-ai/sdk' import OpenAI from 'openai' +// export const claude = new Anthropic({ +// apiKey: process.env.ANTHROPIC_API_KEY, +// }) -export const claude = new Anthropic({ - apiKey: process.env.ANTHROPIC_API_KEY, -}) +let _opencode: Awaited> | null = null + +async function getOpencode() { + if (!_opencode) { + _opencode = await createOpencode({ + hostname: '127.0.0.1', + port: 4096, + config: { model: 'anthropic/claude-3-5-sonnet-20241022' }, + }) + console.log(`OpenCode server running at ${_opencode.server.url}`) + } + return _opencode +} export const groq = new OpenAI({ apiKey: process.env.GROQ_API_KEY, baseURL: 'https://api.groq.com/openai/v1', }) +export async function askOpenCode(resume: string, message: string, prompt: string) { + const opencode = await getOpencode() + const session = await opencode.client.session.create({}) + const sessionId = session.data?.id || '0' + console.log('sessionId: ', sessionId) + + const result = await opencode.client.session.prompt({ + path: { id: sessionId }, + body: { + parts: [ + { type: 'text', text: `${prompt}\n\n${resume}\n\n${message}` }, + ], + }, + }) + + console.log(result) + + const textPart = result.data?.parts?.find((p: { type: string }) => p.type === 'text') as { type: 'text', text: string } | undefined + return textPart?.text ?? null +} + export async function askGPT(resume: string, message: string, prompt: string) { // return 'test'