CoolFace
Apppublic

robinroy03/github-bot

sourceHugging Faceupdated 2y agoView on Hugging Face
0likes
server.py121 linesDownload Raw Back to root
1from flask import Flask, request2import requests3import json4import os5 6from jwt_setup import get_installation_access_token7 8 9app = Flask(__name__)10 11def get_llm_output(query: str):12    LLM_output = requests.post('https://robinroy03-fury-engine.hf.space/api/google/generate', json={"query": query, "llm": "gemini-1.5-pro", "knn": 3, "stream": False})13    LLM_output = json.loads(LLM_output.text)14    LLM_output = LLM_output['response'] + '\n\n**References**\n' + LLM_output['references']15 16    return LLM_output17 18 19def get_root_comment_id(node_id: str) -> str:20    """21    Parameters22    ----------23    node_id: str24      The ID of the comment node.25 26    Returns27    -------28    root comment node_id: str29      The ID of the root comment node ID30 31    """32    token = get_installation_access_token(33        os.environ.get('CHATBOT_PUB_KEY'),34        os.environ.get('APP_ID'),35        os.environ.get('INSTALLATION_ID')36    )37    headers = {"Authorization": f"token {token}"}38    query = "query get_root_comment_ID ($id: ID!){node(id: $id) {... on DiscussionComment {replyTo {id}}}}"39    variables = {"id": node_id}40 41    json_return = requests.post('https://api.github.com/graphql', json={'query': query, 'variables': variables}, headers=headers)42    json_return = json.loads(json_return.text)43 44    return json_return['data']['node']['replyTo']['id']45 46 47def post_discussion_reply(discussion_id: str, replytoid: str, body: str):48    """49    Parameters50    ----------51    discussion_id: str52        ID of the discussion, available on the webhook payload53    replytoid: str54        ID of the root reply. This is not the ID of a threaded reply. Use get_root_comment_id() for the root ID.55    body: str56        Body of the reply57 58    """59    token = get_installation_access_token(60        os.environ.get('CHATBOT_PUB_KEY'),61        os.environ.get('APP_ID'),62        os.environ.get('INSTALLATION_ID')63    )64 65    headers = {"Authorization": f"token {token}"}66    query = "mutation AddDiscussionComment($discussionId: ID!, $body: String!, $replyToId: ID!) {addDiscussionComment(input: {discussionId: $discussionId, body: $body, replyToId: $replyToId}) {clientMutationId}}"67    variables = {"discussionId": discussion_id, "body": body, "replyToId": replytoid}68 69    requests.post('https://api.github.com/graphql', json={'query': query, 'variables': variables}, headers=headers)70 71 72def post_discussion_comment(discussion_id: str, body: str):73    token = get_installation_access_token(74        os.environ.get('CHATBOT_PUB_KEY'),75        os.environ.get('APP_ID'),76        os.environ.get('INSTALLATION_ID')77    )78 79    headers = {"Authorization": f"token {token}"}80    query = "mutation AddDiscussionComment($discussionId: ID!, $body: String!) {addDiscussionComment(input: {discussionId: $discussionId, body: $body}) {clientMutationId}}"81    variables = {"discussionId": discussion_id, "body": body}82 83    requests.post('https://api.github.com/graphql', json={'query': query, 'variables': variables}, headers=headers)84 85 86@app.route("/github", methods=['POST'])87def main():88    payload = request.get_json()89    URL = "https://api.github.com/graphql"90 91    if 'discussion' in payload and 'comment' not in payload:92        discussion_id = payload['discussion']['node_id']93        discussion_title = payload['discussion']['title']94        discussion_body = payload['discussion']['body']95 96        if ("[X] I want an AI-generated answer as a first response." in discussion_body) or ("[x] I want an AI-generated answer as a first response." in discussion_body):97            post_discussion_comment(discussion_id=discussion_id, body=get_llm_output(f"{discussion_title}\n{discussion_body}"))98        else:99            return {"status": False}    100 101        return {"status": True}102    103    elif 'discussion' in payload and 'comment' in payload:104        if payload['comment']['parent_id'] != None and payload['comment']['body'].startswith("!fury"):105            post_discussion_reply(106                payload['discussion']['node_id'],107                get_root_comment_id(payload['comment']['node_id']),108                get_llm_output(payload['comment']['body'][6:])    109            )110        elif payload['comment']['parent_id'] == None and payload['comment']['body'].startswith("!fury"):111            post_discussion_reply(112                payload['discussion']['node_id'],113                payload['comment']['node_id'],114                get_llm_output(payload['comment']['body'][6:])115            )116 117        return {"status": True}118 119    else:120        return {"status": False}121