Bläddra i källkod

Fix:The OpenAI-Compatible Agent API returns an incorrect message (#8177)

### What problem does this PR solve?

https://github.com/infiniflow/ragflow/issues/8175

### Type of change

- [x] Bug Fix (non-breaking change which fixes an issue)
tags/v0.19.1
Stephen Hu 4 månader sedan
förälder
incheckning
1ab0f52832
Inget konto är kopplat till bidragsgivarens mejladress
4 ändrade filer med 28 tillägg och 5 borttagningar
  1. 7
    0
      agent/canvas.py
  2. 5
    2
      agent/component/answer.py
  3. 0
    1
      agent/component/base.py
  4. 16
    2
      api/db/services/canvas_service.py

+ 7
- 0
agent/canvas.py Visa fil

@@ -169,6 +169,7 @@ class Canvas:
def run(self, running_hint_text = "is running...🕞", **kwargs):
if not running_hint_text or not isinstance(running_hint_text, str):
running_hint_text = "is running...🕞"
bypass_begin = bool(kwargs.get("bypass_begin", False))

if self.answer:
cpn_id = self.answer[0]
@@ -188,6 +189,12 @@ class Canvas:
if not self.path:
self.components["begin"]["obj"].run(self.history, **kwargs)
self.path.append(["begin"])
if bypass_begin:
cpn = self.get_component("begin")
downstream = cpn["downstream"]
self.path.append(downstream)



self.path.append([])


+ 5
- 2
agent/component/answer.py Visa fil

@@ -64,14 +64,17 @@ class Answer(ComponentBase, ABC):
for ii, row in stream.iterrows():
answer += row.to_dict()["content"]
yield {"content": answer}
else:
elif stream is not None:
for st in stream():
res = st
yield st
if self._param.post_answers:
if self._param.post_answers and res:
res["content"] += random.choice(self._param.post_answers)
yield res

if res is None:
res = {"content": ""}

self.set_output(res)

def set_exception(self, e):

+ 0
- 1
agent/component/base.py Visa fil

@@ -442,7 +442,6 @@ class ComponentBase(ABC):
elif q.get("value"):
outs.append(pd.DataFrame([{"content": q["value"]}]))
return outs

def get_input(self):
if self._param.debug_inputs:
return pd.DataFrame([{"content": v["value"]} for v in self._param.debug_inputs if v.get("value")])

+ 16
- 2
api/db/services/canvas_service.py Visa fil

@@ -294,8 +294,22 @@ def completionOpenAI(tenant_id, agent_id, question, session_id=None, stream=True
"source": "agent",
"dsl": cvs.dsl
}
canvas.messages.append({"role": "user", "content": question, "id": message_id})
canvas.add_user_input(question)

API4ConversationService.save(**conv)
conv = API4Conversation(**conv)
if not conv.message:
conv.message = []
conv.message.append({
"role": "user",
"content": question,
"id": message_id
})
if not conv.reference:
conv.reference = []
conv.reference.append({"chunks": [], "doc_aggs": []})
# Handle existing session
else:
@@ -331,7 +345,7 @@ def completionOpenAI(tenant_id, agent_id, question, session_id=None, stream=True
if stream:
try:
completion_tokens = 0
for ans in canvas.run(stream=True):
for ans in canvas.run(stream=True, bypass_begin=True):
if ans.get("running_status"):
completion_tokens += len(tiktokenenc.encode(ans.get("content", "")))
yield "data: " + json.dumps(
@@ -394,7 +408,7 @@ def completionOpenAI(tenant_id, agent_id, question, session_id=None, stream=True
else: # Non-streaming mode
try:
all_answer_content = ""
for answer in canvas.run(stream=False):
for answer in canvas.run(stream=False, bypass_begin=True):
if answer.get("running_status"):
continue

Laddar…
Avbryt
Spara