Commit
·
1c31898
1
Parent(s):
eb1e30c
Tracking budget for manager too
Browse files- src/manager/manager.py +18 -0
- src/models/models.json +8 -8
src/manager/manager.py
CHANGED
@@ -47,6 +47,8 @@ class GeminiManager:
|
|
47 |
def __init__(self, system_prompt_file="./src/models/system6.prompt",
|
48 |
gemini_model="gemini-2.5-pro-exp-03-25",
|
49 |
modes: List[Mode] = []):
|
|
|
|
|
50 |
load_dotenv()
|
51 |
self.budget_manager = BudgetManager()
|
52 |
|
@@ -110,6 +112,14 @@ class GeminiManager:
|
|
110 |
jitter=None)
|
111 |
def generate_response(self, messages):
|
112 |
tools = self.toolsLoader.getTools()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
113 |
return self.client.models.generate_content_stream(
|
114 |
model=self.model_name,
|
115 |
contents=messages,
|
@@ -141,6 +151,7 @@ class GeminiManager:
|
|
141 |
}
|
142 |
}
|
143 |
try:
|
|
|
144 |
toolResponse = self.toolsLoader.runTool(
|
145 |
function_call.name, function_call.args)
|
146 |
except Exception as e:
|
@@ -187,6 +198,7 @@ class GeminiManager:
|
|
187 |
response={"result": f"{function_call.name} with {function_call.args} doesn't follow the required format, please read the other tool implementations for reference." + str(e)})
|
188 |
parts.append(tool_content)
|
189 |
i += 1
|
|
|
190 |
yield {
|
191 |
"role": "tool",
|
192 |
"content": repr(types.Content(
|
@@ -305,6 +317,8 @@ class GeminiManager:
|
|
305 |
except Exception as e:
|
306 |
pass
|
307 |
yield from self.invoke_manager(messages)
|
|
|
|
|
308 |
|
309 |
def invoke_manager(self, messages):
|
310 |
chat_history = self.format_chat_history(messages)
|
@@ -342,6 +356,10 @@ class GeminiManager:
|
|
342 |
"role": "assistant",
|
343 |
"content": full_text,
|
344 |
})
|
|
|
|
|
|
|
|
|
345 |
if function_call_requests:
|
346 |
messages = messages + function_call_requests
|
347 |
yield messages
|
|
|
47 |
def __init__(self, system_prompt_file="./src/models/system6.prompt",
|
48 |
gemini_model="gemini-2.5-pro-exp-03-25",
|
49 |
modes: List[Mode] = []):
|
50 |
+
self.input_tokens = 0
|
51 |
+
self.output_tokens = 0
|
52 |
load_dotenv()
|
53 |
self.budget_manager = BudgetManager()
|
54 |
|
|
|
112 |
jitter=None)
|
113 |
def generate_response(self, messages):
|
114 |
tools = self.toolsLoader.getTools()
|
115 |
+
response = self.client.models.count_tokens(
|
116 |
+
model=self.model_name,
|
117 |
+
contents=messages,
|
118 |
+
)
|
119 |
+
self.budget_manager.add_to_expense_budget(
|
120 |
+
response.total_tokens * 0.10/1000000 # Assuming $0.10 per million tokens
|
121 |
+
)
|
122 |
+
self.input_tokens += response.total_tokens
|
123 |
return self.client.models.generate_content_stream(
|
124 |
model=self.model_name,
|
125 |
contents=messages,
|
|
|
151 |
}
|
152 |
}
|
153 |
try:
|
154 |
+
self.input_tokens += len(repr(function_call).split())
|
155 |
toolResponse = self.toolsLoader.runTool(
|
156 |
function_call.name, function_call.args)
|
157 |
except Exception as e:
|
|
|
198 |
response={"result": f"{function_call.name} with {function_call.args} doesn't follow the required format, please read the other tool implementations for reference." + str(e)})
|
199 |
parts.append(tool_content)
|
200 |
i += 1
|
201 |
+
self.output_tokens += len(repr(parts).split())
|
202 |
yield {
|
203 |
"role": "tool",
|
204 |
"content": repr(types.Content(
|
|
|
317 |
except Exception as e:
|
318 |
pass
|
319 |
yield from self.invoke_manager(messages)
|
320 |
+
print("Tokens used: Input: {}, Output: {}".format(
|
321 |
+
self.input_tokens, self.output_tokens))
|
322 |
|
323 |
def invoke_manager(self, messages):
|
324 |
chat_history = self.format_chat_history(messages)
|
|
|
356 |
"role": "assistant",
|
357 |
"content": full_text,
|
358 |
})
|
359 |
+
self.output_tokens += len(full_text.split())
|
360 |
+
self.budget_manager.add_to_expense_budget(
|
361 |
+
len(full_text.split()) * 0.40/1000000 # Assuming $0.40 per million tokens
|
362 |
+
)
|
363 |
if function_call_requests:
|
364 |
messages = messages + function_call_requests
|
365 |
yield messages
|
src/models/models.json
CHANGED
@@ -1,12 +1,12 @@
|
|
1 |
{
|
2 |
-
"
|
3 |
-
"base_model": "
|
4 |
-
"description": "Agent
|
5 |
-
"system_prompt": "You are an agent that
|
6 |
-
"create_resource_cost":
|
7 |
-
"invoke_resource_cost":
|
8 |
"create_expense_cost": 0,
|
9 |
-
"invoke_expense_cost": 0
|
10 |
-
"output_expense_cost": 0
|
11 |
}
|
12 |
}
|
|
|
1 |
{
|
2 |
+
"KunalPaiResearcher": {
|
3 |
+
"base_model": "mistral",
|
4 |
+
"description": "Agent to research and summarize information about Kunal Pai",
|
5 |
+
"system_prompt": "You are an AI agent that specializes in researching individuals based on publicly available information and creating concise summaries of their background, education, work experience, and research interests.",
|
6 |
+
"create_resource_cost": 20,
|
7 |
+
"invoke_resource_cost": 100,
|
8 |
"create_expense_cost": 0,
|
9 |
+
"invoke_expense_cost": 0,
|
10 |
+
"output_expense_cost": 0
|
11 |
}
|
12 |
}
|