aicommit2
Version:
A Reactive CLI that generates commit messages for Git and Jujutsu with various AI
2 lines (1 loc) • 3.58 kB
JavaScript
import c from"chalk";import{CohereClientV2 as P}from"cohere-ai";import{concatMap as p,from as d,map as l,catchError as h}from"rxjs";import{fromPromise as f}from"rxjs/internal/observable/innerFrom";import{A as M,l as k,a as x,b,c as R,d as E,e as S}from"./ai.service-d8e94c3a.mjs";import{b as $,g as V,t as D}from"./cli-8ee62906.mjs";import"fs";import"path";import"@pacote/xxhash";import"winston";import"cleye";import"module";import"crypto";import"os";import"node:buffer";import"node:path";import"node:child_process";import"node:process";import"child_process";import"node:url";import"node:os";import"assert";import"events";import"node:fs";import"buffer";import"stream";import"util";import"node:util";import"inquirer";import"fs/promises";import"readline";import"figlet";import"gradient-string";import"ora";import"inquirer-reactive-list-prompt";import"winston-daily-rotate-file";import"axios";import"url";import"node:fs/promises";import"chokidar";import"rxjs/operators";class N extends M{constructor(r){super(r),this.params=r,this.colors={primary:"#D18EE2",secondary:"#fff"},this.serviceName=c.bgHex(this.colors.primary).hex(this.colors.secondary).bold(`[Cohere${this.formatModelSuffix()}]`),this.errorPrefix=c.red.bold(`[Cohere${this.formatModelSuffix()}]`),this.cohere=new P({token:this.params.config.key})}isValidCohereV2Response(r){const e=r;return e?.message?.content!==void 0&&Array.isArray(e.message.content)&&e.message.content.length>0&&typeof e.message.content[0]?.text=="string"}getServiceSpecificErrorMessage(r){const e=r.message||"";return e.includes("API key")||e.includes("api_key")?"Invalid API key. Check your Cohere API key in configuration":e.includes("rate_limit")||e.includes("Rate limit")?"Rate limit exceeded. Wait a moment and try again, or upgrade your Cohere plan":e.includes("model")||e.includes("Model")?"Model not found or not accessible. Check if the Cohere model name is correct":e.includes("overloaded")||e.includes("capacity")?"Cohere service is overloaded. Try again in a few minutes":e.includes("403")||e.includes("Forbidden")?"Access denied. Your API key may not have permission for this Cohere model":e.includes("404")||e.includes("Not Found")?"Model or endpoint not found. Check your Cohere model configuration":e.includes("500")||e.includes("Internal Server Error")?"Cohere server error. Try again later":null}generateCommitMessage$(){return f(this.generateMessage("commit")).pipe(p(r=>d(r)),l(this.formatAsChoice),h(this.handleError$))}generateCodeReview$(){return f(this.generateMessage("review")).pipe(p(r=>d(r)),l(this.formatCodeReviewAsChoice),h(this.handleError$))}async generateMessage(r){const e=this.params.stagedDiff.diff,{logging:o,temperature:g,generate:u,type:C,maxTokens:v}=this.params.config,n=this.buildPromptOptions(),i=r==="review"?$(n):V(n),a=`Here is the diff: ${e}`,y=[...i?[{role:"system",content:i}]:[],{role:"user",content:a}],A=`${this.params.config.url}/v2/chat`;k(e,r,"Cohere",this.params.config.model,A,{},o),x(e,r,"Cohere",i,a,o);const m={model:this.params.config.model,messages:y,max_tokens:v,temperature:g,seed:D(10,1e3),p:this.params.config.topP};b(e,r,"Cohere",m,o);const I=Date.now();try{const t=await this.cohere.chat(m,{timeoutInSeconds:Math.floor(this.params.config.timeout/1e3)}),w=Date.now()-I;if(!this.isValidCohereV2Response(t))throw new Error("Invalid response structure from Cohere v2 API");const s=t.message.content[0].text;return R(e,r,"Cohere",t,o),E(e,r,"Cohere",w,s,o),r==="review"?this.parseCodeReview(s):this.parseMessage(s,C,u)}catch(t){throw S(e,r,"Cohere",t,o),t}}}export{N as CohereService};