Skip to main content

examples/openai_apply_patch_tool.exs

alias BeamWeaver.Core.Message
alias BeamWeaver.OpenAI.ChatModel
alias BeamWeaver.OpenAI.Messages
alias BeamWeaver.OpenAI.ToolCalling

model = ChatModel.new(model: "gpt-5.4-mini")

messages = [
  Message.user("""
  Patch lib/example.ex so Example.ok?/0 returns true.
  Return the patch result.
  """)
]

tools = [ToolCalling.apply_patch()]

{:ok, request_body} = ChatModel.request_body(model, messages, tools: tools)

IO.puts("OpenAI Responses request with apply_patch:")
IO.inspect(request_body, pretty: true, limit: :infinity)

assistant_with_patch =
  Message.assistant([
    %{
      type: :apply_patch_call,
      call_id: "patch_1",
      input: """
      *** Begin Patch
      *** Update File: lib/example.ex
      @@
      -  def ok?, do: false
      +  def ok?, do: true
      *** End Patch
      """
    },
    %{
      type: :apply_patch_call_output,
      call_id: "patch_1",
      output: "Success. Updated lib/example.ex"
    },
    %{type: :text, text: "Patch applied."}
  ])

{:ok, replay_input} = Messages.to_responses_input([assistant_with_patch])

IO.puts("\nReplayable assistant history:")
IO.inspect(replay_input, pretty: true, limit: :infinity)