AI in Travel
American Airlines Transforms Travel Experience With Powerful AI Innovations In Customer Support And Operation
Tuesday, July 8, 2025
American Airlines is reshaping the future of flight by integrating artificial intelligence (AI) into all aspects of its operations—from predictive technology that foresees missed connections to generative chatbots that automatically rebook canceled flights. This ambitious digital overhaul not only improves customer care and trip administration but also deepens operational resilience and increases employee productivity. In investing heavily in AI, upgrading its mobile app, and enhancing airport technology, American Airlines is providing faster, smarter, and more personalized experiences—unaugurating a future in which intelligent innovation is key to how the airline attends to its passengers.
American Airlines Redefines Travel with Groundbreaking AI Strategy That Enhances Every Step of the Passenger Journey
American Airlines is charting a bold new course in the aviation industry by integrating artificial intelligence (AI) at the core of its operations—revolutionizing everything from back-end logistics to customer-facing travel services. With AI seamlessly woven into its digital ecosystem, the airline is not just reacting to problems—it’s anticipating them, delivering faster solutions, and personalizing travel experiences like never before.
From computer-based technology that holds out for canceled flights on behalf of stranded passengers to better smartphone applications that guide passengers along their way, American is demonstrating that automation is no longer a future trend in flying, but a here-and-now.
AI Predicts, Prevents, and Protects
One of American Airlines’ most forward-thinking innovations lies in its use of predictive AI to determine, in real-time, whether passengers are likely to miss their connections. When feasible, the system can trigger strategic interventions—such as holding connecting flights—to ensure smoother transfers and minimize disruption. It’s a major leap toward frictionless travel and a sign that American is using data to build empathy into operations.
This kind of anticipatory service redefines airlines’ response to irregular operations and offers passengers a safety net when they most require one.
Generative AI Chatbots That Work Like Travel Agents
American has also raised its game in putting its passengers first by adding generative AI to its digital concierge. More than a chatbot, its digital concierge AI helps passengers rebook canceled flights, find alternate routings, and receive real-time information during weather- or system-imposed delays.
Rather than getting stuck on hold or standing in a busy queue at a congested service desk, customers now experience quick, context-aware assistance with a handful of taps on their device—rendering stressful travel situations much more manageable.
Behind-the-Scenes Intelligence for On-Time Performance
While passengers also reap the rewards of wiser digital technology, AI is also taking a key role behind the scenes. American employs machine learning to review delay trends, predict lost connections and best times to turn aircraft around and staff its major hubs.
As almost one in four U.S. commercial flights was delayed last year, as tracked by analytics firm OAG, the stakes could not possibly be higher. American’s AI-driven solution addresses not only weather disruptions but also legacy system-induced inefficiencies, outmoded infrastructure, and labor bottlenecks.
Responsible AI Starts with Governance
Before scaling AI across its enterprise, American Airlines established a robust governance framework to ensure the responsible, secure, and ethical deployment of artificial intelligence. This digital foundation helps align AI development with core airline priorities: safety, service reliability, and sustainability.
It was only after implementing governance that American deployed AI throughout its customer-facing platforms, employee tools, and internal systems, and did so in a cohesive and managed manner.
An Innovation Culture Supported by Capital
American’s AI-first transformation was sparked by a significant technology reinvestment—boosting its IT budget by 20% and bringing in top talent from across industries. But it wasn’t just about adding new tech—it was about rethinking how the entire airline operates.
The reshaping is based on three strategic objectives:
- Operational resilience – facilitating quick recovery from disruptions and enhancing the robustness of key systems.
- Engineering genius – replacing aging infrastructure with dynamic systems capable of making real-time decisions.
- Productivity gains – employing AI-augmented coding tools to enable faster and better innovation for developers.
- This vision enables teams—from gate agents to developers—to make decisions in real time and achieve better results for passengers.
New Mobile App, Smarter Notifications
To reflect its tech-forward mindset, American unveiled a redesigned mobile app with a sleek, intuitive interface and expanded self-service features. Travelers can now explore destinations, manage boarding passes, and make changes on the go—all from one streamlined platform.
Apple users can also enable “Live Activities” on Apple Watches and iPhones, and they will have real-time updates on boarding gates, seats, and arrival times—on their lock screen. It’s another layer of real-time smarts that doesn’t require refreshing or emailing continuously.
Speedier Check-Ins with Smart Hardware
On the ground, American invested in new airport infrastructure featuring state-of-the-art check-in kiosks and high-efficiency systems that lower wait times substantially. In most airports, passengers are now able to print boarding passes and check in within two minutes—liberating staff and minimizing congestion in terminals.
This equipment supplements the airline’s digital updates, and a seamless experience from gate to curb is achieved.
The Sky’s the Limit: AI as the New Standard
American Airlines is revolutionizing the travel experience with advanced AI technology that enhances flight dependability, simplifies customer care, and customizes each interaction of travel. By weaving intelligent technology into its entire operation, American is designing quicker, smarter, and disruption-prepared travel for modern passengers.
Now that AI is embedded in every aspect of the travel experience, American Airlines is pushing the envelope on what flying can be like in this modern era. Whether you’re talking about predictive rebooking, cognitive mobile capabilities, or behind-the-scenes flight operations, American is no longer merely an airline—it’s a technology-driven mobility platform. By not viewing AI as a buzzword, but as a cornerstone capability, American Airlines is building the next decade of flight—where technology and intuition collide, and travel becomes smarter, smoother, and more people-centric than ever before.
AI in Travel
7 Python Web Development Frameworks for Data Scientists
Image by Author | Canva
Python is widely known for its popularity among engineers and data scientists, but it’s also a favorite choice for web developers. In fact, many developers prefer Python over JavaScript for building web applications because of its simple syntax, readability, and the vast ecosystem of powerful frameworks and tools available.
Whether you are a beginner or an experienced developer, Python offers frameworks that cater to every need, from lightweight micro-frameworks that require just a few lines of code, to robust full-stack solutions packed with built-in features. Some frameworks are designed for rapid prototyping, while others focus on security, scalability, or lightning-fast performance.
In this article, we will review seven of the most popular Python web frameworks. You will discover which ones are best suited for building anything from simple websites to complex, high-traffic web applications. No matter your experience level, there is a Python framework that can help you bring your web project to life efficiently and effectively.
Python Web Development Frameworks
1. Django: The Full-Stack Powerhouse for Scalable Web Apps
Django is a robust, open-source Python framework designed for rapid development of secure and scalable web applications. With its built-in ORM, admin interface, authentication, and a vast ecosystem of reusable components, Django is ideal for building everything from simple websites to complex enterprise solutions.
Learn more: https://www.djangoproject.com/
2. Flask: The Lightweight and Flexible Microframework
Flask is a minimalist Python web framework that gives you the essentials to get started, while letting you add only what you need. It’s perfect for small to medium-sized applications, APIs, and rapid prototyping. Flask’s simplicity, flexibility, and extensive documentation make it a top choice for developers who want full control over their project’s architecture.
Learn more: https://flask.palletsprojects.com/
3. FastAPI: Modern, High-Performance APIs with Ease
FastAPI is best known for building high-performance APIs, but with Jinja templates (v2), you can also create fully-featured websites that combine both backend and frontend functionality within the same framework. Built on top of Starlette and Pydantic, FastAPI offers asynchronous support, automatic interactive documentation, and exceptional speed, making it one of the fastest Python web frameworks available.
Learn more: https://fastapi.tiangolo.com/
4. Gradio: Effortless Web Interfaces for Machine Learning
Gradio is an open-source Python framework that allows you to rapidly build and share web-based interfaces for machine learning models. It is highly popular among the machine learning community, as you can build, test, and deploy your ML web demos on Hugging Face for free in just minutes. You don’t need front-end or back-end experience; just basic Python knowledge is enough to create high-performance web demos and APIs.
Learn more: https://www.gradio.app/
5. Streamlit: Instantly Build Data Web Apps
Streamlit is designed for data scientists and engineers who want to create beautiful, interactive web apps directly from Python scripts. With its intuitive API, you can build dashboards, data visualizations, and ML model demos in minutes.No need for HTML, CSS, or JavaScript. Streamlit is perfect for rapid prototyping and sharing insights with stakeholders.
Learn more: https://streamlit.io/
6. Tornado: Scalable, Non-Blocking Web Server and Framework
Tornado is a powerful Python web framework and asynchronous networking library, designed for building scalable and high-performance web applications. Unlike traditional frameworks, Tornado uses a non-blocking network I/O, which makes it ideal for handling thousands of simultaneous connections, perfect for real-time web services like chat applications, live updates, and long polling.
Learn more: https://www.tornadoweb.org/en/stable/guide.html
7. Reflex: Pure Python Web Apps, Simplified
Reflex (formerly Pynecone) lets you build full-stack web applications using only Python, no JavaScript required. It compiles your Python code into modern web apps, handling both the frontend and backend seamlessly. Reflex is perfect for Python developers who want to create interactive, production-ready web apps without switching languages.
Learn more: https://reflex.dev/
Conclusion
FastAPI is my go-to framework for creating REST API endpoints for machine learning applications, thanks to its speed, simplicity, and production-ready features.
For sharing machine learning demos with non-technical stakeholders, Gradio is incredibly useful, allowing you to build interactive web interfaces with minimal effort.
Django stands out as a robust, full-featured framework that lets you build any web-related application with complete control and scalability.
If you need something lightweight and quick to set up, Flask is an excellent choice for simple web apps and prototype.
Streamlit shines when it comes to building interactive user interfaces for data apps in just minutes, making it perfect for rapid prototyping and visualization.
For real-time web applications that require handling thousands of simultaneous connections, Tornado is a strong option due to its non-blocking, asynchronous architecture.
Finally, Reflex is a modern framework designed for building production-ready applications that are both simple to develop and easy to deploy.
Abid Ali Awan (@1abidaliawan) is a certified data scientist professional who loves building machine learning models. Currently, he is focusing on content creation and writing technical blogs on machine learning and data science technologies. Abid holds a Master’s degree in technology management and a bachelor’s degree in telecommunication engineering. His vision is to build an AI product using a graph neural network for students struggling with mental illness.
AI in Travel
What Does Python’s __slots__ Actually Do?
Image by Author | Canva
What if there is a way to make your Python code faster? __slots__
in Python is easy to implement and can improve the performance of your code while reducing the memory usage.
In this article, we will walk through how it works using a data science project from the real world, where Allegro is using this as a challenge for their data science recruitment process. However, before we get into this project, let’s build a solid understanding of what __slots__
does.
What is __slots__
in Python?
In Python, every object keeps a dictionary of its attributes. This allows you to add, change, or delete them, but it also comes at a cost: extra memory and slower attribute access.
The __slots__
declaration tells Python that these are the only attributes this object will ever need. It is kind of a limitation, but it will save us time. Let’s see with an example.
class WithoutSlots:
def __init__(self, name, age):
self.name = name
self.age = age
class WithSlots:
__slots__
= ['name', 'age']
def __init__(self, name, age):
self.name = name
self.age = age
In the second class, __slots__
tells Python not to create a dictionary for each object. Instead, it reserves a fixed spot in memory for the name and age values, making it faster and decreasing memory usage.
Why Use __slots__
?
Now, before starting the data project, let’s name the reason why you should use __slots__
.
- Memory: Objects take up less space when Python skips creating a dictionary.
- Speed: Accessing values is quicker because Python knows where each value is stored.
- Bugs: This structure avoids silent bugs because only the defined ones are allowed.
Using Allegro’s Data Science Challenge as an Example
In this data project, Allegro asked data science candidates to predict laptop prices by building machine learning models.
Link to this data project: https://platform.stratascratch.com/data-projects/laptop-price-prediction
There are three different datasets:
- train_dataset.json
- val_dataset.json
- test_dataset.json
Good. Let’s continue with the data exploration process.
Data Exploration
Now let’s load one of them to see the dataset’s structure.
with open('train_dataset.json', 'r') as f:
train_data = json.load(f)
df = pd.DataFrame(train_data).dropna().reset_index(drop=True)
df.head()
Here is the output.
Good, let’s see the columns.
Here is the output.
Now, let’s check the numerical columns.
Here is the output.
Data Exploration with __slots__
vs Regular Classes
Let’s create a class called SlottedDataExploration, which will use the __slots__
attribute. It allows only one attribute called df. Let’s see the code.
class SlottedDataExploration:
__slots__
= ['df']
def __init__(self, df):
self.df = df
def info(self):
return self.df.info()
def head(self, n=5):
return self.df.head(n)
def tail(self, n=5):
return self.df.tail(n)
def describe(self):
return self.df.describe(include="all")
Now let’s see the implementation, and instead of using __slots__
let’s use regular classes.
class DataExploration:
def __init__(self, df):
self.df = df
def info(self):
return self.df.info()
def head(self, n=5):
return self.df.head(n)
def tail(self, n=5):
return self.df.tail(n)
def describe(self):
return self.df.describe(include="all")
You can read more about how class methods work in this Python Class Methods guide.
Performance Comparison: Time Benchmark
Now let’s measure the performance by measuring the time and memory.
import time
from pympler import asizeof # memory measurement
start_normal = time.time()
de = DataExploration(df)
_ = de.head()
_ = de.tail()
_ = de.describe()
_ = de.info()
end_normal = time.time()
normal_duration = end_normal - start_normal
normal_memory = asizeof.asizeof(de)
start_slotted = time.time()
sde = SlottedDataExploration(df)
_ = sde.head()
_ = sde.tail()
_ = sde.describe()
_ = sde.info()
end_slotted = time.time()
slotted_duration = end_slotted - start_slotted
slotted_memory = asizeof.asizeof(sde)
print(f"⏱️ Normal class duration: {normal_duration:.4f} seconds")
print(f"⏱️ Slotted class duration: {slotted_duration:.4f} seconds")
print(f"📦 Normal class memory usage: {normal_memory:.2f} bytes")
print(f"📦 Slotted class memory usage: {slotted_memory:.2f} bytes")
Now let’s see the result.
The slotted class duration is 46.45% faster, but the memory usage is the same for this example.
Machine Learning in Action
Now, in this section, let’s continue with the machine learning. But before doing so, let’s do a train and test split.
Train and Test Split
Now we have three different datasets, train, val, and test, so let’s first find their indices.
train_indeces = train_df.dropna().index
val_indeces = val_df.dropna().index
test_indeces = test_df.dropna().index
Now it’s time to assign those indices to select those datasets easily in the next step.
train_df = new_df.loc[train_indeces]
val_df = new_df.loc[val_indeces]
test_df = new_df.loc[test_indeces]
Great, now let’s format these data frames because numpy wants the flat (n,) format instead of
the (n,1). To do that, we need ot use .ravel() after to_numpy().
X_train, X_val, X_test = train_df[selected_features].to_numpy(), val_df[selected_features].to_numpy(), test_df[selected_features].to_numpy()
y_train, y_val, y_test = df.loc[train_indeces][label_col].to_numpy().ravel(), df.loc[val_indeces][label_col].to_numpy().ravel(), df.loc[test_indeces][label_col].to_numpy().ravel()
Applying Machine Learning Models
import numpy as np
import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
from sklearn.tree import DecisionTreeRegressor
from sklearn.ensemble import RandomForestRegressor
from sklearn.ensemble import GradientBoostingRegressor
from sklearn.ensemble import ExtraTreesRegressor
from sklearn.ensemble import VotingRegressor
from sklearn import linear_model
from sklearn.neural_network import MLPRegressor
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler, MaxAbsScaler
import matplotlib.pyplot as plt
from sklearn import tree
import seaborn as sns
def rmse(y_true, y_pred):
return mean_squared_error(y_true, y_pred, squared=False)
def regression(regressor_name, regressor):
pipe = make_pipeline(MaxAbsScaler(), regressor)
pipe.fit(X_train, y_train)
predicted = pipe.predict(X_test)
rmse_val = rmse(y_test, predicted)
print(regressor_name, ':', rmse_val)
pred_df[regressor_name+'_Pred'] = predicted
plt.figure(regressor_name)
plt.title(regressor_name)
plt.xlabel('predicted')
plt.ylabel('actual')
sns.regplot(y=y_test,x=predicted)
Next, we will define a dictionary of regressors and run each model.
regressors = {
'Linear' : LinearRegression(),
'MLP': MLPRegressor(random_state=42, max_iter=500, learning_rate="constant", learning_rate_init=0.6),
'DecisionTree': DecisionTreeRegressor(max_depth=15, random_state=42),
'RandomForest': RandomForestRegressor(random_state=42),
'GradientBoosting': GradientBoostingRegressor(random_state=42, criterion='squared_error',
loss="squared_error",learning_rate=0.6, warm_start=True),
'ExtraTrees': ExtraTreesRegressor(n_estimators=100, random_state=42),
}
pred_df = pd.DataFrame(columns =["Actual"])
pred_df["Actual"] = y_test
for key in regressors.keys():
regression(key, regressors[key])
Here are the results.
Now, implement this with both slots and regular classes.
Machine Learning with __slots__
vs Regular Classes
Now let’s check the code with slots.
class SlottedMachineLearning:
__slots__
= ['X_train', 'y_train', 'X_test', 'y_test', 'pred_df']
def __init__(self, X_train, y_train, X_test, y_test):
self.X_train = X_train
self.y_train = y_train
self.X_test = X_test
self.y_test = y_test
self.pred_df = pd.DataFrame({'Actual': y_test})
def rmse(self, y_true, y_pred):
return mean_squared_error(y_true, y_pred, squared=False)
def regression(self, name, model):
pipe = make_pipeline(MaxAbsScaler(), model)
pipe.fit(self.X_train, self.y_train)
predicted = pipe.predict(self.X_test)
self.pred_df[name + '_Pred'] = predicted
score = self.rmse(self.y_test, predicted)
print(f"{name} RMSE:", score)
plt.figure(figsize=(6, 4))
sns.regplot(x=predicted, y=self.y_test, scatter_kws={"s": 10})
plt.xlabel('Predicted')
plt.ylabel('Actual')
plt.title(f'{name} Predictions')
plt.grid(True)
plt.show()
def run_all(self):
models = {
'Linear': LinearRegression(),
'MLP': MLPRegressor(random_state=42, max_iter=500, learning_rate="constant", learning_rate_init=0.6),
'DecisionTree': DecisionTreeRegressor(max_depth=15, random_state=42),
'RandomForest': RandomForestRegressor(random_state=42),
'GradientBoosting': GradientBoostingRegressor(random_state=42, learning_rate=0.6, warm_start=True),
'ExtraTrees': ExtraTreesRegressor(n_estimators=100, random_state=42)
}
for name, model in models.items():
self.regression(name, model)
Here is the regular class application.
class MachineLearning:
def __init__(self, X_train, y_train, X_test, y_test):
self.X_train = X_train
self.y_train = y_train
self.X_test = X_test
self.y_test = y_test
self.pred_df = pd.DataFrame({'Actual': y_test})
def rmse(self, y_true, y_pred):
return mean_squared_error(y_true, y_pred, squared=False)
def regression(self, name, model):
pipe = make_pipeline(MaxAbsScaler(), model)
pipe.fit(self.X_train, self.y_train)
predicted = pipe.predict(self.X_test)
self.pred_df[name + '_Pred'] = predicted
score = self.rmse(self.y_test, predicted)
print(f"{name} RMSE:", score)
plt.figure(figsize=(6, 4))
sns.regplot(x=predicted, y=self.y_test, scatter_kws={"s": 10})
plt.xlabel('Predicted')
plt.ylabel('Actual')
plt.title(f'{name} Predictions')
plt.grid(True)
plt.show()
def run_all(self):
models = {
'Linear': LinearRegression(),
'MLP': MLPRegressor(random_state=42, max_iter=500, learning_rate="constant", learning_rate_init=0.6),
'DecisionTree': DecisionTreeRegressor(max_depth=15, random_state=42),
'RandomForest': RandomForestRegressor(random_state=42),
'GradientBoosting': GradientBoostingRegressor(random_state=42, learning_rate=0.6, warm_start=True),
'ExtraTrees': ExtraTreesRegressor(n_estimators=100, random_state=42)
}
for name, model in models.items():
self.regression(name, model)
Performance Comparison: Time Benchmark
Now let’s compare each code to the one we did in the previous section.
import time
start_normal = time.time()
ml = MachineLearning(X_train, y_train, X_test, y_test)
ml.run_all()
end_normal = time.time()
normal_duration = end_normal - start_normal
normal_memory = (
ml.X_train.nbytes +
ml.X_test.nbytes +
ml.y_train.nbytes +
ml.y_test.nbytes
)
start_slotted = time.time()
sml = SlottedMachineLearning(X_train, y_train, X_test, y_test)
sml.run_all()
end_slotted = time.time()
slotted_duration = end_slotted - start_slotted
slotted_memory = (
sml.X_train.nbytes +
sml.X_test.nbytes +
sml.y_train.nbytes +
sml.y_test.nbytes
)
print(f"⏱️ Normal ML class duration: {normal_duration:.4f} seconds")
print(f"⏱️ Slotted ML class duration: {slotted_duration:.4f} seconds")
print(f"📦 Normal ML class memory usage: {normal_memory:.2f} bytes")
print(f"📦 Slotted ML class memory usage: {slotted_memory:.2f} bytes")
time_diff = normal_duration - slotted_duration
percent_faster = (time_diff / normal_duration) * 100
if percent_faster > 0:
print(f"✅ Slotted ML class is {percent_faster:.2f}% faster than the regular ML class.")
else:
print(f"ℹ️ No speed improvement with slots in this run.")
memory_diff = normal_memory - slotted_memory
percent_smaller = (memory_diff / normal_memory) * 100
if percent_smaller > 0:
print(f"✅ Slotted ML class uses {percent_smaller:.2f}% less memory than the regular ML class.")
else:
print(f"ℹ️ No memory savings with slots in this run.")
Here is the output.
Conclusion
By preventing the creation of dynamic __dict__
for each instance, Python __slots__
are very good at reducing the memory usage and speeding up attribute access. You saw how it works in practice through both data exploration and machine learning tasks using Allegro’s real recruitment project.
In small datasets, the improvements might be minor. But as data scales, the benefits become more noticeable, especially in memory-bound or performance-critical applications.
Nate Rosidi is a data scientist and in product strategy. He’s also an adjunct professor teaching analytics, and is the founder of StrataScratch, a platform helping data scientists prepare for their interviews with real interview questions from top companies. Nate writes on the latest trends in the career market, gives interview advice, shares data science projects, and covers everything SQL.
AI in Travel
Perplexity Leads ChatGPT on Apple App Store in India Post Airtel Offer
Just one day after Airtel announced its offer of a complimentary Perplexity Pro subscription, the Perplexity app has seen an unprecedented surge in downloads, particularly on iOS.
Thanks to the Airtel promotion, the AI search engine has climbed to the top spot on the App Store in India, overtaking OpenAI’s ChatGPT. This milestone was announced by Perplexity AI’s CEO, Aravind Srinivas, in a post on LinkedIn.
As reported by Mint News, Google’s Gemini ranks fifth among the top free apps on the App Store, following Perplexity and ChatGPT.
On the other hand, ChatGPT remains at the top of the charts on the Google Play Store, while Perplexity has not yet tried to compete for a position among the leading free apps.
Perplexity Pro offers users access to advanced AI models, including GPT-4.1, Claude, Grok 4, and others, as well as image generation capabilities across compatible models. Subscribers also gain access to the company’s newly introduced Comet browser, which is currently available only to free users through an invitation.
Following Airtel’s announcement of its major partnership with an AI startup based in the US to offer a complimentary year-long subscription to Perplexity AI Pro, numerous Airtel subscribers took advantage of the promotion.
The Perplexity AI Pro subscription is highly advantageous for students, researchers, professionals, and educators. In India, the annual subscription to the Pro tier costs Rs 17,000 when purchased directly from Perplexity.
With the Airtel promotion, a full year’s subscription is now available for free, encouraging more individuals to sign up and try it out. This initiative has led to a significant number of subscribers downloading the app via App Stores, as using the app is the simplest method to access the AI model.
-
The Travel Revolution of Our Era3 weeks ago
‘AI is undeniably reshaping the core structure of the hospitality ecosystem’: Venu G Somineni
-
Brand Stories1 week ago
The Smart Way to Stay: How CheQin.AI Is Flipping Hotel Booking in Your Favor
-
Brand Stories2 weeks ago
Voice AI Startup ElevenLabs Plans to Add Hubs Around the World
-
Mergers & Acquisitions7 days ago
How Elon Musk’s rogue Grok chatbot became a cautionary AI tale
-
Asia Travel Pulse2 weeks ago
Looking For Adventure In Asia? Here Are 7 Epic Destinations You Need To Experience At Least Once – Zee News
-
Mergers & Acquisitions1 week ago
Amazon weighs further investment in Anthropic to deepen AI alliance
-
Mergers & Acquisitions1 week ago
UK crime agency arrests 4 people over cyber attacks on retailers
-
AI in Travel2 weeks ago
‘Will AI take my job?’ A trip to a Beijing fortune-telling bar to see what lies ahead | China
-
Mergers & Acquisitions2 weeks ago
ChatGPT — the last of the great romantics
-
Mergers & Acquisitions1 week ago
EU pushes ahead with AI code of practice
You must be logged in to post a comment Login