2024-09-06 15:25:09 -07:00
import { Anthropic } from "@anthropic-ai/sdk" ;
2024-05-13 23:00:02 -07:00
export interface Env {
2024-09-06 15:25:09 -07:00
ANTHROPIC_API_KEY : string ;
2024-05-13 23:00:02 -07:00
}
export default {
2024-09-06 15:25:09 -07:00
async fetch ( request : Request , env : Env ) : Promise < Response > {
if ( request . method !== "GET" ) {
return new Response ( "Method Not Allowed" , { status : 405 } ) ;
}
const url = new URL ( request . url ) ;
// const fileName = url.searchParams.get("fileName");
// const line = url.searchParams.get("line");
const instructions = url . searchParams . get ( "instructions" ) ;
const code = url . searchParams . get ( "code" ) ;
const prompt = `
Make the following changes to the code below :
- $ { instructions }
Return the complete code chunk . Do not refer to other code files . Do not add code before or after the chunk . Start your reponse with \ ` \` \` , and end with \` \` \` . Do not include any other text.
\ ` \` \`
$ { code }
\ ` \` \`
` ;
console . log ( prompt ) ;
try {
const anthropic = new Anthropic ( { apiKey : env.ANTHROPIC_API_KEY } ) ;
interface TextBlock {
type : "text" ;
text : string ;
}
interface ToolUseBlock {
type : "tool_use" ;
tool_use : {
// Add properties if needed
} ;
}
type ContentBlock = TextBlock | ToolUseBlock ;
function getTextContent ( content : ContentBlock [ ] ) : string {
for ( const block of content ) {
if ( block . type === "text" ) {
return block . text ;
}
}
return "No text content found" ;
}
const response = await anthropic . messages . create ( {
model : "claude-3-5-sonnet-20240620" ,
max_tokens : 1024 ,
messages : [ { role : "user" , content : prompt } ] ,
} ) ;
const message = response . content as ContentBlock [ ] ;
const textBlockContent = getTextContent ( message ) ;
const pattern = /```[a-zA-Z]*\n([\s\S]*?)\n```/ ;
const match = textBlockContent . match ( pattern ) ;
const codeContent = match ? match [ 1 ] : "Error: Could not extract code." ;
return new Response ( JSON . stringify ( { "response" : codeContent } ) )
} catch ( error ) {
console . error ( "Error:" , error ) ;
return new Response ( "Internal Server Error" , { status : 500 } ) ;
}
} ,
} ;