| import gradio as gr |
| import requests |
| import json |
| import os |
|
|
| FIREWORKS_API_KEY = os.getenv("FIREWORKS_API_KEY") |
| API_URL = "https://api.fireworks.ai/inference/v1/chat/completions" |
| MODEL_NAME = "accounts/fireworks/models/glm-4p6" |
|
|
|
|
| |
| def query_fireworks(messages, max_tokens=2048, temperature=0.6): |
| headers = { |
| "Accept": "application/json", |
| "Content-Type": "application/json", |
| "Authorization": f"Bearer {FIREWORKS_API_KEY}", |
| } |
| payload = { |
| "model": MODEL_NAME, |
| "max_tokens": max_tokens, |
| "temperature": temperature, |
| "messages": messages, |
| } |
| response = requests.post(API_URL, headers=headers, data=json.dumps(payload)) |
| if response.status_code == 200: |
| return response.json()["choices"][0]["message"]["content"] |
| else: |
| return f"Error: {response.text}" |
|
|
|
|
| |
| def generate_docs(code_input_type, code_content, file_obj, github_url, api_key): |
| global FIREWORKS_API_KEY |
| if api_key: |
| FIREWORKS_API_KEY = api_key |
|
|
| code = "" |
| if code_input_type == "Paste Code": |
| code = code_content |
| elif code_input_type == "Upload File" and file_obj is not None: |
| code = file_obj.read().decode("utf-8") |
| elif code_input_type == "GitHub Link" and github_url: |
| if "raw.githubusercontent.com" not in github_url: |
| github_url = github_url.replace("github.com", "raw.githubusercontent.com").replace("/blob/", "/") |
| r = requests.get(github_url) |
| if r.status_code == 200: |
| code = r.text |
| else: |
| return f"Unable to fetch file (HTTP {r.status_code})", "" |
|
|
| if not code.strip(): |
| return "β οΈ Please provide valid Python code.", "" |
|
|
| messages = [ |
| { |
| "role": "system", |
| "content": ( |
| "You are an AI documentation assistant that analyzes Python code and generates " |
| "multi-layer documentation. Include: 1) Overview, 2) Key classes/functions, " |
| "3) Usage examples, 4) Dependencies, 5) Suggested improvements." |
| ), |
| }, |
| {"role": "user", "content": code}, |
| ] |
|
|
| output = query_fireworks(messages, max_tokens=4096) |
| return output, code |
|
|
|
|
| |
| def chat_with_code(user_input, chat_history, code_context, api_key): |
| global FIREWORKS_API_KEY |
| if api_key: |
| FIREWORKS_API_KEY = api_key |
|
|
| if not code_context.strip(): |
| return "β οΈ No code context found. Please generate documentation first.", chat_history |
|
|
| messages = [ |
| { |
| "role": "system", |
| "content": ( |
| "You are a code analysis assistant. You answer questions about the following Python code. " |
| "Explain clearly and refer to specific functions or logic when relevant." |
| ), |
| }, |
| {"role": "user", "content": f"Code:\n{code_context}\n\nQuestion:\n{user_input}"}, |
| ] |
|
|
| reply = query_fireworks(messages) |
| chat_history.append(("You", user_input)) |
| chat_history.append(("GLM-4.6", reply)) |
| return "", chat_history |
|
|
|
|
| |
|
|
| with gr.Blocks(title="Intelligent Documentation Generator Agent") as demo: |
| gr.Markdown("# π§ Intelligent Documentation Generator Agent (GLM-4.6 on Fireworks AI)") |
| gr.Markdown( |
| "Generate intelligent documentation or chat with your Python code. " |
| "Provide your Fireworks API key to get started." |
| ) |
|
|
| with gr.Row(): |
| api_key_box = gr.Textbox( |
| label="π Fireworks API Key", |
| placeholder="Enter your Fireworks API Key", |
| type="password", |
| ) |
|
|
| with gr.Tabs(): |
| |
| with gr.TabItem("π Generate Documentation"): |
| code_input_type = gr.Radio( |
| ["Paste Code", "Upload File", "GitHub Link"], label="Choose input type", value="Paste Code" |
| ) |
|
|
| code_box = gr.Textbox(label="Paste your Python code", lines=15, visible=True) |
| file_upload = gr.File(label="Upload Python file", visible=False) |
| github_box = gr.Textbox(label="GitHub raw file link", visible=False) |
|
|
| def toggle_inputs(input_type): |
| return ( |
| gr.update(visible=input_type == "Paste Code"), |
| gr.update(visible=input_type == "Upload File"), |
| gr.update(visible=input_type == "GitHub Link"), |
| ) |
|
|
| code_input_type.change(toggle_inputs, [code_input_type], [code_box, file_upload, github_box]) |
|
|
| generate_btn = gr.Button("π Generate Documentation") |
|
|
| output_box = gr.Markdown(label="π Generated Documentation") |
| hidden_code_context = gr.Textbox(visible=False) |
|
|
| generate_btn.click( |
| generate_docs, |
| [code_input_type, code_box, file_upload, github_box, api_key_box], |
| [output_box, hidden_code_context], |
| ) |
|
|
| |
| with gr.TabItem("π¬ Chat with Code"): |
| gr.Markdown("Chat about the Python file you uploaded or analyzed in the previous tab.") |
| chatbot = gr.Chatbot(label="GLM-4.6 Code Assistant") |
| msg = gr.Textbox(label="Ask a question about the code") |
| send_btn = gr.Button("Ask") |
|
|
| send_btn.click( |
| chat_with_code, |
| [msg, chatbot, hidden_code_context, api_key_box], |
| [msg, chatbot], |
| ) |
|
|
| demo.launch() |