@nomad-e/bluma-cli 0.1.76 → 0.1.79

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/main.js +42 -30
  2. package/package.json +1 -1
package/dist/main.js CHANGED
@@ -14967,6 +14967,41 @@ function buildFactorHeaders(ctx) {
14967
14967
  "X-Company-Name": encodeHeader(ctx.companyName)
14968
14968
  };
14969
14969
  }
14970
+ var THINKING_TOKEN_BUDGET_BY_EFFORT = {
14971
+ low: 256,
14972
+ medium: 1024,
14973
+ high: 2048
14974
+ };
14975
+ function getThinkingTokenBudgetForEffort(effort) {
14976
+ if (!effort) return void 0;
14977
+ return THINKING_TOKEN_BUDGET_BY_EFFORT[effort];
14978
+ }
14979
+ function buildVllmReasoningPayload(effort) {
14980
+ if (!effort) return void 0;
14981
+ return {
14982
+ reasoning: { effort },
14983
+ extra_body: {
14984
+ thinking_token_budget: getThinkingTokenBudgetForEffort(effort)
14985
+ }
14986
+ };
14987
+ }
14988
+ function buildChatCompletionRequestBody(params, runtimeConfig = getRuntimeConfig(), stream = false) {
14989
+ const tools = params.tools;
14990
+ const hasTools = Array.isArray(tools) && tools.length > 0;
14991
+ const effort = params.reasoning?.effort ?? runtimeConfig.reasoningEffort;
14992
+ const reasoningPayload = buildVllmReasoningPayload(effort);
14993
+ return {
14994
+ model: params.model || runtimeConfig.model || "auto",
14995
+ messages: params.messages,
14996
+ tools: hasTools ? tools : void 0,
14997
+ tool_choice: hasTools ? "auto" : void 0,
14998
+ parallel_tool_calls: params.parallel_tool_calls ?? false,
14999
+ temperature: params.temperature ?? 0,
15000
+ ...reasoningPayload ?? {},
15001
+ max_tokens: params.max_tokens,
15002
+ ...stream ? { stream: true } : {}
15003
+ };
15004
+ }
14970
15005
  function applyDeltaToolCallsToAccumulator(toolCallsAccumulator, deltaToolCalls) {
14971
15006
  if (!deltaToolCalls?.length) {
14972
15007
  return false;
@@ -15044,20 +15079,9 @@ var LLMService = class {
15044
15079
  if (!params.userContext) {
15045
15080
  throw new Error("LLMService.chatCompletion: userContext \xE9 obrigat\xF3rio");
15046
15081
  }
15047
- const tools = params.tools;
15048
- const hasTools = Array.isArray(tools) && tools.length > 0;
15049
15082
  const runtimeConfig = getRuntimeConfig();
15050
15083
  const resp = await this.client.chat.completions.create(
15051
- {
15052
- model: params.model || runtimeConfig.model || "auto",
15053
- messages: params.messages,
15054
- tools: hasTools ? tools : void 0,
15055
- tool_choice: hasTools ? "auto" : void 0,
15056
- parallel_tool_calls: params.parallel_tool_calls ?? false,
15057
- temperature: params.temperature ?? 0,
15058
- reasoning: params.reasoning ?? (runtimeConfig.reasoningEffort ? { effort: runtimeConfig.reasoningEffort } : void 0),
15059
- max_tokens: params.max_tokens
15060
- },
15084
+ buildChatCompletionRequestBody(params, runtimeConfig, false),
15061
15085
  { headers: this.requestHeaders(params.userContext) }
15062
15086
  );
15063
15087
  return resp;
@@ -15069,21 +15093,9 @@ var LLMService = class {
15069
15093
  if (!params.userContext) {
15070
15094
  throw new Error("LLMService.chatCompletionStream: userContext \xE9 obrigat\xF3rio");
15071
15095
  }
15072
- const tools = params.tools;
15073
- const hasTools = Array.isArray(tools) && tools.length > 0;
15074
15096
  const runtimeConfig = getRuntimeConfig();
15075
15097
  const stream = await this.client.chat.completions.create(
15076
- {
15077
- model: params.model || runtimeConfig.model || "auto",
15078
- messages: params.messages,
15079
- tools: hasTools ? tools : void 0,
15080
- tool_choice: hasTools ? "auto" : void 0,
15081
- parallel_tool_calls: params.parallel_tool_calls ?? false,
15082
- temperature: params.temperature ?? 0,
15083
- reasoning: params.reasoning ?? (runtimeConfig.reasoningEffort ? { effort: runtimeConfig.reasoningEffort } : void 0),
15084
- max_tokens: params.max_tokens,
15085
- stream: true
15086
- },
15098
+ buildChatCompletionRequestBody(params, runtimeConfig, true),
15087
15099
  { headers: this.requestHeaders(params.userContext) }
15088
15100
  );
15089
15101
  const toolCallsAccumulator = /* @__PURE__ */ new Map();
@@ -15616,7 +15628,7 @@ var BluMaAgent = class _BluMaAgent {
15616
15628
  emptyAssistantReplySteps = 0;
15617
15629
  /** Reintentos consecutivos por tool call inválido. */
15618
15630
  invalidToolCallRetrySteps = 0;
15619
- /** Deduplicação de reasoning chunks no streaming — evita repetição. */
15631
+ /** Último snapshot de reasoning visto no streaming. */
15620
15632
  lastReasoningChunkRef = "";
15621
15633
  constructor(sessionId, eventBus, llm, mcpClient, feedbackSystem) {
15622
15634
  this.sessionId = sessionId;
@@ -16334,10 +16346,10 @@ ${editData.error.display}`;
16334
16346
  this.eventBus.emit("stream_start", {});
16335
16347
  hasEmittedStart = true;
16336
16348
  }
16337
- const reasoningKey = chunk.reasoning.trim().replace(/\s+/g, " ");
16338
- if (reasoningKey !== this.lastReasoningChunkRef) {
16339
- this.lastReasoningChunkRef = reasoningKey;
16340
- this.eventBus.emit("stream_reasoning_chunk", { delta: chunk.reasoning });
16349
+ const reasoningDelta = extractStreamingDelta(this.lastReasoningChunkRef, chunk.reasoning);
16350
+ this.lastReasoningChunkRef = chunk.reasoning;
16351
+ if (reasoningDelta) {
16352
+ this.eventBus.emit("stream_reasoning_chunk", { delta: reasoningDelta });
16341
16353
  }
16342
16354
  }
16343
16355
  if (chunk.delta) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nomad-e/bluma-cli",
3
- "version": "0.1.76",
3
+ "version": "0.1.79",
4
4
  "description": "BluMa independent agent for automation and advanced software engineering.",
5
5
  "author": "Alex Fonseca",
6
6
  "license": "Apache-2.0",