Spaces:
Sleeping
Sleeping
| async def respond( | |
| command: str, | |
| history: List[Tuple[str, str]], | |
| system_message: str, | |
| max_tokens: int, | |
| temperature: float, | |
| top_p: float, | |
| github_api_token: str, | |
| github_username: str, | |
| github_repository: str, | |
| selected_model: str, | |
| severity: str, | |
| programming_language: str, | |
| *args | |
| ) -> str: | |
| global GITHUB_API_TOKEN | |
| GITHUB_API_TOKEN = github_api_token | |
| global issues | |
| issues = [] | |
| global github_client | |
| github_client = None | |
| messages = [{"role": "system", "content": system_message}] | |
| logging.info("System message: {}".format(system_message)) | |
| for user_msg, assistant_msg in history: | |
| if user_msg: | |
| messages.append({"role": "user", "content": user_msg}) | |
| logging.info("User message: {}".format(user_msg)) | |
| if assistant_msg: | |
| messages.append({"role": "assistant", "content": assistant_msg}) | |
| logging.info("Assistant message: {}".format(assistant_msg)) | |
| logging.info("Command received: {}".format(command)) | |
| try: | |
| command, *args = command.split(' ', 1) | |
| args = args[0] if args else '' | |
| except ValueError: | |
| yield "❌ Invalid command format. Use /help for instructions" | |
| if command == "/github": | |
| try: | |
| if not args: | |
| if github_client: | |
| yield f"ℹ️ Current GitHub connection: {github_client.config.username}/{github_client.config.repository}" | |
| else: | |
| yield "ℹ️ Not connected to GitHub" | |
| parts = args.split(maxsplit=2) # Allow spaces in token | |
| if len(parts) < 3: | |
| raise ValueError("Format: /github <username> <repo> <token>") | |
| github_client = GitHubIntegration(GitHubConfig( | |
| username=parts[0], | |
| repository=parts[1], | |
| api_token=SecretStr(parts[2]) | |
| )) | |
| issues = await github_client.fetch_issues() # Fetch issues after successful connection | |
| yield "✅ GitHub configured successfully" | |
| except Exception as e: | |
| github_client = None | |
| yield f"❌ Error: {str(e)}" | |
| elif command == "/help": | |
| help_message = """Available commands: | |
| - `/github <username> <repo> <token>`: Connect to a GitHub repository. | |
| - `/help`: Show this help message. | |
| - `/generate_code [code description]`: Generate code based on the description. | |
| - `/explain_concept [concept]`: Explain a concept. | |
| - `/write_documentation [topic]`: Write documentation for a given topic. | |
| - `/translate_code [code] to [target language]`: Translate code to another language. | |
| - `/analyze [issue number]`: Analyze a GitHub issue. | |
| - `/list_issues`: List all issues in the connected repository. | |
| """ | |
| yield help_message | |
| elif command.isdigit() and issues: | |
| try: | |
| issue_number = int(command) - 1 | |
| issue = issues[issue_number] | |
| issue_text = issue['title'] + "\n\n" + issue['body'] | |
| resolution = analyze_issues(issue_text, selected_model, severity, programming_language) | |
| related_issues = find_related_issues(issue_text, issues) | |
| related_issue_text = "\n".join( | |
| ["- {} (Similarity: {:.2f})".format(issue['title'], similarity) for issue, similarity in related_issues] | |
| ) | |
| yield "Resolution for Issue '{}':\n{}\n\nRelated Issues:\n{}".format(issue['title'], resolution, related_issue_text) | |
| except Exception as e: | |
| logging.error("Error analyzing issue: {}".format(e)) | |
| yield "Error analyzing issue: {}".format(e) | |
| elif command.startswith("/generate_code"): | |
| code_description = command.replace("/generate_code", "").strip() | |
| if not code_description: | |
| yield "Please provide a description of the code you want to generate." | |
| else: | |
| prompt = "Generate code for the following: {}\nProgramming Language: {}".format(code_description, programming_language) | |
| try: | |
| generated_code = analyze_issues(prompt, selected_model) | |
| code_output = "<pre>{}</pre>".format(generated_code) | |
| yield code_output | |
| except Exception as e: | |
| logging.error("Error generating code: {}".format(e)) | |
| yield "Error generating code: {}".format(e) | |
| elif command.startswith("/explain_concept"): | |
| concept = command.replace("/explain_concept", "").strip() | |
| if not concept: | |
| yield "Please provide a concept to explain." | |
| else: | |
| prompt = "Explain the concept of {} in detail.".format(concept) | |
| try: | |
| explanation = analyze_issues(prompt, selected_model) | |
| yield "<pre>{}</pre>".format(explanation) | |
| except Exception as e: | |
| logging.error("Error explaining concept: {}".format(e)) | |
| yield "Error explaining concept: {}".format(e) | |
| elif command.startswith("/write_documentation"): | |
| topic = command.replace("/write_documentation", "").strip() | |
| if not topic: | |
| yield "Please provide a topic for documentation." | |
| else: | |
| prompt = "Write documentation for the topic: {}".format(topic) | |
| try: | |
| documentation = analyze_issues(prompt, selected_model) | |
| yield "<pre>{}</pre>".format(documentation) | |
| except Exception as e: | |
| logging.error("Error writing documentation: {}".format(e)) | |
| yield "Error writing documentation: {}".format(e) | |
| elif command.startswith("/translate_code"): | |
| try: | |
| code, _, target_language = command.replace("/translate_code", "").strip().partition(" to ") | |
| if not code or not target_language: | |
| yield "Please provide code and target language in the format: `/translate_code [code] to [target language]`" | |
| else: | |
| prompt = f"Translate the following code to {target_language}:\n```\n{code}\n```" | |
| try: | |
| translated_code = analyze_issues(prompt, selected_model) | |
| yield "<pre>{}</pre>".format(translated_code) | |
| except Exception as e: | |
| logging.error("Error translating code: {}".format(e)) | |
| yield "Error translating code: {}".format(e) | |
| except Exception as e: | |
| logging.error("Error parsing translate_code command: {}".format(e)) | |
| yield "Error parsing translate_code command: {}".format(e) | |
| elif command.startswith("/analyze"): | |
| try: | |
| if not github_client: | |
| yield "❌ You need to connect to a GitHub repository first using `/github <username> <repo> <token>`." | |
| issue_number = int(command.replace("/analyze", "").strip()) - 1 | |
| if 0 <= issue_number < len(issues): | |
| issue = issues[issue_number] | |
| issue_text = issue['title'] + "\n\n" + issue['body'] | |
| resolution = analyze_issues(issue_text, selected_model, severity, programming_language) | |
| related_issues = find_related_issues(issue_text, issues) | |
| related_issue_text = "\n".join( | |
| ["- {} (Similarity: {:.2f})".format(issue['title'], similarity) for issue, similarity in related_issues] | |
| ) | |
| yield "Resolution for Issue '{}':\n{}\n\nRelated Issues:\n{}".format(issue['title'], resolution, related_issue_text) | |
| else: | |
| yield "❌ Invalid issue number. Please enter a valid issue number from the list." | |
| except Exception as e: | |
| logging.error("Error analyzing issue: {}".format(e)) | |
| yield "Error analyzing issue: {}".format(e) | |
| elif command == "/list_issues": | |
| try: | |
| if not github_client: | |
| yield "❌ You need to connect to a GitHub repository first using `/github <username> <repo> <token>`." | |
| if issues: | |
| issue_list = "\n".join( | |
| [f"- {issue['title']} (Issue #{issue['number']})" for issue in issues] | |
| ) | |
| yield f"Issues in {github_client.config.username}/{github_client.config.repository}:\n{issue_list}" | |
| else: | |
| yield "❌ No issues found in the connected repository." | |
| except Exception as e: | |
| logging.error("Error listing issues: {}".format(e)) | |
| yield "Error listing issues: {}".format(e) | |
| else: | |
| yield "I'm not sure what you mean. Try using `/help` for a list of available commands." |