- Introduction of dynamic Retrievers & Specialists
- Introduction of dynamic Processors - Introduction of caching system - Introduction of a better template manager - Adaptation of ModelVariables to support dynamic Processors / Retrievers / Specialists - Start adaptation of chat client
This commit is contained in:
@@ -32,13 +32,11 @@ interaction_bp = Blueprint('interaction_bp', __name__, url_prefix='/interaction'
|
||||
|
||||
@interaction_bp.before_request
|
||||
def log_before_request():
|
||||
current_app.logger.debug(f"Before request (interaction_bp): {request.method} {request.url}")
|
||||
pass
|
||||
|
||||
|
||||
@interaction_bp.after_request
|
||||
def log_after_request(response):
|
||||
current_app.logger.debug(
|
||||
f"After request (interaction_bp): {request.method} {request.url} - Status: {response.status}")
|
||||
return response
|
||||
|
||||
|
||||
@@ -48,8 +46,6 @@ def before_request():
|
||||
mw_before_request()
|
||||
except Exception as e:
|
||||
current_app.logger.error(f'Error switching schema in Interaction Blueprint: {e}')
|
||||
for role in current_user.roles:
|
||||
current_app.logger.debug(f'User {current_user.email} has role {role.name}')
|
||||
raise
|
||||
|
||||
|
||||
@@ -147,14 +143,9 @@ def specialist():
|
||||
db.session.add(new_specialist)
|
||||
db.session.flush() # This assigns the ID to the specialist without committing the transaction
|
||||
|
||||
current_app.logger.debug(
|
||||
f'New Specialist after flush - id: {new_specialist.id}, name: {new_specialist.name}')
|
||||
|
||||
# Create the retriever associations
|
||||
selected_retrievers = form.retrievers.data
|
||||
current_app.logger.debug(f'Selected Retrievers - {selected_retrievers}')
|
||||
for retriever in selected_retrievers:
|
||||
current_app.logger.debug(f'Creating association for Retriever - {retriever.id}')
|
||||
specialist_retriever = SpecialistRetriever(
|
||||
specialist_id=new_specialist.id,
|
||||
retriever_id=retriever.id
|
||||
@@ -174,7 +165,7 @@ def specialist():
|
||||
flash(f'Failed to add specialist. Error: {str(e)}', 'danger')
|
||||
return render_template('interaction/specialist.html', form=form)
|
||||
|
||||
return render_template('interaction/specialists.html', form=form)
|
||||
return render_template('interaction/specialist.html', form=form)
|
||||
|
||||
|
||||
@interaction_bp.route('/specialist/<int:specialist_id>', methods=['GET', 'POST'])
|
||||
@@ -187,35 +178,31 @@ def edit_specialist(specialist_id):
|
||||
form.add_dynamic_fields("configuration", configuration_config, specialist.configuration)
|
||||
|
||||
if request.method == 'GET':
|
||||
# Pre-populate the retrievers field with current associations
|
||||
current_app.logger.debug(f'Specialist retrievers: {specialist.retrievers}')
|
||||
current_app.logger.debug(f'Form Retrievers Data Before: {form.retrievers.data}')
|
||||
|
||||
# Get the actual Retriever objects for the associated retriever_ids
|
||||
retriever_objects = Retriever.query.filter(
|
||||
Retriever.id.in_([sr.retriever_id for sr in specialist.retrievers])
|
||||
).all()
|
||||
form.retrievers.data = retriever_objects
|
||||
|
||||
current_app.logger.debug(f'Form Retrievers Data After: {form.retrievers.data}')
|
||||
|
||||
if form.validate_on_submit():
|
||||
# Update the basic fields
|
||||
form.populate_obj(specialist)
|
||||
specialist.name = form.name.data
|
||||
specialist.description = form.description.data
|
||||
specialist.tuning = form.tuning.data
|
||||
# Update the configuration dynamic fields
|
||||
specialist.configuration = form.get_dynamic_data("configuration")
|
||||
|
||||
# Update retriever associations
|
||||
current_retrievers = set(sr.retriever_id for sr in specialist.retrievers)
|
||||
selected_retrievers = set(r.id for r in form.retrievers.data)
|
||||
# Get current and selected retrievers
|
||||
current_retrievers = {sr.retriever_id: sr for sr in specialist.retrievers}
|
||||
selected_retrievers = {r.id: r for r in form.retrievers.data}
|
||||
|
||||
# Remove unselected retrievers
|
||||
for sr in specialist.retrievers[:]:
|
||||
if sr.retriever_id not in selected_retrievers:
|
||||
db.session.delete(sr)
|
||||
for retriever_id in set(current_retrievers.keys()) - set(selected_retrievers.keys()):
|
||||
specialist_retriever = current_retrievers[retriever_id]
|
||||
db.session.delete(specialist_retriever)
|
||||
|
||||
# Add new retrievers
|
||||
for retriever_id in selected_retrievers - current_retrievers:
|
||||
for retriever_id in set(selected_retrievers.keys()) - set(current_retrievers.keys()):
|
||||
specialist_retriever = SpecialistRetriever(
|
||||
specialist_id=specialist.id,
|
||||
retriever_id=retriever_id
|
||||
@@ -229,13 +216,12 @@ def edit_specialist(specialist_id):
|
||||
db.session.commit()
|
||||
flash('Specialist updated successfully!', 'success')
|
||||
current_app.logger.info(f'Specialist {specialist.id} updated successfully')
|
||||
return redirect(prefixed_url_for('interaction_bp.specialists'))
|
||||
except SQLAlchemyError as e:
|
||||
db.session.rollback()
|
||||
flash(f'Failed to update specialist. Error: {str(e)}', 'danger')
|
||||
current_app.logger.error(f'Failed to update specialist {specialist_id}. Error: {str(e)}')
|
||||
return render_template('interaction/edit_specialist.html', form=form, specialist_id=specialist_id)
|
||||
|
||||
return redirect(prefixed_url_for('interaction_bp.specialists'))
|
||||
else:
|
||||
form_validation_failed(request, form)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user