File size: 8,169 Bytes
1f8e463
 
 
 
 
 
 
a9b5570
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
d08a48d
 
 
 
 
 
 
 
 
 
1f8e463
a9b5570
 
 
 
 
 
 
 
 
 
 
1f8e463
 
282ada1
 
 
 
 
 
 
 
 
 
 
a9b5570
282ada1
a9b5570
 
 
282ada1
 
 
 
 
1f8e463
a9b5570
 
 
1f8e463
a9b5570
 
 
1f8e463
d08a48d
 
 
1f8e463
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
import gradio as gr

from codedog_demo.callbacks import get_sample_choices, request_pr_review, show_sample

sample_choices = get_sample_choices()


text = """# [codedog-ai/codedog #2 - feat(telemetry): :sparkles: collect gpt api cost](https://github.com/codedog-ai/codedog/pull/2) Pull Request Report

*powered by GPT and codedog 0.8.2*

## Execution
- Start at: 2023-09-07 07:18:18
- Time usage: 12.72s
- Openai api tokens: 3506
- Openai api costs: $0.0460




## PR Summary

### PR Overview
This PR is a new feature :sparkles:

This PR aims to collect the cost of GPT API calls from the openai callback of langchain. It modifies several functions in the 'codedog/review.py' file to include an additional parameter 'cb.total_cost' in the '_meter_api_call_tokens' function call and updates the value of the 'cost' key in the '_telemetry' dictionary. It also modifies the 'examples/github/github_review.py' file to update the variables 'repository_name_or_id' and 'pull_request_number'.



### Change Details

| Major Changes | Description |
|---|---|
| **[review.py](https://github.com/codedog-ai/codedog/pull/2/files#diff-10471033f603ac7fae28b2c7c57040e8732947f0 "codedog/review.py")** | This diff contains the following changes in the file codedog/review.py:		- Added a new key "cost" to the dictionary `_telemetry` in the `__init__` function.	- Modified the `_single_file_summarize` function to include an additional parameter `cb.total_cost` in the `_meter_api_call_tokens` function call.	- Modified the `_changelist_summarize` function to include an additional parameter `cb.total_cost` in the `_meter_api_call_tokens` function call.	- Modified the `_feedback` function to include an additional parameter `cb.total_cost` in the `_meter_api_call_tokens` function call.	- Modified the `_meter_api_call_tokens` function to include a new parameter `cost` and update the value of the "cost" key in the `_telemetry` dictionary.	- No other changes were made in the file. |
| **[github_review.py](https://github.com/codedog-ai/codedog/pull/2/files#diff-78de2b9548d0316c55661aaf9b2222ad80a07012 "examples/github/github_review.py")** | This diff contains changes in the file `github_review.py`. 		The changes include:	- Commenting out the lines that set the variables `repository_name_or_id` and `pull_request_number` to "ClickHouse/ClickHouse" and 49113 respectively.	- Adding new lines that set the variables `repository_name_or_id` to "Arcadia822/codedog" and `pull_request_number` to 2.	- The function `build_pull_request_event` is called with the updated `repository_name_or_id` and `pull_request_number` variables. |




<details>
<summary><h3>Change File List</h3></summary>

Modified files:
- codedog/review.py
- examples/github/github_review.py


</details>



## Code Review (preview)

*This feature is still under test. Suggestions are given by AI and might be incorrect.*

**[codedog/review.py](https://github.com/codedog-ai/codedog/pull/2/files#diff-10471033f603ac7fae28b2c7c57040e8732947f0)**

Based on the code diff, here are my observations and suggestions:

1. Line 44: The code change to add a new key "cost" to the `_telemetry` dictionary seems correct. It allows tracking the cost associated with API calls.

2. Line 113 and 130: The code changes to the `_meter_api_call_tokens` method seem correct. It now accepts an additional parameter `cb.total_cost` to track the cost associated with API calls.

3. Line 144: The code change to pass `cb.total_cost` as the second argument to `_meter_api_call_tokens` method seems correct. It ensures that the cost is properly tracked for API calls made during the feedback process.

4. Line 175: The code change to add the `cost` key to the `TEMPLATE.REPORT_HEADER` format seems correct. It allows displaying the total cost in the generated report.

Overall, the code changes seem correct and aligned with the purpose of tracking API call costs. However, here are a few suggestions for the author:

- It would be helpful to include comments or docstrings explaining the purpose and usage of the `_meter_api_call_tokens` method and its parameters.

- Consider using more descriptive variable names instead of abbreviations like `cb` to improve code readability.

- Ensure that the `cb.total_cost` value passed to `_meter_api_call_tokens` is calculated correctly and represents the actual cost of API calls.

- Consider adding unit tests to verify the correctness of the code changes and to ensure that the cost tracking functionality works as expected.

- Double-check if there are any other places in the codebase where the `cost` value needs to be updated or used.

These suggestions will help improve the clarity, maintainability, and reliability of the code.

**[examples/github/github_review.py](https://github.com/codedog-ai/codedog/pull/2/files#diff-78de2b9548d0316c55661aaf9b2222ad80a07012)**

Based on the code diff, it seems that the author has made some changes to the `github_review.py` file. Here are my observations and suggestions:

1. The author has commented out the lines that set the `repository_name_or_id` and `pull_request_number` variables for the "ClickHouse/ClickHouse" repository. It appears that the author wants to disable this repository for now. If this change is intentional, it is fine.

2. The author has uncommented the lines that set the `repository_name_or_id` and `pull_request_number` variables for the "Arcadia822/codedog" repository and pull request number 2. If this change is intentional, it is fine.

3. It is important to ensure that the correct repository and pull request number are set for the desired review. Please double-check that the "Arcadia822/codedog" repository and pull request number 2 are the intended targets for the review.

Overall, the code change seems to be correct, assuming the author's intention is to disable the "ClickHouse/ClickHouse" repository and review the "Arcadia822/codedog" repository's pull request number 2.




"""


about = """Codedog is used for a while in my team (reviewed about 2000 PRs.).
Basically it's a service triggered by PR event and comment directly on the PR to give a pre human review.

Comment report includes PR summary and code suggestions. Summary is great and time saving.
But suggestions are not very valuable now.

CR practice learned from: https://google.github.io/eng-practices/review/reviewer
"""


with gr.Blocks(theme="xiaobaiyuan/theme_brief") as demo:
    gr.Markdown("# Codedog - A pull reqeust review tool")

    gr.Markdown(
        """**Codedog is designed to save reviewer's time by providing useful information based on PR context.**

- Github App (Rate limit is low): https://github.com/apps/codedog-assistant
- Source Code: https://github.com/codedog-ai/codedog
- Deploy as a service: https://github.com/codedog-ai/codedog/tree/master/examples
- Feedback or showcase ❤️: https://github.com/codedog-ai/codedog/discussions
"""
    )

    with gr.Tab(label="Try Yourself"):
        with gr.Row():
            custom_pr_url = gr.Textbox(
                max_lines=1,
                value="https://github.com/codedog-ai/codedog/pull/2",
                placeholder="Paste Github PR URL here",
                show_label=False,
            )
        with gr.Row():
            custom_submit = gr.Button(value="Review It")
        with gr.Row():
            with gr.Tab(label="Markdown"):
                custom_content = gr.Markdown(value=text)
            with gr.Tab(label="Raw"):
                custom_content_raw = gr.Textbox(
                    value=text, show_label=False, lines=100, max_lines=500
                )
        custom_submit.click(
            request_pr_review,
            inputs=[custom_pr_url],
            outputs=[custom_content, custom_content_raw],
        )

    # with gr.Tab(label="Samples"):
    #     sample_choice = gr.Radio(choices=sample_choices, type="index", show_label=False)
    #     sample_content = gr.Markdown(value="")

    #     sample_choice.input(
    #         show_sample, inputs=[sample_choice], outputs=[sample_content]
    #     )

    with gr.Tab(label="About"):
        gr.Markdown(value=about)


if __name__ == "__main__":
    demo.launch()