Skip to content

Commit

Permalink
Refactor file edit handling for improved modularity and functionality (
Browse files Browse the repository at this point in the history
…#759)

* Refactor file edit logic to improve modularity and reusability 📦✨

* Refactor file edit handling by updating imports and enhancing functionality ✏️

* Enhance file edit handling and update model configurations 📂✨

* Add YAML serialization and enhance logging 🚀📄

* Add test improvements and caching enhancements 🚀

* Update test execution and result paths in `extrism.genai.mts` 🚀

* Add comments to explain generated Python code ✏️

* Add timestamped results directory and optimize sample processing 🚀

* Add placeholder text to poem generation file 📝

* Enhance Git system integration and update failure investigation steps 🛠️🔍

* Fix typo in tool name from md_read_frontmatterm to md_read_frontmatter 🔧✏️
  • Loading branch information
pelikhan authored Oct 8, 2024
1 parent 882e311 commit 35d4773
Show file tree
Hide file tree
Showing 34 changed files with 794 additions and 405 deletions.
15 changes: 12 additions & 3 deletions docs/genaisrc/genaiscript.d.ts

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 4 additions & 1 deletion docs/src/content/docs/reference/scripts/system.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -206,7 +206,10 @@ defAgent(
- The current repository is the same as github repository.
- Prefer using diff to compare files rather than listing files. Listing files is only useful when you need to read the content of the files.
`,
{ model, system: ["system.git_info", "system.github_info"], tools: ["git"] }
{
model,
system: ["system.git_info", "system.github_info", "system.git"],
}
)

`````
Expand Down
100 changes: 0 additions & 100 deletions eval/extrism/genaisrc/extrism-tool.genai.mts

This file was deleted.

129 changes: 129 additions & 0 deletions eval/extrism/genaisrc/extrism.genai.mts
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
script({
model: "openai:gpt-4o",
title: "Runs a extrism sample",
})

const results = `eval/extrism/results/${new Date().toISOString().replace(/:/g, "-")}`
const practiceDir = "python/exercises/practice"

// create container
const container = await host.container({
image: "python:3.11.1",
networkEnabled: true,
})
//console.log(`container path: ${await container.containerPath}`)
console.log(`host path: ${await container.hostPath}`)

await container.exec("git clone https://github.com/exercism/python")
await container.exec("pip install --upgrade pip")
await container.exec("pip install -r requirements.txt --user", {
cwd: "python",
})
await container.exec("pip install pytest --user", { cwd: "python" })
await container.disconnect()

const q = host.promiseQueue(5)
const samples = (await container.exec("ls -1", { cwd: practiceDir })).stdout
.trim()
.split(/\n/g)
await q.mapAll(samples, async (sample) => {
const cwd = path.join(practiceDir, sample)
console.log(cwd)
const { files: samplefiles } = JSON.parse(
await container.readText(path.join(cwd, ".meta/config.json"))
)
const { solution, test } = samplefiles
const filename = path.join(cwd, solution[0])
let instructions = ""
for (const introname of [
"introduction",
"instructions",
"instructions.app",
]) {
const intro = await container.readText(
path.join(cwd, `.docs/${introname}.md`)
)
if (intro) instructions += intro + "\n\n"
}

let generatedCode = ""
let testPassed = false
const res = await runPrompt(
(ctx) => {
ctx.$`
## Task 1:
Analyze INSTRUCTIONS and generate Python code that the requirements.
- use Python 3.11
- Use the TEMPLATE code as a starting point and update it to solve the problem.
You mush NOT change the function signature. Implement the functions.
- do NOT generate unit tests.
- you can only use built-in python libraries. pip packages are not allowed.
## Task 2:
Evaluate the generated code by running the unit tests.
- Use the test_code tool to run the unit tests against the generated code.
## Task 3:
If the tests fail, update the generated code in Task 1 and re-run the tests in Task 1.
If the tests passed, stop.
`

ctx.def("INSTRUCTIONS", instructions, { language: "markdown" })
ctx.def("TEMPLATE", { filename }, { language: "python" })

ctx.defTool(
"test_code",
"Run unit tests against generated solution",
{
code: {
type: "string",
description:
"Generated Python code to solve the problem",
},
},
async ({ code }) => {
generatedCode = code
console.log(code)
await container.writeText(filename, code)
const res = await container.exec(
`python3.11 -m pytest -o markers=task ${test[0]}`,
{ cwd }
)
if (res.exitCode) {
console.log(res.stdout || "")
console.log(res.stderr || "")
} else testPassed = true
return res
},
{ maxTokens: 20000 }
)
},
{
label: sample,
applyEdits: true,
cache: "extrism",
system: [
"system",
"system.explanations",
"system.python",
"system.files",
],
}
)

await workspace.writeText(
`${results}/res/${sample}.yaml`,
YAML.stringify(res)
)
if (generatedCode)
await workspace.writeText(
`${results}/${testPassed ? "success" : "failed"}/${solution[0]}`,
generatedCode
)
})
15 changes: 12 additions & 3 deletions eval/extrism/genaisrc/genaiscript.d.ts

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

15 changes: 12 additions & 3 deletions genaisrc/genaiscript.d.ts

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 35d4773

Please sign in to comment.