DocumentationAPI Reference📓 Tutorials🧑‍🍳 Cookbook🤝 Integrations💜 Discord🎨 Studio
Documentation

GitHubIssueCommenter

This component posts comments to GitHub issues using the GitHub API.

Most common position in a pipelineAfter a Chat Generator that provides the comment text to post or right at the beginning of a pipeline
Mandatory init variables"github_token": GitHub personal access token. Can be set with GITHUB_TOKEN env var.
Mandatory run variables"url": A GitHub issue URL

"comment": Comment text to post
Output variables"success": Boolean indicating whether the comment was posted successfully
API referenceGitHub
GitHub linkhttps://github.com/deepset-ai/haystack-core-integrations/tree/main/integrations/github

Overview

GitHubIssueCommenter takes a GitHub issue URL and comment text, then posts the comment to the specified issue.

The component requires authentication with a GitHub personal access token since posting comments is an authenticated operation.

Authorization

This component requires GitHub authentication with a personal access token. You can set the token using the GITHUB_TOKEN environment variable, or pass it directly during initialization via the github_token parameter.

To create a personal access token, visit GitHub's token settings page. Make sure to grant the appropriate permissions for repository access and issue management.

Installation

Install the GitHub integration with pip:

pip install github-haystack

Usage

📘

Repository Placeholder

To run the following code snippets, you need to replace the owner/repo with your own GitHub repository name.

On its own

Basic usage with environment variable authentication:

from haystack_integrations.components.connectors.github import GitHubIssueCommenter

commenter = GitHubIssueCommenter()
result = commenter.run(
    url="https://github.com/owner/repo/issues/123",
    comment="Thanks for reporting this issue! We'll look into it."
)

print(result)
{'success': True}

In a pipeline

The following pipeline analyzes a GitHub issue and automatically posts a response:

from haystack import Pipeline
from haystack.components.builders.chat_prompt_builder import ChatPromptBuilder
from haystack.components.converters import OutputAdapter
from haystack.components.generators.chat import OpenAIChatGenerator
from haystack.dataclasses import ChatMessage
from haystack_integrations.components.connectors.github import GitHubIssueViewer, GitHubIssueCommenter

issue_viewer = GitHubIssueViewer()
issue_commenter = GitHubIssueCommenter()

prompt_template = [
    ChatMessage.from_system("You are a helpful assistant that analyzes GitHub issues and creates appropriate responses."),
    ChatMessage.from_user(
        "Based on the following GitHub issue:\n"
        "{% for document in documents %}"
        "{% if document.meta.type == 'issue' %}"
        "**Issue Title:** {{ document.meta.title }}\n"
        "**Issue Description:** {{ document.content }}\n"
        "{% endif %}"
        "{% endfor %}\n"
        "Generate a helpful response comment for this issue. Keep it professional and concise."
    )
]

prompt_builder = ChatPromptBuilder(template=prompt_template, required_variables="*")
llm = OpenAIChatGenerator(model="gpt-4o-mini")
adapter = OutputAdapter(template="{{ replies[-1].text }}", output_type=str)

pipeline = Pipeline()
pipeline.add_component("issue_viewer", issue_viewer)
pipeline.add_component("prompt_builder", prompt_builder)
pipeline.add_component("llm", llm)
pipeline.add_component("adapter", adapter)
pipeline.add_component("issue_commenter", issue_commenter)

pipeline.connect("issue_viewer.documents", "prompt_builder.documents")
pipeline.connect("prompt_builder.prompt", "llm.messages")
pipeline.connect("llm.replies", "adapter.replies")
pipeline.connect("adapter", "issue_commenter.comment")

issue_url = "https://github.com/owner/repo/issues/123"
result = pipeline.run(data={
    "issue_viewer": {"url": issue_url},
    "issue_commenter": {"url": issue_url}
})

print(f"Comment posted successfully: {result['issue_commenter']['success']}")
Comment posted successfully: True