feat: Configure call_external_copilot URL via environment variable
This commit is contained in:
@@ -9,6 +9,9 @@ import urllib.error
|
|||||||
class StandaloneLLMTool(BaseTool):
|
class StandaloneLLMTool(BaseTool):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.client = OpenAI(api_key=os.environ.get("OPENAI_API_KEY"))
|
self.client = OpenAI(api_key=os.environ.get("OPENAI_API_KEY"))
|
||||||
|
self.copilot_url = os.getenv("COPILOT_API_URL")
|
||||||
|
if not self.copilot_url:
|
||||||
|
logging.warning("COPILOT_API_URL environment variable not set. call_external_copilot will not function.")
|
||||||
|
|
||||||
def clear(self):
|
def clear(self):
|
||||||
pass
|
pass
|
||||||
@@ -55,28 +58,27 @@ class StandaloneLLMTool(BaseTool):
|
|||||||
"prompt": {
|
"prompt": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"description": "The plain text prompt to send to the external copilot."
|
"description": "The plain text prompt to send to the external copilot."
|
||||||
},
|
|
||||||
"url": {
|
|
||||||
"type": "string",
|
|
||||||
"description": "The URL of the external copilot's API endpoint (e.g., 'http://localhost:8000/copilot')."
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"required": ["prompt", "url"]
|
"required": ["prompt"]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"_tags": ["copilot", "external", "http"]
|
"_tags": ["copilot", "external", "http"]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
def _call_external_copilot(self, prompt: str, url: str):
|
def _call_external_copilot(self, prompt: str):
|
||||||
logging.info(f"Calling external copilot at URL: {url} with prompt: {prompt[:50]}...")
|
if not self.copilot_url:
|
||||||
if not url.startswith('http://') and not url.startswith('https://'):
|
return "Error: COPILOT_API_URL environment variable is not set. Cannot call external copilot."
|
||||||
error_message = f"Invalid URL scheme for external copilot: {url}. URL must start with http:// or https://"
|
|
||||||
|
logging.info(f"Calling external copilot at URL: {self.copilot_url} with prompt: {prompt[:50]}...")
|
||||||
|
if not self.copilot_url.startswith('http://') and not self.copilot_url.startswith('https://'):
|
||||||
|
error_message = f"Invalid URL scheme for external copilot: {self.copilot_url}. URL must start with http:// or https://"
|
||||||
logging.error(error_message)
|
logging.error(error_message)
|
||||||
return error_message
|
return error_message
|
||||||
try:
|
try:
|
||||||
req = urllib.request.Request(
|
req = urllib.request.Request(
|
||||||
url,
|
self.copilot_url,
|
||||||
data=prompt.encode('utf-8'),
|
data=prompt.encode('utf-8'),
|
||||||
headers={'Content-Type': 'text/plain; charset=utf-8', 'User-Agent': 'DualAICopilot/0.1'},
|
headers={'Content-Type': 'text/plain; charset=utf-8', 'User-Agent': 'DualAICopilot/0.1'},
|
||||||
method='POST'
|
method='POST'
|
||||||
@@ -87,7 +89,7 @@ class StandaloneLLMTool(BaseTool):
|
|||||||
logging.info(f"Received response from external copilot: {response_data[:100]}...")
|
logging.info(f"Received response from external copilot: {response_data[:100]}...")
|
||||||
return response_data
|
return response_data
|
||||||
else:
|
else:
|
||||||
error_message = f"External copilot at {url} returned an error: {response.status} {response.reason}"
|
error_message = f"External copilot at {self.copilot_url} returned an error: {response.status} {response.reason}"
|
||||||
logging.error(error_message)
|
logging.error(error_message)
|
||||||
return error_message # Return error as string
|
return error_message # Return error as string
|
||||||
except urllib.error.HTTPError as e:
|
except urllib.error.HTTPError as e:
|
||||||
@@ -96,15 +98,15 @@ class StandaloneLLMTool(BaseTool):
|
|||||||
error_body = e.read().decode('utf-8', 'replace') # Added error decoding fallback
|
error_body = e.read().decode('utf-8', 'replace') # Added error decoding fallback
|
||||||
except Exception:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
error_message = f"HTTP Error {e.code} calling external copilot at {url}: {e.reason}. Response: {error_body}"
|
error_message = f"HTTP Error {e.code} calling external copilot at {self.copilot_url}: {e.reason}. Response: {error_body}"
|
||||||
logging.error(error_message)
|
logging.error(error_message)
|
||||||
return error_message
|
return error_message
|
||||||
except urllib.error.URLError as e:
|
except urllib.error.URLError as e:
|
||||||
error_message = f"URL Error calling external copilot at {url}: {e.reason}"
|
error_message = f"URL Error calling external copilot at {self.copilot_url}: {e.reason}"
|
||||||
logging.error(error_message)
|
logging.error(error_message)
|
||||||
return error_message
|
return error_message
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
error_message = f"An unexpected error occurred while calling external copilot at {url}: {str(e)}"
|
error_message = f"An unexpected error occurred while calling external copilot at {self.copilot_url}: {str(e)}"
|
||||||
logging.error(error_message)
|
logging.error(error_message)
|
||||||
return error_message
|
return error_message
|
||||||
|
|
||||||
@@ -114,7 +116,7 @@ class StandaloneLLMTool(BaseTool):
|
|||||||
max_tokens = kwargs.get("max_tokens", 16384) # Default from spec
|
max_tokens = kwargs.get("max_tokens", 16384) # Default from spec
|
||||||
return self.call_external_llm(kwargs.get("prompt"), model, max_tokens)
|
return self.call_external_llm(kwargs.get("prompt"), model, max_tokens)
|
||||||
elif function_name == "call_external_copilot":
|
elif function_name == "call_external_copilot":
|
||||||
return self._call_external_copilot(kwargs.get("prompt"), kwargs.get("url"))
|
return self._call_external_copilot(kwargs.get("prompt"))
|
||||||
else:
|
else:
|
||||||
error_message = f"Unknown function: {function_name}"
|
error_message = f"Unknown function: {function_name}"
|
||||||
logging.error(error_message)
|
logging.error(error_message)
|
||||||
|
|||||||
Reference in New Issue
Block a user