1
1
# -*- coding: utf-8 -*-
2
2
import os
3
- from langchain .chat_models import ChatOpenAI
3
+ from langchain .chat_models import ChatOpenAI , AzureChatOpenAI
4
4
from langchain .agents import AgentType , Tool , initialize_agent
5
5
from langchain .agents .agent import AgentExecutor
6
6
from langchain .callbacks import HumanApprovalCallbackHandler
7
7
from langchain .agents .structured_chat .base import StructuredChatAgent
8
8
from langchain .utilities import GoogleSearchAPIWrapper
9
9
from langchain_experimental .plan_and_execute import PlanAndExecute , load_chat_planner
10
10
from langchain_experimental .plan_and_execute .executors .base import ChainExecutor
11
- from langchain_experimental .tools import PythonREPLTool
12
11
from langchain .agents .structured_chat .base import StructuredChatAgent
13
12
from langchain .callbacks import StdOutCallbackHandler
14
13
from langchain .memory import ConversationBufferMemory
15
14
from langchain .agents import OpenAIMultiFunctionsAgent
16
15
from langchain .schema .messages import SystemMessage
17
16
from langchain .prompts import MessagesPlaceholder
18
17
from langchain .agents import AgentExecutor
18
+ from kube_copilot .python import PythonTool
19
19
from kube_copilot .shell import KubeProcess
20
20
from kube_copilot .prompts import get_planner_prompt , _base_prompt
21
21
from kube_copilot .output import ChatOutputParser
@@ -143,15 +143,21 @@ def get_chain(self, verbose=True, model="gpt-4", additional_tools=None, enable_p
143
143
def get_llm_tools (model , additional_tools , enable_python = False , auto_approve = False ):
144
144
'''Initialize the LLM chain with useful tools.'''
145
145
if os .getenv ("OPENAI_API_TYPE" ) == "azure" or (os .getenv ("OPENAI_API_BASE" ) is not None and "azure" in os .getenv ("OPENAI_API_BASE" )):
146
- engine = model .replace ("." , "" )
147
- llm = ChatOpenAI (model_name = model ,
148
- temperature = 0 ,
149
- request_timeout = 120 ,
150
- model_kwargs = {"engine" : engine })
146
+ deployment_name = model .replace ("." , "" )
147
+ llm = AzureChatOpenAI (temperature = 0 ,
148
+ request_timeout = 120 ,
149
+ openai_api_key = os .getenv ("OPENAI_API_KEY" ),
150
+ openai_api_base = os .getenv ("OPENAI_API_BASE" ),
151
+ openai_api_version = "2023-05-15" ,
152
+ deployment_name = deployment_name )
151
153
else :
152
154
llm = ChatOpenAI (model_name = model ,
153
155
temperature = 0 ,
154
- request_timeout = 120 )
156
+ request_timeout = 120 ,
157
+ openai_api_key = os .getenv ("OPENAI_API_KEY" ),
158
+ openai_api_base = os .getenv (
159
+ "OPENAI_API_BASE" , "https://api.openai.com/v1" ),
160
+ openai_organization = os .getenv ("OPENAI_ORGANIZATION" , None ))
155
161
156
162
tools = [
157
163
Tool (
@@ -167,17 +173,17 @@ def get_llm_tools(model, additional_tools, enable_python=False, auto_approve=Fal
167
173
]
168
174
169
175
if enable_python :
170
- python_tool = PythonREPLTool (
176
+ python_tool = PythonTool (
171
177
callbacks = [HumanApprovalCallbackHandler (
172
178
approve = python_approval )]
173
179
)
174
180
if auto_approve :
175
- python_tool = PythonREPLTool ()
181
+ python_tool = PythonTool ()
176
182
tools = [
177
183
Tool (
178
184
name = "python" ,
179
185
func = python_tool .run ,
180
- description = "Useful for executing Python code with Kubernetes Python SDK client. Results should be print out by calling `print(...)`. Input: Python code . Output: the result from the Python code's print()."
186
+ description = "Useful for executing Python code with Kubernetes Python SDK client. Results should be print out by calling `print(...)`. Input: Python codes (kubectl commands must be converted to kubernetes python library first) . Output: the result from the Python code's print()."
181
187
),
182
188
Tool (
183
189
name = "trivy" ,
0 commit comments